ansible: local_action nur einmal ausführen, während das Playbook gegen eine Gruppe von Hosts (mehrere verwaltete Hosts) ausgeführt wird

1338
Drew

Ist es möglich, die local_actionAufgabe NUR einmal auszuführen, während das Spielbuch gegen eine Gruppe von Hosts ausgeführt wird?

Hier ist das Problem:

hosts: - macbooks - localhost tasks:  #...<some_remote_tasks>...#  - local_action: command ssh-keygen -o -a 100 -t ed25519 -f {{ ssh_key }} -q -N '' become: yes 

Ergebnis:

fatal: [laptop -> localhost]: FAILED! => {"changed": true, "cmd": ["ssh-keygen", "-o", "-a", "100", "-t", "ed25519", "-f", "/etc/ssh/id_ed25519-HostCA", "-q", "-N", "", "-C", "SSH Host Certificate Authority for cypherpunk.synology.me"], "delta": "0:00:00.014818", "end": "2018-06-01 17:02:41.599111", "msg": "non-zero return code", "rc": 1, "start": "2018-06-01 17:02:41.584293", "stderr": "", "stderr_lines": [], "stdout": "/etc/ssh/id_ed25519-HostCA already exists.\nOverwrite (y/n)? ", "stdout_lines": ["/etc/ssh/id_ed25519-HostCA already exists.", "Overwrite (y/n)? "]} changed: [localhost -> localhost]  

Dies ist sinnvoll, da alle Aufgaben in einem Playbook für jeden verwalteten Host ausgeführt werden müssen.

Da es sich jedoch um eine lokale Aktion handelt, wird sie wie erwartet zum ersten Mal ausgeführt und erstellt die Schlüsseldatei. Zum zweiten Mal ist die Datei bereits vorhanden und ansible erhält einen Fehler: "/etc/ssh/id_ed25519-HostCA already exists. Overwrite (y/n)?"mit return code 1. Also muss es wirklich nur einmal ausgeführt werden (zumindest in dieser Situation).

Ich könnte so etwas machen:

- local_action: shell > [[ ! -f {{ ssh_key }} ]] && \ ssh-keygen -o -a 100 -t ed25519 -f {{ ssh_key }} -q -N ''; \ exit 0 become: yes 

Aber ich frage mich, ob es eine von Ansible empfohlene Lösung gibt? Wie würden Sie das lösen?

2

1 Antwort auf die Frage

1
Canna

Vielleicht sollten Sie folgendes überprüfen: run_once & delegate_to

- command: /opt/application/upgrade_db.py run_once: true delegate_to: web01.example.org 

Doc: https://docs.ansible.com/ansible/latest/user_guide/playbooks_delegation.html

Mit freundlichen Grüßen,

C