一、ansible 角色优点:
1.角色可以把内容分组,容易复用
2.可以用角色定义系统基本信息:web 服务器、数据库服务器等
3.角色可以使大型项目易管理
4.角色可以由不同人并行开发
二、ansible 角色目录
把不同功能的 playbook 分开,一个标准的角色含有下列子目录:
defaults:其中的 main.yml 包含角色变量的默认值,在所有变量中优先级最低
files:包含角色任务引用的静态文件
handlers:主要定义处理程序
meta:角色相关信息,如作者、许可证等
tasks:定义任务
templates:任务引用的 jinja2 模板
tests:可以包含清单和 test.yml 的 playbook,用于测试
vars:定义角色的变量
三、在 playbook 中使用 ansible 角色
---
- hosts: www.example.com
roles:
- role1
- role2
##控制执行顺序
有时需要在角色之前或之后执行一些任务:
关键字:
之前:pre_tasks
之后:post_tasks
四、系统角色
[root@workstation ~]# yum install -y rhel-system-roles
#安装好的角色位于:
[root@workstation ~]# ls -l /usr/share/ansible/roles
#其中的内容(查看网络角色)
[root@workstation ~]# ls -l /usr/share/ansible/roles/rhel-system-roles.network
五、时间同步角色示例
#查看系统中有哪些角色可以使用
[root@workstation roles]# ansible-galaxy list
#查看role帮助
[root@workstation roles]# cat
/usr/share/doc/rhel-system-roles/timesync/README.md
#时区设置的 模块使用方法
[root@workstation all]# ansible-doc timezone | grep -A 4 "EXAMPLES"
EXAMPLES:
- name: Set timezone to Asia/Tokyo
timezone:
name: Asia/Tokyo
#清单和配置文件
[root@workstation roles]# cat ansible.cfg
[defaults]
inventory = ./inventory
[root@workstation roles]# cat inventory
[group1]
servera.lab.example.com
[group2]
serverb.lab.example.com
[groups:children]
group1
group2
#修改主 playbook
``bash
[root@workstation roles]# cat configure_time.yml
---
- name: Time Sync
hosts: groups
roles:
- rhel-system-roles.timesync
post_tasks:
- name: Set Timezone
timezone:
name: "{{ host_timezone }}"
notify: restart crond
handlers:
- name: restart crond
service:
name: crond
state: restarted
#新建时间 yml 文件并写入
[root@workstation roles]# cat group_vars/group1/timezone.yml
host_timezone: Asia/Shanghai
[root@workstation roles]# cat group_vars/group2/timezone.yml
host_timezone: Europe/London
#检测和运行
[root@workstation roles]# ansible-playbook --syntax-check configure_time.yml
[root@workstation roles]# ansible-playbook configure_time.yml
六、创建自定义角色
角色创建流程:分三个步骤
1.创建角色目录结构
2.定义角色内容
3.在 playbook 中使用角色
1创建角色框架
project目录中包含 ansible.cfg、inventory playbook.yml 和roles目录
[root@workstation project]# cd roles/
[root@workstation roles]# ansible-galaxy init my_role #创建角色
2配置 tasks 的 play
[root@workstation tasks]# vim main.yml
'安装、启动和配置虚拟主机'
---
- name: Install httpd
yum:
name: httpd
state: latest
- name: Start and Enabled httpd
service:
name: httpd
state: started
enabled: true
- name: Install vhost file
template:
src: vhost.conf.j2
dest: /etc/httpd/conf.d/vhost.conf
owner: root
group: rootmode: 0644
notify:
- restart httpd
3 编写处理程序
[root@workstation handlers]# vim main.yml
---
- name: restart httpd
service:
name: httpd
state: restarted
4编写 html 文件
[root@workstation role-create]# mkdir -p files/html
[root@workstation role-create]# vim files/html/index.html
www.westos.org
5配置模板
[root@workstation templates]# vim vhost.conf.j2
<VirtualHost *:80>
DocumentRoot /www
ServerName www.westos.org
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /bbs
ServerName bbs.westos.org
</VirtualHost>
6编写使用 roles 的 playbook
[root@workstation role-create]# vim use_vhost_role.yml
---
- name: use myvhost
hosts: webservers
pre_tasks:
- name: pre_tasks message
debug:
msg: 'Ensure web server configuration'
roles:
- myvhost
post_tasks:
- name: Configure html
copy:
src: files/html/
dest: "/var/www/vhosts/{{ ansible_hostname }}"
- name: post_tasks message
debug:
msg: "Web server is configured."
'这里使用的主机清单是系统默认的'