Replying to my-self,
I managed somehow to make some progress, but now the issue is that it merge
the results like the following:
Given the following config:
chains_config:
1:
foo: bar
configs:
- type: bridged
version: 0.2
2:
foo: baz
configs:
- type: routed
version: 1.0
chains = [1, 2]
And using that loop with debug:
- debug: msg="chain={{ item.0 }}, configs={{ item.1.type }}"
with_nested:
- "{{ chains }}"
- "{{ chains |map('extract', chains_config) |map(attribute='configs')
|list }}"
I have the following output:
ok: [server] => (item=None) => {
"msg": "chain=1, configs=bridged"
}
ok: [server] => (item=None) => {
"msg": "chain=1, configs=routed"
}
ok: [server] => (item=None) => {
"msg": "chain=2, configs=bridged"
}
ok: [server] => (item=None) => {
"msg": "chain=2, configs=routed"
}
Which is not really right as not bridged config is defined for chain 2 and
no routed is defined for chain 1.
Best regards,
Lionel H.
Le vendredi 28 septembre 2018 08:03:05 UTC+2, Lionel H a écrit :
>
> Hi matt,
>
> Thanks for your reply !
>
> That's already a good example, But I need somehow also to retrieve the
> index which is the chain number.
>
> Let's simplify and say we only have one type of deployment (routed or
> bridged):
> chains_config:
> 1:
> foo: bar
> configs:
> - type: bridged
> version: 0.2
> 2:
> foo: baz
> configs:
> - type: routed
> version: 1.0
>
> To briefly explain the context we have two type of network deployment
> (routed or bridged). Each of these network deployment have their own
> set of network interfaces / VLANs. The VLAN used is guess from the chain
> number and type of deployment. And the type of deployment is specified in
> the chains_config dict.
> On top of this network architecture a docker container is applied for
> network type / VLANs.
>
> A dumb naive approach would be:
>
> - name: Creating docker network for the chain
> include_role:
> name: docker_chain_network
> vars:
> docker_network:
> name: macvlan{{item.key}}0{{ '6' if item.value.type == 'routed' else
> '5' }}
> driver: macvlan
> driver_options:
> parent: "{{ 'eno52' if routed else 'eno51' }}".{{item.key}}0{{ '6'
> if item.value.type == routed else '5' }}"
> with: ? map/select ?
>
> item.key ==> Would be each index of chains[] list (iteratively).
> item.value.type ==> Would be type of deployment based the index above;
> like in python: chains_config[item.key]['configs']['type']
>
> docker_chain_network is just a role applying docker_network module with
> the vars passed to the role.
>
> This is rather complex stuff. Thanks for taking your time and for your
> answers.
>
> Best regards,
>
> Lionel.
>
>
> Le jeudi 27 septembre 2018 17:06:29 UTC+2, Matt Martz a écrit :
>>
>> What is your end goal? How do you plan to use this data, assuming you
>> could loop the way you want?
>>
>> Something like the following:
>>
>> "{{ chains|map('extract',
>> chains_config)|map(attribute='configs')|flatten|map(attribute='type')|flatten
>>
>> }}"
>>
>> Gives:
>>
>> ok: [localhost] => {
>> "msg": [
>> "routed",
>> "bridged",
>> "routed",
>> "bridged"
>> ]
>> }
>>
>> On Thu, Sep 27, 2018 at 9:23 AM Lionel H <[email protected]> wrote:
>>
>>> Hi all,
>>>
>>> Hope I will find the information here :-)
>>>
>>> I need to loop over 2 lists, the first one is just a list of Integers,
>>> things get tricky here because the second list needs the input from the
>>> first list to loop over. In fact, the list is included in a dictionary
>>> where keys are integers.
>>>
>>> One example will be more self-explanatory:
>>>
>>> 1st list:
>>> chains = [1, 2, 3, 4, 5]
>>>
>>> 2nd list:
>>> chains_config:
>>> 1:
>>> foo: bar
>>> configs:
>>> - type: routed
>>> version: 0.1
>>> - type: bridged
>>> version: 0.2
>>> 2:
>>> foo: baz
>>> configs:
>>> - type: routed
>>> version: 1.0
>>> - type: bridged
>>> version: 1.1
>>> ... and 3, 4, 5 you get the idea.
>>>
>>> So I need to loop over this configs key and the chains list is defined
>>> by the user input.
>>>
>>> In python I would do this way:
>>>
>>> for chain in chains:
>>> for config in chains_config[chain]['configs']:
>>> print(config.type).
>>>
>>> Now, and to convert this into ansible code?
>>>
>>> I hope that you get the point :-)
>>>
>>>
>>> Best regards,
>>>
>>> Lionel.
>>>
>>> --
>>> 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 post to this group, send email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/ansible-project/5edde98f-64f5-447f-beae-22dc5d21a00b%40googlegroups.com
>>>
>>> <https://groups.google.com/d/msgid/ansible-project/5edde98f-64f5-447f-beae-22dc5d21a00b%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>> --
>> Matt Martz
>> @sivel
>> sivel.net
>>
>
--
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 post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/91cbcb44-0fc4-4ffb-8db8-c3db3fe3b006%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.