使用 socks5h://127.0.0.1:65432 的任务必须在存在该监听器的网络环境中运行。从控制端可用的隧道,并不会让它在 受管主机的 loopback 地址上或执行容器内 变得可用。

针对失败的任务,先确认四个事实:

  1. 实际执行网络请求的主机或容器。
  2. 它生效的用户与 Python 解释器。
  3. 模块使用的 HTTP 库或 SDK。
  4. 该进程能够访问 SOCKS 监听器的地址。

剧本的清单目标本身并不能回答第一个问题。模块使用其配置的连接,委派可能转移执行位置,本地连接则可能把工作留在控制端。控制端的查找完全发生在远程模块之外。

对于 OpenStack 镜像任务,请检查已安装的 openstack.cloud 集合的要求及其 OpenStack SDK 环境。curl 在别处成功,并不能证明该 SDK 具备 SOCKS 能力或其依赖已就绪。

如果 API 操作要在本地执行,就明确这一执行选择,并在那里提供设置。如果它在远程执行,就选择从该环境可达的代理。Ansible 任务的 environment: 会影响任务进程;它不会重新配置每一次查找或插件,SDK 仍需在该 Python 环境中支持该协议方案。

把两条路径分开:SSH 或 ProxyJump 负责把 Ansible 送到主机,而模块的 HTTP 客户端负责从执行环境走到 API。第一条路径可用,并不等于第二条已配置。为解决可达性而暴露仅存在于控制端的监听器,也会改变谁能够访问它,因此这是部署决策,而不是地址修正。

相关文章