¿Cómo puedo pasar variable a libro de jugadas ansible en la línea de comando?


Respuestas:


307

Al leer los documentos, encuentro la sección Pasando variables en la línea de comandos , que dan este ejemplo:

ansible-playbook release.yml --extra-vars "version=1.23.45 other_variable=foo"

Otros ejemplos demuestran cómo cargar desde una cadena JSON (≥ 1.2) o un archivo (≥ 1.3)


33
Tenga en cuenta también que las variables definidas con --extra-varsanularán las variables definidas dentro del libro de jugadas.
suma de comprobación

55
También tenga en cuenta (de los documentos): los valores pasados ​​al usar la key=valuesintaxis se interpretan como cadenas . Use el formato JSON si necesita pasar algo que no debería ser una cadena (booleanos, enteros, flotantes, listas, etc.). Por ejemplo:--extra-vars '{"i_wasted_30_mins_debugging_a_boolean_string":true}'
smilin_stan

159

Otras respuestas indican cómo pasar las variables de la línea de comandos pero no cómo acceder a ellas, así que si lo hace:

--extra-vars "version=1.23.45 other_variable=foo"

En su archivo yml, los asigna a variables ansibles de ámbito haciendo algo como:

vars:
    my_version: "{{ version }}"
    my_other_variable: {{ other_variable }}

Una alternativa al uso de argumentos de línea de comando es utilizar variables ambientales que ya están definidas dentro de su sesión, puede hacer referencia a estas dentro de sus archivos yml ansibles de esta manera:

vars:
    my_version: "{{ lookup('env', 'version') }}"
    my_other_variable: {{ lookup('env', 'other_variable') }}

29
¿¿No estoy seguro de lo que está hablando?? Mi respuesta amplía las respuestas previamente aceptadas al referirme al indicador de línea de comando --extra-vars Y cómo hacer referencia a ellas dentro de su configuración yaml. Luego ofrezco una forma alternativa de hacerlo también.
GreensterRox

1
La pregunta aquí es específicamente pasar variable a través de la línea de comando . Eso es exactamente por qué sería mejor, ya que es una pregunta / respuesta propia y un enlace relacionado. Puede y el enlace relacionado como un comentario a la pregunta.
Édouard Lopez

43
La respuesta ampliada me ayudó. Seguramente saber cómo hacer referencia a las variables pasadas en parte de saber pasar parámetros. De lo contrario, no los pasará sino que simplemente declarará que desea pasar la variable. Para pasar un objeto requiere un donante y un receptor. Para pasar una variable se requiere una declaración de parámetro y un uso del parámetro.
conteh

lookup('env', SOMETHING)se corresponde con el factor 12.
zx1986

1
Recuerde cambiar el nombre de la variable: version: {{ version }}está mal, como definir versionpor sí mismo.
Minh Nghĩa

41
ansible-playbook release.yml -e "version=1.23.45 other_variable=foo"

25
La -ebandera es la forma abreviada de--extra-vars
Édouard Lopez

44
¿Puedo pasar un archivo variable?
OpsEco

13
@AniruddhaJawanjal sí, como--extra-vars "@some_file.json"
AlanSE

1
@OpsEco @AlanSE tenga en cuenta que si está pasando variables de un archivo, necesita un segundo --extra-varsindicador para pasar variables que no están en el archivo. Por ejemplo--extra-vars "@some_file.json" --extra-vars "other_variable=foo"
bonh el

Gracias @bonh que era lo que estaba buscando
fan


31

Por alguna razón, ninguna de las respuestas anteriores funcionó para mí. Como necesito pasar varios vars adicionales a mi libro de jugadas en Ansbile 2.2.0, así es como lo hice funcionar (tenga en cuenta la opción -e antes de cada var):

ansible-playbook site.yaml -i hostinv -e firstvar=false -e second_var=value2

44
-ees la forma abreviada de--extra-vars
Édouard Lopez

@LXCdev KohaLappi +1 por demostrar que puede especificar vars adicionales en su propia -ebandera
ctlockey

También puede definir múltiples variables usando una sola bandera:-e "firstvar=false second_var=value2"
Nils Breunese

El mismo problema. Varios vars con una sola bandera no funcionarían. ¿Me pregunto porque?
Bret

14
ansible-playbook test.yml --extra-vars "arg1=${var1} arg2=${var2}"

En el archivo yml puedes usarlos así

---
arg1: "{{ var1 }}"
arg2: "{{ var2 }}"

Además, --extra-varsy -eson lo mismo, puedes usar uno de ellos.


4
 s3_sync:
      bucket: ansible-harshika
      file_root: "{{ pathoftsfiles  }}"
      validate_certs: false 
      mode: push
      key_prefix: "{{ folder }}"

aquí se usan las variables denominadas 'pathoftsfiles' y 'carpeta'. Ahora el valor de esta variable puede ser dado por el siguiente comando

sudo ansible-playbook multiadd.yml --extra-vars "pathoftsfiles=/opt/lampp/htdocs/video/uploads/tsfiles/$2 folder=nitesh"

Nota: No use las comillas invertidas al pasar los valores a la variable en el comando de shell


2
ansible-playbook release.yml --extra-vars "username=hello password=bye"

#you can now use the above command anywhere in the playbook as an example below:
tasks:
- name: Create a new user in Linux
shell: useradd -m -p {{username}} {{password}}"

2

Esto también funcionó para mí si desea utilizar variables de entorno de shell:

ansible-playbook -i "localhost," ldap.yaml --extra-vars="LDAP_HOST={{ lookup('env', 'LDAP_HOST') }} clustername=mycluster env=dev LDAP_USERNAME={{ lookup('env', 'LDAP_USERNAME') }} LDAP_PASSWORD={{ lookup('env', 'LDAP_PASSWORD') }}"


1

ansible-playbok -i <inventory> <playbook-name> -e "proc_name=sshd"

Puede usar el comando anterior en los siguientes libros de jugadas.

---
- name: Service Status
gather_facts: False
tasks:
- name: Check Service Status (Linux)
shell: pgrep "{{ proc_name }}"
register: service_status
ignore_errors: yes
debug: var=service_status.rc`
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.