如何检索/srv/salt/top.sls中/ srv / salt / projects下的目录列表

时间:2018-05-21 22:03:22

标签: jinja2 salt salt-stack

我正在尝试在/srv/salt/top.sls文件中使用如下所示的for循环。

   {%- set prjlist = salt['file.find']('/srv/salt/projects',type='d',mindepth=1,maxdepth=1,print='name') %}
   # {{ prjlist }}
   {%- for prj in prjlist %}
      'role:{{ prj }}_server':
        - match: pillar
        - projects.{{ prj }}.server
   {%- endfor %}

当我运行“salt -l debug myhost state.apply test = True”时,与上面的for块的预期角色不匹配。但是,如果我用硬编码列表替换prjlist赋值,则find.file应该像

一样返回
{%- set prjlist = ['expected'] %}
然后,盐找到了预期的角色¯\ _(⊙︿⊙)_ /¯。

如果我执行“salt-call -l debug state.show_highstate”并查看渲染的top.sls输出,则在使用salt ['file.find']命令时,注释行显示为

#[u'expected']

但如果我使用硬编码列表,评论就会变成

#['expected']

此外,渲染的块看起来一样。

我使用的是2018.3.0版(氧气)。

salt ['file.find']行有什么问题吗?

我是否应该使用另一种更好的方法来获取salt-master上/ srv / salt / projects下的目录列表?

1 个答案:

答案 0 :(得分:2)

改为使用cp.list_master_dirs

{% for path in salt['cp.list_master_dirs']() if salt['file.dirname'](path) == 'projects' %}
  {% set prj = salt['file.basename'](path) %}
  'role:{{ prj }}_server':
    - match: pillar
    - projects.{{ prj }}.server
{% endfor %}