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_info
mé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 abaixo
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
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
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:
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:9440
mostra a mensagem de erroPor 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):
Muito difícil, mas funciona muito bem! :)