Ansible 之 when判断语句使用

一、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)。

猜你喜欢

转载自blog.51cto.com/12965094/2601377