¿Cómo solucionar problemas de solicitudes API enviadas por el módulo Ansible?

¿Cómo solucionar problemas de solicitudes API enviadas por el módulo Ansible?

Aquí está el contexto:
El siguiente manual (simplificado a una tarea para este tema de stackoverflow y para facilitar su uso) obtuvo resultados diferentes dependiendo de dónde lo inicie. Utiliza la colección de galaxias nutanix.ncp (probada con la versión 1.9.0, 1.8.0, 1.7.0...)

Se llama al ntnx_subnets_infométodo para recuperar toda la lista de subredes existentes en una instancia de Prism Central y se filtra a través del parámetro de nombre para recuperar solo los detalles de una VLAN específica.

---
- 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"

En un servidor Debian 11, esta tarea se ejecuta sin problemas, como puede ver a continuacióningrese la descripción de la imagen aquí

Mientras que en mi AWX EE personalizado (probado tanto con Docker como con K8) recibí el siguiente error que no es demasiado explícitoFailed to convert API response to json
ingrese la descripción de la imagen aquí

Pasos para solucionar problemas:

  • intente degradar la colección nutanix.ncp de 1.9.0 a 1.8.0 y 1.7.0 => siguen siendo los mismos resultados (funciona en Debian, no desde Docker)
  • compare la versión de ansible => ambos entornos se ejecutan en ansible core 2.15.4
  • compare la versión de Python => el entorno de imagen de Docker está en 3.9.17 y el servidor Debian en 3.9.2
  • lanzar solicitudes curl manuales desde ambos entornos =>todo funciona en ambos entornos
  • Inicie el libro de jugadas con la opción -vvvvvv y compare las diferencias en el registro => nutanix.ncp no es tan hablador, no recibo ningún otro error, como puede ver en la captura de pantalla siguiente.

Preguntas

  • ¿Existe alguna forma de "analizar" las solicitudes de API de Ansible? ¿Como un Wirehark/fiddler para Ansible?
  • ¿Cómo puedo ir más allá para solucionar este problema? Como funciona por un lado pero no por los demás, puedo comparar algunas cosas y, con suerte, encontrar una diferencia.

Gracias

Respuesta1

Después de muchas pruebas e investigaciones, encontré entidad.py en los archivos de la colección nutanix.ncp. Era el archivo responsable del mensaje "Error al convertir la respuesta API a json"

  • Una función envía el mensaje de error cuando el código de respuesta URL recibido es >300. Entré en una captura de Wireshark y descubrí que había un error en los flujos de la red: ingrese la descripción de la imagen aquí

  • Luego, me lleva a verificar la conexión desde mi imagen acoplable/pod K8s a mi Prism Central.

    El comando openssl s_client -connect fqdn_prism_central:9440muestra el mensaje de error.

" Verificar código de retorno: 20 (no se puede obtener el certificado del emisor local)"

  • Finalmente, actualicé la cadena de certificados en mi imagen de Docker (a través de mi Dockerfile) y ahora todo está bien en AWX.

    En mi caso, como la imagen AWX EE se basa en awx-ee oficial (https://quay.io/repository/ansible/awx-ee?tab=tags&tag=latest), agrego los siguientes pasos a mi archivo Docker (nota: la ruta y el comando pueden diferir si estás usando algo más que una imagen de CentOS):

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

¡Bastante duro, pero funciona muy bien! :)

información relacionada