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.