saltstack(五) saltstack的state状态管理

一,YAML语法

  首先先了解一下YAML,默认的SLS文件的renderer是YAML renderer。YAML是一个有很多强大特性的标记性语言。Salt使用了一个YAML的小型子集,映射非常常用的数据结构,像列表和字典。YAML renderer的工作是将YAML数据格式的结构编译成为Python数据结构给Salt使用。

  YAML语法有三个注意事项,具体如下:

  1,使用空白字符为文件缩排表示结构,不过不能使用TAB

  2,注释用#号

  3,字符串平常不使用引号,如果有需要,可以使用单引号或双引号。使用双引号表示字符串时,特殊字符可以通过倒斜线(\)来进行定义

具体用法

 1,列表:短杠(-)+ 空白字符
        - henry
        - sina
        等价于:[‘henry‘,‘sina‘] 2,字典:key和value通过冒号(:)+空白字符隔开
        name: henry
        site: http://www.saltstack.cn/
        等价于:{‘name‘:‘henry‘,‘site‘:‘http://www.saltstack.cn/‘}
 3,多层结构:通过缩进来表示层级
        - henry:
            - sites:
              - blog: http://www.saltstack.cn/
        等价于:[{‘henry‘:[{‘sites‘:[{‘blog‘:‘http://www.saltstack.cn/‘}]}]}]

官网地址:http://docs.saltstack.cn/topics/yaml/index.html

二,jinja

  Salt默认使用Jinja2模板系统来生成YAML,是python语言开发的一个模板引擎,类似于Djingo模板系统

jinja模块的用法:

 1 变量:{{ foo }},变量如果是字典的话可以使用{{foo.bar}}或{{foo[‘bar‘]}}
 2 注释:{# comment #}
 3 for:                          ##可以使用for循环取值
 4   {% for eachitem in items %}
 5     {{ eachitem }}
 6   {% endfor %}
 7 if:                           ##可以做if条件判断
 8   {% if GFW %}
 9     welcome to China!
10   {% elif not Internet %}
11     welcome to North korea!
12   {% else %}
13     Freedom
14   {% endif %}

三,State Tree

  Top file:配置管理入口文件,和pillar类似,指定minions需要完成那些配置管理,默认为top.sls
  注:在定义top.sls时,会先找apache/init.sls,如果没有的话,会找apache.sls
  base:
    ‘*‘:
      - apache
  sls模块使用点(.)来分割,如apache.install等于salt://apache/install.sls或salt://apache/install/init.sls
  Include/Extend:sls文件间可以通过include及extend来引用和扩展
  sls中ID必须唯一,且在该ID下的同一类的状态管理模块只能有一个,所谓的slsID 就是定义sls文件时最开始定义在开头的名字。
  0.17.0 salt增加了state_auto_order参数(默认值为True),使state在没有Requisites的情况下按照从上而下的顺序进行执行

四,Requisites(相当于sls流程控制,那个先执行,那个后执行等) 

  require:本state执行时需要先执行那些state
  require_in:与require位置相反
  watch:除了require外,也会监测依赖的state的状态,如果状态发生变化,做出反应(例如监控文件变化,发生变化后立即重启服务)
  watch_in: 与watch位置相反
  prereq:0.16.0 新增的功能,会通过test=True接口检查所依赖的state的状态,如果状态发生变化,执行
  prereq_in:相反

五,下面介绍三个模块的用法,更多模块用法请参考官网

 官网地址:https://docs.saltstack.com/en/latest/ref/states/all/

 软件包状态管理模块
 模块名:pkg
 功能:管理软件包状态,会根据操作系统不同,选择对应安装方式
 基本操作:

pkg.installed:     #确保软件包已安装,如果没有安装进行安装
pkg.latest:        #确保软件包是最新版本,如果不是,进行升级
pkg.remove:        #确保软件包已卸载,如果之前已安装,进行卸载
pkg.purge:         #除remove外,也会删除其配置文件

 文件状态管理模块:
  模块名:file
  功能:管理文件状态
  基本用法:

file.managed:     #保证文件存在并且为对应的状态
file.recurse:      #保证目录存在并且为对应的状态
file.absent:       #确保文件不存在,如果存在则进行删除操作

  服务状态管理模块:
  模块名:service
  功能: 管理服务状态
  基本用法:

service.running        #确保服务处于运行状态
service.enabled        #确保服务会开机自动启动
service.disabled    #确保服务不会开机自启动
service.dead        #确保服务当前没有运行

六,实例操作

(一)、安装apache

top.sls
    base:
      ‘*‘:
        - apache
init.sls

apache:                    ##slsID
  pkg.installed:                        ##安装httpd
    - name: httpd
  file.managed:
    - name: /etc/httpd/conf/httpd.conf  ##拷贝/srv/salt/apache/httpd.conf到minion的/etc/httpd/conf/httpd.conf
    - source: salt://apache/httpd.conf
    - require:                      ##检查apache有没有安装成功
      - pkg: apache
  service.running:
    - enable: True
    - name: httpd
    - watch:                       ##watch检测配置文件,如果发生变化会重启服务
      - pkg: apache
      - file: apache                    

运行配置管理:salt ‘*‘ state.sls apache
salt ‘*‘ salt.highstate test=True #test=True用于测试语法

   (二)、apache需要监控8080端口,代码如下:

首先修改apache的主配置文件,修改配置文件为 listen {{ port }},修改完成后可以直接在sls文件里定义
apache:
  pkg.installed:
    - name: httpd
  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/httpd.conf
    - require:
      - pkg: apache
    - template: jinja        ##调用jinja模板渲染
    - context:              ##这里可以是context或default效果一样
      port: 8080
  service.running:
    - enable: True
    - name: httpd
    - watch:
      - pkg: apache
      - file: apache
如果多台主机监听的端口不一样,具体修改如下:
    apache:
  pkg.installed:
    - name: httpd
  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/httpd.conf
    - require:
      - pkg: apache
    - template: jinja
    - defaults:
      {% if grains.id == "10.13.41.80" %}
        port: 8080
      {% elif grais.id == "10.13.41.81" %}
        port: 8081
      {% else %}
        port: 80
      {% endif %}
  service.running:
    - enable: True
    - name: httpd
    - watch:
      - pkg: apache
      - file: apache

为了让sls文件不参杂业务数据,业务数据应该独立存放,到了该pillar登台的时候了。

/srv/pillar/apache/init.sls
apache:
  {% if grains.id == "test" %}
     port: 8081
  {% elif grains.id == "test1" %}
     port: 8082
  {% else %}
     port: 80
  {% endif %}
 /srv/pillar/top.sls
 base:
   ‘*‘:
     - apache

salt ‘*‘ saltutil.regresh_pillar  ##刷新pillar
salt ‘*‘ pillar.get apache:port   ##取minion的pillar信息

/srv/salt/apache/deploy.sls
- template: jinja- defaults:   port:{{salt[‘pillar.get‘](‘apaceh:port‘,80)}}

saltstack的状态管理state就介绍到这里。

时间: 2024-10-10 23:22:12

saltstack(五) saltstack的state状态管理的相关文章

开启 J2EE(五)— Servlet之状态管理

HTTP无状态协议 首先我们要知道: HTTP协议是无状态协议. 我们知道HTTP协议就是服务器通过Request从浏览器接收和Response向浏览器输出的这么一个过程(浏览器和服务器的交互过程). 所谓无状态也就是完成一个过程后(客户端和服务器 就断开了),下一个过程如果需要前面的信息,它还需要重新进行一次,服务器不能记住上次的请求. 这样可能就是在频繁进行相同的请求传送时,数据量增大,效率降低.所以,如果在服务器不需要先前信息时它的应答就较快. 那么,如何让服务器知道不同的请求是否来自同一

SaltStack(五) SaltStack与ZeroMQ

一.ZeroMQ描述 我们进行自动化运维大多数情况下,是我们的服务器数量已经远远超过人工SSH维护的范围,SaltStack可以支数以千计,甚至更多的服务器,这些性能的提供主要来自于ZeroMQ,因为SaltStack地城是基于ZeroMQ进行高效的网络通信,ZMQ用于node与node间的通信,node可以是主机也可以可以是进程. 二.ZeroMQ简介 ZeroMQ(我们通常还会OMQ,Zmq等来表示)是一个简单好用的传输层,像框架一样的一个套接字库,他使用的socket编程更加简单.简洁和性

程序设计模式 —— State 状态模式

我应该如何阅读? 本文将使用优雅的文字风格来告诉你什么是状态模式. 注意: 1.在阅读本文之前请保证你已经掌控了 面对对象的思想与 多态的基本概念,否则将难以理解. 2.本文实现将用C++实现,你不一定必须学会C++,这些代码都有非常丰富的注释和简单的语法. 3.请不要跳着看,除非你已经学会. 那么现在开始吧 或许你会以为是类的各种状态,其实差不多.但是还有各种行为 允许一个对象在其内部状态改变时改变它的行为.实例化的对象看起来似乎修改了它的类 首先,状态,顾名思义你应该就差不多明白.它可以表示

vue组件化开发-vuex状态管理库

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试.状态快照导入导出等高级调试功能. 以上是vuex的官方文档对vuex的介绍,官方文档对vuex的用法进行了详细的说明.这里就不再细讲vuex的各个用法,写这篇博客的目的只是帮助部分同学更快地理解并上手vuex.

第92讲 SparkStreming中的Transformations和状态管理

本期内容: 1.SparkStreaming中的Transforamtions 2.SparkStreaming中的状态管理 一.DStream就是一个RDD之上的一个抽象,DStream和时间结合起来就不断的触发产生RDD的实例,可以说我们对Dstream的操作就初步定义了对RDD的操作,只不过需要时间的间隔也就是internalbatch去激活这个模板,生成具体的RDD的实例和具体的job. 二.我们鼓励Repartition,更多的是把更多的partition变成更少的partition,

理解Vue的状态管理模式Vuex

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 状态管理模式.集中式存储管理,一听就很高大上,蛮吓人的.在我看来 vuex 就是把需要共享的变量全部存储在一个对象里面,然后将这个对象放在顶层组件中供其他组件使用.这么说吧,将vue想作是一个js文件.组件是函数,那么vuex就是一个全局变量,只是这个"全局变量"包含了一些特定的规则而已. 在vue的组件化开发中,经常会遇到需要将

设计模式---状态变化模式之state状态模式(State)

前提:状态变化模式 在组建构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“状态变化”模式为这一个问题提供了一种解决方案. 典型模式 状态模式:State 备忘录模式:Memento 一:State状态模式 (一)概念 允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化. (二)动机 在软

基于vue前端状态管理模式

本文仅介绍及区分localstorage.vuex以及vue的全局变量.组件. 一.localstorage简介 localStorage.sessionStorage以及cookie都是在浏览器用来存储数据的,只是作用于浏览器,不会存在与服务器交互的情况.sessionStorage只在当前的域名中有效,重新打开一个新窗口就会重新创建一个sessionStorage对象.而localstorage会一直存在,直到我们手动清除浏览器数据,否则会一直存在浏览器中. 二.vuex简介 vuex是专门

设计模式(20)--State(状态模式)--行为型

作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.模式定义: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式. 状态模式允许一个对象在其内部状态改变的时候改变其行为.这个对象看上去就像是改变了它的类一样. 2.模式特点: 状态模式的主要优点在于封装了转换规则,并枚举可能的状态,它将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为,还可以