如何判断Salt文件系统salt://中文件是否存在并执行对应指令?
解决Salt gitfs环境下检查
salt://目录/文件存在性的问题 我来帮你搞定这个问题——你用file.directory_exists检查salt://路径失效,核心原因是这个模块是针对本地磁盘文件系统的,而gitfs是Salt的远程文件服务后端,得用专门的文件服务模块来交互才行。
正确的实现方式
你可以改用cp.list_dir模块,它是专门用来查询Salt文件服务(包括gitfs)中的目录内容的。下面是修正后的代码:
{% if salt['cp.list_dir']('salt://a_directory', recurse=False) %} file.recurse: - name: /path/to/your/destination - source: salt://a_directory - template: jinja {% endif %}
代码说明
cp.list_dir('salt://a_directory', recurse=False):这个函数会查询Salt文件服务中指定路径的目录内容,如果目录存在,会返回该目录下的文件/子目录列表(非空值,条件为真);recurse=False表示只查询当前目录,不递归子目录,能提升检查效率。- 如果要检查单个文件是否存在,可以用
cp.get_file_hash,比如:{% if salt['cp.get_file_hash']('salt://some_file.txt') %} # 这里写文件存在时的指令 {% endif %}
额外排查要点
- 先在master上验证gitfs同步是否正常:执行
salt-run fileserver.dir_list,看看输出里有没有salt://a_directory,确认目录确实存在于gitfs仓库中。 - 确保minion能正常访问Salt文件服务:可以在minion上执行
salt-call cp.list_dir salt://a_directory,测试是否能获取到目录内容。
内容的提问来源于stack exchange,提问作者Dragouf
相关产品推荐
相关产品推荐

