1つのグループと100を超えるホストを持つ単純なインベントリファイルがあるとします。設定可能なモジュールから情報を収集し、新しいインベントリファイルを作成する
[All]
server1
server2
.
.
.
server100
今私たちが実行した場合、OS、主要な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ファイルであると仮定ではなく、次のとおりです。
最初の解析JSONのため# jsonlint all.out
[Error: Parse error on line 1:
server1 | SUCCESS =>
^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got 'undefined']
私は、このコマンドを使用します。
grep -Po '(?<="ansible_hostname": ")[^"]*' all.out
は最初それが良い動作しますが、それは私はこの単純なシェルスクリプトファイルの作成に問題があります。
#!/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
が、その唯一のショーのホスト名をと他のパラメータはnullです 私はpythonを使用しようとしていますが、有効なjsonファイルではないのでエラーも出ます。
ここで、セットアップモジュールから必要な情報を取得し、その出力を使用してより小さいグループの新しいインベントリファイルを作成するより良い方法を知っていますか? 私たちが有能な人に渡して有効なjsonを渡すことができるスイッチやオプションを知っていますか?
ありがとうございました。
"出力は非常にjsonに似ています":申し訳ありませんが、私はここであなたを失いました。 AnipalはPythonをベースにしているので、私の推測はPython Dictです。 – Wtower
あなたは非常にjsonのように言ってくれてありがとう –