Wie behebe ich Probleme mit API-Anfragen, die vom Ansible-Modul gesendet werden?

Wie behebe ich Probleme mit API-Anfragen, die vom Ansible-Modul gesendet werden?

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_infoMethode 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önnenBildbeschreibung hier eingeben

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
Bildbeschreibung hier eingeben

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: Bildbeschreibung hier eingeben

  • 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:9440zeigt 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! :)

verwandte Informationen