SaltStack如何将license-minion的IP更新到app-minion配置文件
Salt批量更新app-minion配置方案
下面提供两种常用实现方式,可根据你的使用场景选择:
方式一:临时单次执行(适合快速改配)
- 先在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"
- 批量替换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,后续改配可直接复用。
- 在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
- 执行状态文件批量更新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
相关产品推荐
相关产品推荐

