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.

Corchetes anidados de Ansible o comillas anidadas.

Usando Ansible 2.9, establezco una variable de la siguiente manera para almacenar parte de un nombre de grupo:

 - name: establecer grupo
   set_fact:
     ansible_group: aaaa

Luego, quiero usar esta variable en la siguiente cláusula de with_items:

 - name: obtener
   uri:
     url: "http://{{ item }}:5324/kjhfg"
   with_items: "{{ groups['thisgroup_{{ ansible_group }}'] }}"

Sin embargo, el uso de llaves anidadas me da el siguiente error:

¡FALLÓ! => {"msg": "'dict object' no tiene el atributo 'thisgroup_{{ ansible_group }}'"}

También intenté las siguientes variaciones de sintaxis:

with_items: "{{ groups['thisgroup_ansible_group'] }}"
with_items: "groups['thisgroup_{{ ansible_group }}']"
with_items: "{{ groups['thisgroup_hostvars['localhost']['ansible_group']'] }}"
with_items: "{{ groups['thisgroup_hostvars[''localhost''][''ansible_group'']'] }}"
with_items: "{{ groups['thisgroup_hostvars[`localhost`][`ansible_group`]'] }}"

y probablemente otras cien variaciones, todas las cuales produjeron varios errores.

¿Alguien puede ayudarme a descubrir la sintaxis correcta?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para utilizar una variable dentro de una cadena en Ansible, puedes usar el operador de concatenación ~. En este caso, puedes intentar la siguiente sintaxis:

    - name: obtener
      uri:
        url: "http://{{ item }}:5324/kjhfg"
      with_items: "{{ groups['thisgroup_' ~ ansible_group] }}"
    

    Esto concatenará la cadena 'thisgroup_' con el valor de la variable ansible_group y utilizará la cadena resultante como clave para recuperar el grupo del diccionario groups.

    Usar 'thisgroup_ansible_group' como clave no funcionaría porque buscaría un grupo con ese nombre literal, mientras que tú quieres usar el valor de la variable. Del mismo modo, no es necesario utilizar llaves dentro de llaves ya que ya te encuentras dentro del contexto de la plantilla Jinja2.

Comments are closed.