您的位置:首页 > 其它

Ansible 之 when判断语句使用

2021-01-21 21:27 555 查看

一、when语句

Ansible when 语句等同于if语句的作用

二、判断test主机是否有redis-server进程

---
- hosts: test
vars_files:
remote_user: cedar
become: yes
vars:
test: "0"
tasks:
- name: "判断redis进程是否存在"
shell: netstat -tlunp | grep redis-server | wc -l
ignore_errors: True
register: result
- name: "打印检查结果"
debug:
msg: "{{result}}"
- name: "打印是否有redis-server进程"
debug:
msg: "{{result.stdout.find('1')}}"
- name: "判断是否启动"
shell: touch /root/aaa.txt
when: result.stdout.find('1') == 0        #判断屏幕输出结果是否为1

二、当test主机有redis-server进程时结果

[root@Ansible playbook]# ansible-playbook process.yaml

PLAY [test] *****************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************
ok: [10.3.153.8]

TASK [判断redis进程是否存在] ********************************************************************************************************************************************
changed: [10.3.153.8]

TASK [打印检查结果] ***************************************************************************************************************************************************
ok: [10.3.153.8] => {
"msg": {
"changed": true,
"cmd": "netstat -tlunp | grep redis-server | wc -l",
"delta": "0:00:00.029704",
"end": "2021-01-21 08:23:15.244863",
"failed": false,
"rc": 0,
"start": "2021-01-21 08:23:15.215159",
"stderr": "",
"stderr_lines": [],
"stdout": "1",
"stdout_lines": [
"1"
]
}
}

TASK [打印是否有redis-server进程] **************************************************************************************************************************************
ok: [10.3.153.8] => {
"msg": "0"                     #当test主机有redis-server进程时,该值为0,否则为-1
}

TASK [判断是否启动] ***************************************************************************************************************************************************
[WARNING]: Consider using the file module with state=touch rather than running 'touch'.  If you need to use command because file is insufficient you can add
'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message.
changed: [10.3.153.8]         #当redis-server存在时,执行该动作,创建文件

PLAY RECAP ******************************************************************************************************************************************************
10.3.153.8                 : ok=5    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

三、当test主机没有redis-server进程结果

[root@Ansible playbook]# ansible-playbook process.yaml

PLAY [test] *****************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************
ok: [10.3.153.8]

TASK [判断redis进程是否存在] ********************************************************************************************************************************************
changed: [10.3.153.8]

TASK [打印检查结果] ***************************************************************************************************************************************************
ok: [10.3.153.8] => {
"msg": {
"changed": true,
"cmd": "netstat -tlunp | grep redis-server | wc -l",
"delta": "0:00:00.025883",
"end": "2021-01-21 08:23:46.505443",
"failed": false,
"rc": 0,
"start": "2021-01-21 08:23:46.479560",
"stderr": "",
"stderr_lines": [],
"stdout": "0",
"stdout_lines": [
"0"
]
}
}

TASK [打印是否有redis-server进程] **************************************************************************************************************************************
ok: [10.3.153.8] => {
"msg": "-1"
}

TASK [判断是否启动] ***************************************************************************************************************************************************
skipping: [10.3.153.8]         #当没有redis-server进程时,跳过此步骤,不创建文件

PLAY RECAP ******************************************************************************************************************************************************
10.3.153.8                 : ok=4    changed=1    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0

四、技术点解释

1、register 大部分情况下,我们使用注册器用来接收shell命令的返回结果,结果中包含标准输出(stdout)和错误输出(stderr)。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