Как добавить необязательные переменные в командную строку и проверить их наличие в плейбуке?

Я хотел бы запускать конкретную задачу только в том случае, если в командной строке указан флаг. Например, я хотел бы запустить команду ansible-playbook со следующим: --extra-vars "composer-install=true". Мне как-то нужна задача, которая проверяет, установлена ​​ли переменная composer-install, и если она установлена ​​и равна истине, запускает данную задачу, которая запускает composer install. Я не совсем уверен, как сделать последнюю часть.


person timetofly    schedule 05.11.2014    source источник


Ответы (2)


Причина, по которой вы получаете сообщение об ошибке, заключается в том, что вы обращаетесь к переменной, которая никогда не устанавливалась. Похоже, вы используете существование extra-var как указание на то, что вы хотите, чтобы установка композитора выполнялась (т.е. вы никогда не передаете --extra-vars="composer-install=false"), поэтому вы можете использовать is defined :

- shell: composer install
  when: composer-install is defined

Но переменные можно передавать через фильтры, что может быть полезно в этом случае, потому что он по-прежнему позволяет вам передавать true/false, не определяя переменную вообще, все еще работает:

- shell: composer install
  when: composer-install|default(false)

Еще немного об условных выражениях можно найти здесь: http://docs.ansible.com/playbooks_conditionals.html

Фильтры jinja2 очень полезны по нескольким причинам, поэтому подробнее о них здесь: http://docs.ansible.com/playbooks_variables.html#jinja2-filters

И, наконец, полный список встроенных фильтров jinja2 здесь: http://jinja.pocoo.org/docs/dev/templates/#builtin-filters

person Ramon de la Fuente    schedule 06.11.2014
comment
Спасибо за информативный ответ, даже после того, как я выбрал другое решение в качестве ответа! - person timetofly; 06.11.2014
comment
На самом деле, пока я здесь, могу я спросить, как правильно использовать фильтры jinja2 для преобразования строки в целое число и выполнения умножения? Например, у меня есть шаблон, в котором я хочу установить переменную в ansible_fact * 2, а ansible_fact также является строкой. Я не смог найти его в документации. - person timetofly; 06.11.2014
comment
Есть фильтр int, и он, кажется, работает (пришлось проверить самому): - debug: msg={{ '2'|int * 2 }} - person Ramon de la Fuente; 06.11.2014

Я думаю, вы ищете параметр when.

- name: optional composer install
  shell: composer install
  when: composer-install
person Daniel    schedule 05.11.2014
comment
Спасибо, это привело меня в правильном направлении. Просто выполнение того, что вы сделали, приводит к ошибке. Решение заключалось в том, чтобы также добавить раздел vars: в ​​playbook и добавить переменную composer-install, установив для нее значение false. По-видимому, переменные командной строки перезаписывают переменные, установленные в playbook. Ваше здоровье. - person timetofly; 06.11.2014