es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para establecer project_id con la salida del comando gcloud config get-value project y almacenarlo como un hecho en Ansible, puedes utilizar el módulo set_fact en tu playbook. Aquí tienes un ejemplo de cómo podrías modificar tu playbook:

    - hosts: all
      name: construir VM de renderizado
      gather_facts: true
      tasks:
        - name: obtener ID del proyecto
          command: gcloud config get-value project
          register: project_id_raw
    
        - name: establecer ID del proyecto como hecho
          set_fact:
            project_id: "{{ project_id_raw.stdout }}"
    
        - name: copiar YAML del proyecto
          copy:
            src: ./project_{{ project_id }}.yaml
            dest: /app/project.yaml
            owner: root
    

    En este playbook modificado, primero utilizamos el módulo command para ejecutar el comando gcloud config get-value project en el host remoto y registrar la salida como una variable project_id_raw. Luego establecemos un nuevo hecho llamado project_id utilizando el módulo set_fact y el valor de project_id_raw.stdout. Por último, utilizamos el módulo copy con project_id para copiar el archivo YAML correspondiente al host remoto.

    Al establecer gather_facts en true, 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.

Comments are closed.