2016-05-24 119 views
0

我想运行一些命令来返回一些数据,并用位于服务器上的脚本以某种方式处理这些数据。我怎么能这样做?如何使用本地脚本处理来自Ansible的输出

例如:

我想运行

ansible all -a "cat /etc/redhat-release" 

然后,我想打电话给脚本调用version_parser.py与参数name_of_server和(位于本地ansible服务器上,其中ansible正在执行的命令不是主机)将此调用的输出作为输入。

所以,在现实中出现了类似像

ssh server1 "cat /etc/redhat-release" | version_parser.py server1 
ssh server2 "cat /etc/redhat-release" | version_parser.py server2 
... 

什么是最简单的方法做这样的事情的东西吗?

回答

2

您可以运行远程命令并将结果存储在变量中。接下来,您可以运行local_action,并与存储的变量执行本地脚本:

--- 
- name: Run remote command 
    command: "bash -c 'ls -l /etc/init.d/a* | grep -c app'" 
    register: store 

- name: Run result against local script 
    local_action: "shell echo '{{ store.stdout }}' | /path/to/local/parser.py {{ inventory_hostname }}" 
+0

如何传递服务器的脚本名称,此输出中来自 – Petr

+0

'{{inventory_hostname}}' - 更新在回答 – fishi

+0

你也可以运行一个管道,使其与你的问题完全一样:'local_action:“shell echo {{store.stdout}}'| /path/to/local/parser.py {{inventory_hostname}}”' - 在答案中更新 – fishi