2016-08-04 28 views
0

我想動態創建使用group_vars ansible的模板,但似乎無法得到嵌套的循環工作。Ansible循環使用multi-ter group_vars

在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 
    } 
} 

的問題是,我該如何使用的foo值迭代2倍創建結構?每當我使用include: with_dictinclude: 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 }} as dest

+0

這很痛苦(無法在單個劇本中嵌套迭代循環),但是您的解決方案是一個很好的解決方法;謝謝!! – somelement