Home > database >  Append a list with loop in Ansible
Append a list with loop in Ansible

Time:07-19

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
  • Related