2016-12-26 3 views
0

У меня есть список элементов из IP-адресов:Run анзибль с помощью командной строки, используя with_items

server_hosts: 
     - { host: '1.1.1.1' } 
     - { host: '10.10.10.10' } 

Я хочу передать только один из элементов в командной строке:

ansible-playbook base.yml -i ${host}, --extra-vars "env_name=lab server_hosts={host:'${1.1.1.1}'} " 

, но это дает ошибку из:

{ «не удалось»: правда, «сообщение»:. «поле„арг“имеет недопустимое значение, которое, как представляется, включает в себя переменное, неопределенной ошибке:„юникод“OBJ ect не имеет атрибута «host» \ n \ nПри ошибке

Любой совет, как передать определенный элемент из списка в командной строке?

+0

Это не помешает, если вы также указали, какую оболочку вы использовали, потому что bash наткнется на эту команду. Однако '$ {host}' выглядит как bash. – techraf

+0

команда здесь редактируется, но она проходит и запускает предварительные задачи (из jenkins), но сбой в задаче с использованием элементов списка. – A1001

+0

Повторяю: bash вернет «неправильную подстановку» при попытке выполнить ее. Измените свой вопрос, чтобы включить проверяемый пример. Прямо сейчас это чистая фабрика, и вы только тратите время на чтение. – techraf

ответ

0

Пожалуйста, обратите внимание на примечание стороны here:

Примечание: значения, передаваемые при помощи синтаксиса ключ = значение интерпретируются как строки. Используйте формат JSON, если вам нужно передать все, что не должно быть строкой (Booleans, целые числа, поплавки, списки и т. Д.).

Таким образом, вы должны использовать:

--extra-vars '{"env_name":"lab","server_hosts":{"host":"1.1.1.1"}}' 

В противном случае вы в конечном итоге с server_hosts как строки, а не объект.

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