Saltstack自动化(九)Salt-Formulas的使用
Saltstack自0.17.x版本开始引进Formulas的概念,旨在通过简化State和集成数据来实现State的友好管理。根据SALT FORMULAS的官方文档,在完成手动添加formula目录后,formula应该提供一些默认的配置而立即可用。如果需要进一步的配置,大部分的formulas可以通过Pillar数据进行配置,可以参考每个Formula仓库的pillar.example文件查询可用的配置。
一、未集成的State
先来看下编写State的一般样例:
1apache:
2 pkg:
3 - installed
4 {% if grains['os_family'] == 'RedHat' %}
5 - name: httpd
6 {% elif grains['os_family'] == 'Debian' %}
7 - name: apache2
8 {% endif %}
乍看一下觉得这样写很正常,可是仔细想想吧,这样一来,apache的应用属性的判断逻辑写死在sls文件里,一旦需要更多的判断逻辑时这样的写法便稍显笨拙,那么,有什么好办法呢?
二、引进 Formulas
其实简单来说的话,Formulas即是建议使用Salt的用户编写State sls时统一使用map.jinjia来完成处理逻辑和判断,从而生成类似pillar的变量数据。下面,同样以apache为例讲述Salt Formulas编写逻辑。Formulas结构如下:
1.
2├── /srv/salt/apache/conf.sls
3├── /srv/salt/apache/init.sls
4└── /srv/salt/apache/map.jinja
Formulas的核心便在于map.jinja的编写,如上Apache对应的map.jinja样例内容如下:
1{% set apache = salt['grains.filter_by']({
2'Debian': {
3'server': 'apache2',
4'service': 'apache2',
5'conf': '/etc/apache2/apache.conf',
6},
7'RedHat': {
8'server': 'httpd',
9'service': 'httpd',
10'conf': '/etc/httpd/httpd.conf',
11},
12}, merge=salt['pillar.get']('apache:lookup')) %}
这样一来,apache对应的主sls(init.sls)内容则可以改写为如下:
1{% from “apache/map.jinja” import apache with context %}
2apache:
3pkg:
4 - installed
5 - name: {{ apache.server }}
6service:
7 - running
8 - name: {{ apache.service }}
9 - enable: True
少了复杂的判断逻辑,多了变量数据的简单使用!
三、结合Pillar的Formulas
Salt Formulas 还可以通过结合Pillar实现更多的扩展。同样以上述Apache的配置为例,需要编写conf.sls来完成apache的配置,结合Formulas Map 概念之后,它可能变成如下内容:
注意上述配置里,除了导入map.jinja预定义内容外,还有一行source配置使用了奇怪的salt[“pillar.get”][“apache:lookup:config:tmpl”],熟悉pillar的应该不陌生,这便是结合了pillar来完成state的定义。
事先在/srv/pillar/top.sls里包含apache.sls,而后在这个pillar定义文件里添加对应内容来重写映射关系:
1apache:
2 lookup:
3 config:
4 tmpl: salt://apache/files/redhat/
5 server: my_custom_apache
这样一来,便可以基于Formulas map基础上做更多的特色化配置。
四、Salt Formulas 制作
如你所见,Formulas其实应该算是State的集成和封装,事实上,Github也已经有很多的*-Formulas state出现,一个标准的*-Formulas 拥有以下结构:
1foo-formula
2|-- foo/
3| |-- map.jinja
4| |-- init.sls
5| `-- bar.sls
6|-- CHANGELOG.rst
7|-- LICENSE
8|-- pillar.example
9|-- README.rst
10`-- VERSION
具体可参照Github上已有的Formulas样例,这里不再赘述。
参考内容:
本篇根据 Colstuwjx的博客 salt相关篇整理。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/salt-formulas/5591.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.