目录
角色的基础结构
角色来源与应用
Galaxy角色
系统角色
自定义角色
- 角色(roles)用于层次化、结构化地组织playbook
- roles通过标准化目录结构来装载变量文件、tasks(模块任务)、handlers(处理程序)、jinja2模板等其他资源,然后在play中调用该角色,就能够执行
- 定义roles可以实现更加轻松的重复利用ansible代码;只需通过复制相关的目录,就可以将角色从一个项目复制到另一个项目,然后在play中调用该角色就能够执行
- 在ansible中需要单独指定一个存放角色的路径,这个路径在ansible.cfg中的roles_path字段指定
角色的基础结构
README.md文件
声明了如何调用角色的模板,根据需要复制里面的内容粘贴到yml文件中进行调用
Defaults
此目录中的main.yml文件存放于角色会使用到的变量;并且这些变量所对应的值都是默认值(这些变量的优先级较低,使用角色时可以在play中对变量重新赋值,覆盖变量的默认值)
Files
存放角色任务引用的静态条件(例如copy模块要调用的文件)
Handlers
此目录中的main.yml文件包含ansible处理程序
当角色需要调用处理程序时,默认会在此目录的main.yml文件中调用处理程序
Meta
此目录中的main.yml文件用于描述角色的相关属性(例如作者、许可证等)
Tasks
此目录的main.yml描述了此角色需要执行的任务
在调用角色时,会执行此目录下的main.yml文件
Template
存放着角色所需要使用的jinja2模板文件
当没有指定绝对的模板路径时,会默认调用此目录中对应名称的模板文件
Tests
此目录包含清单和测试剧本文件,用于测试角色
Vars
此目录中的main.yml文件存放着用户所使用的变量;与defaults不同的是此文件中变量的优先级比较高,不会被轻易覆盖;确保了在调用角色时使用的变量为此目录文件中的变量值
角色来源与应用
Galaxy角色
Ansible galaxy是一个ansible内容公共资源库,包含数千个ansible角色
ansible-galaxy命令行工具
ansible-galaxy search 在galaxy上搜索角色 ansible-galaxy install 从galaxu上下载角色 -r 从文件中安装多个角色 -p 指定安装路径 ansible-galaxy init 创建自定义角色
从文件中下载galaxy角色,文件的书写格式
src 角色来源(必须写) version 角色的版本 name 将角色下载后的名称(默认为存储库的名称) 创建文件存放角色的下载路径 vim galaxyroles.yml --- - src: http://materials/ phpinfo.tar name: phpinfo 从文件中下载角色到指定路径 ansible-galaxy install -r galaxyroles.yml -p /home/greg/ansible/roles/
使用galaxy角色
vim roles.yml --- - hosts: web roles: - phpinfo
系统角色
rhel-system-roles软件包中包含了一部分系统的角色(直接下载此软件包,就可以使用此软件包包含的角色了);下载下来的角色存放在/usr/share/ansible/roles目录下
下载系统角色
yum install rhel-system-roles
ansible-galaxy list 查看所有角色
系统角色的作用
rhel-system-roles-kdump 配置kdump崩溃恢复服务 rhel-system-roles-network 配置网络接口 rhel-system-roles-postfix 使用postifix服务将主机配置为邮件传输代理 rhel-system-roles-selinux 配置和管理selinux rhel-system-roles-timesync 配置时间同步(NTP)
使用系统角色
将需要的系统角色复制到ansible.cfg中roles_path字段对应的目录下 cp -r /usr/share/ansible/roles/rhel-system-roles.selinux/ /home/greg/ansible/roles/ 查看文件中的README.md文件,编写yml文件调用角色实现所需功能 vim /home/greg/ansible/selinux.roles --- - name: selinux hosts: web vars: selinux_policy: targeted selinux_state: enforcing role: - rhel-system-roles-selinux
自定义角色
可以创建一个自定义角色(ansible-galaxy init 角色名)
ansible-galaxy init apache
在templates目录下创建jinja2模板
vim apache/templates/index.j2 Welcome to {{ ansible_facts['hostname'] }
配置tasks目录下的main.yml文件
vim apache/tasks/main.yml --- # tasks file for apache - name: install httpd yum: name: httpd state: present notify: - start apache - name: index.html.j2 template: src: index.html.j2 dest: /var/www/html/index.html setype: httpd_sys_content_t
编写handlers下的maini.yml(触发器notify触发后执行此yml任务)
vim apache/handlers/main.yml --- - name: start apache service: name: httpd state: started enabled: yes
然后创建yml文件调用角色
vim roles.yml --- - host: web roles: - apache
运行yml
ansible-playbook roles.ym 只要此roles.yml不报错,就证明apache角色当中所有的yml语法都ok
验证httpd服务是否开启
ansible web -m shell -a "systemctl status httpd"
当让别人重复使用roles.yml文件时,可以将apache角色打压缩包传送给对端或上传到galaxy