2016-04-22 1 views
0

Я использую unsible 2.0.1 на хостах RHEL 7. Каким-то образом следующие роли при вызове через playbook пропускают «Получить желтую главную версию». Присоединение выхода ниже. Похоже, что что-то не так с условием «когда».set_fact не сохраняется


- set_fact: is_yos="true" 

    - name: Fetch yellow version 
    shell: /bin/gawk '{ for(col = 1; col <= NF; col++) if ($col ~ /[0-9.]+/) { print $col; } }' /etc/yellow-release 
    register: yel_ver_str 
    failed_when: false 
    changed_when: false 

    - set_fact: 
     is_yos: "false" 
    when: yel_ver_str.rc != 0 

    - debug: var=yel_ver_str 

    - debug: var=is_yos 

    - name: Get yellow major version. 
    shell: echo {{ yel_ver_str.stdout }} | awk -F. '{print $1}' 
    register: yel_major_ver 
    when: is_yos == "true" 
    delegate_to: localhost 
    changed_when: false 

Выхода

ansible-playbook -i hosts test.yml -c local 

PLAY *************************************************************************** 

TASK [setup] ******************************************************************* 
ok: [172.31.83.23] 

TASK [test : set_fact] ********************************************************* 
ok: [172.31.83.23] 

TASK [test : Fetch yellow version] ********************************************* 
ok: [172.31.83.23] 

TASK [test : set_fact] ********************************************************* 
skipping: [172.31.83.23] 

TASK [test : debug] ************************************************************ 
ok: [172.31.83.23] => { 
    "yel_ver_str": { 
     "changed": false, 
     "cmd": "/bin/gawk '{ for(col = 1; col <= NF; col++) if ($col ~ /[0-9.]+/) { print $col; } }' /etc/yellow-release", 
     "delta": "0:00:00.004225", 
     "end": "2016-04-22 13:37:29.517570", 
     "failed": false, 
     "failed_when_result": false, 
     "rc": 0, 
     "start": "2016-04-22 13:37:29.513345", 
     "stderr": "", 
     "stdout": "7.2.0", 
     "stdout_lines": [ 
      "7.2.0" 
     ], 
     "warnings": [] 
    } 
} 

TASK [test : debug] ************************************************************ 
ok: [172.31.83.23] => { 
    "is_yos": true 
} 

TASK [test : Get yellow major version.] **************************************** 
skipping: [172.31.83.23] 

PLAY RECAP ********************************************************************* 
172.31.83.23    : ok=5 changed=0 unreachable=0 failed=0 
+0

Это показывает, что 'yel_ver_str.rc == 0', поэтому ваша задача' set_fact' пропускается. Эта задача будет выполняться только тогда, когда 'yel_ver_str.rc! = 0'. – larsks

+0

, когда условие «Получить желтую главную версию» - это когда: is_yos == «true», а не yel_ver_str.rc! = 0. Также я устанавливаю значение по умолчанию для is_yos как истинного –

ответ

0

Посмотрите на этот выходе из вашей debug задачи:

TASK [test : debug] ************************************************************ 
ok: [172.31.83.23] => { 
    "is_yos": true 
} 

is_yos факт является булева переменного (true это логическое значение, а "true" будет строковым). Поэтому, когда вы проверяете:

when: is_yos == "true" 

Проверка является ложной, потому что вы сравниваете логическое значение в строку. Вместо этого используйте:

when: is_yos 
+0

Спасибо, что так много работало, как шарм:) –