ansible: executa local_action apenas uma vez enquanto executa o playbook contra um grupo de hosts (múltiplos hosts gerenciados)

2

É possível fazer com que a tarefa local_action seja executada SOMENTE uma vez enquanto estiver executando o playbook em um grupo de hosts?

Aqui está o problema:

hosts:
    - macbooks
    - localhost
tasks:

#...<some_remote_tasks>...#

    - local_action: command
        ssh-keygen -o -a 100 -t ed25519 -f {{ ssh_key }} -q -N ''
      become: yes

Resultado:

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] 

E isso faz sentido porque qualquer tarefa em um playbook deve ser executada para cada host gerenciado.

Mas como é uma ação local, ele é executado pela primeira vez conforme esperado, criando o arquivo de chave. Segunda vez que o arquivo já existe e ansible recebe um erro: "/etc/ssh/id_ed25519-HostCA already exists. Overwrite (y/n)?" with return code 1 . Então, realmente deve ser executado apenas uma vez (pelo menos nessa situação).

Eu poderia fazer algo como:

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

Mas eu me pergunto se há uma solução ansible-recomendada? Como vocês resolveriam isso?

    
por Drew 02.06.2018 / 02:48

1 resposta

1

Talvez você deva verificar: run_once & delegate_to

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

Doc: link

Atenciosamente,

C

    
por 07.06.2018 / 14:35

Tags