1.Playbook Roles
ansible roles 角色
适合大规模使用
playbook如果文件较多的情况,不清楚哪些主机执行了哪些状态的yml文件
roles能清楚哪些主机应用哪些角色
1.创建role的步骤
(1)创建以roles命名的目录。
(2)在roles目录中分别创建以各角色名称命名的目录,如web、nfs等。
(3)在每个角色命名的目录中分别创建tasks、handlers、files、templates、vars目录,用不到的目录可以创建为空目录,也可以不创建。
(4)在playbook文件中,调用各角色。
例:roles官方目录的结构,必须这么定义
[root@m01]# cd /etc/ansible/roles
[root@m01 roles]# mkdir {nfs,rsync,web}/{vars,tasks,templates,handlers,files} -p
[root@m01 roles]# tree
.
├── nfs #角色名称
│ ├── files #存放静态文件
│ ├── handlers #触发任务
│ ├── tasks #具体任务
│ ├── templates #模板文件(多变的文件,如httpd.conf.j2)
│ └── vars #存放变量
2.roles内各目录中可用的文件
tasks目录:至少应该包含一个名为main.yaml的文件,其定义了此角色的任务列表,此文件可以使用include包含其它的位于此目录中的task文件。
files目录:存放由copy或script等模块调用的文件。
templates目录:template模块会自动在此目录中寻找jenja2模板文件。
handlers目录:此目录中应包含一个main.yaml的文件,用于定义此角色用到的各handlers。
vars目录:应当包含一个main.yaml文件,用于定义此角色用到的变量。
mate目录:应当包含一个main.yaml文件,用于定义此角色的特殊设定及其依赖关系。
2.Playbook Roles实战

