You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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 %}

关键部分说明

  1. 筛选目标Minion
    通过mine.get配合复合目标表达式,精准筛选出满足environment grain匹配传入pillar值、且roles grain为mod-web的Minion。network.fqdn是Minion默认收集的mine数据,若未开启mine,可替换为saltutil.runner调用minions.get,但mine.get性能更优。

  2. 获取端口配置
    直接通过salt['pillar.get'](minion_id, 'mod:web:port')从Master端读取目标Minion的pillar数据,无需远程执行命令,完全符合要求。

  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 19:27:36