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

можно ли в 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 рекомендуемое решение? Как бы вы решили эту проблему?

10
задан Drew
13.02.2023 2:43 Количество просмотров материала 2843
Распечатать страницу

1 ответ

Возможно, вам стоит проверить: 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

С уважением,

C

1
отвечен Canna 2023-02-14 10:31

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх