我只需要执行一次状态。我找不到一个简单的方法来做到这一点。
我通过 salt 安装了两个 MySQL 服务器。我想让一个人成为另一个人的奴隶。
为了设置从站,我需要在主站安装结束时获取主站状态信息:
SHOW MASTER STATUS;
Run Code Online (Sandbox Code Playgroud)
现在,我可以使用执行mysql.query函数的自定义状态来获取它。
mysql_master_status:
mystate.query:
- query: SHOW MASTER STATUS
Run Code Online (Sandbox Code Playgroud)
但是每次为我的服务器执行 highstate 时它都会执行。从而每次都给出不同的主信息。
我尝试使用文件存在作为标志:
/tmp/only_once:
file.missing: []
mysql_master_status:
mystate.query:
- query: SHOW MASTER STATUS
- require:
- file: /tmp/only_once
Run Code Online (Sandbox Code Playgroud)
它正在工作,但我并不高兴,因为我现在每次都有两个失败的状态。
我以一个新参数 for 结束mystate,flag它在第一次执行时创建一个标志文件,如果文件存在则成功返回:
mysql_master_status:
mystate.query:
- query: SHOW MASTER STATUS
- flag: /tmp/only_once
Run Code Online (Sandbox Code Playgroud)
不过,我想知道是否以及如何只执行一次状态。
小智 16
您可以在 minion 上设置一个粒度,指示 MySQL-State 之前是否运行过。只需将此添加到您的状态:
mysql_master_status:
mystate.query:
- query: SHOW MASTER STATUS
grains.present:
- name: mysql
- value: master
Run Code Online (Sandbox Code Playgroud)
然后你可以在你的 State 中包装你只想在 if 语句之间运行一次的东西:
{% if salt['grains.get']('mysql') != 'master' %}
...
{% endif %}
Run Code Online (Sandbox Code Playgroud)
这种方法的优点是您现在还可以跟踪作为 MySQL 主控的 Minion。缺点是您必须密切注意您的谷物,以免信息丢失。
| 归档时间: |
|
| 查看次数: |
8743 次 |
| 最近记录: |