Führen Sie die enthaltene ansible Aufgabe als eigenständige Aufgabe aus

7

Ich habe viele Ansible-Playbooks, die in viel größeren Playbooks enthalten sein werden. Zum Beispiel:

---
- name: Add user me
  user: name=me comment="Me" uid=9999 groups=somegroup
- name: Add my ssh public key
  authorized_key: user=me key="{{ lookup('file', 'id_rsa.pub') }}"

Gibt es eine Möglichkeit, einen Hostnamen zu übergeben und diese als eigenständige Aufgabe über die Befehlszeile auszuführen, oder muss ich ein anderes Playbook erstellen, um diese beiden Aufgaben selbst auszuführen?

Pyzo
quelle

Antworten:

5

Es gibt zwei Voraussetzungen, um dies zu erreichen:

  1. Der Host, auf den Sie abzielen möchten, muss sich in einer Inventardatei befinden
  2. Sie müssen die Aufgaben in der Rolle markieren, die Sie ausführen möchten

    - name: Add user me
      user: name=me comment="Me" uid=9999 groups=somegroup
      tags: this_role
    - name: Add my ssh public key
      authorized_key: user=me key="{{ lookup('file', 'id_rsa.pub') }}"
      tags: this_role
    

Dann kannst du:-

ansible-playbook foo.yml -i hosts -t this_role --limit host.example.com

Nicht, dass hier noch das Playbook ausgeführt wird, das das gesamte Spiel enthält, aber es beschränkt die ausgeführten Aufgaben auf diejenigen, die dem Tag entsprechen. Die restlichen Aufgaben werden übersprungen.

Abdul
quelle
Die Dokumente und Forenbeiträge erwecken den Eindruck, dass das Ausführen eines kleinen Teils eines größeren Ganzen die Antwort ist (im Gegensatz zum Ausführen einzelner, in sich geschlossener Teile).
Pyzo
1

Sowohl user als auch authorized_key sind Module. Sie können diese also ansible -mvon jedem Skript aus aufrufen

ansible all -i host.example.com, -m user -a 'name=me comment="Me" uid=9999 groups=somegroup'
ansible all -i host.example.com, -m authorized_key -a "user=me key=\"{{ lookup('file', 'id_rsa.pub') }}\""

Beachten Sie das nachfolgende Komma nach dem Hostnamen.

Olaf Dietsche
quelle
0

Sicher, Sie sollten in der Lage sein, etwas zu tun wie:

$ ansible-playbook foo.yml -i hosts -u user --limit host.example.com
EEAA
quelle
Wenn ich das obige Spielbuch so laufen ERROR: hosts declaration is required
lasse,
0

Ich bin auch auf dieses Problem gestoßen.

Ich habe das Problem umgangen, indem ich ein kleines Runner-Playbook erstellt habe, das ich dann mit einem Paramater aufrufe.

> tree
.
├── ansible.cfg
├── inventory
├── taskrunner.yml
├── tasks
└── hello.yml

> cat taskrunner.yml:
  ---
  - hosts: all
    tasks:
    - name: "Runner will try to run task: {{ task }}"
      include: "{{ task }}"

> cat tasks/hello
  - name: print hello
    shell: echo hello world

> ansible-playbook taskrunner.yml -e task=tasks/hello.yml
Leo Ufimtsev
quelle