如果目录为空,则仅在 Salt 中执行命令

Only execute a command in Salt if a directory is empty

我正在尝试将以下命令集成到盐状态中:

mysql_install_db --user=mysql --basedir=/usr/ --ldata=/data/mysql/

但仅当 /data/mysql 为空或 mysql 不包含数据库时。

谁能推荐一个好的方法吗?

提前致谢

在状态文件中使用 unless 验证路径的存在:

mysql_install_db:
  cmd.run: 
    - name: mysql_install_db --user=mysql --basedir=/usr/ --ldata=/data/mysql/
    - unless: file.path_exists_glob('/data/mysql/*')

编辑

正如@Christophe 所述,该状态的先前版本存在一些问题。基于此以及我认为最合适的内容更新了状态。

在任何状态下,您都可以使用unlessonlyif 条件。这些条件是在评估状态时在 minion 上启动的命令。

根据您的需要,您可以使用:

mysql_install_db:
  cmd.run:
    - name: mysql_install_db --user=mysql --basedir=/usr/ --ldata=/data/mysql/
    - onlyif: test -z "$(ls -A /data/mysql)"