调试 Ansible 模块故障,没有标准输出或标准错误

问题描述 投票:0回答:1

我正在按以下方式运行 ansible 剧本:

  1. 创建了一个 docker 镜像
FROM php:8.1.28-apache-bookworm

RUN apt install -y python3 \
  && ln -s /usr/bin/python3 /usr/bin/python
  1. 启动容器
  2. 已将其添加到我的库存中
all:
  vars:
    ansible_connection: docker
  hosts:
    test-container:
  1. 运行以下任务
    - name: Download limesurvey installation
      # debugger: on_failed
      ansible.builtin.get_url:
        url: "https://github.com/LimeSurvey/LimeSurvey/archive/refs/tags/{{ limesurvey_version }}.tar.gz"
        dest: "/tmp/limesurvey.tar.gz"
        mode: "755"

我收到以下错误:

{
  "changed": false, 
  "module_stderr": "",
  "module_stdout": "",
  "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
  "rc": 0
}

我很确定这是一个设置问题,但是我该如何调试这个错误?

更新

  • 任务似乎有效,但 ansible 抱怨
  • 添加
    ANSIBLE_KEEP_REMOTE_FILES=1
    允许在本地运行重新运行文件,还可以添加调试语句。它没有帮助,因为运行容器中的文件就可以了(有关实际命令,请参阅 -vvv)。
  • 我编辑了本地 get_url 模块并引发异常,直到我将错误固定到以下行。 https://github.com/ansible/ansible/blob/devel/lib/ansible/modules/get_url.py#L432。这很有效,因为我总是找到特定的错误,除了在有问题的行之后
docker ansible
1个回答
0
投票

我无法解决我的问题,但我学会了如何在没有任何附加信息的情况下调试和模块故障。

  1. 使用
    -vvvv
  2. 运行剧本
  3. 添加 ANSIBLE_KEEP_REMOTE_FILES=1 允许在本地运行重新运行文件
  4. 您现在可以在目标计算机上运行文件(取决于任务和设置,例如
    /root/.ansible/tmp/ansible-tmp-xxxx/AnsibleZ_stat.py
  5. 如果添加
    explode
    作为第一个参数,您还可以编辑模块(通常作为 zip 嵌入)。
  6. 如果您无法轻松访问远程机器,您还可以编辑本地模块文件。我提出了例外以找到解决办法。每次运行都会更新。
© www.soinside.com 2019 - 2024. All rights reserved.