独立Salt Minion转受控Minion:state.highstate失败及salt-call执行问题
嘿,我明白你的需求——现在Minion已经连到Master了,能ping通但highstate没反应,你想让Minion用自己本地/srv/salt里的配置来执行,就像直接在Minion上跑salt-call那样对吧?下面给你几个实用的解决办法:
1. 临时指定本地根目录执行highstate
不想改配置的话,直接在Master端执行命令时加参数,强制Minion用本地的状态文件:
salt 'minion-host' state.highstate file_roots='base: /srv/salt'
这个参数会告诉Minion:别去Master那边拉状态了,就用我本地/srv/salt作为base环境的根目录来执行highstate。
2. 修改Minion配置,默认优先本地文件
如果想一劳永逸,每次执行都不用加参数,就改Minion的/etc/salt/minion配置文件,添加或者调整这段:
file_roots: base: - /srv/salt
改完之后重启Minion服务:
systemctl restart salt-minion
之后在Master端直接跑salt 'minion-host' state.highstate,Minion就会默认读取自己本地/srv/salt里的状态文件了。
3. 直接远程触发Minion执行本地salt-call
要是上面两种方法都不合心意,还有个简单粗暴的方式:通过Master远程让Minion自己跑salt-call命令:
salt 'minion-host' cmd.run 'salt-call state.highstate'
这个完全模拟你在Minion本地手动操作的效果,唯一的小缺点是输出格式是cmd.run的样式,不是state模块的标准输出,但胜在简单直接,不用纠结配置。
额外排查小提示
对了,你说执行highstate时Minion无响应,建议先在Minion本地手动跑salt-call state.highstate -l debug看看有没有报错——比如状态文件语法错了、依赖没装之类的,先排除本地配置本身的问题,再通过Master触发会更顺畅。
内容的提问来源于stack exchange,提问作者karthi_ms

