ansible: dict hozzadása dict.value-hoz.

Sziasztok

adott egy ansible-playbook

benne a következő deklarációval:

vars:
   gyumolcsok:
      alma:
        szin: piros
        forma: gomb
      korte:
         szin: sargas
         forma: korte 
      szilva:
         szin: lila
         forma: tojasdad

   kosar:
     alma:
     korte:

kell egy eljaras aminek a vegen a kosar tartalma ez lesz:

kosar:
  alma:
    szin: piros
    forma: gomb
  korte:
    szin: saragas
    forma: korte

vagyis egyszeruen foglalmazva egy nagy adatbazisbol ki kell masolnom egy dict-et (gyumolcsok.alma)  es a kosar.alma.value  -t erre (gyumolcsok.alma) modositani.

Hozzászólások

Igy?

---
- name: Gyumolcsok
  hosts: localhost
  gather_facts: false
  vars:
    gyumolcsok:
      alma:
        szin: piros
        forma: gomb
      korte:
        szin: sargas
        forma: korte
      szilva:
        szin: lila
        forma: tojasdad
  tasks:
    - set_fact:
        kosar: "{{ kosar|default({}) | combine( { item.key: item.value }  )}}"
      loop: "{{ gyumolcsok|dict2items }}"

    - debug:
        var: kosar

Szia, sajnos itt nem az elvart eredmenyt kapom:

$ ansible-playbook kosar.yml

PLAY [Gyumolcsok] ********************************************************************************************************************************************************
 [started TASK: set_fact on localhost]

TASK [set_fact] **********************************************************************************************************************************************************
ok: [localhost] => (item={'key': 'alma', 'value': {'szin': 'piros', 'forma': 'gomb'}})
ok: [localhost] => (item={'key': 'korte', 'value': {'szin': 'sargas', 'forma': 'korte'}})
ok: [localhost] => (item={'key': 'szilva', 'value': {'szin': 'lila', 'forma': 'tojasdad'}})
 [started TASK: debug on localhost]

TASK [debug] *************************************************************************************************************************************************************
ok: [localhost] => {
    "kosar": {
        "alma": {
            "forma": "gomb",
            "szin": "piros"
        },
        "korte": {
            "forma": "korte",
            "szin": "sargas"
        },
        "szilva": {
            "forma": "tojasdad",
            "szin": "lila"
        }
    }
}

 

pont az lenne a lényeg, hogy a kosárba definiált tartalom megtöltődjön value -val, viszont ne kerüljön bele új tétel (key vagyis újabb gyümölcs)

A combine kell neked, pl:

- name: Kosar
  set_fact:
    "kosar": "{{ kosar | combine({ item.key: item.value }, recursive=True) }}"
  with_dict: "{{ gyumolcsok }}"
  when: kosar[item.key] is defined

Nem értem a példát, a gyümölcsöket lecserélted kosárra? Tudsz inkább gyakorlati példát hozni? Tudom, megoldódott, de érdekelne.