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: "{{ 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%7C18342adb8c0941b1f03c08db1e466f55%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137060241760609%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=jXuSN20x%2FZ2lXD9%2B0L7j3p6rofDjnjl7ZyEA4duifRM%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%7C18342adb8c0941b1f03c08db1e466f55%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137060241760609%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=jXuSN20x%2FZ2lXD9%2B0L7j3p6rofDjnjl7ZyEA4duifRM%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%7C18342adb8c0941b1f03c08db1e466f55%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137060241760609%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=jXuSN20x%2FZ2lXD9%2B0L7j3p6rofDjnjl7ZyEA4duifRM%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%7C18342adb8c0941b1f03c08db1e466f55%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137060241760609%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=jXuSN20x%2FZ2lXD9%2B0L7j3p6rofDjnjl7ZyEA4duifRM%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%7C18342adb8c0941b1f03c08db1e466f55%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137060241760609%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=jXuSN20x%2FZ2lXD9%2B0L7j3p6rofDjnjl7ZyEA4duifRM%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%7C18342adb8c0941b1f03c08db1e466f55%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137060241760609%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=UVuH5wNAwPvU58uzYbKbnk1DZxJ6Ol4yQaU9JvSc6ZA%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%7C18342adb8c0941b1f03c08db1e466f55%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137060241760609%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=5jwlMDqmF2fboGZKWjlVeFY5NKP%2F3UP%2BRlMCz3C%2BBfc%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%7C18342adb8c0941b1f03c08db1e466f55%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638137060241760609%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000%7C%7C%7C&sdata=VRxzguVhdatSBqtW7mz06TKR2JRSvPwmE5IONE06b7E%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://groups.google.com/d/msgid/ansible-project/3006506F-DEBA-4596-BF35-765F7DA80939%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/CANGEjuVhbZtfcH8cYjaM1%2BsypwfbHQK1P_QFQozw3%3DKOizudrA%40mail.gmail.com.

Reply via email to