ansible: выполнить local_action только один раз при запуске playbook для группы хостов (несколько управляемых хостов)

1224
Drew

Возможно ли в ansible сделать так, чтобы local_actionзадача запускалась ТОЛЬКО один раз при запуске playbook против группы хостов?

Вот проблема:

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

Результат:

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]  

И это имеет смысл, потому что любая задача в playbook должна выполняться для каждого управляемого хоста.

Но поскольку это локальное действие, оно запускается впервые, как и ожидалось, при создании файла ключа. Второй раз файл уже существует, и ansible получает ошибку: "/etc/ssh/id_ed25519-HostCA already exists. Overwrite (y/n)?"с return code 1. Так что на самом деле он должен быть запущен только один раз (по крайней мере, в этой ситуации).

Я мог бы сделать что-то вроде:

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

Но мне интересно, есть ли решение, рекомендованное компанией ANSIBLE? Как бы вы, ребята, решили это?

2

1 ответ на вопрос

1
Canna

Может быть, вы должны проверить: run_once & Delegate_to

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

Документ: https://docs.ansible.com/ansible/latest/user_guide/playbooks_delegation.html.

С уважением,

С

Похожие вопросы