Przeczytaj kod wyjścia z ansible wewnątrz pliku sh

0

Pytanie

Mam skrypt powłoki, który uruchamia ansible-playbook każ powiedzieć ansible-playbook install.yml.
To działa świetnie.

Teraz wewnątrz skryptu powłoki, w zależności od tego, czy zespół Ansible udanej lub nieudanej, muszę coś zrobić.
Czy istnieje sposób, aby zapisać kod zakończenia polecenia Ansible, aby można było używać go do dalszych działań wewnątrz skryptu powłoki?

Wszelkie alternatywne podejścia również były by błędy są naprawdę pomocne.

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

Najlepsza odpowiedź

0

Pytanie: "Zespół ansible-playbook zawsze zwraca zero, nawet jeśli zadania ansible nie powiodło się".

Odpowiedź: Kod powrotu ansible-playbook nie informuje o statusie hostów. Na przykład, utwórz sprzęt i gry zbiór

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'

Zwracany kod wynosi 0, mimo, że jeden host jest uszkodzony

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

Użyj ansible-runner, jeśli chcesz analizować stan zbioru dramatów. Na przykład

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

tworzy artefakty katalogu/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

Status "Zawiesza"i kod powrotu jest równy 2, jeśli któreś z hostów jest uszkodzony

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

Zobacz inne artefakty i przykłady tego, jak ich używać w skryptach.

2021-11-24 10:29:05

W innych językach

Ta strona jest w innych językach

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