Como solucionar problemas de solicitações de API enviadas pelo módulo Ansible?

Como solucionar problemas de solicitações de API enviadas pelo módulo Ansible?

Aqui está o contexto:
O manual a seguir (simplificado para uma tarefa para este tópico stackoverflow e para facilidade de uso) obteve resultados diferentes dependendo de onde eu o iniciei. Ele usa a coleção galaxy nutanix.ncp (testada com versão 1.9.0, 1.8.0, 1.7.0...)

O ntnx_subnets_infométodo é chamado para recuperar toda a lista de sub-redes existentes em uma instância central do prisma e é filtrado através do parâmetro name para recuperar apenas detalhes de uma 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"

Em um servidor Debian 11, esta tarefa funciona perfeitamente, como você pode ver abaixoinsira a descrição da imagem aqui

Considerando que no meu AWX EE personalizado (testado com o docker e depois no K8s), recebi o seguinte erro que não é muito explícitoFailed to convert API response to json
insira a descrição da imagem aqui

Etapas de solução de problemas:

  • tente fazer o downgrade da coleção nutanix.ncp de 1.9.0 para 1.8.0 e 1.7.0 => ainda os mesmos resultados (funciona no debian, não no docker)
  • compare a versão ansible => ambos os ambientes são executados no núcleo ansible 2.15.4
  • compare a versão python => o ambiente de imagem do docker está em 3.9.17 e o servidor debian em 3.9.2
  • iniciar solicitações curl manuais de ambos os ambientes =>tudo funciona em ambos os ambientes
  • inicie o playbook com a opção -vvvvvv e compare as diferenças no log => nutanix.ncp não é tão falador, não recebo nenhum outro erro como você pode ver na imagem abaixo.

Questões

  • Existe uma maneira de "analisar" solicitações de API Ansible? como um wireshark/fiddler para Ansible?
  • como posso prosseguir para solucionar e corrigir esse problema? como funciona de um lado, mas não dos outros, posso comparar algumas coisas e espero encontrar uma diferença?

Obrigado

Responder1

Depois de muitos testes e investigações, acabei de encontrar o entidade.py nos arquivos da coleção nutanix.ncp. Foi o arquivo responsável pela mensagem "Falha ao converter a resposta da API para json"

  • Uma função envia a mensagem de erro quando o código recebido da resposta do URL é >300. Entrei em uma captura wireshark e descobri que havia um erro nos fluxos da rede: insira a descrição da imagem aqui

  • Em seguida, preciso verificar a conexão da minha imagem docker / pod K8s com o Prism Central.

    O comando openssl s_client -connect fqdn_prism_central:9440mostra a mensagem de erro

“Verifique o código de retorno: 20 (não foi possível obter o certificado do emissor local)"

  • Por fim, acabei de atualizar a cadeia de certificados na minha imagem do Docker (por meio do meu Dockerfile) e agora está tudo bem no AWX.

    No meu caso, como a imagem AWX EE é baseada no awx-ee oficial (https://quay.io/repository/ansible/awx-ee?tab=tags&tag=latest), adiciono as seguintes etapas ao meu dockerfile (nota: o caminho e o comando podem ser diferentes se você estiver usando algo diferente da imagem do 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

Muito difícil, mas funciona muito bem! :)

informação relacionada