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 概念之后,它可能变成如下内容:

注意上述配置里,除了导入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

Salt-Formulas的使用的更多相关文章

  1. hadoop(四)MapReduce

    如果将 Hadoop 比做一头大象,那么 MapReduce 就是那头大象的电脑.MapReduce 是 Hadoop 核心编程模型.在 Hadoop 中,数据处理核心就是 MapReduce 程序设 ...

  2. linux自动化运维工具Ansible saltstack Puppet、Chef、Fabric之间的对比

    发现分布式是一个发展的趋势,无论是大型网站的负载均衡架构还是大数据框架部署,以及云存储计算系统搭建都离不开多台服务器的连续部署和环境搭建. 当我们的基础架构是分散式或者基于云的,并且我们经常需要处理在 ...

  3. salt demo 环境

    demo 环境 安装 virtualBox和vagrant 安装工具包:virtualBox, vagrant 下载 https://github.com/UtahDave/salt-vagrant- ...

  4. C# salt+hash 加密

    一.先明确几个基本概念 1.伪随机数:pseudo-random number generators ,简称为:PRNGs,是计算机利用一定的算法来产生的.伪随机数并不是假随机 数,这里的" ...

  5. 密码学应用(DES,AES, MD5, SHA1, RSA, Salt, Pkcs8)

    目录 一.数据加密标准 - Data Encryption Standard(DES) 二.高级加密标准 - Advanced Encryption Standard(AES) 三.消息摘要算法第五版 ...

  6. salt源码安装软件和yum安装软件

    上面简单列出了源码安装的sls文件书写思路. 涉及到一些固定的思路:如, 1,拷贝 解压安装时候需要依赖tar.gz存在 如果已安装则无需再次安装. 2,启动脚本 加入chk时候需要文件存在,如果已添 ...

  7. Salt安装(yum不可用时)

        salt-master安装   [salt-master]# yum install salt-master   或者 curl -L http://bootstrap.saltstack.o ...

  8. Salt 安装方式(CentOS)

    安装前必备环境:2.6.6<Pythin<3.x 本文内容是参考 中国SaltStack用户组 里面 Salt中文手册 中的安装内容实践之后总结的. 初学者可用Ubuntu系统学习安装,因 ...

  9. 翻译-Salt与Ansible全方位比较

    原文链接:http://jensrantil.github.io/salt-vs-ansible.html 作者: Jens Rantil 之前某些时候我需要评估配置管理系统.结合从他人得到的意见,我 ...

随机推荐

  1. Java垃圾回收_过程观察

    这是今天看JVM垃圾回收的时候做的实验观察. 使用工具:Java VisualVM.VisualVM GC插件 观察应用:Tomcat容器中的Web服务 1. Java VisualVM 在tomca ...

  2. Sublime Text3 安装 CTags 插件出现乱码

    1.下载ctags.exe 可以直接下载我上传好的资源:http://download.csdn.net/download/zhaoxd200808501/9971251.或者网络上其他地方也可以下载 ...

  3. 浅谈Python设计模式 - 抽象工厂模式

    声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在上一篇我们对工厂模式中的普通工厂模式有了一定的了解,其实抽象工作就是 表示针对 ...

  4. springboot 集成J2Cache

    J2Cache 是 OSChina 目前正在使用的两级缓存框架.第一级缓存使用 Ehcache,第二级缓存使用 Redis .由于大量的缓存读取会导致 L2 的网络成为整个系统的瓶颈,因此 L1 的目 ...

  5. 基于变分自编码器(VAE)利用重建概率的异常检测

    本文为博主翻译自:Jinwon的Variational Autoencoder based Anomaly Detection using Reconstruction Probability,如侵立 ...

  6. Intellij IDEA运行报Command line is too long解法

    修改项目下 .idea\workspace.xml,找到标签 <component name="PropertiesComponent"> , 在标签里加一行  < ...

  7. JSP中EL表达式的比较符号、字符串比较

    在EL表达式中我们可以使用运算符以达到我们想要的结果,运算符按作用分为以下几种: 1.算术运算符 +  例如:${6+6} .注意:在EL表达式中的‘+’只有数学运算的功能,没有连接符的功能,它会试着 ...

  8. jlink之j-scope使用

    网上看到了j-scope的用法,可以把单片机的数据显示成波形,这个和我使用的STMStudio有点类似,但是有区别: 1.STMStudio这个需要stlink结合swo的输出口,j-scope不需要 ...

  9. windows 命令

    1.查看端口占用:  netstat -ano|findstr 8080 2.查看网络端口:ipconfig/all

  10. Xamarin.Android开发

    使用 Visual Studio 生成第一个 Xamarin.Android 应用程序,并进一步了解使用 Xamarin 进行 Android 应用程序开发的基础知识.在此过程中,会介绍生成和部署 X ...