Estoy personalizando la users
creación de Linux dentro de mi función. Necesito para que los usuarios de mi papel modifique para requisitos particulares home_directory
, group_name
, name
, password
.
Me preguntaba si hay una forma más flexible de hacer frente a los valores predeterminados.
Sé que el siguiente código es posible:
- 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
Pero como mencioné, hay muchas variables opcionales y esto crea muchas posibilidades.
¿Hay algo como el código anterior?
user:
name: "default_name", "{{my_variable}}"
El código debe establecerse name="default_name"
cuando my_variable
no está definido.
Podría configurar todas las variables defaults/main.yml
y crear el usuario así:
- name: Create user
user:
name: "{{my_variable}}"
Pero esas variables están dentro de un hash realmente grande y hay algunos hash dentro de ese hash que no pueden ser predeterminados.
ansible
ansible-2.x
Bernardo Vale
fuente
fuente
Respuestas:
Puedes usar Jinja's
default
:fuente
default('/home/' {{ anothervar }})
, ¿hay alguna forma de concatenar esos valores?default_value
y usaría una variable llamada{{ dict.key | default(5) }}
. Fallará si nodict
está definido.[WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or {% %}.
No está totalmente relacionado, pero también puede verificar la variable
undefined
ANDempty
(por ejemplomy_variable:
). (NOTA: solo funciona con la versión ansible> 1.9, ver: enlace )fuente
Si alguien está buscando una opción que maneje variables anidadas, existen varias de estas opciones en este problema de github .
En resumen, debe utilizar el filtro "predeterminado" para cada nivel de vars anidadas. Para una variable "a.nested.var" se vería así:
o puede establecer valores predeterminados de dictados vacíos para cada nivel de vars, tal vez usando el filtro "combinar". O use el filtro "json_query". Pero la opción que elegí me parece más simple si solo tiene un nivel de anidación.
fuente
Si tiene una sola jugada en la que desea recorrer los elementos, defina esa lista en group_vars / all o en otro lugar que tenga sentido:
Entonces su tarea puede verse así:
Pase varlist como una matriz JSON:
Antes de eso, es posible que también desee una tarea que verifique que cada elemento en varlist también esté en all_items :
fuente
En caso de que utilice la búsqueda para establecer la lectura predeterminada del entorno, también ha establecido el segundo parámetro predeterminado en verdadero:
También puede concatenar varias definiciones predeterminadas:
fuente
La pregunta es bastante antigua, pero ¿qué pasa con:
Me parece menos engorroso ...
fuente
Si está asignando un valor predeterminado para un hecho booleano, asegúrese de que no se utilicen comillas dentro de default ().
Para otras variables se utilizó el mismo método dado en respuesta verificada.
fuente