Ansible:如何让输出显示

标签 ansible

这个问题在这里已经有了答案:





Displaying output of a remote command with Ansible

(3 个回答)


4年前关闭。
社区在 3 个月前审查了是否重新打开此问题并将其关闭:

原始关闭原因未解决





我有以下剧本,Playbook with output

目前没有错误并且运行良好。但是,它不会将输出显示到控制台。我在其他剧本中遇到过这个问题,并通过在剧本中添加以下任务来解决这个问题:

-debug: var=output.stdout_lines

它打印输出。但是,我尝试在
上面的剧本,它说变量是未定义的(代码不是
显示,因为它不起作用)。

有谁知道在不使用 -debug 的情况下将输出打印到控制台的更好方法吗? ?任何ansible引用将不胜感激。

最佳答案

每个 Ansible 任务在运行时都可以将其结果保存到一个变量中。为此,您必须指定将结果保存到哪个变量。使用 register 执行此操作参数,与使用的模块无关。

将结果保存到变量后,您可以稍后在任何后续任务中使用它。因此,例如,如果您想获得特定任务的标准输出,您可以编写以下内容:

---
- hosts: localhost
  tasks:
    - shell: ls
      register: shell_result

    - debug:
        var: shell_result.stdout_lines

这里register告诉 ansible 将模块的响应保存到 shell_result变量,然后我们使用 debug模块打印出变量。

示例运行如下所示:
PLAY [localhost] ***************************************************************

TASK [command] *****************************************************************
changed: [localhost]

TASK [debug] *******************************************************************
ok: [localhost] => {
    "shell_result.stdout_lines": [
        "play.yml"
    ]
}

响应可以包含多个字段。 stdout_linesone of the default fields您可以从模块的响应中得到期望。

并非所有模块都提供所有字段,例如对于不返回任何内容到标准输出的模块,您不会期望 stdout 中有任何内容。或 stdout_lines值,但是 msg在这种情况下可能会填写字段。还有一些模块,您可能会在非标准变量中找到一些东西,对于这些,您可以尝试查阅模块文档以获取这些非标准返回值。

或者,您可以增加 ansible-playbook 的详细程度。您可以在不同的详细级别之间进行选择:-v , -vvv-vvvv .例如,当以冗长( -vvv )运行剧本时,您会得到:
PLAY [localhost] ***************************************************************

TASK [command] *****************************************************************
(...)
changed: [localhost] => {
    "changed": true,
    "cmd": "ls",
    "delta": "0:00:00.007621",
    "end": "2017-02-17 23:04:41.912570",
    "invocation": {
        "module_args": {
            "_raw_params": "ls",
            "_uses_shell": true,
            "chdir": null,
            "creates": null,
            "executable": null,
            "removes": null,
            "warn": true
        },
        "module_name": "command"
    },
    "rc": 0,
    "start": "2017-02-17 23:04:41.904949",
    "stderr": "",
    "stdout": "play.retry\nplay.yml",
    "stdout_lines": [
        "play.retry",
        "play.yml"
    ],
    "warnings": []
}

如您所见,这将打印出每个模块的响应以及所有可用字段。可以看到stdout_lines是可用的,它的内容是我们所期望的。

回答您关于 jenkins_script 的主要问题模块,如果您检查 its documentation ,您可以看到它返回 output 中的输出字段,因此您可能想尝试以下操作:
tasks:
  - jenkins_script:
      script: (...)
    register: jenkins_result

  - debug:
      var: jenkins_result.output

关于Ansible:如何让输出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42302522/

相关文章:

Ansible-从列表创建字典

kubernetes - 使用 ansible 编辑 kubectl 命名空间标签

ansible - 如何将结果从 include_tasks 传回

linux - 使用 Ansible 执行 Karaf 客户端命令

ansible - 在当前 Ansible 角色的文件部分中查找文件名

Ansible变量将在另一个角色中覆盖默认值

ansible include_vars 排序问题

security - Ansible,Windows - 如何访问网络文件夹?

amazon-web-services - AWS IAM |无法承担在同一 "session"上创建的角色 (InvalidInputException)

python - Visual Studio 2017 中缺少 io.h header