Nach dem Update von Ansible 1.7 auf Ansible 2.4 funktionierte eine Ansble Rolle nicht mehr. Bei dieser Rolle wird der Wert einer Variable als Namen einer Liste in einem with_items Konstrukt verwendet.
In Ansible 1.7 funktionierte folgender Syntax noch:
VARS main.yml --- chooselist: list1 list1: - { port: '443', src: 'any', proto: 'tcp'} - { port: '80', src: 'any', proto: 'tcp'} list2: - { port: '22', src: 'any', proto: 'tcp'} - { port: '53', src: 'any', proto: 'tcp'} TASK:main.yml --- - name: with_items_test debug: msg="{{ item.port }}|{{ item.src }}|{{ item.proto }})" with_items: "{{ chooselist }}"
In Ansible 2.4 wird bei obigen Syntax ein Fehler ausgegeben: „The task includes an option with an undefined variable.“
Nach einiger Suche fand ich in folgenden Beitrag „SOLVED: ansible 2.0: with_items: „{{ variable }}_fixstring“ resolve issue #14032“ die Lösung.
Damit nun Variablen als Namen von Listen mit with_items verwendet werden können, muss man statt
with_items: "{{ chooselist }}"
folgenden Syntax mit dem vars Schlüsselwort verwenden:
with_items: "{{ vars[chooselist] }}"
Der komplette, in Ansible 2.4, funktionierende Task sie dann wie folgt aus aus:
--- - name: with_items_test debug: msg="{{ item.port }}|{{ item.src }}|{{ item.proto }})" with_items: "{{ vars[chooselist] }}"