Dick,

thanks for that, other than the strange behavior for anything with the 8 or 
9 in it not formatting correctly.

My next issue I can't resolve is to make this loop through a 'multi-layer' 
dictionary

    top:
      device1:
        name: test_name1
        vlanid: 2-10,800-810
      device2:
        name: test_name2
        vlanid: 100-120

My brain is a bit frazzled right now but I may be looking at this from the 
wrong angle.

My idea, if possible is to be able to:

   1. User to input 'name:' for each device/endpoint ('device1:' , 
   'device2:')
   2. User input of 'vlanid:' for each specific device/endpoint ('device1:' 
   , 'device2:')
   3. Ansible to loop through 'top:'
      1. Use 'name:' input
      2. Expand 'vlanid:'
      3. Build required objects in ACI, on per device/endpoint deployment
   
If I can get this work once, I hope to be able to use it on other ACI 
object creations that are endpoint specific. 

I have tried using sub_elements in my past playbook, which works fine, but 
I have to input each 'vlanid' individually into a list
    top:
      device1:
        name: test_name1
        vlanid: 
           - '0002'
           - '0003'
           - '0004'
           .....
           - '0919'
      device2:
        name: test_name2
        vlanid: 
           - '0100'
           - '0101'
           - '0102'
           - '0103'
           ...
           - '0120'

Again, any assistance would be great.

Regards



On Friday, 8 May 2020 19:55:08 UTC+2, Dick Visser wrote:
>
> This works for me: 
>
>
> --- 
> - hosts: localhost 
>   connection: local 
>   gather_facts: no 
>
>   vars: 
>     vlan_range: 1-9,100-103,201-204,500-507,600-604,1000-1003 
>
>   tasks: 
>     - set_fact: 
>         vlans: "{{ vlans|default([]) | union(lookup('sequence', 
> item.split('-')|first + '-' + item.split('-')|last + ':%04d', 
> wantlist=True ))  }}" 
>       loop: "{{ vlan_range.split(',') }}" 
>
>     - debug: var=vlans 
>
>
> TASK [debug] 
> **********************************************************************************
>  
>
> ok: [localhost] => 
>   vlans: 
>   - '0001' 
>   - '0002' 
>   - '0003' 
>   - '0004' 
>   - '0005' 
>   - '0006' 
>   - '0007' 
>   - 0008 
>   - 0009 
>   - '0100' 
>   - '0101' 
>   - '0102' 
>   - '0103' 
>   - '0201' 
>   - '0202' 
>   - '0203' 
>   - '0204' 
>   - '0500' 
>   - '0501' 
>   - '0502' 
>   - '0503' 
>   - '0504' 
>   - '0505' 
>   - '0506' 
>   - '0507' 
>   - '0600' 
>   - '0601' 
>   - '0602' 
>   - '0603' 
>   - '0604' 
>   - '1000' 
>   - '1001' 
>   - '1002' 
>   - '1003' 
>
>
>
> The only thing I don't understand is how to make the formatting 
> understand that this is decimal - the 0008 and 0009 are treated as 
> octal. 
> Adding "map('string') |list" doesn't fix that. 
>
>
> Dick 
>
>
> On Fri, 8 May 2020 at 17:49, Albert Short <[email protected] 
> <javascript:>> wrote: 
> > 
> > Can anyone tell me there is a solution I can use to do the same thing a 
> Python range function in Ansible? 
> > 
> > Scenario: 
> > Variables I am using 
> >     access_hostname: 
> >     - name: dariusz_access1 
> >       nodeid_access: 1001 
> >       from_port: '04' 
> >       vlanid: 
> >         - 201-204,500-510 
> >       podid: 1 
> >       int_mode: regular 
> >       depl_immediacy: lazy 
> > 
> >     - name: dariusz_access2 
> >       nodeid_access: 1001 
> >       from_port: '05' 
> >       vlanid: 
> >         - 10,1200 
> >       podid: 1 
> >       int_mode: regular 
> >       depl_immediacy: lazy 
> > 
> > What I want to achieve is to expand my 'vlanid' variable into a list of 
> individual items: 
> > So from this 
> >       vlanid: 
> >         - 201-204,500-510 
> > 
> > to something like this, hopefully to the use that info in loops, etc. 
> >       dariusz_access1: 
> >         vlanid: 
> >             - '0201' 
> >             - '0202' 
> >             - '0203' 
> >             - '0204' 
> >             - '0500' 
> >             - '0501' 
> >             - '0502' 
> >             - '0503' 
> >             - '0504' 
> >             - '0505' 
> >             - '0506' 
> >             - '0507' 
> >             - '0508' 
> >             - '0509' 
> >             - '0510' 
> >     - |- 
> >       dariusz_access2: 
> >         vlanid: 
> >             - '0010' 
> >             - '1200' 
> > 
> > 
> > 
> > I also need to get a leading zero '0' added to each vlanid that is not 4 
> characters in length. 
> > 
> > The idea is to avoid having to ask the end user to input each vlanid 
> individually, which could take some time. 
> > 
> > I have a python code that can split the ranges for me, with no problem, 
> but if there was an option in Ansible, i would prefer that. 
> > 
> > Any guidance would be great. 
> > 
> > -- 
> > 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] <javascript:>. 
> > To view this discussion on the web visit 
> https://groups.google.com/d/msgid/ansible-project/904dbcd3-a1eb-4cf7-95cf-5e9bcf594294%40googlegroups.com.
>  
>
>
>
>
> -- 
> Dick Visser 
> Trust & Identity Service Operations Manager 
> GÉANT 
>

-- 
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/b3b6f16a-77c8-49a4-a295-154099ce6c35%40googlegroups.com.

Reply via email to