roles作为ansible重要的企业实战解决方案。
批量创建文件,使用循环
1 2 3 4 5 6 7 8 9 10 11
| --- - hosts: websrvs remote_user: root
tasks: - name: create some files file: name=/data/{{ item }} state=touch with_items: - file1 - file2 when: ansible_distribution_major_version == "7"
|
迭代嵌套自变量,使用循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| --- - hosts: websrvs remote_user: root
tasks: - name: create some groups group: name={{item}} when: ansible_distribution_major_version == "7" with_items: - g1 - g2 - g3
- name: create some users user: name={{item.name}} group={{item.group}} when: ansible_distribution_major_version == "7" with_items: - { name: 'user1',group: 'g1'} - { name: 'user1',group: 'g2'} - { name: 'user1',group: 'g3'}
|
使用for循环
1 2 3 4 5 6 7 8 9 10 11 12 13
| --- - hosts websrvs remote_user: root vars: #定义一个列表类型的变量,名称为ports ports: - 81 - 82 - 83
tasks: - name: copy conf file template: src=for1.conf.j2 dest=/data/for1.conf
|
touch for1.conf.j2
循环创建配置,并且可以使用if条件判断
1 2 3 4 5
| {% for port in ports %} server{ listem {{ port }} } {% endfor %}
|
roles的使用
- 将playbook中使用的功能拆开,分们别类,在playbook中引入即可,实现了功能复用,适合大型项目。
在一个playbook中调用多个roles
1 2 3 4 5
| - hosts: websrvs remote_user: root roles: - role: httpd - role: nginx
|
在一个roles的task中调用其他roles中的tasks.
main.yml
1 2
| - include: temp.yml - include: roles/htpd/tasks/copyfile.yml
|
在一个playbook,给每个roles打上tag
1 2 3 4 5
| - hosts: websrvs remote_user: root roles: - { role: httpd, tasg: ['web',httpd'] } - { role: nginx, tags: ['web','nginx'],when: ansible_distribution_major_version == "7" }
|
调用带有tag的任务
ansible-playbook -t web some_role.yml
欣赏此文,求鼓励,求支持! if you like, you can donate money for me.