如何查看 ansible 命令的标准输出?

如何查看 ansible 命令的标准输出?

如何查看 ansible-playbook 命令的标准输出?-v 仅显示 ansible 输出,而不是单个命令。如果我能立即弄清楚如何做到这一点就太好了,这样如果出现故障或挂起,我就能知道原因。

例如

- name: print to stdout
  action: command echo "hello"

将打印

TASK: [print variable] ******************************************************** 

hello

答案1

我认为您可以将结果注册到变量,然后使用调试打印。

- name: print to stdout
  command: echo "hello"
  register: hello

- debug: msg="{{ hello.stdout }}"

- debug: msg="{{ hello.stderr }}"

答案2

代替标准输出我建议使用标准输出行。对于多行输出,这要好得多,例如

- hosts: all
  tasks:
    - name: Run ls.sh and output "ls /"
      script: ls.sh
      register: out

    - debug: var=out.stdout_lines

给出

TASK: [debug var=out.stdout_lines] ******************************************** 
ok: [local] => {
    "var": {
        "out.stdout_lines": [
            "total 61", 
            "lrwxrwxrwx   1 root root     7 Feb 15  2015 bin -> usr/bin", 
            "drwxr-xr-x   6 root root  1024 Aug 24 22:08 boot", 
            "drwxr-xr-x  22 root root  3580 Sep  8 18:41 dev",  
            [...] 
            "drwxr-xr-x   9 root root  4096 Aug 25 19:14 usr", 
            "drwxr-xr-x  13 root root  4096 Feb 25  2015 var"
        ]
    }
}

关于用于调试目的的实时输出,有一个已关闭的错误报告 https://github.com/ansible/ansible/issues/3887#issuecomment-54672569 讨论为什么这不可能并且不会实现。

答案3

我发现使用最小 stdout_callback使用 ansible-playbook 得到的结果与使用 ad-hoc ansible 得到的结果类似。

在你的 ansible.cfg 中(请注意,我在 OS X 上,因此请修改路径callback_plugins以适合你的安装)

stdout_callback     = minimal
callback_plugins    = /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ansible/plugins/callback

因此,像这样的任务

---
- hosts: example
  tasks:
   - name: Say hi
     command: echo "hi ..."

给出如下输出,就像一个临时命令一样

example | SUCCESS | rc=0 >>
hi ...

我正在使用 ansible-playbook 2.2.1.0

答案4

我发现只需通过 ssh 终止远程卡住的进程即可返回 stdout。我发现这比编写最终剧本中不会使用的解决方法要短:

kill -9 PID

相关内容