Подтвердить что ты не робот

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

Мне нужно что-то вроде файла (файла инвентаризации):

[example]
127.0.0.1 timezone="Europe/Amsterdam" locales="en_US","nl_NL"

Однако, ansible не распознает "локали" как список.

4b9b3361

Ответ 1

Вы можете передать список или объект следующим образом:

[example]
127.0.0.1 timezone="Europe/Amsterdam" locales='["en_US", "nl_NL"]'

Ответ 2

С помощью сложных переменных лучше всего определить их в файле host_vars, а не в файле инвентаризации, поскольку файлы host_vars поддерживают синтаксис YAML.

Попробуйте создать файл host_vars/127.0.0.1 со следующим содержимым:

timezone: Europe/Amsterdam
locales:
    - en_US
    - nl_NL

Ответ 3

вы можете попробовать разделить

#inventory file
[example]
127.0.0.1 timezone="Europe/Amsterdam" locales="en_US","nl_NL"

#role file
---
- debug: msg="{{ item }}"
  with_items: locales.split(',')

Ответ 4

Ответ на Ryler хорош в этом конкретном случае, но я столкнулся с проблемами, используя другие варианты с модулем шаблона.

[example]
127.0.0.1 timezone="Europe/Amsterdam" locales='["en_US", "nl_NL"]'

Это его оригинальный пример и прекрасно работает.

Следующие шаблоны работают с шаблоном. В принципе, если это строка, вы должны помнить, что использовать внутренние двойные кавычки или всю структуру анализируется как одна строка. Если он только цифры или "Истина" или "Неверно" (не "да" ), тогда все в порядке. В этом варианте я не мог заставить его работать с шаблоном, если у него были внешние кавычки.

Я не делал исчерпывающей проверки того, какие внутренние варианты использования они делают, и не ломаются, кроме шаблона.

Я использую Ansible 2.2.1.

[example:vars]
# these work
myvar1=["foo", "bar"]
myvar2=[1,2]
myvar3=[True,False]

# These fail, they get interpreted as a single string.
myvar4=[yes, no]
myvar5=[foo,bar]
myvar6='["foo", "bar"]'

Ответ 5

Вы можете настроить фильтр, чтобы разделить строку на список

пример использования Github показывает, как создать настраиваемый фильтр.