ansible-playbook之条件判断

简介:

ansible条件判断

在工作中,我们在执行playbook时,需要对某些条件进行判断,只有当满足条件才执行相应的tasks;

1.when条件判断:只条满足when的条件时才执行对应的tasks

注:when关键字后面跟着的是python的表达式,在表达式中你能够使用任何的变量或者facts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#注:当需要用远程主机的一些信息时,gather_facts必须要开启,默认是开启状态
[root@nfs-server playbook] # cat when.yml 
---
- hosts: webservers
   remote_user: root
   #gather_facts: False
   tasks:
   - name: Host 192.168.1.101 run this task
     debug:  'msg=" {{ ansible_default_ipv4.address }}"'
     when: ansible_default_ipv4.address ==  "192.168.2.101"
   - name: memtotal < 500M and processor_cores == 2 run this task
     debug:  'msg="{{ ansible_fqdn }}"'
     when: ansible_memtotal_mb < 500 and ansible_processor_cores == 2
   - name: all host run this task
     shell:  hostname
     register: info
   - name: Hostname is lamp1 Machie run this task
     debug:  'msg="{{ ansible_fqdn }}"'
     when: info[ 'stdout' ] ==  "lamp1"
   - name: Hostname is startswith l run this task
     debug:  'msg="{{ ansible_fqdn }}"'
     when: info[ 'stdout' ].startswith( 'l' )
[root@nfs-server playbook] # ansible-playbook when.yml
 
PLAY [webservers] **************************************************************************************************************************************
 
TASK [Gathering Facts] *********************************************************************************************************************************
ok: [192.168.2.101]
ok: [192.168.2.111]
 
TASK [Host 192.168.1.101 run this task] ****************************************************************************************************************
ok: [192.168.2.101] => {
     "msg" " 192.168.2.101"
}
skipping: [192.168.2.111]
 
TASK [memtotal < 500M and processor_cores == 2 run this task] ******************************************************************************************
skipping: [192.168.2.101]
skipping: [192.168.2.111]
 
TASK [all host run this task] **************************************************************************************************************************
changed: [192.168.2.101]
changed: [192.168.2.111]
 
TASK [Hostname is lamp1 Machie run this task] **********************************************************************************************************
ok: [192.168.2.101] => {
     "msg" "lamp1"
}
skipping: [192.168.2.111]
 
TASK [Hostname is startswith l run this task] **********************************************************************************************************
ok: [192.168.2.101] => {
     "msg" "lamp1"
}
ok: [192.168.2.111] => {
     "msg" "lamp2"
}
 
PLAY RECAP *********************************************************************************************************************************************
192.168.2.101              : ok=5    changed=1    unreachable=0    failed=0   
192.168.2.111              : ok=3    changed=1    unreachable=0    failed=0

2.changed_when:先执行task,并对task返回的值进行判断,当满足changed_when指定的条件时说明是执行成功的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#注:默认情况下执行了命令的主机状态都为changed,本例对输出进行判断,包含是某个指定字符才能为changed; 
[root@nfs-server playbook] # cat when_1.yml 
---
- hosts: webservers
   remote_user: root
   #gather_facts: False
   tasks:
   - name: all host run this task
     shell:  hostname
     register: info
     changed_when:  '"lamp1" in info.stdout'
[root@nfs-server playbook] # ansible-playbook when_1.yml
 
PLAY [webservers] **************************************************************************************************************************************
 
TASK [Gathering Facts] *********************************************************************************************************************************
ok: [192.168.2.101]
ok: [192.168.2.111]
 
TASK [all host run this task] **************************************************************************************************************************
ok: [192.168.2.111]
changed: [192.168.2.101]
 
PLAY RECAP *********************************************************************************************************************************************
192.168.2.101              : ok=2    changed=1    unreachable=0    failed=0   
192.168.2.111              : ok=2    changed=0    unreachable=0    failed=0

wKiom1msIHfBHLSfAAA6KRSy7RI356.png

3.failed_when:当执行失败后,会将信息存在register的stderr中,通过判断指定的字符是否在stderr中来确定是否真的失败;

暂时没有合适的例子,等有了再补~

本文转自激情燃烧的岁月博客51CTO博客,原文链接http://blog.51cto.com/liuzhengwei521/1962382如需转载请自行联系原作者

weilovepan520


相关文章
|
4月前
|
Linux 网络安全 开发工具
Playbook条件语句
Playbook条件语句
47 5
|
Shell Linux Python
Ansible之Playbook(一)
Ansible之Playbook
109 0
Ansible之Playbook(一)
|
应用服务中间件 nginx
Ansible之Playbook(二)
Ansible之Playbook(二)
106 0
|
Shell Linux Python
[Ansible专栏]Ansible条件判断的介绍和使用
[Ansible专栏]Ansible条件判断的介绍和使用
|
缓存 运维 负载均衡
Ansible-playbook 的编写 | 学习笔记
快速学习Ansible-playbook 的编写
Ansible-playbook 的编写 | 学习笔记
LXJ
|
应用服务中间件 Shell Linux
Ansible之Playbook
Ansible之Playbook
LXJ
238 0
Ansible playbook忽略错误继续执行
通常情况下, 当出现失败时 Ansible 会停止在宿主机上执行.有时候,你会想要继续执行下去.为此 你需要像这样编写任务: name: this will not be counted as a failure command: /bin/fals...
2981 0
|
Linux 开发工具 Python
Ansible-playbook 条件判断when、pause(学习笔记二十三)
有一些模块,例如copy这个模块有一些机制能跳过本次模块的运行.其实我们也可以使用自己的条件语句去配置跳过模块,这样方便你服务能够选择使用不同的包管理(apt,yum)和不同的文件系统.
1688 0
Ansible playbook常用指令格式
--- - hosts: ipse1   tasks:    - name: "user del"      command: userdel -r huangqx      command: userdel -r daipj      comman...
928 0