我正在尝试在/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下的目录列表?
答案 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 %}