我只能执行一次状态。 我找不到一个简单的方法来做到这一点。
我通过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
这是工作,但我不高兴,因为我现在每次都有两个失败的状态。
我结束了一个新的参数mystate , flag创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执行一次这个状态
托马斯