2016-09-23 7 views
1

複数の変数ファイルを配列に追加する方法はありますか?不可能:変数ファイルをリストに追加する

group_vars/all.yml 
group_vars/php.yml 
group_vars/web.yml 

all.yml:

最終目標は、各ファイルは、各ファイル

元に、これらのグループをコピーすることなく、起動構成のためのAWSセキュリティグループを追加することです

aws_security_groups: 
    - sg-ssh 

php.yml

aws_security_groups: 
    - sg-mysql 

web.yml

aws_security_groups: 
    - sg-http 

デバッグaws_security_groupsは生成します。

TASK [Debugging] *************************************************************** 
ok: [XXX.XXX.XXX.XXX] => { 
    "aws_security_groups": [ 
     "sg-mysql" 
    ] 
} 

を私たちは、異なるスケーリングポリシーを持っているAPIサーバーとフロントエンドサーバーを持っています。 sg-web、sg-ssh、sg-mysqlを持つWebサーバーにsg-webとsg-sshを追加したいとします。

+0

私はあなたのプレイブックをもっとうまく編成できると思っていますが、それ以上の文脈がなければ、より良い指針を与えることはできません。 – smiller171

答えて

2

AFAIKリストの変数をマージする方法はありません定義可能な時間は不可能である。回避策として
、あなたはall.ymlで辞書を行うことができます。

aws_security_groups: 
    all: 
    - sg-ssh 
    - sg-all 
    php: 
    - sg-mysql 
    web: 
    - sg-http 

または対応するグループ内の各サブキー(すべて、PHP、ウェブ、など)を定義するには、ファイルをvarsのとhash_behaviorをマージ使用(ただしhash_behaviorを変えています一般的には推奨されません)。その後、

とセキュリティグループのリストを取得するには、この魔法を使用します。

- debug: msg="{{ (group_names + ['all']) | intersect(aws_security_groups.keys()) | map('extract', aws_security_groups) | sum(start=[]) }}" 

これは、現在のホストのグループに応じて、すべてのセキュリティグループのプレーンなリストを作成します。

+0

これはキーで一緒にマージされるので、良い答えです。私が探しているのは、インスタンスのタグに基づいて、グループを各グループファイルにコピーする必要なしに異なるグループを割り当てます。ここでの解決策は、すべてのインスタンスが、すべてのグループを割り当てることを意味します。すべてのフィルタで+1 – MANCHUCK

関連する問題