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

How can I retrieve a list of directories under /srv/salt/projects in the /srv/salt/top.sls

我正尝试在我的 /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 应该像 with

一样返回的硬编码列表
{%- set prjlist = ['expected'] %}

那么salt果然找到了预期的作用¯\_(⊙︿⊙)_/¯.

如果我执行 "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 下的目录列表吗?

改用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 %}