2015-11-06 63 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 %}