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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章