1.Ansible Roles 角色
ansible roles 角色,适合大规模使用
playbook如果文件较多的情况,不清楚哪些主机执行了哪些状态的yml文件
roles能清楚哪些主机应用哪些角色
1.roles官方目录的结构,必须这么定义
[root@manager roles]# mkdir {nfs,rsync,web}/{vars,tasks,templates,handlers,files} -p [root@manager roles]# tree . ├── ansibleconf.tar.gz ├── base #角色名称 │ ├── files #存放文件 │ │ ├── push_data_rsync.sh │ │ ├── rsyncd.conf.template │ │ └── sshd.template │ ├── handlers #触发任务 │ │ └── main.yml │ ├── tasks #具体任务 │ │ └── main.yml │ ├── template #模板文件 │ └── vars #存放变量 ├── group_vars │ └── all ├── nfs │ ├── files │ │ └── exports.template │ ├── handlers │ │ └── main.yml │ ├── tasks │ │ └── main.yml │ ├── templates │ └── vars │ └── main.yml ├── rsync │ ├── files │ │ ├── check_client_data.sh │ │ ├── mail.rc │ │ ├── rsyncd.conf.template │ │ └── rsyncd.pass.template │ ├── handlers │ │ └── main.yml │ ├── tasks │ │ └── main.yml │ ├── template │ └── vars ├── sersync │ ├── files │ │ ├── confxml.xml │ │ └── rsync.pass │ ├── handlers │ │ └── main.yml │ ├── tasks │ │ └── main.yml │ ├── template │ └── vars ├── site.yml └── web ├── files │ ├── exam.txt │ ├── exam.zip │ └── httpd.conf.template ├── handlers │ └── main.yml ├── tasks │ └── main.yml ├── template └── vars └── main.yml 31 directories, 28 files [root@manager roles]#
2.roles变量定义方式
1)在vars目录中创建一个main.yml定义
2)在roles目录下创建一个group_vars定义,可以是主机组的名称,也可以是all(所有)
2.Ansible Roles 实战
1.使用roles 创建Rsync 服务,目录结构如下
[root@manager roles]# tree /etc/ansible/roles /etc/ansible/roles ├── rsync │ ├── files │ │ ├── check_client_data.sh │ │ ├── mail.rc │ │ ├── rsyncd.conf.template │ │ └── rsyncd.pass.template │ ├── handlers │ │ └── main.yml │ ├── tasks │ │ └── main.yml │ ├── template │ └── vars ├── site.yml
2.定义roles主机清单
[root@manager roles]# cat ../hosts [backup] 172.26.73.200
3.指定 backup 主机组,执行那个 roles
[root@manager roles]# cat /etc/ansible/roles/site.yml - hosts: backup roles: - rsync
4.查看rsync角色的 tasks任务
[root@manager roles]# cat /etc/ansible/roles/rsync/tasks/main.yml - name: Installed Rsync Server yum: name=rsync,mailx state=present - name: Configure Rsync Server copy: src={{ item.src }} dest={{ item.dest }} mode={{ item.mode }} with_items: - {src: './files/rsyncd.conf.template', dest: '/etc/rsyncd.conf' , mode: '0644'} - {src: './files/rsyncd.pass.template', dest: '/etc/rsync.passwd' , mode: '0600'} notify: Restart Rsyncd Server - name: Create Directory file: path={{ item }} state=directory owner=www group=www mode=755 with_items: - /backup - /data - name: Service Rsync Server service: name=rsyncd state=started enabled=yes - name: Push Mail Configure copy: src=./files/check_client_data.sh dest=/server/scripts/ mode=755 - name: Check Scripts Crontab cron: name: 'Check Backup Scripts' minute: '*/10' hour: 05 job: /bin/bash /server/scripts/check_client_data.sh &>/dev/null - name: OutPut Rsync Status shell: netstat -lntp|grep rsync register: Rsync_Status ignore_errors: yes - name: Print Rsync Status debug: msg={{ Rsync_Status.stdout_lines }} ignore_errors: yes [root@manager roles]#
5.查看rsync角色的 handlers
[root@manager roles]# cat /etc/ansible/roles/rsync/handlers/main.yml - name: Restart Rsyncd Server service: name=rsyncd state=restarted
6.查看rsync角色的 files目录
[root@manager roles]# ll /etc/ansible/roles/rsync/files/ 总用量 16 -rw-r--r-- 1 root root 426 2月 23 19:16 check_client_data.sh -rw-r--r-- 1 root root 2179 2月 23 19:47 mail.rc -rw-r--r-- 1 root root 319 2月 23 19:16 rsyncd.conf.template -rw-r--r-- 1 root root 15 2月 23 19:15 rsyncd.pass.template
8.执行roles,使用 -t 指定执行测试 rsync角色
[root@manager roles]# ansible-playbook -i hosts -t rsync site.yml PLAY [all] ****************************************************************************************************************************************************************** TASK [Gathering Facts] ****************************************************************************************************************************************************** ok: [172.26.73.200] [WARNING]: Could not match supplied host pattern, ignoring: backup PLAY [backup] *************************************************************************************************************************************************************** skipping: no hosts matched [WARNING]: Could not match supplied host pattern, ignoring: nfs PLAY [nfs] ****************************************************************************************************************************************************************** skipping: no hosts matched PLAY [nfs] ****************************************************************************************************************************************************************** skipping: no hosts matched [WARNING]: Could not match supplied host pattern, ignoring: web PLAY [web] ****************************************************************************************************************************************************************** skipping: no hosts matched PLAY RECAP ****************************************************************************************************************************************************************** 172.26.73.200 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
1.使用 roles 创建NFS服务,目录结构如下
[root@manager roles]# tree /etc/ansible/roles/
/etc/ansible/roles/
├── group_vars
│ └── all
├── hosts
├── nfs
│ ├── files
│ │ └── exports.template
│ ├── handlers
│ │ └── main.yml
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ └── vars
│ └── main.yml
├── site.yml
2.定义roles主机清单
[root@manager roles]# vim /etc/ansible/roles/hosts [nfs] 172.26.73.197
3.指定nfs主机组执行哪个 roles
[root@manager roles]# cat site.yml --- - hosts: nfs roles: - nfs
4.查看 nfs 角色的tasks任务
[root@manager roles]# cat /etc/ansible/roles/nfs/tasks/main.yml - name: Installed NFS Server yum: name=nfs-utils state=present - name: Configure NFS Server template: src=./files/exports.template dest=/etc/exports notify: Restart NFS Server - name: Create Directory file: path={{ nfs_dir }} state=directory owner=www group=www recurse=yes mode=755 - name: Start NFS Server service: name=nfs-server state=started enabled=yes
5.查看nfs角色的 handlers
[root@manager roles]# cat /etc/ansible/roles/nfs/tasks/main.yml - name: Installed NFS Server yum: name=nfs-utils state=present - name: Configure NFS Server template: src=./files/exports.template dest=/etc/exports notify: Restart NFS Server - name: Create Directory file: path={{ nfs_dir }} state=directory owner=www group=www recurse=yes mode=755 - name: Start NFS Server service: name=nfs-server state=started enabled=yes [root@manager roles]# cat /etc/ansible/roles/nfs/handlers/main.yml - name: Restart NFS Server service: name=nfs-server state=restarted
6.查看 rsync 角色的 files目录
[root@manager templates]# cat /etc/ansible/roles/nfs/templates/exports {{ share_dir }} {{ share_ip }}(rw,sync,all_squash,anonuid=666,anongid=666)
7. nfs对应的变量定义
[root@manager templates]# cat /etc/ansible/roles/group_vars/all #this nfs vars nfs_dir: /data2 nfs_ip: 172.26.73.0/24 nfs_id: 666 #this web vars httpd_user: www httpd_port: 80
8.执行 roles, 使用 -t 指定执行 nfs 标签
[root@manager roles]# ansible-playbook -i hosts -t nfs site.yml PLAY [all] ****************************************************************************************************************************************************************** TASK [Gathering Facts] ****************************************************************************************************************************************************** ok: [172.26.73.200] fatal: [172.26.73.197]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host 172.26.73.197 port 22: Connection timed out", "unreachable": true} [WARNING]: Could not match supplied host pattern, ignoring: backup PLAY [backup] *************************************************************************************************************************************************************** skipping: no hosts matched PLAY [nfs] ****************************************************************************************************************************************************************** PLAY [nfs] ****************************************************************************************************************************************************************** [WARNING]: Could not match supplied host pattern, ignoring: web PLAY [web] ****************************************************************************************************************************************************************** skipping: no hosts matched PLAY RECAP ****************************************************************************************************************************************************************** 172.26.73.197 : ok=0 changed=0 unreachable=1 failed=0 skipped=0 rescued=0 ignored=0 172.26.73.200 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
https://github.com/ansible/ansible-examples/tree/master/wordpress-nginx
https://github.com/ansible/ansible-examples
http://www.ywnds.com/?p=6218
作业:
1.使用 roles完成如下: vides == 30
base
httpd [2]
nfs
rsync
2.验证的标准
1.web上能正常上传数据到nfs存储
2.web和nfs的配置文件,脚本,定时任务等,定时备份到backup服务器
rolus 找文件,用copy模块就会到 file文件夹中找,用template模块就会到 template文件夹中找文件。
yum_repostitory
yum
copy 仅拷贝文件
template 解析拷贝过去的配置文件中的变量
file
service
group
user
unarchive
shell
command
mount
debug
cron
ansible-playbook
变量
主机和主机组
定义在playbook中
定义在一个文件中,使用var_files
命令行直接传入变量
变量注册 register
忽略错误 ignore_errors
条件判断 when
循环语句 with_items
文件复用 include include_task roles
文件监控 notify handlers
文件标签 tags
浙公网安备 33010602011771号