我想使用ansible-playbook,使用ps,dstat等命令快速监控一些主机。ansible
命令本身就很好地完成了我想要的任务,例如,我会用途:
ansible -m shell -a "ps -eo pcpu,user,args | sort -r -k1 | head -n5"
它会很好地打印每个主机的所有std输出,如下所示:
localhost | success | rc=0 >>
0.0 root /sbin/init
0.0 root [kthreadd]
0.0 root [ksoftirqd/0]
0.0 root [migration/0]
otherhost | success | rc=0 >>
0.0 root /sbin/init
0.0 root [kthreadd]
0.0 root [ksoftirqd/0]
0.0 root [migration/0]
然而,这需要我为每个任务保留一堆shell脚本,这不是很容易做到的,所以我把它放在一个剧本中:
---
-
hosts: all
gather_facts: no
tasks:
- shell: ps -eo pcpu,user,args | sort -r -k1 | head -n5
并使用-vv
运行它,但是输出基本上显示了字典内容,并且换行符没有按原样打印,因此这导致了如下不可读的混乱:
changed: [localhost] => {"changed": true, "cmd": "ps -eo pcpu,user,args | sort -r -k1
head -n5 ", "delta": "0:00:00.015337", "end": "2013-12-13 10:57:25.680708", "rc": 0,
"start": "2013-12-13 10:57:25.665371", "stderr": "", "stdout": "47.3 xxx Xvnc4 :24
-desktop xxx:24 (xxx) -auth /home/xxx/.Xauthority -geometry 1920x1200\n
....
我还尝试添加register: var
和“debug”任务来显示{{ var.stdout }}
,但结果当然是一样的。
当通过剧本运行命令时,有没有一种方法可以从命令的stdout/stderr中获得格式良好的输出?我可以想到很多可能的方法(使用sed格式化输出?将输出重定向到主机上的文件,然后将该文件返回并将其回显到屏幕上?),但以我对shell/ansible有限的知识,我需要花一天的时间来尝试它。
9条答案
按热度按时间falq053o1#
debug
模块真的需要一些爱,但目前你能做的最好的是使用这个:它给出如下输出:
up9lanfz2#
这是一个开始可能是:
**注:**此处包含有关
ps.stdout_lines
的文档:('Register Variables' chapter)。sulc1iza3#
扩展leucos在他的回答中所说的,你也可以用Ansible的
debug
模块打印信息:pepwfjgg4#
我发现使用 * minimal *
stdout_callback
和ansible剧本的输出与使用ad-hoc ansible的输出类似。在ansible.cfg中(请注意,我使用的是OS X,因此请修改
callback_plugins
路径以适合您的安装)所以像你这样的任务
输出如下所示,类似于临时命令
我使用的是一本神秘的剧本2.2.1.0
db2dz4w85#
ANSIBLE_STDOUT_CALLBACK=debug ansible-playbook /tmp/foo.yml -vvv
具有STDOUT的任务将包含一个部分:
gjmwrych6#
如果您需要一个特定的退出状态,Ansible提供了一种通过回调插件来实现的方法。
Example。如果您需要100%准确的退出状态,这是一个非常好的选择。
如果没有,您可以始终使用Debug Module,这是这种情况下使用的 * 标准 *。
干杯
zynd9foi7#
对我来说,唯一有效的(因为register+with_items组合)是:
az31mfrm8#
如果您只想使用ansible来实现这一点,那么这可能与此无关。但是,对我来说,在
.bash_profile
中创建一个函数,然后运行_check_machine host1 host2
会更容易例如:
不用说,这个功能现在对你来说是不起作用的。你需要适当地更新它。
vecaoik19#
我个人在一本剧本中有几个shell或命令调用,并将其输出到不同的变量。最后,我总结了这些信息,并一次列出如下:
.....
如果你用
它会给出一个漂亮干净的输出