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?
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:Esto concatenará la cadena
'thisgroup_'
con el valor de la variableansible_group
y utilizará la cadena resultante como clave para recuperar el grupo del diccionariogroups
.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.