Hier ist der Kontext:
Das folgende Playbook (für dieses Stackoverflow-Thema und zur einfacheren Verwendung auf eine Aufgabe vereinfacht) lieferte je nachdem, wo ich es starte, unterschiedliche Ergebnisse. Es verwendet die Nutanix.ncp-Galaxy-Sammlung (getestet mit Version 1.9.0, 1.8.0, 1.7.0 ...).
Die ntnx_subnets_info
Methode wird aufgerufen, um die gesamte Liste der vorhandenen Subnetze auf einer zentralen Prism-Instanz abzurufen, und wird durch den Namensparameter gefiltert, um nur Details eines bestimmten VLAN abzurufen.
---
- name: test-get-subnet-info
hosts: localhost
vars:
nutanix_host: "{{ XXXXXXX }}"
nutanix_username: "{{ XXXXXXX }}"
nutanix_password: "XXXXXXX "
collections:
- nutanix.ncp
module_defaults:
group/nutanix.ncp.ntnx:
nutanix_host: "{{ XXXXXXX }}"
nutanix_username: "{{ XXXXXXX }}"
nutanix_password: "XXXXXXX "
tasks:
- name: Retrieve subnet info
ntnx_subnets_info:
filter:
name: "my-VLAN"
Auf einem Debian 11-Server läuft dieser Task reibungslos, wie Sie unten sehen können
Auf meinem benutzerdefinierten AWX EE (getestet sowohl mit Docker als auch mit K8s) erhielt ich den folgenden Fehler, der nicht allzu eindeutig istFailed to convert API response to json
Schritte zur Fehlerbehebung:
- versuche, die Nutanix.ncp-Sammlung von 1.9.0 auf 1.8.0 und 1.7.0 herunterzustufen => immer noch die gleichen Ergebnisse (funktioniert unter Debian, nicht von Docker aus)
- Vergleiche Ansible-Version => beide Umgebungen laufen auf Ansible Core 2.15.4
- Vergleichen Sie die Python-Version => die Docker-Image-Umgebung ist auf 3.9.17 und der Debian-Server auf 3.9.2
- Starten Sie manuelle Curl-Anfragen aus beiden Umgebungen =>alles funktioniert in beiden Umgebungen
- Starten Sie das Playbook mit der Option -vvvvvv und vergleichen Sie die Unterschiede im Protokoll => nutanix.ncp ist nicht so gesprächig, ich erhalte keine anderen Fehler, wie Sie auf dem Screenshot weiter unten sehen können.
Fragen
- Gibt es eine Möglichkeit, Ansible-API-Anfragen zu „analysieren“? Wie ein Wireshark/Fiddler für Ansible?
- Wie kann ich dieses Problem weiter beheben? Da es auf einer Seite funktioniert, auf den anderen aber nicht, kann ich ein paar Sachen vergleichen und hoffentlich einen Unterschied feststellen?
Danke
Antwort1
Nach vielen Tests und Untersuchungen habe ich entity.py in den Sammlungsdateien von nutanix.ncp gefunden. Es war die Datei, die für die Meldung „API-Antwort konnte nicht in JSON konvertiert werden“ verantwortlich war.
Eine Funktion sendet die Fehlermeldung, wenn der empfangene URL-Antwortcode >300 ist. Ich habe eine Wireshark-Aufzeichnung durchgeführt und festgestellt, dass es einen Fehler in den Netzwerkflüssen gab:
Dann werde ich dazu aufgefordert, die Verbindung von meinem Docker-Image/K8s-Pod zu meinem Prism Central zu überprüfen.
Der Befehl
openssl s_client -connect fqdn_prism_central:9440
zeigt die Fehlermeldung
„Überprüfen Sie den Rückgabecode: 20 (lokales Ausstellerzertifikat konnte nicht abgerufen werden)“
Schließlich aktualisiere ich einfach die Zertifikatskette in meinem Docker-Image (über mein Docker-File) und jetzt ist in AWX alles in Ordnung.
In meinem Fall basiert das AWX EE-Image auf dem offiziellen awx-ee (https://quay.io/repository/ansible/awx-ee?tab=tags&tag=latest), füge ich meiner Docker-Datei die folgenden Schritte hinzu (Hinweis: Pfad und Befehl können abweichen, wenn Sie etwas anderes als das CentOS-Image verwenden):
COPY ./certificate_chain.pem /etc/pki/ca-trust/source/anchors/certificate_chain.pem
RUN chmod 644 /etc/pki/ca-trust/source/anchors/certificate_chain.pem && update-ca-trust extract
Ganz schön schwierig, aber es funktioniert super! :)