2017-03-22 5 views
1

ich mehrere Rollen mit with_items Befehl auszuführen bin versucht, aber ich bin immer Fehler:ansible - mehr Rollen

"ERROR! 'item' is undefined"

role.yml:

ansible-playbook -i ./inventory/Dev ./playbooks/role.yml --extra-vars='{"host": "db", "roles": ["mysql", "apache"]}' 
:

--- 
- hosts: '{{ host }}' 
    become: yes 

    roles: 
    - role: "{{item}}" 
     with_items: "{{ roles }}" 

Hier mein Kommando

Antwort

1

Sie können es auf diese Weise nicht tun. with_ Schleifen sind nicht für Rollen gültig.

Wenn überhaupt, müssen Sie der roles:-Direktive eine Liste mit Rollen bereitstellen, sodass die Syntax genau wie für die Liste der Hostgruppen hosts: '{{ host }}' lautet. Das Problem ist: Ansible löst die Variable für Rollen nicht auf, daher funktioniert roles: '{{ roles }}' nicht.


Was Sie tun können, ist jedoch include_role module, in denen verwenden Sie die Variablen zugreifen können.

Nein, include_role Modul nimmt nicht {{ item }} vom with_items als Wert für name entweder.

So ist die einzige Abhilfe, die ich mir vorstellen kann (vorausgesetzt, Sie wollen nicht die JSON vorher verarbeiten) sind der umfassen die Rollen statisch:

tasks: 
    - include_role: 
     name: "mysql" 
    when: "'mysql' in roles" 
    - include_role: 
     name: "apache" 
    when: "'apache' in roles" 

Die Rollen müssen auf der Steuer Maschine existieren trotzdem sind alle ihre Namen vordefiniert.

+0

Danke für die Antwort, eigentlich möchte ich die Rollen zählen dynamisch weitergegeben werden. Manchmal brauche ich vielleicht nur eine Rolle und manchmal mehrere Rollen. In Zukunft werden auch mehr Rollen hinzugefügt, also möchte ich es flexibel machen. Gibt es noch andere alternative Möglichkeiten? – Md134

-2

{{item}} ist eine Variable, die Sie nicht definiert haben. Sie müssen es definieren, was Sie tun können, indem Sie den extra-vars-Parameter verwenden, den Sie bereits für 'host' und 'roles' verwenden:

z.

ansible-playbook -i ./inventory/Dev ./playbooks/role.yml --extra-vars='{"item": "something", "host": "db", "roles": ["mysql", "apache"]}' 
Verwandte Themen