Stellen Sie mit einem Playbook unterschiedliche Rollen auf unterschiedlichen Servern bereit

Stellen Sie mit einem Playbook unterschiedliche Rollen auf unterschiedlichen Servern bereit

Beispielsweise habe ich über "ansible-galaxy init" zwei Rollen erstellt: deploy_back und deploy_front

Außerdem habe ich eine playbook.yml-Datei geschrieben.

- name: Create cluster
  become: yes
  hosts: all

  roles:
  - deploy_front
  - deploy_back

Wenn ich es über „ansible-playbook playbook.yml“ starte, werden auf beiden Servern zwei Rollen bereitgestellt. Wie kann ich in einem Playbook unterschiedliche Rollen auf unterschiedlichen Servern bereitstellen?

Wenn ich playbook.yml schreibe

- name: Create cluster
  become: yes

  hosts: front
  roles:
  - deploy_front

  hosts: db
  roles:
  - deploy_db

dann sieht die Ausgabe wie folgt aus:...einen doppelten Diktierschlüssel (Hosts) gefunden... einen doppelten Diktierschlüssel (Rollen) gefunden.... Nur den zuletzt definierten Wert verwenden."

Antwort1

Sie müssen Ihre hosts:und andere Deklarationen in verschiedene Spiele aufteilen. Der Code sollte ungefähr so ​​aussehen:

- name: Create front cluster
  become: yes
  hosts: front
  roles:
  - deploy_front

- name: Create db cluster
  become: yes
  remote_user: different-db-user
  hosts: db
  roles:
  - deploy_db

Antwort2

Der Grund, warum Sie die Meldung „Schlüssel doppelt vorhanden“ erhalten, liegt an der Struktur des YAML.

Ein Playbook ist eine Sammlung von Plays in Form einer geordneten Liste. Jedes Play wird durch eine Reihe von Schlüsselwort/Wert-Paaren spezifiziert.spielenSchlüsselwörter sind: name, hosts, become, und roles, um nur einige zu nennen.

Um in YAML verschiedene Elemente in einer Liste anzugeben, verwenden Sie das Bindestrichzeichen ( -). In beiden Ihrer Beispiel- playbook.xmlPlaybooks haben Sie nur ein Bindestrichzeichen ganz links. Das bedeutet, dass Sie nur eine Liste mit einem Element für ein Playbook oder ein Playbook mit einem Spiel haben.

hostsWenn Sie in Ihrem zweiten Beispiel vor Ihrer zweiten Deklaration ein Bindestrichzeichen hinzufügen playbook.yml, erhalten Sie ein gültiges Playbook, das nun zwei Plays enthält:

- name: Create cluster
  become: yes

  hosts: front
  roles:
  - deploy_front

- hosts: db
  roles:
  - deploy_db

In Ihrem ursprünglichen zweiten Beispiel ist nur ein einziges Spiel definiert. Darüber hinaus sind sowohl das hostsals auch das rolesSchlüsselwort in diesem einen Spiel zweimal definiert. YAML beschwert sich, dass Sie zwei unterschiedliche Definitionen für das hostsund rolesdas Schlüsselwort haben.

verwandte Informationen