注意:
在使用 Ansible Playbook 之前,要先安装 Ansible、添加被 Ansible 管理的主机,并且需要 root 权限
正文:
内容一:在 Ansible Playbook 里使用循环
1.1 在 Ansible Playbook 里使用简单的单循环
# vim test.yml
创建以下内容:
---
- name: test
hosts: all
tasks:
- name: install rpms
yum:
- php
- nginx
- mariadb
(
补充:这里以
1) 在 test.yml 中
2) 创建 1 个名为 test,
3) 在所有服务器上执行,
4) 安装 php、nginx 和 mariadb,
的 Playbook 为例
)
1.2 在 Ansible Playbook 里使用数组实现单组循环
# vim test.yml
创建以下内容:
---
- name: test
hosts: all
tasks:
- user:
name: "{{item.name}}"
group: "{{item.group}}"
password: "{{'1' | password_hash('sha512',mysecretsalt)}}"
with_items:
- {name: "a1", group: "users"}
- {name: "a2", group: "mail"}
- {name: "a3", group: "wheel"}
- {name: "a4", group: "root"}
(
补充:这里以
1) 在 test.yml 中
2) 创建 1 个名为 test
3) 在所有服务器上执行
4) 创建 1 个循环组的用户
的 Playbook 为例
)
1.3 在 Ansible Playbook 里使用变量实现单组循环
# vim test.yml
创建以下内容:
---
- name: test
hosts: all
vars:
issue_all
- issue_name: a
issue_cont: 1
- issue_name: b
issue_cont: 2
- issue_name: c
issue_cont: 3
- issue_name: d
issue_cont: 4
- issue_name: e
issue_cont: 5
tasks:
- name: issue
shell: "echo {{ item.issue_name }}={{ item.issue_cont }}"
loop: "{{ issue_all }}"
(
补充:这里以
1) 在 test.yml 中
2) 创建 1 个名为 test
3) 在所有服务器上执行
4) 输出 1 个循环组的信息
的 Playbook 为例
)
1.4 在 Ansible Playbook 里使用数组实现多组循环
# vim test.yml
创建以下内容:
---
- name: test
hosts: all
remote_user: root
vars:
name: [a, b, c]
id: [1, 2, 3]
tasks:
- shell: echo {{item}}
with_nested:
- "{{name}}"
- "{{id}}"
(
补充:这里以
1) 在 test.yml 中
2) 创建 1 个名为 test
3) 在所有服务器上执行
4) 循环输出两个循环组的信息(本案例会输出信息:a1、a2、a3、b1、b2、b3、c1、c2、c3)
的 Playbook 为例
)
内容二:在 JSON 文档上使用单组循环
2.1 在 JSON 文档上使用单组循环
# vim hosts.j2
创建以下内容:
{% for host in groups['all'] %}
{{ hostvars[host]['ansible_facts']['hostname'] }} {{ hostvars[host]['ansible_facts']['default_ipv4']['address'] }}
{% endfor %}
(补充:这里以创建所有服务器名和 IP 地址对应的关系,名为 hosts.j2 的 json 文件为例)
2.2 使用 JSON 文档的 Ansible Playbook
# vim test.yml
添加以下内容:
......
- name: template
template:
src: hosts.j2
dest: /root/hosts.txt
......
(补充:这里以在 test.yml 中,使用 hosts.j2 创建 /root/hosts.txt 为例)