Citeste codul de ieșire de ansiblu în interiorul fișier sh

0

Problema

Am un script de shell, care declanșează o ansible-playbook comanda spus ansible-playbook install.yml.
Acest lucru funcționează foarte bine.

Acum în interiorul script de shell, bazate pe dacă Ansiblu comanda a fost de succes sau de eșec, trebuie să fac ceva.
Există o modalitate de a captura codul de ieșire de un Ansiblu de comandă, astfel încât să pot folosi pentru măsuri suplimentare în interiorul shell script?

Orice abordări alternative ar fi, de asemenea, foarte util.

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

Cel mai bun răspuns

0

Q: "comanda ansiblu-playbook se întoarce mereu zero, chiar dacă ansiblu sarcini nu a reușit."

O: întoarcerea codul de ansiblu-playbook nu raportează la statutul de gazde. De exemplu, crearea de inventar și 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'

Returnat codul este 0 în ciuda faptului că o gazdă nu a reușit

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

Utilizarea ansiblu-runner dacă vrei să analizeze statutul de playbook. De exemplu

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

creează directorul artefacte/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

Starea este nu a reușit și a reveni cod este 2 dacă oricare dintre gazdele nu a reușit

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

Vezi și alte artefacte și exemple de cum să le folosească în scripturi.

2021-11-24 10:29:05

În alte limbi

Această pagină este în alte limbi

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