Necesitamos tu ayuda para difundir nuestras reseñas acerca de las ciencias de la computación.
Solución:
Solución 1:
Desde Ansible v2.x puedes hacer esto:
# use case I: appending to LIST variable:
- name: my appender
set_fact:
my_list_var: 'my_list_myvar + new_items_list'
# use case II: appending to LIST variable one by one:
- name: my appender
set_fact:
my_list_var: 'my_list_var + [item]'
with_items: 'list'
# use case III: appending more keys DICT variable in a "batch":
- name: my appender
set_fact:
my_dict_var: 'my_dict_var'
# use case IV: appending keys DICT variable one by one from tuples
- name: setup list of tuples (for 2.4.x and up
set_fact:
lot: >
[('key1', 'value1',), ('key2', 'value2',), ..., ('keyN', 'valueN',)],
- name: my appender
set_fact:
my_dict_var: 'my_dict_var'
with_items: 'lot'
# use case V: appending keys DICT variable one by one from list of dicts (thanks to @ssc)
- name: add new key / value pairs to dict
set_fact:
my_dict_var: " combine(item.key: item.value) "
with_items:
- key: 'key01', value: 'value 01'
- key: 'key02', value: 'value 03'
- key: 'key03', value: 'value 04'
todo lo anterior está documentado en: http://docs.ansible.com/ansible/playbooks_filters.html
Solución 2:
Puede fusionar dos listas en una variable con +
. Di que tienes un group_vars
archivo con este contenido:
---
# group_vars/all
pgsql_extensions:
- ext1
- ext2
- ext3
Y se usa en una plantilla. pgsql.conf.j2
me gusta:
# ansible_managed
pgsql_extensions=% for item in pgsql_extensions % item , % endfor %
Luego puede agregar extensiones a los servidores de la base de datos de prueba de esta manera:
---
# group_vars/testing_db
append_exts:
- ext4
- ext5
pgsql_extensions: " pgsql_extensions + append_exts "
Cuando el rol se ejecuta en cualquiera de los servidores de prueba, se agregarán las extensiones adicionales.
No estoy seguro de que esto funcione también para los diccionarios, y también tenga cuidado con los espacios y con dejar una coma colgando al final de la línea.
Solución 3:
necesitas dividir el bucle en 2
--- - hosts: localhost tasks: - include_vars: stacks - set_facts: roles=stacks.Roles - include: addhost.yml with_items: "roles"
y addhost.yml
- set_facts: groupname=item - set_facts: ips=stacks[item] - local_action: add_host hostname=item groupname=groupname with_items: ips
Si te ha sido útil este artículo, te agradeceríamos que lo compartas con el resto desarrolladores así nos ayudas a dar difusión a nuestra información.