No dejes de compartir nuestra página y códigos con otro, apóyanos para ampliar esta comunidad.
Solución:
- set_fact:
dict:
a: 1
b: 2
c: 3
dict2:
- set_fact:
dict2: "combine(item.key: item.value)"
when: "item.key not in ['a']"
with_dict: "dict"
- debug: var=dict2
o cree un complemento de filtro y utilícelo.
Aquí hay un enfoque inspirado en un artículo de John Mazzitelli que se puede usar en línea sin necesidad de set_fact
tareas, etc:
Tarea:
tasks:
- debug: var=dict2
vars:
dict:
a: 1
b: 2
c: 3
# It is important that there be NO WHITESPACE outside of `% ... %` and ` ... `
# or else the var will be converted to a string. The copy() step optionally prevents
# modifying the original. If you don't care, then: "% set removed=dict.pop('a') %dict"
dict2: "% set copy=dict.copy() %% set removed=copy.pop('a') % copy "
Salidas:
TASK [debug] ***********
ok: [localhost] =>
"dict2":
"b": 2,
"c": 3
Si está interesado en el filtro (que, en mi opinión, es la forma más limpia de eliminar un elemento en dict), cree filter_plugins/dicts.py
en el directorio, en el que reside su libro de jugadas, y rellénelo con:
'''Custom ansible filters for dicts'''
import copy
class FilterModule(object):
def filters(self):
return
'del_by_list': self.del_by_list
def del_by_list(self, dict_to_reduce, list_of_keys):
'''Deletes items of dict by list of keys provided'''
dict_to_return = copy.deepcopy(dict_to_reduce)
for item in list_of_keys:
if item in dict_to_return:
del dict_to_return[item]
return dict_to_return
Y bueno para ir:
---
- hosts: hadoop
gather_facts: no
tasks:
- debug:
msg: " 123: 456, 789: 123 "
Esto producirá 789: 123
Tienes la posibilidad mostrar esta división si te valió la pena.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)