2017-01-24 6 views
0

私は3段のボックスがあり、各層に異なる変数設定(キャッシュディレクトリのようなもの)を適用していますが、デフォルトの束があります。私はまた、ノードベースでをオーバーライドする必要があります。これは、通常、ホスト自体のインベントリ変数を介して行われます。ホストを編成する最良の方法が何であるかわからないので、precedence worksが私の好みです。可能性:varsでネストされたグループを使用

ここに私が試したさまざまなことがあります。私は、変数定義の長い文字列でそれらのそれぞれを持っていた、まず

[bots-fancy] 
fancy-1 

[bots-super-fancy] 
super-1 

[bots-magical] 
magic-1 
magic-2 provider=aws 

:それぞれのケースで私はこのようなインベントリファイルのエントリを持っています。私はまた別のgroup_var/bots/[bots-magical | bots-super-fancy | bots-fancy].yamlファイルを持っていた。これはすぐに支持されなくなりました。


試み1:脚本は脚本変数 で私はこのような何かを持っていた:

--- 
hosts: 
    - bots 
vars_files: 
    - "group_vars/bots/defaults.yml" 
    - "group_vars/bots/{{ groups_names[0] }}.yml" 
roles: 
    - somethign 

が、これは働いていた(はい脆性が)それは私がホストあたりに上書きすることはできないだろう基準。私はノードで時折異なるものを設定しなければならなかったが、グループ全体ではそうではなかった。


試み2:各

ためgroup_varsを使用して私は、hostsファイルに

[bots:children] 
bots-fancy 
bots-super-fancy 
bots-magical 

を追加しました。プレイブックからvars_filesを削除し、グループごとにgroup_varsを作成しました。私はgroup_vars/bots.yamlにデフォルト/共有設定を追加しました。プレイブックを実行すると、それはそのように見えるgroup_varsのbotsだけをロードします。理想的には、botsをロードし、bots-fancyでオーバーライドします。最後にhostsファイルから値を取得します。

私はこれらのグループを構成する最善の方法がわからないので、どんな入力であれ非常に役に立ちます!

答えて

4

あなたの問題はわかりません。

ホスト:あなたが問題ないはず

[bots-a] 
bot1 

[bots-b] 
bot2 

[bots:children] 
bots-a 
bots-b 

のdirs:

./group_vars/bots.yml 
./group_vars/bots-a.yml 
./group_vars/bots-b.yml 

(少なくとも最近のバージョンで)Ansibleのグループの深さの概念があります。この例では、ホストbot2のグループ変数は、以下の順序で読み込まれます。

深さ0:グループallall.yml(ここで行方不明、無視)
深1:グループbotsbots.yml
深2:グループ 、bots-b.yml

ソースコードには、詳細と処理順hereが表示されます。

したがって、デフォルト値をbots.ymlに、具体的な値をbots-b.ymlに定義すると、期待どおりの結果が得られます。

関連する問題