2016-08-04 7 views
0

私は動的にgroup_varsを使用してテンプレートを作成しようとしていますが、ネストされたループが機能しないようです。 group_varsでmulti-ter group_varsを使用する可能性のあるループ

、私は

my_environment: 
    serv1: 
    foo: 2 
    bar: 3 
    baz: 3 
    serv2: 
    foo: 1 

を持って、私は次の構造を作成しようとしています:

/serv1/foo1 
/serv1/foo2 

/serv1/bar1 
/serv1/bar2 
/serv1/bar3 

/serv1/baz1 
/serv1/baz2 
/serv1/baz3 

/serv2/foo1 

以上が作成されると、私はそれぞれのディレクトリにテンプレートファイルを入れたいので、最終的な結果は次のようになります。

/serv1/bar1/template 

/serv2/foo1/template 

など

マイ脚本:

- debug: msg="{{ ce }}" 
    with_list: 
    - "{{ item.value }}" 
    loop_control: 
    loop_var: ce 

上記出力:

ok: [localhost] => (item=None) => { 
    "ce": { 
     "bar": 3, 
     "baz": 3, 
     "foo": 2 
    }, 
    "msg": { 
     "bar": 3, 
     "baz": 3, 
     "foo": 2 
    } 
} 

質問は私が2回反復するfooの値を使用しない方法であり、構造を作成しますか? include: with_dictまたはinclude: with_listを使用する場合は、上記のリストを取得するだけです。私はトラバースする方法を見つけることができません...

答えて

0

あなたの入力からのパスの望ましいリストを形成する独自のルックアッププラグインを書くことが最善の方法です。あなたは、このようにそれを行うことができ、標準の検索(ループ)を使用して


x.yml:

- hosts: localhost 
    vars: 
    my_environment: 
     serv1: 
     foo: 2 
     bar: 3 
     baz: 3 
     serv2: 
     foo: 1 
    tasks: 
    - include: x2.yml 
     with_dict: "{{ my_environment }}" 
     loop_control: 
     loop_var: my_server 

x2.yml:

- include: x3.yml 
    with_dict: "{{ my_server.value }}" 
    loop_control: 
    loop_var: my_param 

がx3.yml:

- debug: var=item 
    with_sequence: end={{ my_param.value }} format=/{{ my_server.key }}/{{ my_param.key }}%1d/template 

debug x3.ymlには、templateと置き換えることができます。 {{ item }}destとする。

+0

これは苦労します(1回の演奏の中で重力的な反復ループを行うことはできません)が、あなたの解決策は良い解決策です。ありがとうございました!! – somelement

関連する問題