Leia o código de saída do ansible dentro sh arquivo

0

Pergunta

Eu tenho um script de shell, que dispara um ansible-playbook comando dizer ansible-playbook install.yml.
Isso funciona perfeitamente bem.

Agora dentro do script de shell, com base em se o Ansible comando foi bem-sucedida ou falha, eu preciso fazer alguma coisa.
Existe uma maneira de capturar o código de saída de um Ansible comando para que eu possa usá-lo para os outros passos dentro do script de shell?

Quaisquer métodos alternativos também seria muito útil.

ansible ansible-2.x sh shell
2021-11-24 06:46:52
1

Melhor resposta

0

P: "O comando ansible-playbook sempre retorna zero, mesmo se o ansible tarefas falhou."

R: O código de retorno do ansible-playbook não reportar o status dos hosts. Por exemplo, criar o inventário e playbook

shell> cat project/inventory/hosts 
host1
host2
host3

shell> cat project/test.yml
- hosts: host1,host2,host3
  gather_facts: false
  tasks:
    - fail:
      when: '[true, false] | random'

O código retornado é 0, apesar do fato de que um host que falhou

shell> ansible-playbook -i project/inventory/hosts project/test.yml

PLAY [host1,host2,host3] **************************************************

TASK [fail] ***************************************************************
fatal: [host1]: FAILED! => changed=false 
  msg: Failed as requested from task
skipping: [host2]
skipping: [host3]

PLAY RECAP ****************************************************************
host1 : ok=0 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0   
host2 : ok=0 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0   
host3 : ok=0 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0

shell> echo $?
0

Use ansible corredor, se você quiser analisar o estado de uma cartilha. Por exemplo

shell> ansible-runner run project -p test.yml -i 001

PLAY [host1,host2,host3] *******************************************************

TASK [fail] ********************************************************************
skipping: [host2]
fatal: [host1]: FAILED! => {"changed": false, "msg": "Failed as requested from task"}
skipping: [host3]

PLAY RECAP *********************************************************************
host1: ok=0 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0   
host2: ok=0 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0   
host3: ok=0 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0

shell> echo $?
2

cria o diretório artefatos/001

shell> tree project/artifacts/001/
project/artifacts/001/
├── command
├── fact_cache
├── job_events
│   ├── 10-0e67d8d4-0e4a-4997-b3ab-3d0189534132.json
│   ├── 10-4dfea3b2-baf6-46a8-b4ab-e22af5a8d55b.json
│   ├── 1-6afdcfe5-734e-4c4d-b00a-aacd6367c758.json
│   ├── 1-832947cc-0af6-47bc-a15c-fb71b565a9d3.json
│   ├── 2-9d4346a9-cd36-4f14-9c9f-000000000008.json
│   ├── 2-9d4346a9-cd36-78bf-89f1-000000000008.json
│   ├── 3-9d4346a9-cd36-4f14-9c9f-00000000000a.json
│   ├── 3-9d4346a9-cd36-78bf-89f1-00000000000a.json
│   ├── 4-0421a1df-52c1-4c8a-89af-25dff1146b5d.json
│   ├── 4-dad41025-1974-4cd0-829d-2cab9a7ac541.json
│   ├── 5-36628db6-cf46-4ccc-bb67-e510bfa03d85.json
│   ├── 5-61adde59-937d-40b6-8a2d-72c2bdc69a68.json
│   ├── 6-1aad67ba-7cc0-438b-9926-6861359ecedd.json
│   ├── 6-9b9272e1-f332-45eb-836b-453595e5af4a.json
│   ├── 7-41959751-8bd8-4da2-8053-5f61151dc803.json
│   ├── 7-ed0c5919-ea3c-4d41-8690-7877c9639dcf.json
│   ├── 8-93f5146b-1164-45d6-ad3d-38c356cab19c.json
│   ├── 8-cc90147f-eca0-46ed-b3f9-fd2938dab5ce.json
│   ├── 9-274c9f8f-384e-426d-8832-4625cd75f945.json
│   └── 9-287f4ffa-4073-45f4-9bc5-e91837b4abbb.json
├── rc
├── status
├── stderr
└── stdout

2 directories, 25 files

O estado é falha e o código de retorno é 2 se qualquer um dos hosts de falha

shell> cat project/artifacts/001/status 
failed
shell> cat project/artifacts/001/rc 
2

Veja outros artefatos e exemplos de como utilizá-los em scripts.

2021-11-24 10:29:05

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................