2016-05-24 86 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