自动化运维工具SaltStack - 多环境(使用记录【state.sls 与 state.highstate】)

转自:https://segmentfault.com/a/1190000000513137

今天在进行 saltstack 多环境的时候,遇到一个问题,最终得到解决,好记性不如烂笔头,记录。

首先,我在 salt master 服务器上对 /etc/salt/master 配置文件进行多环境配置,配置文件如下:

file_roots:
  base:
    - /srv/salt/base
  dev:
    - /srv/salt/dev  prod: - /srv/salt/prod  test: - /srv/salt/test 

然后在分别建立配置文件所配置的目录。
其中我的 /srv/salt/prod 的目录树如下:

/srv/salt/prod
|-- nginx
|   `-- stock.sls
|-- stock.prod.com
|   `-- nginx
|       `-- stock.prod.com `-- top.sls 

我做这个主要是为了对集群中的 nginx 的配置文件进行批量管理,当配置文件变更后,能进行批量推送。

弄完以上后,执行命令让其生效:

sudo salt -N STOCK  state.highstate -v

执行完毕,能成功生效,但是突然想到个问题,这个是全局的所有的环境的所有的状态生效,如果我要只对 prod 环境的某一个状态生效呢,或者是其他的环境。于是查看官方文档,发现了可以使用 state.sls 来指定特定的进行处理,当时也没有细看,就直接执行命令:

sudo salt -N STOCK state.sls nginx.stock

结果执行报错,告诉我在 base 下面没有匹配到 nginx.stock

当时想,不应该是,我不是定义了么,开始是以为 state.sls 和 state.highstate 一样,会对所有的环境遍历。
有问题,就 google 呗,然后 google 了下没有出来,啃官方文档去,找到 state.sls 的那段,发现定义如下:

salt.modules.state.sls(mods,saltenv='base',test=None,exclude=None,queue=False,env=None,concurrent=False,**kwargs) 

从上面可以看出, state.sls 默认的运行环境是 base,另外通过查看了下 saltstack 的 google groups ,发现绿肥也对这个解答了下, state.sls 并不读取 top.sls,所以 state.sls 需要单独执行哪些 sls 的话,需要你自定义。
绿肥解答的连接请点击这里

注:由于万恶的长城的存在,请准备梯子。

经过上面的查看,因此,修正执行命令

 sudo salt -N STOCK state.sls  saltenv='prod' nginx.stock

多加一个参数 saltenv,问题解决。更详细的内容请看官方的文档介绍 - salt.modules.state.sls

转载于:https://www.cnblogs.com/yycc/p/7444343.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值