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

SaltStack如何将license-minion的IP更新到app-minion配置文件

Salt批量更新app-minion配置方案

下面提供两种常用实现方式,可根据你的使用场景选择:

方式一:临时单次执行(适合快速改配)

  1. 先在salt-master节点获取license-minion的IP并保存为变量,以下命令默认取第一个返回的IP,多网卡可指定网卡名,比如network.ip_addrs eth0指定取eth0的IP:
LICENSE_IP=$(sudo salt 'license-minion' network.ip_addrs --out=json | jq -r '.["license-minion"][]' | head -n 1)

如果master没装jq,也可以手动获取IP后直接赋值,比如LICENSE_IP="192.168.1.100"

  1. 批量替换2台app-minion的配置文件,以下示例假设你的配置文件路径为/etc/app/service.conf,待修改的配置行格式为license_server = 旧IP,可根据实际情况调整路径和匹配规则:
sudo salt 'app-minion*' file.replace \
  path=/etc/app/service.conf \
  pattern='^license_server\s*=.*' \
  repl="license_server = ${LICENSE_IP}" \
  backup=.bak

参数说明:backup=.bak会自动在同目录下生成原配置的备份文件,后缀为.bak,改配出错可回滚

方式二:写Salt状态文件(适合长期复用、自动化执行)

该方式不用手动存变量,每次执行会自动拉取最新的license-minion IP,后续改配可直接复用。

  1. 在salt-master的状态文件根目录(默认是/srv/salt/)下新建update_license_ip.sls,内容如下:
# 自动从master缓存中拉取license-minion的IP
{% set license_ip = salt['saltutil.runner']('cache.grains', tgt='license-minion', fun='network.ip_addrs')['license-minion'][0] %}

update_license_server_config:
  file.replace:
    - name: /etc/app/service.conf
    - pattern: '^license_server\s*=.*'
    - repl: 'license_server = {{ license_ip }}'
    - backup: .bak
  1. 执行状态文件批量更新app-minion配置:
sudo salt 'app-minion*' state.apply update_license_ip

注意事项

  • 执行替换操作前可加test=True参数验证替换效果,确认修改内容符合预期后再正式执行,比如:
    sudo salt 'app-minion*' file.replace path=/etc/app/service.conf pattern='^license_server\s*=.*' repl="license_server = 测试IP" test=True
    
  • 如果你的配置文件是用Jinja模板渲染生成的,更规范的做法是把license-minion IP存入Pillar,用file.managed模块渲染模板更新配置,可避免硬编码匹配规则。
  • 如果license-minion有多网卡多IP,可调整network.ip_addrs参数指定对应网卡,或根据网段筛选需要的IP。

内容的提问来源于stack exchange,提问作者siddhartha chakraborty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:57:02