Ansible:如何获得要显示的输出

Ansible:如何获得要显示的输出,ansible,Ansible,我有下面的剧本 目前没有错误,运行正常。但是,它不会向控制台显示输出。我在其他剧本中也遇到过这个问题,并通过在剧本中添加以下任务来解决这个问题: -debug: var=output.stdout_lines 然后打印输出。然而,我试着做同样的事情在未来 上面是剧本,上面说变量未定义(代码未定义) 显示,因为它不起作用) 是否有人知道一种更好的方法可以在不使用-debug的情况下将输出打印到控制台?任何ansible引用都将不胜感激。每个ansible任务在运行时都可以将其结果保存到变量中。为

我有下面的剧本

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

-debug: var=output.stdout_lines
然后打印输出。然而,我试着做同样的事情在未来 上面是剧本,上面说变量未定义(代码未定义) 显示,因为它不起作用)


是否有人知道一种更好的方法可以在不使用
-debug
的情况下将输出打印到控制台?任何ansible引用都将不胜感激。

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

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

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

    - debug:
        var: shell_result.stdout_lines
tasks:
  - jenkins_script:
      script: (...)
    register: jenkins_result

  - debug:
      var: jenkins_result.output
这里,
register
告诉ansible将模块的响应保存到
shell\u result
变量中,然后我们使用
debug
模块打印变量

示例运行如下所示:

PLAY [localhost] ***************************************************************

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

TASK [debug] *******************************************************************
ok: [localhost] => {
    "shell_result.stdout_lines": [
        "play.yml"
    ]
}
响应可以包含多个字段<代码>标准行是您可以从模块的响应中得到的结果

并非所有模块的所有字段都可用,例如,对于未将任何内容返回标准输出的模块,
stdout
stdout\u行
值中不会出现任何内容,但是在这种情况下可能会填充
msg
字段。此外,在一些模块中,您可能会在非标准变量中找到某些内容,对于这些模块,您可以尝试查阅模块文档以获取这些非标准返回值

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

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\u行
是可用的,它的内容是我们所期望的

要回答有关
jenkins_脚本
模块的主要问题,如果选中,您可以看到它在
output
字段中返回输出,因此您可能需要尝试以下操作:

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

    - debug:
        var: shell_result.stdout_lines
tasks:
  - jenkins_script:
      script: (...)
    register: jenkins_result

  - debug:
      var: jenkins_result.output

在运行ansible-playbook时使用-v。您可能无法忽略调试行中的空格。应该是:
-debug:…
请注意,重复的目标是指远程命令,但是并非所有命令都会使用
标准输出行
,与此问题中的一样,因此重复的目标可能不会回答此问题谢谢!这是我找到的最好答案,甚至检查了重复的问题。在上面的示例中,我如何调试/打印/使用_raw_params的值。。。假设我想使用_raw_params中设置的当前值执行另一项任务。我可以-debug:var=jenkins\u result.result,但当我这样做时-debug:var=jenkins\u result.result.invocation.module\u args.\u raw\u参数我得到未定义的变量。