ansible 循环与条件判断when
普通循环
with_itemes 变量组
{ item } 循环变量
示例
- name: 覆盖配置文件
copy: src=/root/{{ item }} dest=/root/test/{{ item }}
with_items:
- a.txt
- b.txt
- c.txt
- d.txt
- shell (目录)
##会依次将abcd 四个txt文件和 shell目录拷贝到目标文件夹下
引用sc的一个示例:

字典循环
#添加用户 - name: add users user: name={{ item }} state=present groups=wheel with_items: - testuser1 - testuser2 - name: add users user: name={{ item.name }} state=present groups={{ item.groups }} with_items: - { name: 'testuser1', groups: 'test1' } - { name: 'testuser2', groups: 'test2' }
示例二
users: alice: name: Alice Appleworth telephone: 123-456-7890 bob: #key name: Bob Bananarama #value1 telephone: 987-654-3210 #value2 tasks: - name: Print records debug: msg="User {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})" with_dict: "{{ users }}"
示例三

执行结果

嵌套循环
---
- name: test
hosts: test
tasks:
- name: test
command: "echo name={{ item[0] }} priv={{ item[1] }}"
with_nested:
- [ 'alice', 'bob' ]
- [ 'clientdb', 'employeedb', 'providerdb' ]
##item[0]是循环的第一个列表的值['alice','bob'];item[1]是第二个列表的值。

打印结果:

文件循环
inventory循环(with_inventory_hostnames)
# show all the hosts in the inventory
- debug: msg={{ item }}
with_inventory_hostnames: all
# show all the hosts matching the pattern, ie all but the group www
- debug: msg={{ item }}
with_inventory_hostnames: all:!www
with_fileglob:
---
- hosts: test
gather_facts: False
tasks:
- name: display value ##列举某个目录下的某些文件
debug: msg="file is {{ item }}"
with_fileglob:
- /root/*.zip

条件判断when与register变量
register官网示例


register 可接受多个task的结果作为变量临时存储,示例:
---
- hosts: test
gather_facts: False
tasks:
- name: display value
shell: "{{ item }}"
with_items:
- hostname
- uname
register: ret
- name: display loops
debug: msg="{% for i in ret.results %} {{ i.stdout }} {% endfor %}"
执行结果:

when 官网示例


其它示例:
判断分支是否在git分支列表,如果不在,运行某个脚本
- command: chdir=/path/to/project git branch
register: git_branches
- command: /path/to/project/git-clean.sh
when: "('release-v2' no in git_branches.stdout)"
判断某个文件是否存在
- stat: path=/etc/hosts
register: host_file
- copy: src=/path/to/local/file dest=/path/to/remote/file
when: host_file.stat.exists == false
其它示例

changed_when && failed_when
对命令运行结果进行判断。
示例
比如判断某个软件是否安装成功 - name: install git yum: name=git state=latest register: git_install changed_when: " 'nothing to install or upgrade' not in git_install.stdout" #表示输出的结果中没有 notthing to install ..才返回change结果
ignore_errors: true 屏蔽错误信息

浙公网安备 33010602011771号