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.