Ansible/jinja, добавление значений ключей из одного списка слов в другой список слов, если одно значение ключа совпадаетLinux

Ответить Пред. темаСлед. тема
Anonymous
 Ansible/jinja, добавление значений ключей из одного списка слов в другой список слов, если одно значение ключа совпадает

Сообщение Anonymous »

Я пытаюсь получить значения ключей из одного списка диктовок и вставить их в словари в другом списке диктовок, если один из ключей соответствует, Джиндже это не нравится.
используя ansible -core 2.15.11 с коллекциями Community.general и posix на Rhel 7 с использованием Python 3.9.19
dictliet 1
"vcenterinfo": [
{
"AZ": "a",
"POD": "11",
"VCENTERNAME": "XGM1AQV11"
},
{
"AZ": "b",
"POD": "09",
"VCENTERNAME": "XGM1AQV09"
}
]

Список слов 2:
"provdata": [
{
"CLUSTER": "XGM1AQV11-C4-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
},
{
"CLUSTER": "XGM1AQV11-C5-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV09"
},
{
"CLUSTER": "XGM1AQV11-C6-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
}
]


Будем благодарны за любую помощь.
Желаемые результаты:

"provdata": [
{
"CLUSTER": "XGM1AQV11-C4-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
"AZ": "a",
"POD": "11"
},
{
"CLUSTER": "XGM1AQV11-C5-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV09",
"AZ": "b",
"POD": "09"
},
{
"CLUSTER": "XGM1AQV11-C6-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
"AZ": "a",
"POD": "11"
}
]


Я попробовал это первым, но возникли ошибки
provdata: "{{ provdata + [{ item | combine({'AZ':, vcenterinfo | selectattr('VCENTERNAME', 'equalto', 'item.VCENTER') | map(attribute='AZ') | list}) }] }}"

fatal: [localhost]: FAILED! => {"msg": "template error while templating string: unexpected ','. String: {{ provdata + [{ item | combine({'AZ':, vcenterinfo | selectattr('VCENTERNAME', 'equalto', 'item.VCENTER') | map(attribute='AZ') | list}) }] }}. unexpected ','"}

Затем я попробовал это, но значения AZ пусты и выглядят как список
- name: Create a new list
vars:
azdata: "{{ item | combine({AZ: vcenterinfo | selectattr(VCENTERNAME, equalto, item.VCENTERNAME) | map(attribute=AZ) }) }}"
set_fact:
list4: "{{ list4 | default([]) + [azdata] }}"
loop: "{{ provdata }}"

"list4": [
{
"AZ": [],
"CLUSTER": "XGM1AQV11-C4-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
},
{
"AZ": [],
"CLUSTER": "XGM1AQV11-C5-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV09"
},
{
"AZ": [],
"CLUSTER": "XGM1AQV11-C6-NTNX",
"DEDICATED": "false",
"EnvironMent": "test",
"TIER": "silver",
"VCENTERNAME": "XGM1AQV11"
}
]



Подробнее здесь: https://stackoverflow.com/questions/785 ... ct-list-if
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»