将bash重写为Saltstack

问题描述 投票:0回答:1

我正在编写一个 Saltstack .sls 文件。该文件将通过以下方式执行:

sudo salt-run state.orchestrate <file name> pillar="{environment: dev}

因此,一切都将在 salt-master 上运行。

我需要执行以下操作。

  • 我需要获取所有具有等于支柱“环境”的粒度“环境”的minion的主机名,并且它们具有等于“mod-web”的“角色”粒度。
  • 对于所有这些获取的主机,我需要获取相应的端口(主机名是 glob 目标),因此我想迭代获取的主机并获取它们的端口。该端口位于支柱“mod:web:port”内。
  • 有了这两个信息后,我想做一个http请求(但不使用cmd.run)。

这之前是在 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
linux jinja2 salt-project infrastructure
1个回答
0
投票

最后一部分发出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 执行模块,但随后它是不是幂等的,并且总是会说状态发生了变化,所以我的建议是如果可以的话创建一个状态模块。

© www.soinside.com 2019 - 2024. All rights reserved.