vars tower commands ansible ansible-playbook

tower - ¿Cómo puedo escribir variables dentro del archivo de tareas en ansible



execute ansible yaml (4)

Debes citar la variable cuando está en libros de jugadas

shell: wget "{{url}}"

De lo contrario, Ansible piensa que estás declarando un diccionario. Más detalles aquí, en "Gotchas": https://docs.ansible.com/ansible/YAMLSyntax.html

https://docs.ansible.com/ansible/playbooks_variables.html#hey-wait-a-yaml-gotcha

Tengo este play.yml

--- - hosts: 127.0.0.1 connection: local sudo: false tasks: - include: apache.yml

Mi Apache se ve así:

vars: url: czxcxz - name: Download apache shell: wget {{url}}

Esto me está dando error.

Si vars entonces funciona. Pero quiero incluir los vars dentro de las tareas para poder mantener separados diferentes vars para diferentes tareas.


Las definiciones de variables están destinadas a ser utilizadas en tareas. Pero si desea incluirlos en tareas, probablemente use la directiva de register . Me gusta esto:

- name: Define variable in task. shell: echo "http://www.my.url.com" register: url - name: Download apache shell: wget {{ item }} with_items: url.stdout

También puede ver los roles como una forma de separar las tareas dependiendo de los roles de los diferentes roles . De esta forma puede tener variables separadas para cada uno de sus roles. Por ejemplo, puede tener una variable url para apache1 y una variable url separada para el rol apache2 .


Siempre que tenga un módulo seguido de una variable en la misma línea en ansible, el analizador tratará la variable de referencia como el comienzo de un diccionario en línea. Por ejemplo:

- name: some example command: {{ myapp }} -a foo

El valor predeterminado aquí es analizar la primera parte de {{ myapp }} -a foo como un diccionario en lugar de una cadena y obtendrá un error.

Entonces debes citar el argumento como sigue:

- name: some example command: "{{ myapp }} -a foo"


NOTA: El uso de set_fact como se describe a continuación establece un hecho / variable en los servidores remotos con los que se ejecuta la tarea. Este hecho / variable persistirá en las tareas posteriores durante toda la duración de su libro de jugadas.

Además, estos hechos son inmutables (durante la duración del libro de jugadas) y no se pueden cambiar una vez configurados.

RESPUESTA ORIGINAL

Use set_fact antes de su tarea para establecer hechos que parecen intercambiables con variables:

- name: Set Apache URL set_fact: apache_url: ''http://example.com/apache'' - name: Download Apache shell: wget {{ apache_url }}

Ver http://docs.ansible.com/set_fact_module.html para la palabra oficial.