tutorial examples ejemplos comandos ansible ansible-playbook

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.

  1. Var con el nombre de archivo
  2. tarea de shell para cat el archivo
  3. 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 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.