我正在编写一个 Saltstack .sls 文件。该文件将通过以下方式执行:
sudo salt-run state.orchestrate <file name> pillar="{environment: dev}
因此,一切都将在 salt-master 上运行。
我需要执行以下操作。
这之前是在 shell 脚本中完成的,但我想将其完全移动到这个
.sls
文件中。这是 shell 脚本:
for HOST in $(sudo salt -C "G@environment:dev and G@roles:mod-web" config.get fqdn --output=text | awk '{ print $2 }')
do
PORT=$(sudo salt $HOST pillar.get mod:web:port --output=text | awk '{ print $2 }')
while [ ! $(curl -sfX GET http://${HOST}:${PORT}/api/__health --noproxy "*") ]; do sleep 1; done
echo "mod-web @$HOST OK"
done
最后一部分发出http请求 请参阅 https://ansible-cn.readthedocs.io/en/stable/ref/states/writing.html 编写自定义状态模块并简单编写一个 python 函数来进行 http 调用。您可以使用 salt utils 或 salt http 执行模块 https://docs.saltproject.io/en/latest/topics/tutorials/http.html 或可以使用 python requests 库或任何其他编写 python 代码的方式来制作http 请求。然后使用自定义状态模块在 sls 中声明您的状态。或者,您可以直接使用
module.run
(https://docs.saltproject.io/en/latest/ref/states/all/salt.states.module.html) 调用 salt http 执行模块,但随后它是不是幂等的,并且总是会说状态发生了变化,所以我的建议是如果可以的话创建一个状态模块。