Ist es möglich, die local_action
Aufgabe 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?