想象一下,您有一個包含1個組和100多個主機的簡單庫存文件。從安裝模塊收集信息並創建新的庫存文件
[All]
server1
server2
.
.
.
server100
現在我要創造更多的人羣使用的操作系統,主要的OS版本或服務器... 如果我們運行:
# ansible server1 -m setup
.
.
.
"ansible_distribution": "CentOS",
"ansible_distribution_major_version": "6",
"ansible_distribution_release": "Final",
"ansible_distribution_version": "6.5",
.
.
.
.
,所以我用這個命令必須創建一個新的文件所有服務器的信息
# ansible All -m setup > all.out
輸出非常喜歡JSON,所以我們認爲這是一個JSON文件,但不是有效的:
# jsonlint all.out
[Error: Parse error on line 1:
server1 | SUCCESS =>
^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got 'undefined']
的JSON解析首先我使用這個命令:
grep -Po '(?<="ansible_hostname": ")[^"]*' all.out
第一它的作品不錯,但有一個問題,我創建這個簡單的shell腳本文件:
#!/bin/bash
while read line
do
echo $(grep -Po '(?<="ansible_hostname": ")[^"]*')
echo $(grep -Po '(?<="ansible_distribution": ")[^"]*')
echo $(grep -Po '(?<="ansible_distribution_major_version": ")[^"]*')
echo $(grep -Po '(?<="ansible_distribution_release": ")[^"]*')
echo $(grep -Po '(?<="ansible_distribution_version": ")[^"]*')
done < all.out
但其只顯示主機名和其他參數爲空 我試着使用python,但因爲它不是一個有效的json文件,它也給錯誤。
現在問題是否您知道更好的方式從設置模塊獲取所需信息並使用該輸出創建具有較小組的新庫存文件? 你知道我們可以傳遞給ansible並給出有效的json的任何開關或選項嗎?
謝謝。
「輸出非常像json」:對不起,我把你弄丟了。 Ansible是基於python的,所以我的猜測是這是一個python字典。 – Wtower
謝謝你,你說它非常喜歡json –