将Mod-Web健康检查Shell脚本迁移至Saltstack Orchestrate SLS文件
Saltstack编排SLS实现Minion健康检查逻辑迁移
完整SLS文件代码
# mod_web_health_check.sls {% set target_env = pillar.get('environment', 'dev') %} # 筛选符合条件的Minion并获取其FQDN {% set mod_web_minions = salt['mine.get']( "G@environment:" ~ target_env ~ " and G@roles:mod-web", 'network.fqdn', tgt_type='compound' ) %} # 批量定义健康检查任务 {% for minion_id, fqdn in mod_web_minions.items() %} wait_for_{{ minion_id }}_health: module.run: - name: http.query - m_name: wait_for_response - server: {{ fqdn }} - port: {{ salt['pillar.get'](minion_id, 'mod:web:port') }} - path: /api/__health - method: GET - status: 200 - wait_for: 1 - timeout: 30 # 健康检查完成后输出提示 {{ minion_id }}_health_ok: module.run: - name: test.echo - text: "mod-web @{{ fqdn }} OK" - require: - module: wait_for_{{ minion_id }}_health {% endfor %}
关键部分说明
筛选目标Minion
通过mine.get配合复合目标表达式,精准筛选出满足environmentgrain匹配传入pillar值、且rolesgrain为mod-web的Minion。network.fqdn是Minion默认收集的mine数据,若未开启mine,可替换为saltutil.runner调用minions.get,但mine.get性能更优。获取端口配置
直接通过salt['pillar.get'](minion_id, 'mod:web:port')从Master端读取目标Minion的pillar数据,无需远程执行命令,完全符合要求。HTTP健康检查
使用http.query模块的wait_for_response方法,实现循环等待逻辑:每隔1秒发起一次请求,直到返回200状态码,超时时间设为30秒(可根据业务需求调整)。每个Minion的提示输出任务依赖健康检查完成,确保顺序执行。
执行命令
运行编排文件的命令如下:
sudo salt-run state.orchestrate mod_web_health_check pillar="{environment: dev}"
内容的提问来源于stack exchange,提问作者apasic
相关产品推荐
相关产品推荐

