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 definir diferentes valores secuenciales para diferentes hosts en el mismo grupo en el playbook de Ansible?

¿Es posible definir un valor secuencial diferente para diferentes hosts en el mismo grupo?

Tengo un trabajo con múltiples tareas que se repiten para cada host en el grupo de hosts.

Por ejemplo, mi grupo de huéspedes contiene 3 huéspedes A, B, C y 5 tareas.

Las 5 tareas se ejecutarán 3 veces para cada host A, B, C.

Sin embargo, en una variable de las 5 tareas que tengo, quiero pasar un valor secuencial para cada anfitrión.

Entonces, la variable ‘sequential_var’ tendrá valor 1 en el host A, valor 2 en el host B y valor 3 en el host C.

He intentado

  • hosts: my_host
    serie: 1
    tareas:

    • nombre: tarea1
      set_fact:
      sequential_var: {{ item }}
      con_sequence: start=1 end=3

el valor terminó siendo 3 para todos los hosts cuando realmente quiero 1 para A, 2 para B y 3 para C.

¿Hay alguna forma de lograr lo que realmente quiero?

Tags:  

Answer

  1. Avatar for davy.ai

    Sí, es posible definir diferentes valores secuenciales para diferentes hosts en el mismo grupo utilizando la palabra clave “hostvars” y asignando el valor secuencial a una variable del host.

    Aquí hay un ejemplo de playbook:

     - hosts: my_host
       tasks:
         - name: establecer variable secuencial
           set_fact:
             sequential_var: "{{ hostvars[inventory_hostname]['seq_val'] }}"
           vars:
             seq_start: 1
             seq_end: 3
           run_once: true
           delegate_to: localhost
         - name: imprimir variable secuencial
           debug:
             var: sequential_var
    

    En este playbook, primero definimos una tarea llamada “establecer variable secuencial” que establece el valor de “sequential_var” al valor de la variable “seq_val” del host para el host actual. Utilizamos el parámetro “delegate_to” para ejecutar esta tarea solo en localhost, ya que solo necesitamos ejecutarla una vez.

    Antes de que se ejecute esta tarea, definimos dos variables: “seq_start” y “seq_end”, que establecen el rango de valores para la variable secuencial.

    Luego definimos una segunda tarea llamada “imprimir variable secuencial” que simplemente imprime el valor de “sequential_var” para cada host.

    Para establecer el valor secuencial para cada host, debemos definir la variable del host “seq_val” para cada host en nuestro inventario. Aquí está un ejemplo de archivo de inventario:

     [my_host]
     hostA seq_val=1
     hostB seq_val=2
     hostC seq_val=3
    

    En este archivo de inventario, definimos la variable del host “seq_val” para cada host, con el valor secuencial para ese host.

    Cuando ejecutamos el playbook, Ansible realizará un bucle sobre cada host en el grupo “my_host” y ejecutará la tarea “establecer variable secuencial”. Para cada host, establecerá el valor de “sequential_var” en el valor de la variable del host “seq_val” para ese host, que hemos definido en nuestro archivo de inventario.

    Cuando ejecutamos la tarea “imprimir variable secuencial”, Ansible imprimirá el valor de “sequential_var” para cada host, que debería ser el valor secuencial que hemos definido en nuestro archivo de inventario.

    Con este enfoque, podemos definir diferentes valores secuenciales para diferentes hosts en el mismo grupo, utilizando la palabra clave “hostvars” y variables de host en nuestro archivo de inventario.

Comments are closed.