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

Mysql 如果目录为空,则仅在Salt中执行命令,mysql,devops,salt-stack,Mysql,Devops,Salt Stack,我正在尝试将以下命令集成到salt状态: mysql_install_db --user=mysql --basedir=/usr/ --ldata=/data/mysql/ 但仅当/data/mysql为空或mysql不包含数据库时 有谁能建议一个好的方法吗 提前感谢除非在您的状态文件中验证路径的存在,否则请使用: mysql_install_db: cmd.run: - name: mysql_install_db --user=mysql --basedir=/usr/ -

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

mysql_install_db --user=mysql --basedir=/usr/ --ldata=/data/mysql/
但仅当/data/mysql为空或mysql不包含数据库时

有谁能建议一个好的方法吗

提前感谢

除非在您的状态文件中验证路径的存在,否则请使用:

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

正如@Christophe所说,以前版本的国家存在一些问题。基于此更新状态,并基于我认为最适合的更新状态。

在任何状态下,您都可以使用除非或仅限条件。这些条件是在评估状态时对仆从发出的命令

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

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

我敢说这是显而易见的!看看这个文件夹,当然可以从程序上看,不,请你做你必须做的一切。如果文件夹是空的,这会起作用吗?基本上,我只想在没有安装db的情况下运行这个命令。啊,我认为这肯定比使用only更好。如果不满足条件,这个状态将无效。如果目录中的文件与OP想要的正好相反,则满足该条件。如果目录中包含以..开头的隐藏文件,那么@ChristopheDrevet Droguet的观点是正确的。事实上,它将是无效的。必须有else条件才能使状态有效,并且语句中必须有not。关于隐藏的文件,即使有隐藏的文件,返回也会是错误的,我相信这一点更多的是关于用例。