我有以下剧本Playbook with output
目前没有错误,运行正常。但是,它不会将输出显示到控制台。我通过其他剧本遇到了这个并通过在剧本中添加以下任务来解决这个问题:
os
并打印输出。但是,我试图做同样的事情 上面的剧本,它说变量是未定义的(代码不是 显示,因为它没有工作)。
是否有人知道更好的方法是在不使用-debug: var=output.stdout_lines
的情况下将输出打印到控制台?任何ansible引用将不胜感激。
答案 0 :(得分:26)
运行时的每个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"
]
}
回复可以包含多个字段。 <{1}}是one of the default field,您可以从模块的响应中获得。{/ p>
并非所有模块都可以使用所有字段,例如对于没有返回任何标准的模块,您不会期望stdout_lines
或stdout
值中的任何内容,但是在这种情况下,可能会填写stdout_lines
字段。还有一些模块可能会在非标准变量中找到一些内容,因为您可以尝试查阅模块的文档以获取这些非标准返回值。
或者,您可以增加ansible-playbook的详细级别。您可以选择不同的详细级别:msg
,-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
模块的主要问题,如果您选中it's documentation,则可以看到它返回jenkins_script
字段中的输出,因此您可能需要尝试以下内容:
output