Dheeraj
Dheeraj

Reputation: 337

Ansible Pass multiple vaules with single defined Variable

I need to add a server to service group every time I create a new server using the following task.

Task

- name: Create a service group
  a10_service_group_v3:
    validate_certs: no
    host: "{{ item.0.a10_host }}"
    state: "{{ item.1.service_state }}"
    username: "{{ item.0.user }}"
    password: "{{ item.0.pass }}"
    service_group: "{{ item.1.group_name }}"
    reset_on_server_selection_fail: yes
    servers:
      - name: "{{ item.1.server_name1 }}"
        port: "{{ item.1.server_port1 }}"
    overwrite: yes
    write_config: yes
    ignore_errors: yes
    with_nested:
      - "{{ a10 }}"
      - "{{ service_group }}"

Variables:

service_group:
  - group_name: bif_sg
    service_state: present
    server_name1: bif01
    server_port1: 80

I need help with passing variables for server_name and server_port, let's say If I have 3 servers to add to service group in the task I need to add 3 times server_name1, server_port1 server_name2, server_port2 ...... Everytime I add server I need to update in the task as well :(

Is there a way to pass multiple times sever_name and serer_port with single defined value in the task.

Upvotes: 1

Views: 3464

Answers (1)

Konstantin Suvorov
Konstantin Suvorov

Reputation: 68269

I you expect server_group to have a list of servers, refactor your variable to have a list of servers and not a bunch of separate subkeys:

service_group:
  - group_name: bif_sg
    service_state: present
    servers:
      - name: bif01
        port: 80
      - name: bif02
        port: 8080

And in your task:

...
servers: "{{ item.1.servers }}"
...

Upvotes: 2

Related Questions