2014-09-02 7 views
30

Как передать массив yaml в --extra-vars в Ansible playbook. Невозможная документация не объявляет его синтаксис, и я не могу найти это на любом интернет-ресурсе.Пропустить массив в --extra-vars - Ansible

Я имею в виду, если у меня есть сборник пьес:

--- 
    - hosts: {{hostName}} 
    - remote_user: admin 
    ... 

Тогда я должен назвать мой сборник пьес, как

ansible-playbook DeployWar.yml --extra-vars="hostName=tomcat-webApp"

Но я хочу, чтобы запустить этот сборник пьес на двух серверах говорят tomcat-webApp и tomcat-all, и я хочу контролировать его из стороны, то есть используя --extra-vars. То, что я постарался сделать, это:

ansible-playbook DeployWar.yml --extra-vars="hostName=[tomcat-webApp, tomcat-all]" 

ansible-playbook DeployWar.yml --extra-vars="hostName={tomcat-webApp, tomcat-all}" 

ansible-playbook DeployWar.yml --extra-vars="[{hostName: tomcat-webApp}, {hostName: tomcat-all}]" 

Но во всех случаях playbook не объявляет синтаксическую ошибку в моем вызове. Любая помощь приветствуется.

ответ

19

Чтобы ответить на ваш первый вопрос «Как передать массив yaml в -extra-vars в Ansible playbook». вы можете перейти в json formatted string to extra-vars.

Вот пример игры:

- hosts: all 
    gather_facts: no 
    tasks: 
    - debug: var=test_list 

И как пройти в test_list к анзибль-сборник пьес:

ansible-playbook -c local -i localhost, test.yml --extra-vars='{"test_list": [1,2,3]}' 

Хотя вы можете использовать переменную для хостов я рекомендую проверить механизм анзибль для управление хостом, которое является inventory в сочетании с опцией --limit.

+2

Всякий раз, когда я работаю с JSON, будь то в экстра-Пере или в другом месте я нахожу использование http://jsonlint.com быть спасателем. Вставив {test_list: [1,2,3]} на этот сайт, вы можете быстро проверить, что ваш JSON синтаксически корректен. Это особенно полезно при передаче нескольких переменных в Ansible или при наличии любого другого сложного JSON, с которым вы работаете. –

+0

Этот ответ на самом деле устарел - использование '--extra-vars = '{test_list: [1,2,3]}'' приведет к ошибке 'ERROR: Ожидание имени свойства, заключенного в двойные кавычки: строка 1 столбец 2 (char 1) '(по крайней мере, с 1.9.4, который я использую), потому что он недействителен JSON. Правильной версией будет '--extra-vars = '{" test_list ": [1,2,3]}'' – iquito

+0

обновлено форматирование дополнительных кадров, спасибо! – jarv

Смежные вопросы