2016-09-19 2 views
0

У меня есть «vars_prompt» настройки для опции «check_mode»:анзибль быстрое и check_mode

--- 
- name: Test check_mode from prompt 
    hosts: localhost 

    vars_prompt: 
    - name: "check_mode" 
    prompt: "Check mode: yes(default)=check-only, no=execute commands" 
    private: no 
    default: true 

    tasks: 
    - name: msg="False test | {{ check_mode }}" 
    debug: var=check_mode 
    when: not check_mode 

    - name: msg="True test | {{ check_mode }}" 
    debug: var=check_mode 
    when: check_mode 

Когда я бегу пьес (ansible-playbook -i myhosts test.yml) и ответить true или false тесты работают, как и ожидалось, но когда я использовать «да» и «нет» (как http://docs.ansible.com/ansible/playbooks_checkmode.html документ упоминает), я получаю эту ошибку:

The conditional check 'check_mode' failed. The error was: error 
while evaluating conditional (check_mode): 'no' is undefined 

Является ли это ошибка в документе, или в том, как я использую переменную check_mode в when? Мне показалось, что true/yes и false/no были автоматически обработаны.

ответ

0

После работы с Ansible в течение последних шести месяцев я снова встретил свой вопрос, но на этот раз у меня есть свой собственный ответ.

Проблема заключается в том, что строки «да» и «нет» не преобразуются автоматически в логические значения true/false с помощью Ansible. Чтобы заставить преобразование использовать "| BOOL" фильтр, как это:

tasks: 
- debug: msg="False test | {{ check_mode }}" 
    when: not check_mode|bool 

- debug: msg="True test | {{ check_mode }}" 
    when: check_mode|bool 
+1

Чтобы быть более конкретным: 'да/no' и другие (' у | Y | да | да | да | п | N | нет | No | NO | true | True | TRUE | false | False | FALSE | on | On | ON | off | Off | OFF') «преобразуются» процессором YAML. –

+0

@ dan_linder, к сожалению, эта техника заставляет вас загрязнять код с помощью '| bool' всюду, поскольку базовая переменная' check_mode' не имеет тип bool. – Alkaline