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]> 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].
> 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/CAL8fbwOz-oP4zET7KG3cb5eWiBCcRMbCmLwwN8YOgcW3mLQ0qg%40mail.gmail.com.

Reply via email to