Hi,
Is there any version dependance to use community.general.dict? my
current Ansible version 2.9.13.
When i use
- name: convert list of lists to list of dicts
set_fact:
json_list: "{{ aggregates | map('zip',['cluster','aggregate']) |
map('map','reverse') | map('community.general.dict') }}"
output:
ok: [localhost] => {
"json_list": "<generator object sync_do_map at 0x7f47f2a99fc0>"
When i use:
- name: convert list of lists to list of dicts
set_fact:
json_list: "{{ aggregates | map('zip',['cluster','aggregate']) |
map('map','reverse') | map('community.general.dict')|list }}"
Output:
An exception occurred during task execution. To see the full traceback, use
-vvv. The error was: jinja2.exceptions.TemplateRuntimeError: No filter
named 'community.general.dict'.
fatal: [localhost]: FAILED! => {
"changed": false
}
On Mon, Mar 6, 2023 at 3:58 PM 'Rowe, Walter P. (Fed)' via Ansible Project <
[email protected]> wrote:
> No problem.
>
> - name: convert list of lists to list of dicts
>
> set_fact:
>
> json_list: "{{ aggregates2 | map('zip',['cluster','aggregate']) |
> map('map','reverse') | map('community.general.dict') }}"
>
> produces
>
> "json_list": [
>
> {
>
> "aggregate": "aggr1",
>
> "cluster": "Cluster 1"
>
> },
>
> {
>
> "aggregate": "aggr2",
>
> "cluster": "Cluster 1"
>
> },
>
> {
>
> "aggregate": "aggr4",
>
> "cluster": "Cluster 1"
>
> },
>
> {
>
> "aggregate": "aggr1",
>
> "cluster": "Cluster 2"
>
> },
>
> {
>
> "aggregate": "aggr2",
>
> "cluster": "Cluster 3"
>
> }
>
> ]
>
>
> Walter
> --
> Walter Rowe, Division Chief
> Infrastructure Services, OISM
> Mobile: 202.355.4123
>
> On Mar 6, 2023, at 10:36 AM, Aharonu <[email protected]> wrote:
>
> Hi, All and Walter,
>
> Thank you for good suggestions.
>
> That's a really good way to deal with it but there is something I
> should mention here to request help.
>
> Actually below aggregates data coming from another set_task ( see below)
> which contains a list data.
>
> vars:
> aggregates: []
>
> aggregates data coming below set_fact.
>
> - set_fact:
> aggregates: "{{ aggregates|default([]) + ([item.item]|
> product(item | json_query(get_attrs)))| map('flatten')|list }}"
> vars:
> get_attrs: "ontap_info.storage_aggregates.records[*].[name]"
> loop: "{{ ontap.results }}"
> no_log: true
>
> *Looking for:*
> As above mentioned set_fact giving data into list into lists, Can we make
> aggregates
> *data into dict structure* as mentioned below from same set_fact ?
>
> aggregates:
> - { cluster: "Cluster 1", aggregate: "aggr1" }
> - { cluster: "Cluster 1", aggregate: "aggr2" }
> - { cluster: "Cluster 1", aggregate: "aggr4" }
> - { cluster: "Cluster 2", aggregate: "aggr1" }
> - { cluster: "Cluster 3", aggregate: "aggr2" }
>
> Thank you for your time and helping out.
>
>
> On Mon, Mar 6, 2023 at 2:14 PM 'Rowe, Walter P. (Fed)' via Ansible Project
> <[email protected]> wrote:
>
>> If you are defining aggregates (vs getting from some other task register
>> var), there is another way you could construct your aggregates var.
>>
>> aggregates:
>> - { cluster: "Cluster 1", aggregate: "aggr1" }
>> - { cluster: "Cluster 1", aggregate: "aggr2" }
>> - { cluster: "Cluster 1", aggregate: "aggr4" }
>> - { cluster: "Cluster 2", aggregate: "aggr1" }
>> - { cluster: "Cluster 3", aggregate: "aggr2" }
>>
>>
>> This syntax makes it really easy to add more items and maintain proper
>> syntax.
>>
>> Your item.0 changes to item.cluster, and your item.1 change to
>> item.aggregate.
>>
>> - name: Get info
>> na_ontap_rest_info:
>> <<: *login
>> gather_subset:
>> - storage/volumes
>> parameters:
>> aggregates.name
>> <https://gcc02.safelinks.protection.outlook.com/?url=http%3A%2F%2Faggregates.name%2F&data=05%7C01%7Cwalter.rowe%40nist.gov%7C8219d6865ecc47ec14df08db1e58dc7d%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137139233390214%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=meZz6WU3jIN984cU3FZgdylLUFrJkd5fnpVihQVedNI%3D&reserved=0>:
>> "{{ item.cluster }}"
>> hostname: "{{ item.aggregate }}"
>> use_python_keys: true
>> register: vol_data
>> loop: "{{ aggregates }}"
>> no_log: false
>>
>> - debug: var=vol_data
>>
>> This might be more description and easier for someone else to make the
>> connection between your aggregates var and your loop references. The
>> aggregates var is still a list. It is a list of JSON dictionary items.
>>
>> ---
>> - name: test loop with JSON dict list
>> hosts: all
>> become: false
>> gather_facts: false
>> vars:
>> aggregates:
>> - { cluster: "Cluster 1", aggregate: "aggr1" }
>> - { cluster: "Cluster 1", aggregate: "aggr2" }
>> - { cluster: "Cluster 1", aggregate: "aggr4" }
>> - { cluster: "Cluster 2", aggregate: "aggr1" }
>> - { cluster: "Cluster 3", aggregate: "aggr2" }
>>
>> tasks:
>> - name: show reference
>> debug: msg="cluster {{ item.cluster }}, hostname {{ item.aggregate
>> }}"
>> loop: "{{ aggregates }}"
>>
>>
>> % ansible-playbook -i localhost, netapp.yml
>>
>> PLAY [test loop with JSON dict list]
>> ***********************************************************************************
>>
>> TASK [show reference]
>> **************************************************************************************************
>> ok: [localhost] => (item={'cluster': 'Cluster 1', 'aggregate': 'aggr1'})
>> => {
>> "msg": "cluster Cluster 1, hostname aggr1"
>> }
>> ok: [localhost] => (item={'cluster': 'Cluster 1', 'aggregate': 'aggr2'})
>> => {
>> "msg": "cluster Cluster 1, hostname aggr2"
>> }
>> ok: [localhost] => (item={'cluster': 'Cluster 1', 'aggregate': 'aggr4'})
>> => {
>> "msg": "cluster Cluster 1, hostname aggr4"
>> }
>> ok: [localhost] => (item={'cluster': 'Cluster 2', 'aggregate': 'aggr1'})
>> => {
>> "msg": "cluster Cluster 2, hostname aggr1"
>> }
>> ok: [localhost] => (item={'cluster': 'Cluster 3', 'aggregate': 'aggr2'})
>> => {
>> "msg": "cluster Cluster 3, hostname aggr2"
>> }
>>
>> PLAY RECAP
>> *************************************************************************************************************
>> localhost : ok=1 changed=0 unreachable=0
>> failed=0 skipped=0 rescued=0 ignored=0
>>
>> Just another idea ...
>>
>> Walter
>> --
>> Walter Rowe, Division Chief
>> Infrastructure Services, OISM
>> Mobile: 202.355.4123
>>
>>
>> On Mar 6, 2023, at 8:24 AM, Aharonu <[email protected]> wrote:
>>
>> Yes, I got it what I was looking for.
>>
>> Thank you very much for your help *Todd* and *Walter*.
>>
>>
>>
>> On Mon, 6 Mar 2023, 18:25 'Rowe, Walter P. (Fed)' via Ansible Project, <
>> [email protected]> wrote:
>>
>>> Your 'aggregates' is a list of lists. For each aggregate list item, you
>>> have a two-element list where element [0] is cluster name and element [1]
>>> is aggregate name.
>>>
>>> Loop through aggregates, and use item.0 for cluster and item.1 for
>>> hostname ?
>>>
>>> - name: Get info
>>> na_ontap_rest_info:
>>> <<: *login
>>> gather_subset:
>>> - storage/volumes
>>> parameters:
>>> aggregates.name
>>> <https://gcc02.safelinks.protection.outlook.com/?url=http%3A%2F%2Faggregates.name%2F&data=05%7C01%7Cwalter.rowe%40nist.gov%7C8219d6865ecc47ec14df08db1e58dc7d%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137139233390214%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=meZz6WU3jIN984cU3FZgdylLUFrJkd5fnpVihQVedNI%3D&reserved=0>:
>>> "{{ item.1 }}"
>>> hostname: "{{ item.0 }}"
>>> use_python_keys: true
>>> register: vol_data
>>> loop: "{{ aggregates }}"
>>> loop_control:
>>> label: "{{ ?? }}"
>>> no_log: false
>>> - debug: var=vol_data
>>>
>>> Walter
>>> --
>>> Walter Rowe, Division Chief
>>> Infrastructure Services, OISM
>>> Mobile: 202.355.4123
>>>
>>> On Mar 4, 2023, at 7:27 AM, Aharonu <[email protected]> wrote:
>>>
>>> Hi Team,
>>>
>>> Greetings for the day!
>>>
>>> I have a variables called 'aggregates' under *vars* which ontaints
>>> cluster1,cluster3,cluster2..etc and aggr1,aggr2,aggr3..etc list as
>>> mentioned below.
>>>
>>> {
>>> "aggregates": [
>>> [
>>> "Cluster1",
>>> "aggr1"
>>> ],
>>> [
>>> "Cluster1",
>>> "aggr2"
>>> ],
>>> [
>>> "Cluster1",
>>> "aggr4"
>>> ],
>>> [
>>> "Cluster2",
>>> "aggr1"
>>> ],
>>> [
>>> "Cluster3",
>>> "aggr2"
>>> ]
>>> ]
>>> }
>>>
>>> ********************************************************************
>>> Based on data from 'aggregates', Below playbook has 2 items to work on:
>>> aggregates.name
>>> <https://gcc02.safelinks.protection.outlook.com/?url=http%3A%2F%2Faggregates.name%2F&data=05%7C01%7Cwalter.rowe%40nist.gov%7C8219d6865ecc47ec14df08db1e58dc7d%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137139233546454%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=sr2q35NJHewYNYXu5%2Fdl0ICeYxqjAEKThjaTmKI1knw%3D&reserved=0>
>>> : here we need to use aggr1,aggr3,aggr2...from variable 'aggregates'
>>> hostname: here we need to use Cluster1,Cluster2,Cluster3...from
>>> variable 'aggregates'
>>>
>>> What looking for is:
>>> *it has to go through loop iteration until 'aggregates' list completed.*
>>> First loop iteration has to go for Cluster1, aggr1, Second loop iteration
>>> to go for Cluster1, aggr2 based on data from 'aggregates'.
>>>
>>> 1st loop iteration:
>>> aggregates.name
>>> <https://gcc02.safelinks.protection.outlook.com/?url=http%3A%2F%2Faggregates.name%2F&data=05%7C01%7Cwalter.rowe%40nist.gov%7C8219d6865ecc47ec14df08db1e58dc7d%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137139233546454%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=sr2q35NJHewYNYXu5%2Fdl0ICeYxqjAEKThjaTmKI1knw%3D&reserved=0>:
>>> 'aggr1'
>>> hostname: 'Cluster1'
>>> 2nd loop iteration:
>>> aggregates.name
>>> <https://gcc02.safelinks.protection.outlook.com/?url=http%3A%2F%2Faggregates.name%2F&data=05%7C01%7Cwalter.rowe%40nist.gov%7C8219d6865ecc47ec14df08db1e58dc7d%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137139233546454%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=sr2q35NJHewYNYXu5%2Fdl0ICeYxqjAEKThjaTmKI1knw%3D&reserved=0>:
>>> 'aggr2'
>>> hostname: "Cluster1}"
>>>
>>>
>>> Playbook:
>>> ---
>>> - hosts: localhost
>>> gather_facts: false
>>> collections:
>>> - netapp.ontap
>>> vars_files:
>>> - < login file path >
>>> vars:
>>> aggregates: []
>>> login: &login
>>> username: "{{ username }}"
>>> password: "{{ password }}"
>>> https: true
>>> validate_certs: false
>>> feature_flags:
>>> trace_apis: true
>>> tasks:
>>> - name: Get info
>>> na_ontap_rest_info:
>>> <<: *login
>>> gather_subset:
>>> - storage/volumes
>>> parameters:
>>> aggregates.name
>>> <https://gcc02.safelinks.protection.outlook.com/?url=http%3A%2F%2Faggregates.name%2F&data=05%7C01%7Cwalter.rowe%40nist.gov%7C8219d6865ecc47ec14df08db1e58dc7d%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137139233546454%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=sr2q35NJHewYNYXu5%2Fdl0ICeYxqjAEKThjaTmKI1knw%3D&reserved=0>:
>>> "{{ ?? }}" --> here we need to use aggr1,aggr3,aggr2...from variable '
>>> aggregates'
>>> hostname: "{{ ?? }}" --> here we need to use
>>> Cluster1,Cluster2,Cluster3...from variable 'aggregates'
>>> use_python_keys: true
>>> register: vol_data
>>> loop: "{{ ?? }}"
>>> loop_control:
>>> label: "{{ ?? }}"
>>> no_log: false
>>> - debug: var=vol_data
>>> ...
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Ansible Project" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/ansible-project/CANGEjuX20ndh8%2Bh_oCx8nGGBJTZ4oeEFfGQb0tWy6MXAuhTucA%40mail.gmail.com
>>> <https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.google.com%2Fd%2Fmsgid%2Fansible-project%2FCANGEjuX20ndh8%252Bh_oCx8nGGBJTZ4oeEFfGQb0tWy6MXAuhTucA%2540mail.gmail.com%3Futm_medium%3Demail%26utm_source%3Dfooter&data=05%7C01%7Cwalter.rowe%40nist.gov%7C8219d6865ecc47ec14df08db1e58dc7d%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137139233546454%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=5K1xhkU9sLL28V4nknxsdCys3rNaljhJXaDfV6WtDuM%3D&reserved=0>
>>> .
>>>
>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Ansible Project" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/ansible-project/03325950-FBD3-49F2-82BC-485D290BDEE1%40nist.gov
>>> <https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.google.com%2Fd%2Fmsgid%2Fansible-project%2F03325950-FBD3-49F2-82BC-485D290BDEE1%2540nist.gov%3Futm_medium%3Demail%26utm_source%3Dfooter&data=05%7C01%7Cwalter.rowe%40nist.gov%7C8219d6865ecc47ec14df08db1e58dc7d%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137139233546454%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=9RNhfx3MVbj6bSWTzDwx06L5HSy7nOecghJU7FXHC94%3D&reserved=0>
>>> .
>>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Ansible Project" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/ansible-project/CANGEjuXJdpJe7gBCCY1nQYxhz44DuQA4V7c5qVXAakPCe_-hEA%40mail.gmail.com
>> <https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.google.com%2Fd%2Fmsgid%2Fansible-project%2FCANGEjuXJdpJe7gBCCY1nQYxhz44DuQA4V7c5qVXAakPCe_-hEA%2540mail.gmail.com%3Futm_medium%3Demail%26utm_source%3Dfooter&data=05%7C01%7Cwalter.rowe%40nist.gov%7C8219d6865ecc47ec14df08db1e58dc7d%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137139233546454%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=bqcSE2oZGninbjgai9Skn%2BsHcb3qq2vFDeFBJ%2FWqRE4%3D&reserved=0>
>> .
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Ansible Project" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/ansible-project/3006506F-DEBA-4596-BF35-765F7DA80939%40nist.gov
>> <https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.google.com%2Fd%2Fmsgid%2Fansible-project%2F3006506F-DEBA-4596-BF35-765F7DA80939%2540nist.gov%3Futm_medium%3Demail%26utm_source%3Dfooter&data=05%7C01%7Cwalter.rowe%40nist.gov%7C8219d6865ecc47ec14df08db1e58dc7d%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137139233546454%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=ZHCR1P%2FKw1neuARwRkIV70yk%2BjoOsIeW7wvx7dwGKZA%3D&reserved=0>
>> .
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ansible Project" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/CANGEjuVhbZtfcH8cYjaM1%2BsypwfbHQK1P_QFQozw3%3DKOizudrA%40mail.gmail.com
> <https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.google.com%2Fd%2Fmsgid%2Fansible-project%2FCANGEjuVhbZtfcH8cYjaM1%252BsypwfbHQK1P_QFQozw3%253DKOizudrA%2540mail.gmail.com%3Futm_medium%3Demail%26utm_source%3Dfooter&data=05%7C01%7Cwalter.rowe%40nist.gov%7C8219d6865ecc47ec14df08db1e58dc7d%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137139233546454%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=FNu3DQmbCTjSfSSN9r9HbaKG7ClMaQRZJ%2FDKYhhL1rc%3D&reserved=0>
> .
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ansible Project" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/BFABBF7B-29C9-4299-B0A8-3F6FCB1EE68D%40nist.gov
> <https://groups.google.com/d/msgid/ansible-project/BFABBF7B-29C9-4299-B0A8-3F6FCB1EE68D%40nist.gov?utm_medium=email&utm_source=footer>
> .
>
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/CANGEjuWVoLVV%2BQJU0AC9fSn%2BCpnPp%2BETkMpCV61fuVt_UbhFhg%40mail.gmail.com.