Не удалось получить правильное поведение от логической переменной Ansible

У Дженкинса есть логический параметр mycheck, который передается в доступную книгу воспроизведения, как показано ниже:

ansible-playbook -i /var/myserver.hosts /var/testplay.yml -e mycheck=$mycheck

Вышеупомянутое переводится в следующее, когда флажок не установлен:

ansible-playbook -i /var/myserver.hosts /var/testplay.yml -e mycheck=False

cat /var/testplay.yml

- debug:
    msg: "mycheck is True"
  when: not mycheck

Однако приведенная выше отладка пропускается, когда я ожидал, что условие when будет истинным и будет напечатано.

Не могли бы вы подсказать, почему not mycheck не переведено в true, а условие when выполнено?


person Ashar    schedule 13.01.2021    source источник


Ответы (1)


Причина: это вызвано проблемой типа данных. По умолчанию ansible обрабатывает любую переменную, переданную через дополнительные переменные, как строку Unicode вместо того, чтобы связывать логический класс с переданным текстом.

Решение. Ваша первоначальная команда выполнения должна быть изменена ниже ansible-playbook -i /var/myserver.hosts /var/testplay.yml -e '{ mycheck: True }'.

person CRDias    schedule 13.01.2021
comment
прошел -e '{ mycheck=false }', но теперь выдает следующую ошибку: fatal: [localhost]: FAILED! => {"msg": "The conditional check 'not mycheck and file_perm == \"\"' failed. The error was: error while evaluating conditional (not mycheck and file_perm == \"\"): 'mycheck' is undefined - person Ashar; 13.01.2021
comment
с -e '{ mycheck: false }' работает, а с -e '{ mycheck=false }' не работает. Можете ли вы предложить решение для -e '{ mycheck=false }' ? - person Ashar; 13.01.2021
comment
Я не думаю, что это работает таким образом, что касается синтаксиса - person CRDias; 13.01.2021