Ansible 모듈에서 보낸 API 요청 문제를 해결하는 방법은 무엇입니까?

Ansible 모듈에서 보낸 API 요청 문제를 해결하는 방법은 무엇입니까?

컨텍스트는 다음과 같습니다.
다음 플레이북(이 stackoverflow 주제와 사용 편의성을 위해 하나의 작업으로 단순화됨)은 실행 위치에 따라 다른 결과를 얻었습니다. nutanix.ncp 갤럭시 컬렉션을 사용합니다(버전 1.9.0, 1.8.0, 1.7.0...에서 테스트됨).

ntnx_subnets_info메소드는 프리즘 중앙 인스턴스에 있는 기존 서브넷의 모든 목록을 검색하기 위해 호출되며, 특정 VLAN의 세부 정보만 검색하기 위해 name 매개변수를 통해 필터링됩니다.

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

Debian 11 서버에서 이 작업은 아래에서 볼 수 있듯이 원활하게 실행됩니다.여기에 이미지 설명을 입력하세요

내 사용자 정의 AWX EE(Docker와 K8s에서 모두 테스트)에서는 너무 명확하지 않은 다음 오류가 발생했습니다.Failed to convert API response to json
여기에 이미지 설명을 입력하세요

문제 해결 단계:

  • nutanix.ncp 컬렉션을 1.9.0에서 1.8.0 및 1.7.0으로 다운그레이드해 보십시오 => 여전히 동일한 결과입니다(docker가 아닌 debian에서 작동함).
  • ansible 버전 비교 => 두 환경 모두 ansible 코어 2.15.4에서 실행됩니다.
  • Python 버전 비교 => docker 이미지 환경은 3.9.17에 있고 데비안 서버는 3.9.2에 있습니다.
  • 두 환경 모두에서 수동 컬 요청 실행 =>모든 것이 두 환경 모두에서 작동합니다
  • -vvvvvv 옵션을 사용하여 플레이북을 실행하고 로그의 차이점을 비교합니다 => nutanix.ncp는 그다지 수다스럽지 않습니다. 그 너머의 스크린샷에서 볼 수 있듯이 다른 오류는 발생하지 않습니다.

질문

  • Ansible API 요청을 "분석"하는 방법이 있습니까? Ansible의 Wireshark/Fiddler처럼요?
  • 이 문제를 해결하려면 어떻게 해야 합니까? 한쪽에서는 작동하지만 다른 쪽에서는 작동하지 않기 때문에 일부 항목을 비교하고 차이점을 찾을 수 있기를 바랍니다.

감사해요

답변1

많은 테스트와 조사 끝에 nutanix.ncp 컬렉션 파일에서 엔터티.py를 발견했습니다. "API 응답을 json으로 변환하지 못했습니다."라는 메시지를 담당하는 파일이었습니다.

  • 한 함수는 URL 응답 수신 코드가 >300일 때 오류 메시지를 보냅니다. Wireshark 캡처에 들어가서 네트워크 흐름에 오류가 있음을 알아냈습니다. 여기에 이미지 설명을 입력하세요

  • 그런 다음 내 Docker 이미지/K8s 포드에서 내 Prism Central로의 연결을 확인하게 됩니다.

    이 명령은 openssl s_client -connect fqdn_prism_central:9440오류 메시지를 표시합니다

“ 반환 코드 확인: 20(로컬 발급자 인증서를 얻을 수 없음)"

  • 마지막으로 Dockerfile을 통해 Docker 이미지의 인증서 체인을 업데이트하면 이제 AWX에서 모든 것이 정상입니다.

    제 경우에는 AWX EE 이미지가 공식 awx-ee(https://quay.io/repository/ansible/awx-ee?tab=tags&tag=latest), dockerfile에 다음 단계를 추가합니다(참고: 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

꽤 힘들지만 잘 작동합니다! :)

관련 정보