hotcheetos
hotcheetos

Reputation: 39

Ansible 'with_items' doesn't pass over to Ansible role

I can't figure this out. I have host_vars that I want to pass into my Ansible role. I can iterate through the items in my playbook, but it doesn't work if I give the item into my Ansible role. My host inventory looks like this:

hosts:
    host_one:
        domain: one
        ip: 172.18.1.1
        connection:
                - connection_name: two
                  connection_ip: 172.18.1.2

                - connection_index: three
                  local_hub_ip: 172.18.1.3

    host_two:
        domain: two
        ip: 172.18.1.2

For instance,this works correctly:

  tasks:
    - debug:
          msg: "{{item.connection_name}}"
      with_items:
          - "{{ connection }}"

will correctly print out the connections.connection_name for each connection I have, "two" and "three". However, if I try to pass it into a role:

  tasks:
    - name: Adding several connections
      include_role:
          name: connection-create
      with_items:
          - "{{ connection }}"

in which my role "connection-create" uses a variable called "connection_name" I get a:

FAILED! => {"msg": "'connection_name' is undefined"}

Why doesn't this work?

Upvotes: 0

Views: 234

Answers (1)

Vladimir Botka
Vladimir Botka

Reputation: 68179

The loop with_items: "{{ connection }}" creates the loop variable item. The included role can use

item.connection_name
item.connection_ip

The loop variable can be renamed, if needed. See Loop control

Upvotes: 2

Related Questions