上下文如下:
以下剧本(为了便于使用而简化为该 stackoverflow 主题的一项任务)获得不同的结果取决于我在哪里启动它。它使用 nutanix.ncp Galaxy 集合(使用版本 1.9.0、1.8.0、1.7.0...进行测试)
调用该ntnx_subnets_info
方法来检索 prism 中心实例上现有子网的所有列表,并通过 name 参数进行过滤以仅检索特定 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"
而在我的自定义 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 core 2.15.4 上运行
- 比较python版本=> docker镜像环境是3.9.17,debian服务器是3.9.2
- 从两个环境启动手动curl请求=>一切都在两个环境上运行
- 使用 -vvvvvv 选项启动 playbook 并比较日志上的差异 => nutanix.ncp 不是那么健谈,我没有收到任何其他错误,正如您在后面的屏幕截图中看到的那样。
问题
- 有没有办法“分析”Ansible API 请求?就像 Ansible 的wireshark/fiddler 一样?
- 我怎样才能进一步排除并解决这个问题?因为它在一侧有效,但在其他方面无效,我可能会比较一些东西并希望找到差异?
谢谢
经过多次测试和调查,刚刚在nutanix.ncp集合文件中找到了entity.py。这是负责 msg“无法将 API 响应转换为 json”的文件
当 URL 响应收到的代码 >300 时,一个函数会发送错误消息。我进入了wireshark捕获并发现网络流中存在错误:
然后,它让我检查从我的 docker 镜像/K8s pod 到我的 Prism Central 的连接。
该命令
openssl s_client -connect fqdn_prism_central:9440
显示错误消息最后,我只需更新 docker 映像上的证书链(通过 Dockerfile),现在 AWX 中一切正常。
就我而言,由于 AWX EE 映像基于官方 awx-ee ( https://quay.io/repository/ansible/awx-ee?tab=tags&tag=latest ),因此我将以下步骤添加到我的 dockerfile 中(注意:如果您使用 CentOS 映像之外的其他内容,路径和命令可能会有所不同):
相当艰难,但效果很好!:)