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.