在前面的两篇文章中已经分别创建了nginx和httpd这两个role,这里想要实现一下对多个role的操作。
使用playbook role创建httpd服务_QYHuiiQ-CSDN博客
Ansible playbook中role的用法_QYHuiiQ-CSDN博客
- 将这两个role综合在一起多被控机器进行操作,需要创建一个总的playbook引用这两个role:
[root@localhost ansible]# cat roles_test.yml
- hosts: wyh-test
remote_user: root
roles:
- role: httpd
- role: nginx
在做这些操作之前由于之前执行单个role的playbook时已经创建了用户或者安装了包,所以要先把之前的包和用户删掉。
然后执行playbook:
[root@localhost ansible]# ansible-playbook roles_test.yml
验证执行结果:
- role之间相互调用
目前创建好的两个role的目录结构如下:
这里假设一个使用场景,实现一下在nginx的role中调用httpd role中的copyconf.yml。要做的就是在nginx的main.yml中引用copyconf.yml:
在执行之前,注意要先把之前已经实现过的这个conf文件删掉:
[root@localhost ansible]# ansible wyh-test -m shell -a 'ls /data'
这里要注意,之前我们在copyconf.yml文件中对文件的src指定的是相对路径,而先在要放在多个role中调用时就会有问题,所以我们要把src改为绝对路径,由此也建议在之后的开发中src尽量写绝对路径,减少出错概率:
[root@localhost tasks]# cat copyconf.yml
- name: copy files
copy: src=/etc/httpd/conf/httpd.conf dest=/data/ owner=apache
执行playbook:
[root@localhost ansible]# ansible-playbook nginx-deploy.yml
验证任务是否真的被执行了:
- 为role设置标签
[root@localhost ansible]# cat roles_test.yml
- hosts: wyh-test
remote_user: root
roles:
- { role: httpd, tags: ['web','httpd'] }
- { role: nginx, tags: ['web','nginx'] }
#执行playbook时给定tag
[root@localhost ansible]# ansible-playbook -t web roles_test.yml
- 为role设置when执行条件
[root@localhost ansible]# cat roles_test.yml
- hosts: wyh-test
remote_user: root
roles:
- { role: httpd, tags: ['web','httpd'] }
- { role: nginx, tags: ['web','nginx'], when: ansible_distribution_major_version == "7" }