Estoy usando el módulo ec2 con ansible-playbook
quiero establecer una variable para el contenido de un archivo. Así es como lo estoy haciendo actualmente.
- Var con el nombre de archivo
- tarea de shell al
cat
archivo - utilice el resultado del
cat
para pasar al módulo ec2.
Contenido de ejemplo de mi libro de jugadas.
vars:
amazon_linux_ami: "ami-fb8e9292"
user_data_file: "base-ami-userdata.sh"
tasks:
- name: user_data_contents
shell: cat {{ user_data_file }}
register: user_data_action
- name: launch ec2-instance
local_action:
...
user_data: "{{ user_data_action.stdout }}"
Supongo que hay una manera mucho más fácil de hacer esto, pero no pude encontrarla mientras buscaba documentos de Ansible.
ansible
ansible-playbook
TesterJeff
fuente
fuente
Respuestas:
Puede usar búsquedas en Ansible para obtener el contenido de un archivo, por ejemplo
Advertencia: esta búsqueda funcionará con archivos locales, no con archivos remotos.
Aquí hay un ejemplo completo de los documentos :
fuente
cat
comando en el ejemplo de @ TesterJeff se ejecuta en la máquina remota.Puede usar el módulo slurp para buscar un archivo del host remoto: (Gracias a @mlissner por sugerirlo)
fuente
Puede utilizar el módulo de búsqueda para copiar archivos de hosts remotos a local, y el módulo de búsqueda para leer el contenido de los archivos recuperados.
fuente
la búsqueda solo funciona en localhost. Si desea recuperar las variables variables de un archivo que hizo uso de forma remota include_vars:
{{ varfile }}
. El contenido de{{ varfile }}
debería ser un diccionario del formulario{"key":"value"}
, encontrará que ansible le da problemas si incluye un espacio después de los dos puntos.fuente
include_vars
funciona localmente en la máquina de control, no con archivos en el objetivo.