Saltar al contenido

Cómo eliminar un solo key de un diccionario Ansible?

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)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *