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.