Suche…


Rollen verwenden

Ansible nutzt das Konzept der Rollen modularen Code besser zu ermöglichen und zu vermeiden , sich zu wiederholen.

Eine Rolle ist einfach eine Ordnerstruktur, aus der Ansible weiß, woher VAR-Dateien, Aufgaben und Handler geladen werden. Ein Beispiel könnte ungefähr so ​​aussehen:

apache/
├── defaults
│   └── main.yml
├── files
│   ├── mod-pagespeed-stable_current_i386.deb
│   ├── mod-pagespeed-stable_current_i386.rpm
│   ├── mod-pagespeed-stable_current_amd64.deb
|   └── mod-pagespeed-stable_current_x86_64.rpm
├── tasks
│   ├── debian.yml
│   ├── main.yml
│   └── redhat.yml
├── templates
│   ├── httpd.conf.j2
│   └── sites-available
│       └── virthualhost.conf.j2
└── vars
    ├── debian
    └── redhat

Sie können die Rolle dann mit einem einfachen Spielbuch verwenden, das wie folgt aussieht:

- hosts: webservers
  roles:
     - apache

Wenn Sie Ansible für dieses Playbook ausführen, werden alle Hosts in der webservers und die oben definierte apache Rolle ausgeführt. Dabei werden automatisch alle Standardvariablen für die Rolle tasks/main.yml und alle in tasks/main.yml enthaltenen tasks/main.yml . Ansible kann auch nach bestimmten Dateitypen in rollenfreundlichen Speicherorten suchen:

  • Wenn die Rollen / x / Aufgaben / main.yml vorhanden sind, werden die darin aufgeführten Aufgaben zum Spiel hinzugefügt

  • Wenn die Rollen / x / handlers / main.yml vorhanden sind, werden die darin aufgeführten Handler zum Spiel hinzugefügt

  • Wenn die Rollen / x / vars / main.yml vorhanden sind, werden die darin aufgelisteten Variablen zum Spiel hinzugefügt

  • Wenn Rollen / x / meta / main.yml vorhanden sind, werden alle darin aufgeführten Rollenabhängigkeiten der Liste der Rollen hinzugefügt (1.3 und höher).

  • Jede Kopie, jedes Skript, jede Vorlage oder Include-Aufgaben (in der Rolle) können auf Dateien in den Rollen / x / {Dateien, Vorlagen, Aufgaben} / (Verzeichnis ist abhängig von der Aufgabe) verweisen, ohne sie relativ oder absolut zu pflegen

Rollenabhängigkeiten

meta/main.yml von Rollen können Sie auch andere Rollen als Abhängigkeit definieren, indem Sie eine meta/main.yml Datei mit einem dependencies meta/main.yml :

dependencies:
  - role: common

Es ist auch möglich, einen Wert an einen Parameter / eine Variable in der abhängigen Rolle zu übergeben:

dependencies:
  - { role: common, some_parameter: 3 }

Oder führen Sie die abhängige Rolle sogar bedingt aus:

dependencies:
  - { role: common, some_parameter: 3 }
  - { role: sshd, enable_sshd: false,
                         when: environment == 'production' }

Abhängige Rollen werden immer vor den von ihnen abhängigen Rollen ausgeführt. Sie werden auch nur einmal ausgeführt. Wenn zwei Rollen dieselbe als Abhängigkeit angeben, wird sie nur beim ersten Mal ausgeführt.

Stellen Sie sich die Rollen role1, role2 und role3 mit den folgenden meta/main.yml 's vor:
role1 / meta / main.yml:

dependencies:
    - role: role3

role2 / meta / main.yml:

dependencies:
    - role: role3

Bei der Ausführung von Rolle1 und Rolle2 im gleichen Spielbuch (wobei Rolle1 vor Rolle2 aufgerufen wurde), lautet die Ausführungsreihenfolge wie folgt:

role3 -> role1 -> role2

Sie können dieses Verhalten überschreiben, indem Sie allow_duplicates: yes in meta/main.yml von role1 und role2. Die resultierende Ausführungsreihenfolge wäre:

role3 -> role1 -> role3 -> role2

Trennen von verteilungsspezifischen Aufgaben und Variablen innerhalb einer Rolle

Verteilungsspezifische Aufgaben und Variablen lassen sich problemlos in verschiedene dedizierte .yml-Dateien aufteilen. Ansible hilft uns dabei, die Verteilung der Ziel-Hosts über {{ ansible_distribution }} und {{ ansible_distribution_version }} automatisch zu identifizieren. {{ ansible_distribution_version }} wir nur die .yml-Dateien der Distribution entsprechend benennen.

Für Ubuntu Xenial würde die grundlegende Rolle dir tree dann ungefähr so ​​aussehen:

role
├── tasks
│   ├── main.yml
│   └── Ubuntu16.04.yml
└── vars
    └── Ubuntu16.04.yml

In die tasks/main.yml können jetzt automatisch die richtigen Variablen und Aufgaben für die Verteilung der Ziel-Hosts tasks/main.yml .

Aufgaben / main.yml

---

- name: include distribution specific vars
  include_vars: "{{ ansible_distribution }}{{ ansible_distribution_version }}.yml"

- name: include distribution specific install
  include: "{{ ansible_distribution }}{{ ansible_distribution_version }}.yml"

In den tasks/Ubuntu16.06.yml und vars/Ubuntu16.04.yml können jetzt Aufgaben und Variablen für Ubuntu Xenial definiert werden.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow