Sobes.tech
Junior

Wie ruft man Rollen im Ansible-Playbook auf?

sobes.tech KI

Antwort von AI

Rollen in Ansible können auf mehrere Arten innerhalb eines Playbooks aufgerufen werden.

  1. Verwendung des Schlüsselworts roles auf Playbook-Ebene:

    # playbooks/my_playbook.yml
    - name: Rollen auf Server anwenden
      hosts: webservers
      become: yes
      roles:
        - role: common  # Aufruf der Rolle 'common'
        - role: nginx   # Aufruf der Rolle 'nginx'
          vars:         # Übergabe von Variablen an die Rolle
            nginx_port: 8080
        - another_role # Verkürzte Form des Aufrufs
    

    Diese Methode wird verwendet, um Rollen aufzurufen, die sequenziell für alle in hosts definierten Hosts ausgeführt werden.

  2. Verwendung des Moduls include_role in der Aufgabenliste:

    # playbooks/my_playbook.yml
    - name: Rollen mit Bedingungen anwenden
      hosts: appservers
      tasks:
        - name: Datenbankrolle nur für dev einschließen
          include_role:
            name: database
          when: env == 'dev' # Rolle bedingt aufrufen
    
        - name: Anwendungsrolle einschließen
          include_role:
            name: app
          vars:
            app_version: 1.2.0 # Variablen an die Rolle übergeben
    

    Das Modul include_role führt die Rolle aus, als wäre sie eine in die aktuelle Aufgabe eingebundene Aufgabenliste. Es erlaubt die Verwendung von Bedingungen (when) und Schleifen (loop) zur Steuerung der Rollenausführung.

  3. Verwendung des Moduls import_role in der Aufgabenliste:

    # playbooks/my_playbook.yml
    - name: Rolle der Anwendung importieren
      hosts: appservers
      tasks:
        - name: Rolle der Anwendung für alle Hosts importieren
          import_role:
            name: app
          vars:
            app_config_file: /etc/app/config.conf # Variablenübergabe
    

    Das Modul import_role wird in der Analysephase des Playbooks verarbeitet, vor der tatsächlichen Ausführung. Das bedeutet, dass alle Direktiven wie when auf alle Aufgaben innerhalb der Rolle angewendet werden, nicht nur auf den Rollenaufruf selbst. Variablen, die über vars übergeben werden, sind innerhalb der Rolle verfügbar.

Der Hauptunterschied zwischen include_role und import_role liegt im Zeitpunkt der Verarbeitung: import_role wird statisch in der Analysephase verarbeitet, während include_role dynamisch während der Playbook-Ausführung erfolgt. Dies beeinflusst die Möglichkeit, Bedingungen und Schleifen zu verwenden:

Funktion include_role import_role
Verarbeitung Dynamisch Statisch
Verwendung von when Ja Nein
Verwendung von loop Ja Nein
Möglichkeit, Variablen, die vorher im Play definiert wurden, zu verwenden Ja Nein

Die Wahl zwischen diesen Methoden hängt von der erforderlichen Flexibilität und dem Zeitpunkt der Verarbeitung ab. Für einfache Rollenimporte reicht in der Regel das Schlüsselwort roles oder import_role. Für komplexere Szenarien mit Bedingungen und Schleifen wird include_role verwendet.