Как устранить неполадки в запросах API, отправляемых модулем Ansible?

Как устранить неполадки в запросах API, отправляемых модулем Ansible?

Вот контекст:
Следующий плейбук (упрощенный до одной задачи для этой темы stackoverflow и для простоты использования) получил разные результаты в зависимости от того, где я его запускаю. Он использует коллекцию галактики nutanix.ncp (проверено с версиями 1.9.0, 1.8.0, 1.7.0...)

Метод ntnx_subnets_infoвызывается для извлечения всего списка существующих подсетей на центральном экземпляре Prism и фильтруется по параметру имени для извлечения только сведений о конкретной VLAN.

---
- 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 => результат тот же (работает на Debian, а не на Docker)
  • сравнить версию ansible => обе среды работают на ядре ansible 2.15.4
  • сравните версию Python => среда образа Docker находится на 3.9.17, а сервер Debian — на 3.9.2
  • запустить запросы curl вручную из обеих сред =>все работает в обеих средах
  • запустите плейбук с опцией -vvvvv и сравните различия в журнале => nutanix.ncp не такой уж болтливый, я не получаю никаких других ошибок, как вы можете видеть на скриншоте ниже.

Вопросы

  • Есть ли способ «анализировать» запросы API Ansible? Например, Wireshark/Fiddler для Ansible?
  • как мне продвинуться дальше, чтобы устранить неполадки и исправить эту проблему? поскольку с одной стороны все работает, а с другой нет, я могу сравнить некоторые вещи и, надеюсь, найти разницу?

Спасибо

решение1

После многих тестов и исследований, только что нашел entity.py в файлах коллекции nutanix.ncp. Это был файл, который отвечает за сообщение "Не удалось преобразовать ответ API в json"

  • Одна функция отправляет сообщение об ошибке, когда полученный код ответа URL >300. Я вошел в режим захвата Wireshark и выяснил, что в сетевых потоках была ошибка: введите описание изображения здесь

  • Затем мне нужно проверить соединение между образом Docker/модулем K8s и Prism Central.

    Команда openssl s_client -connect fqdn_prism_central:9440показывает сообщение об ошибке

«Проверьте код возврата: 20 (не удалось получить сертификат локального эмитента)»

  • Наконец, я просто обновил цепочку сертификатов в моем образе Docker (через мой Dockerfile), и теперь в 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

Довольно сложно, но работает отлично! :)

Связанный контент