Как передать массив в ansible extra-vars из скрипта bash - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь написать bash-скрипт, который будет вызывать ANSIBLE playbook с дополнительными переменными. Некоторые из этих переменных представляют собой массив строк с пробелами. Поэтому я очень запутался в том, как правильно их пройти. Я уже перепробовал много комбинаций цитат и слэшей. Поэтому я пришел сюда за помощью.

ansible-playbook -i inventory.yml playbook.yml --extra-vars \
'username="${login}" fullname="${username}" password="${password}" groups="['Users','Remote Desktop Users']"';

Ответы [ 2 ]

2 голосов
/ 31 октября 2019

Это то, что вам нужно знать о переменных и кавычках bash:

В следующих примерах переменная ${text} имеет значение Hello:

  1. Переменныерасширен внутри двойных кавычек. например, "${text}" => Hello
  2. Переменные не раскрыты в одинарных кавычках. например, '${text}' => ${text}
  3. Одинарные кавычки не имеют специального значения внутри двойных кавычек и наоборот. например, "'${text}'" => 'Hello' и '"${text}"' => "${text}"
  4. Если вам необходимо поместить двойную кавычку в строку с двойными кавычками или одинарную кавычку в строку с одинарными кавычками, тогда оно должно быть сброшено. например, "\"${text}\"" => "Hello" и '\'${text}\'' => '${text}'

С учетом всего сказанного, в вашем случае вы хотите, чтобы переменные были расширены, поэтому вы должны заключить всеЗначение --extra-vars в двойных кавычках. Согласно веб-сайту Ansible, значение каждой из этих дополнительных переменных не нужно указывать в кавычках, если только они не содержат пробелов. Чтобы быть в безопасности, вы можете заключить переменные в кавычки, поскольку вы не сможете контролировать их значения.

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

ansible-playbook -i inventory.yml playbook.yml --extra-vars \
  "username='${login}' \
   fullname='${username}' \
   password='${password}' \
   groups=['Users','Remote Desktop Users'] \
  "
0 голосов
/ 01 ноября 2019

Кажется, что имя переменной 'groups' зарезервировано ansible. Я изменил имя, и скрипт начинает работать. Ответ Эндрю Викерса также правильный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...