examples - comandos ansible
Ansible: Establecer variable para archivar contenido (4)
Estoy usando el módulo ec2 con ansible-playbook
. Quiero establecer una variable en el contenido de un archivo. Así es como lo estoy haciendo actualmente.
- Var con el nombre de archivo
- tarea de shell para
cat
el archivo - Usa el resultado del
cat
para pasar al módulo ec2.
Ejemplo de contenidos 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 forma mucho más fácil de hacer esto, pero no pude encontrarlo mientras busco documentos de Ansible.
Puede usar el módulo de recuperación para copiar archivos de hosts remotos a locales, y el lookups para leer el contenido de los archivos obtenidos.
Puede usar el módulo slurp: (Gracias a @mlissner por sugerirlo)
vars:
amazon_linux_ami: "ami-fb8e9292"
user_data_file: "base-ami-userdata.sh"
tasks:
- name: Load data
slurp:
src: "{{ user_data_file }}"
register: slurped_user_data
- name: Decode data and store as fact # You can skip this if you want to use the right hand side directly...
set_fact:
user_data: "{{ slurped_user_data.content | b64decode }}"
Puede utilizar las lookups en Ansible para obtener el contenido de un archivo, por ejemplo,
user_data: "{{ lookup(''file'', user_data_file) }}"
Aquí hay un ejemplo completo de la documentación :
- hosts: all
vars:
contents: "{{ lookup(''file'', ''/etc/foo.txt'') }}"
tasks:
- debug: msg="the value of foo.txt is {{ contents }}"
la búsqueda solo funciona en localhost. Si desea recuperar variables de un archivo de variables que hizo de forma remota, use include_vars: {{ varfile }}
. El contenido de {{ varfile }}
debe ser un diccionario de la forma {"key":"value"}
, encontrará que ansible le causa problemas si incluye un espacio después de los dos puntos.