Ansible playbook中role之间的调用

在前面的两篇文章中已经分别创建了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" }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QYHuiiQ

听说打赏的人工资翻倍~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值