list - playbook - ansible template
¿Cómo se especifica un valor de lista como variable en el archivo de inventario ansible? (5)
Con variables complejas, es mejor definirlas en un archivo host_vars en lugar de en el archivo de inventario, ya que los archivos host_vars admiten la sintaxis YAML.
Intente crear un archivo host_vars/127.0.0.1
con el siguiente contenido:
timezone: Europe/Amsterdam
locales:
- en_US
- nl_NL
Necesito algo como (archivo de inventario ansible):
[example]
127.0.0.1 timezone="Europe/Amsterdam" locales="en_US","nl_NL"
Sin embargo, ansible no reconoce ''locales'' como una lista.
La respuesta de Ryler es buena en este caso específico, pero tuve problemas al usar otras variaciones con el módulo de la plantilla.
[example]
127.0.0.1 timezone="Europe/Amsterdam" locales=''["en_US", "nl_NL"]''
Es su ejemplo original y funciona bien.
Las siguientes variaciones funcionan con la plantilla. Básicamente, si se trata de una cadena, debe recordar utilizar las comillas dobles internas o toda la estructura se analiza como una sola cadena. Si solo son números o "Verdadero" o "Falso" (no "sí"), entonces estás bien. En esta variación, no podría hacer que funcione con la plantilla si tuviera comillas externas.
No he realizado una verificación exhaustiva de los casos de uso interno que rompen y no rompen más que el módulo de plantilla.
Estoy usando 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"]''
Puede pasar una lista u objeto como este:
[example]
127.0.0.1 timezone="Europe/Amsterdam" locales=''["en_US", "nl_NL"]''
Puede personalizar un filtro, dividir una cadena en una lista
El ejemplo de Github ansible muestra cómo crear un filtro personalizado.
puedes intentar dividir
#inventory file
[example]
127.0.0.1 timezone="Europe/Amsterdam" locales="en_US","nl_NL"
#role file
---
- debug: msg="{{ item }}"
with_items: locales.split('','')