Ansible:如何获得输出显示

Tom*_*ley 15 ansible

我有以下剧本,Playbook和输出

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

-debug: var=output.stdout_lines
Run Code Online (Sandbox Code Playgroud)

它打印输出.但是,我试图在上面的剧本中做同样的事情并且它说变量是未定义的(代码未显示,因为它不起作用).

是否有人知道更好的方法来输出打印到控制台而不使用-debug?任何ansible引用将不胜感激.

Szt*_*upY 31

运行时的每个ansible任务都可以将结果保存到变量中.要执行此操作,您必须指定将结果保存到的变量.您可以使用该register参数,与所使用的模块无关.

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

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

    - debug:
        var: shell_result.stdout_lines
Run Code Online (Sandbox Code Playgroud)

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

示例运行看起来像这样:

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

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

TASK [debug] *******************************************************************
ok: [localhost] => {
    "shell_result.stdout_lines": [
        "play.yml"
    ]
}
Run Code Online (Sandbox Code Playgroud)

响应可以包含多个字段.stdout_lines是您可以从模块的响应中获得的默认字段之一.

并非所有模块都可以使用所有字段,例如对于不返回标准的模块,您不会期望stdout或者stdout_lines值中的任何内容,但是msg在这种情况下可能填充该字段.还有一些模块可能会在非标准变量中找到某些内容,因此您可以尝试查阅模块的文档以获取这些非标准返回值.

或者,您可以增加ansible-playbook的详细程度.:您可以在不同的详细级别之间进行选择-v,-vvv-vvvv.例如,当使用verbosity(-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": []
}
Run Code Online (Sandbox Code Playgroud)

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

要回答关于该jenkins_script模块的主要问题,如果您检查它的文档,您可以看到它在output字段中返回输出,因此您可能需要尝试以下操作:

tasks:
  - jenkins_script:
      script: (...)
    register: jenkins_result

  - debug:
      var: jenkins_result.output
Run Code Online (Sandbox Code Playgroud)