Cómo ejecutar un comando en localhost para definir una variable para un libro de jugadas de Ansible?
Soy nuevo en Ansible y estoy tratando de entender las cosas. Tengo un playbook simple para ejecutar en un host remoto. Para simplificarlo drásticamente:
- hosts: all
name: build render VM
tasks:
- copy:
src: ./project_{{ project_id }}.yaml
dest: /app/project.yaml
owner: root
Me gustaría que project_id
se establezca como el resultado de este comando, ejecutado en localhost: gcloud config get-value project
. Idealmente, me gustaría que se almacenara en una variable o hecho que se pueda utilizar en todo el playbook. Sé que puedo pasar project_id=$(...)
en la línea de comandos de ansible, pero preferiría que se configurara automáticamente en el playbook.
davy.ai
Para establecer
project_id
con la salida del comandogcloud config get-value project
y almacenarlo como un hecho en Ansible, puedes utilizar el móduloset_fact
en tu playbook. Aquí tienes un ejemplo de cómo podrías modificar tu playbook:En este playbook modificado, primero utilizamos el módulo
command
para ejecutar el comandogcloud config get-value project
en el host remoto y registrar la salida como una variableproject_id_raw
. Luego establecemos un nuevo hecho llamadoproject_id
utilizando el móduloset_fact
y el valor deproject_id_raw.stdout
. Por último, utilizamos el módulocopy
conproject_id
para copiar el archivo YAML correspondiente al host remoto.Al establecer
gather_facts
entrue
, Ansible también recopilará información sobre el host remoto, lo cual podría ser útil en otras tareas más adelante en el playbook.