I'm trying to append new tunnel interface to empty list, but I'm getting the below error.
- name: empty list
set_fact:
list_tunnel: []
- name: create new list for tunnel
set_fact:
list_tunnel_new: "{{ list_tunnel ['tunnel.{{item}}'] }}"
loop: "{{ range(1,10)|list}}"
Error:
fatal: [SJL]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'item' is undefined\n\nThe error appears to be in '/etc/ansible/aws/interface_palo_facts.yaml': line 34, column 12, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - name: print facts\n ^ here\n"}
CodePudding user response:
You can do it like this:
- name: create new list for tunnel
set_fact:
list_tunnel: "{{ list_tunnel | default([]) ['tunnel.' item | string] }}"
loop: "{{ range(1,10) | list}}"
- debug:
msg: "{{ list_tunnel }}"
or
- set_fact:
list_tunnel: "{{ result }}"
vars:
prefix: tunnel
a_list: "{{ range(1, 10) | list }}"
result: "{{ [prefix] | product(a_list) | map('join', '.') | list }}"
CodePudding user response:
Create the list you want to add
list_tunnel_add: "{{ ['tunnel']|product(range(1,10))|
map('join','.')|
list }}"
gives
list_tunnel_add:
- tunnel.1
- tunnel.2
- tunnel.3
- tunnel.4
- tunnel.5
- tunnel.6
- tunnel.7
- tunnel.8
- tunnel.9
Then concatenate the lists
list_tunnel_new: "{{ list_tunel list_tunnel_add }}"
Example of a complete playbook
- hosts: localhost
vars:
list_tunel: []
list_tunnel_add: "{{ ['tunnel']|product(range(1,10))|
map('join','.')|
list }}"
list_tunnel_new: "{{ list_tunel list_tunnel_add }}"
tasks:
- debug:
var: list_tunnel_new
gives
list_tunnel_new:
- tunnel.1
- tunnel.2
- tunnel.3
- tunnel.4
- tunnel.5
- tunnel.6
- tunnel.7
- tunnel.8
- tunnel.9