2015-11-06 61 views
0

我無法進行以下工作報告SaltStack - 嵌套如果神社

支柱:

 

    rabbitmq: 
     version: '3.5.6' 
     users: 
     tmpchq_user: 
      password: RvdeXurQ 
     vhosts: 
     tmpchq: 
      - user: tmpchq_user 
      permission: '".*" ".*" ".*"' 
      - user: default_user 
      permissions: '".*" ".*" ".*"' 
     default: 
      - user: temp 
      permission: '".*" ".*" ".*"' 

國家:

 

    {% for vhost in salt['pillar.get']('rabbitmq:vhosts') %} 
     {% for items in salt['pillar.get']('rabbitmq:vhosts:{{ vhost }}') %} 
    config_rabbitmq: 
     cmd.run: 
     - name: | 
      rabbitmqctl add_vhost {{ vhost }} user {{ items['user'] }} permissions {{ items['permissions'] }} 
     - cwd:/
     - shell: /bin/bash 
     {% endfor %} 
    {% endfor %} 

現在,如果我在python工作了這一點它正常工作:

 

    >>> x = {'rabbitmq': {'users': {'tmpchq_user': {'password': 'RvdeXurQ'}}, 
    ...    'version': '3.5.6', 
    ...    'vhosts': {'default': [{'permission': '".*" ".*" ".*"', 
    ...          'user': 'temp'}], 
    ...       'tmpchq': [{'permission': '".*" ".*" ".*"', 
    ...          'user': 'tmpchq_user'}, 
    ...          {'permission': '".*" ".*" ".*"', 
    ...          'user': 'default_user'}]}}} 
    >>> for vhost in x['rabbitmq']['vhosts']: 
    ...  for items in x['rabbitmq']['vhosts'][vhost]: 
    ...   print(vhost, items['user'], items['permission']) 
    ...   
    ...  
    ... 
    default temp ".*" ".*" ".*" 
    tmpchq tmpchq_user ".*" ".*" ".*" 
    tmpchq default_user ".*" ".*" ".*" 

而時髦的部分是我沒有失敗或被鹽取得成功。我什麼都得不到:

 

    [[email protected] srv]# salt 'client01p' state.sls rabbitmq.install_exp 
    client01p: 

    Summary for client01p 
    ----------- 
    Succeeded: 0 
    Failed: 0 
    ----------- 
    Total states run: 0 
    Total run time: 0.000 ms 

任何想法?還要忽略這個命令只使用了僞指令,我只是試圖讓嵌套工作,這只是一個虛構的例子。

回答

0
{% for items in salt['pillar.get']('rabbitmq:vhosts:{{ vhost }}') %} 

這是錯誤的。 {% %}塊內不需要{{ }}。使用神社的~字符串連接操盤手:

{% for items in salt['pillar.get']('rabbitmq:vhosts:'~vhost) %} 

此外,你應該知道,如果'rabbitmq:vhosts:'~vhost是在支柱空,你會因爲你不能過None迭代得到一個錯誤。

而且,我會寫你的嵌套的for循環是這樣,而不是:

{% for vhost, items in salt['pillar.get']('rabbitmq:vhosts', {}).items() %} 
    {% for item in items %}