zoukankan      html  css  js  c++  java
  • Salt-Formulas的使用

    Saltstack自0.17.x版本开始引进Formulas的概念,旨在通过简化State和集成数据来实现State的友好管理。根据SALT FORMULAS的官方文档,在完成手动添加formula目录后,formula应该提供一些默认的配置而立即可用。如果需要进一步的配置,大部分的formulas可以通过Pillar数据进行配置,可以参考每个Formula仓库的pillar.example文件查询可用的配置。

    一、未集成的State

    先来看下编写State的一般样例:

    1. apache:
    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 %}
    2. apache:
    3. pkg:
    4. - installed
    5. - name: {{ apache.server }}
    6. service:
    7. - running
    8. - name: {{ apache.service }}
    9. - enable: True

    少了复杂的判断逻辑,多了变量数据的简单使用!

    三、结合Pillar的Formulas

    Salt Formulas 还可以通过结合Pillar实现更多的扩展。同样以上述Apache的配置为例,需要编写conf.sls来完成apache的配置,结合Formulas Map 概念之后,它可能变成如下内容:

    salt-formulas-pillar

    注意上述配置里,除了导入map.jinja预定义内容外,还有一行source配置使用了奇怪的salt["pillar.get"]["apache:lookup:config:tmpl"],熟悉pillar的应该不陌生,这便是结合了pillar来完成state的定义。

    事先在/srv/pillar/top.sls里包含apache.sls,而后在这个pillar定义文件里添加对应内容来重写映射关系:

    1. apache:
    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 拥有以下结构:

    1. foo-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样例,这里不再赘述。

    参考内容:

    salt官网

    Forrest Alvarez Demo

  • 相关阅读:
    Wireshark的简介
    Node.js + Express 构建的订餐系统
    java 文件下载支持中文名称
    java判断A字符串中是否包含B字符
    Java查询目录下的所有文件(包括子目录)
    Java从指定URL下载文件并保存到指定目录
    Java逻辑分页代码
    JS实现文字向上无缝滚动轮播
    JAVA调用外部安装7-Zip压缩和解压zip文件
    Zip文件和RAR文件解压
  • 原文地址:https://www.cnblogs.com/andy6/p/11359245.html
Copyright © 2011-2022 走看看