Я настраиваю users
создание Linux внутри своей роли. Мне нужно , чтобы пользователи моей роли подгоняет home_directory
, group_name
, name
, password
.
Мне было интересно, есть ли более гибкий способ справиться со значениями по умолчанию.
Я знаю, что приведенный ниже код возможен:
- name: Create default
user:
name: "default_name"
when: my_variable is not defined
- name: Create custom
user:
name: "{{my_variable}}"
when: my_variable is defined
Но, как я уже упоминал, существует множество необязательных переменных, и это создает множество возможностей.
Есть ли что-то вроде приведенного выше кода?
user:
name: "default_name", "{{my_variable}}"
Код должен быть установлен, name="default_name"
если my_variable
не определен.
Я мог бы установить все переменные defaults/main.yml
и создать такого пользователя:
- name: Create user
user:
name: "{{my_variable}}"
Но эти переменные находятся внутри действительно большого хеша, и внутри него есть хеши, которые не могут быть значениями по умолчанию.
ansible
ansible-2.x
Бернардо Вейл
источник
источник
Ответы:
Вы можете использовать Jinja
default
:источник
default('/home/' {{ anothervar }})
, есть ли способ объединить эти значения?default_value
и он будет использовать переменную с именем default_value{{ dict.key | default(5) }}
. Еслиdict
не определено, произойдет сбой .[WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or {% %}.
Не полностью связано, но вы также можете проверить переменную
undefined
ANDempty
(напримерmy_variable:
). (ПРИМЕЧАНИЕ: работает только с доступной версией> 1.9, см .: ссылка )источник
Если кто-то ищет вариант, который обрабатывает вложенные переменные, в этом выпуске github есть несколько таких вариантов .
Короче говоря, вам нужно использовать фильтр «по умолчанию» для каждого уровня вложенных переменных. Для переменной «a.nested.var» это будет выглядеть так:
или вы можете установить значения по умолчанию для пустых dicts для каждого уровня vars, возможно, используя фильтр «комбинировать». Или используйте фильтр «json_query». Но вариант, который я выбрал, мне кажется более простым, если у вас только один уровень вложенности.
источник
Если у вас есть одна игра, которую вы хотите перебрать в цикле по элементам, определите этот список в group_vars / all или где-нибудь еще, что имеет смысл:
Тогда ваша задача может выглядеть так:
Передайте список переменных в виде массива JSON:
До этого вам также может понадобиться задача, которая проверяет, что каждый элемент в списке переменных также находится в all_items :
источник
Если вы используете поиск для установки чтения из среды по умолчанию, вы также установили для второго параметра по умолчанию значение true:
Вы также можете объединить несколько определений по умолчанию:
источник
Вопрос довольно старый, а как насчет:
Мне это кажется менее громоздким ...
источник
Если вы назначаете значение по умолчанию для логического факта, убедитесь, что внутри default () не используются кавычки.
Для других переменных использовался тот же метод, что и в подтвержденном ответе.
источник