Estou personalizando a users
criação do Linux dentro da minha função. Eu preciso permitir que os usuários de meu papel personaliza home_directory
, group_name
, name
, password
.
Eu queria saber se existe uma maneira mais flexível de lidar com os valores padrão.
Eu sei que o código abaixo é possível:
- 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
Mas, como mencionei, há muitas variáveis opcionais e isso cria muitas possibilidades.
Existe algo como o código acima?
user:
name: "default_name", "{{my_variable}}"
O código deve ser definido name="default_name"
quando my_variable
não estiver definido.
Eu poderia definir todas as variáveis defaults/main.yml
e criar o usuário assim:
- name: Create user
user:
name: "{{my_variable}}"
Mas essas variáveis estão dentro de um hash muito grande e há alguns hashes dentro desse hash que não podem ser um padrão.
ansible
ansible-2.x
Bernardo Vale
fonte
fonte
Respostas:
Você pode usar o de Jinja
default
:fonte
default('/home/' {{ anothervar }})
, existe uma maneira de concatenar esses valores?default_value
e ele usaria uma variável chamada default_value{{ dict.key | default(5) }}
. Ele falhará sedict
for indefinido.[WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or {% %}.
Não totalmente relacionado, mas você também pode verificar as variáveis
undefined
ANDempty
(por exemplomy_variable:
). (NOTA: só funciona com a versão ansible> 1.9, ver: link )fonte
Se alguém estiver procurando por uma opção que lida com variáveis aninhadas, existem várias dessas opções neste problema do github .
Resumindo, você precisa usar o filtro "padrão" para cada nível de vars aninhados. Para uma variável "a.nested.var" seria assim:
ou você pode definir valores padrão de dicts vazios para cada nível de vars, talvez usando o filtro "combine". Ou use o filtro "json_query". Mas a opção que escolhi parece mais simples para mim se você tiver apenas um nível de aninhamento.
fonte
Se você tem uma única reprodução que deseja repetir sobre os itens, defina essa lista em group_vars / all ou em outro lugar que faça sentido:
Então, sua tarefa pode ser assim:
Passe em varlist como uma matriz JSON:
Antes disso, você também pode querer uma tarefa que verifique se cada item em varlist também está em all_items :
fonte
No caso de você usar lookup para definir a leitura padrão do ambiente, você também definiu o segundo parâmetro do padrão como verdadeiro:
Você também pode concatenar várias definições padrão:
fonte
A questão é bastante antiga, mas e quanto a:
Parece menos complicado para mim ...
fonte
Se você estiver atribuindo um valor padrão para o fato booleano, certifique-se de que nenhuma aspa seja usada dentro de default ().
Para outras variáveis, use o mesmo método dado na resposta verificada.
fonte