上一篇文章中,我们介绍了通过import jinja的方式进行代码的复用,这个场景并不是很常见。更为常见的场景是使用include来进行引用
接下来是今天的案例
为每个通过salt部署的服务提供定制化的监控
我们通过salt部署了很多的服务,这些服务除了本身的配置以外,我们也希望为服务定制一些自定义zabbix监控脚本。
我们通过services.zabbix
进行zabbix的部署。每当我们部署新的服务,对应的客户端脚本以及配置也会更新,更新好以后重启zabbix
假设我们需要部署的服务为mariadb,sls的入口在/srv/salt/services/mariadb/init.sls
,
我们可以将监控部分独立成一个配置文件,放在/srv/salt/services/mariadb/zabbix.sls
中
实现
/srv/salt/services/mariadb/init.sls
|
|
/srv/salt/services/mariadb/zabbix.sls
|
|
我们在mariadb的任务中,引用了一个zabbix子任务来实现zabbix的扩展, 在子扩展中,引用了zabbix的原始任务。
通过include引入的任务,会在编译的时候重新排序,可以避免因为ID重复导致的错误。
总结
这个案例内,主要运用到以下几个技巧:
- 在使用include的时候,可以使用一个.带指当前目录
- 如果换成salt://协议,可以使用
带指当前目录
- state的执行顺序可以通过REQUISITE参数进行重新编排。在配置文件切分很多份的时候,可以使用反向REQUISITE,也就是带后缀_in的参数实现解耦。
state的用法可以参考saltstack官方文档