1.使用roles创建Rsync服务, 目录结构如下
[root@m01 roles]# tree /etc/ansible/roles/
/etc/ansible/roles/
├── hosts
├── rsync
│ ├── files
│ │ ├── rsyncd.conf
│ │ └── rsync.passwd
│ ├── handlers
│ │ └── main.yml
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ └── vars
├── site.yml
2.定义roles主机清单
[root@m01 roles]# cat /etc/ansible/roles/hosts
[backup]
172.16.1.41
3.指定backup主机组,执行那个roles
[root@m01 roles]# cat /etc/ansible/roles/site.yml
- hosts: backup
remote_user: root
roles:
- rsync
tags: rsync
4.查看rsync角色的tasks任务
[root@m01 roles]# cat /etc/ansible/roles/rsync/tasks/main.yml
- name: Install Rsync Server
yum: name=rsync state=present
- name: Configure Rsync Server
copy: src={{ item.src }} dest=/etc/{{ item.dest }} mode={{ item.mode }}
with_items:
- {src: "rsyncd.conf", dest: "rsyncd.conf", mode: "0644"}
- {src: "rsync.passwd", dest: "rsync.passwd", mode: "0600"}
notify: Restart Rsync Server
- name: Start Rsync Server
service: name=rsyncd state=started enabled=yes
5.查看rsync角色的handlers
[root@m01 roles]# cat /etc/ansible/roles/rsync/handlers/main.yml
- name: Restart Rsync Server
service: name=rsyncd state=restarted
6.查看rsync角色的files目录
[root@m01 roles]# ll /etc/ansible/roles/rsync/files/
total 8
-rw-r--r-- 1 root root 322 Nov 16 18:49 rsyncd.conf
-rw------- 1 root root 20 Nov 16 18:30 rsync.passwd
8.执行roles,使用-t指定执行测试rsync角色
[root@m01 roles]# ansible-playbook -i hosts -t rsync site.yml
PLAY [backup] ********************************************************************************************
TASK [Gathering Facts] ********************************************************************************
ok: [172.16.1.41]
TASK [backup : Install Rsync Server] ***********************************************************************
ok: [172.16.1.41]
TASK [backup : Configure Rsync Server] *********************************************************************
ok: [172.16.1.41]
TASK [backup : Start Rsync Server] *************************************************************************
ok: [172.16.1.41]
PLAY RECAP ********************************************************************************************
172.16.1.41 : ok=5 changed=0 unreachable=0 failed=0
1.使用roles创建Nfs服务, 目录结构如下
[root@m01 roles]# tree /etc/ansible/roles
├── group_vars
│ └── all
├── hosts
├── nfs
│ ├── files
│ ├── handlers
│ │ └── main.yml
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ │ └── exports
│ └── vars
├── site.yml
2.定义roles主机清单
[root@m01 roles]# cat /etc/ansible/roles/hosts
[nfs]
172.16.1.31
3.指定nfs主机组,执行那个roles
[root@m01 roles]# cat /etc/ansible/roles/site.yml
- hosts: nfs
remote_user: root
roles:
- nfs
tags: nfs
4.查看nfs角色的tasks任务
[root@m01 roles]# cat /etc/ansible/roles/nfs/tasks/main.yml
- name: Install Nfs-Server
yum: name=nfs-utils state=present
- name: Configure Nfs-Server
template: src=exports dest=/etc/exports
notify: Restart Nfs-Server
- name: Create Directory Data
file: path={{ share_dir }} state=directory owner=www group=www mode=0755
- name: Start Nfs-Server
service: name=nfs state=started enabled=yes
5.查看nfs角色的handlers
[root@m01 roles]# cat /etc/ansible/roles/nfs/handlers/main.yml
- name: Restart Nfs-Server
service: name=nfs state=restarted
6.查看rsync角色的files目录
[root@m01 roles]# cat /etc/ansible/roles/nfs/templates/exports
{{ share_dir }} {{ share_ip }}(rw,sync,all_squash,anonuid=666,anongid=666)
7.nfs对应的变量定义
[root@m01 roles]# cat /etc/ansible/roles/group_vars/all
#nfs
share_dir: /data
share_ip: 172.16.1.31
8.执行roles,使用-t指定执行nfs标签
[root@m01 roles]# ansible-playbook -i hosts -t nfs site.yml
PLAY [nfs] ********************************************************************************************
TASK [Gathering Facts] ********************************************************************************
ok: [172.16.1.31]
TASK [nfs : Install Nfs-Server] ***********************************************************************
ok: [172.16.1.31]
TASK [nfs : Configure Nfs-Server] *********************************************************************
ok: [172.16.1.31]
TASK [nfs : Create Directory Data] ********************************************************************
ok: [172.16.1.31]
TASK [nfs : Start Nfs-Server] *************************************************************************
ok: [172.16.1.31]
PLAY RECAP ********************************************************************************************
172.16.1.31 : ok=5 changed=0 unreachable=0 failed=0
1.使用roles创建web服务, 目录结构如下
[root@m01 roles]# tree /etc/ansible/roles
├── group_vars
│ └── all
├── hosts
├── web
│ ├── files
│ │ └── kaoshi.zip
│ │ └── httpd.conf
│ ├── handlers
│ │ └── main.yml
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ │
│ └── vars
├── site.yml
2.定义roles主机清单
[root@m01 roles]# cat /etc/ansible/roles/hosts
[web]
172.16.1.7
3.指定web主机组,执行那个roles
[root@m01 roles]# cat /etc/ansible/roles/site.yml
- hosts: web
remote_user: root
roles:
- web
tags: web
4.查看web角色的tasks任务
[root@m01 roles]# cat /etc/ansible/roles/web/tasks/main.yml
- name: Installed Httpd Server
yum: name=httpd,php state=present
- name: Configure Httpd Server
template: src=./files/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify: Restart Httpd Server
- name: Start Httpd Server
service: name=httpd state=started enabled=yes
- name: Mount Nfs Server
mount: src={{remote_nfs_ip}}:/data path={{ local_dir }} fstype=nfs opts=defaults state=mounted
- name: Push kaoshi.zip
unarchive: src=./files/kaoshi.zip dest={{ local_dir }}
5.查看web角色的handlers
[root@m01 roles]# cat /etc/ansible/roles/web/handlers/main.yml
- name: Restart Httpd Server
service: name=httpd state=restarted
6.nfs对应的变量定义
[root@m01 roles]# cat /etc/ansible/roles/group_vars/all
#web
remote_nfs_ip: 172.16.1.31
local_dir: /var/www/html/
http_port: 80
7.执行roles,使用-t指定执行nfs标签
[root@m01 roles]# ansible-playbook -i hosts -t web site.yml
网友评论