背景:最近我发现我们的服务器存在一个问题,其中一个服务器上的 zookeeper 无法启动。这是由于 myid 文件为空(它需要一个数字)导致的。执行 salt 无法修复它。事实证明,该问题是由最近的主机名更改引起的。我修复了 sls 文件,但任何此类调整都可能导致它再次崩溃。
所以,我的问题是:我可以使用 salt 来验证某些更改是否正确应用了吗?在这种情况下,我可以检查文件的大小或验证内容是否包含单个数字。理想情况下,这将作为状态执行的一部分运行,但如果有其他方法,我很乐意听到。
具体来说,我并不想验证或检查状态文件本身。我只是想确保最终结果在某种程度上是有效的。例如,文件包含一个数字并且不为空。
答案1
伴随Roald Nefs 的回答,您可以module.run
在状态内使用来执行状态内的模块。因此,就我的情况而言,我最终这样做了:
myid_file_test:
module.run:
name: file.search
path: /path/to/myid
pattern: '\d'
如果模式匹配失败,则会报告失败,这正是我想要的。
答案2
随着salt.module.文件模块您将能够管理有关 minion 上的常规文件、目录和特殊文件的信息,设置/读取用户、组、模式和数据。
该模块包括一个search()
函数允许您在文件中搜索某个模式的出现情况。
salt '*' file.search /path/to/the/file pattern='='
该模式是一个正则表达式,使用 Python 的search()
。
您可以使用diskusage()
函数递归计算路径的磁盘使用量并以字节为单位返回:
salt '*' file.diskusage /path/to/the/file