SaltStack:如何只能执行一次状态?

我只能执行一次状态。 我找不到一个简单的方法来做到这一点。

现在,上下文

我通过salt安装了两个MySQL服务器。 我想使自己成为另一个的奴隶。

为了设置从站,我需要在主站安装结束时获取主站状态信息:

SHOW MASTER STATUS; 

现在,我可以使用执行mysql.query函数的自定义状态来获取它。

 mysql_master_status: mystate.query: - query: SHOW MASTER STATUS 

但是每次执行服务器的高端状态时都会执行它。 从而每次给出不同的主信息。

我试图用文件存在作为标志:

 /tmp/only_once: file.missing: [] mysql_master_status: mystate.query: - query: SHOW MASTER STATUS - require: - file: /tmp/only_once 

这是工作,但我不高兴,因为我现在每次都有两个失败的状态。

我的定制解决scheme

我结束了一个新的参数mystateflag创build一个标志文件第一次执行,并返回与成功,如果文件存在:

 mysql_master_status: mystate.query: - query: SHOW MASTER STATUS - flag: /tmp/only_once 

还有问题

不过,我想知道是否以及如何执行一次状态。

    你可以在minion上设置一个grain,指出以前是否运行过MySQL状态。 只需将此添加到您的州:

     mysql_master_status: mystate.query: - query: SHOW MASTER STATUS grains.present: - name: mysql - value: master 

    那么你可以在你的状态中包装东西,你只需要在if语句之间运行一次:

     {% if salt['grains.get']('mysql') != 'master' %} ... {% endif %} 

    这种方法的优点是你现在可以跟踪你的MySQL主人的奴才。 缺点是你必须密切关注你的谷物,这样信息才不会丢失。

    我认为最简单的方法是将这个状态放入另一个状态文件(mysql_master_status.sls),而不是在top.sls中引用它。 而是使用salt'target'state.sls mysql_master_status执行一次这个状态

    托马斯