第三章:SaltStack配置管理2 min read

  • A+
所属分类:SaltStack

   

目录:

  1. YAML语法

    1.1 YAML格式

  2. SaltStack状态管理

    2.1 SaltStack模块存放位置

    2.2 编写SaltStack状态模块

    2.3 SaltStack高级状态

       

   

1. YAML语法  

 

   SaltStack配置文件是由YAML语言编写的,YAML是“另一种标记语言”的外语缩写,但为了强调这种语言以数据作为中心,而不是以置标语言为重点,而用返璞词重新命名,它是一种直观的能够被电脑识别的数据序列化格式,是一种可读性高,并且容易被人类阅读,容易喝脚本语言交互,用来表达资料序列的编程语言。类似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单很多。

   YAML使用一个固定的缩进风格表示数据层结构关系,Salt需要每个锁进级别又两个空格组成(1个空格会报错,3个空格启动不起来),不能使用tabs

  

1.1 YAML格式

  

多行缩进:

   数据结构可以用类似大纲的缩排方式呈现,结构通过缩进表示,连续的项目通过“-”来表示,map结构里面的key/value对用冒号“:”来分割,样例如下:

house:
  family:
    name: Doe
    parents:
      - John
      - Jane
    children:
      - Paul
      - Mark
      - Simone
  address:
    number: 34
    street: Main Street
    city: Nowheretown
    zipcode: 12345

      

注意:

  1.字串不一定要用双引号标识

  2.排中空白字符的数目并不是非常重要,只要相同阶层的元素左侧对齐就可以了(不不能使用TAB字符);

  3.在文件中加入选择性的空行,以增加可性;

  4.在一个档案中,可同包含多个文件,并用“——”分隔;

  5.选择性的符号“...”可以用来表示档案尾(在利用串流的通中,非常有用,可以在不关串流的情况下,号)。

  6.-”代表列表(所以可以有多个)

   

单行缩写:

   YAML也有用来描述好几行相同结构的数据的缩写语法,数组用'[]'包括起来,hash'{}'来包括。因此,上面的这个YAML能够缩写成这样:

house:
  family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] }
  address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 }

  

2. SaltStack状态管理

  

2.1 SaltStack模块存放位置

  

我们要写一个状态模块,我们要写在哪儿?

SaltStack的状态模块路径在那里配置?

/etc/salt/master

   

配置该配置文件(我们在这里配置告诉salt去哪里去找状态模块):

file_roots:
  base:
    - /srv/salt/base
  dev:
    - /srv/salt/dev
  test:
    - /srv/salt/test
  prod:
    - /srv/salt/prod

注意:这里的base目录是默认必须存在的,改完配置需要重启,配置错误是启动不起来的

    

创建我们配置的目录:

mkdir -p /srv/salt/{base,dev,test,prod}

   

重启salt

systemctl restart salt-master.service

    

报错可以使用这个查看:systemctl status salt-master.service

  salt报错总结:

    1.主机名错误

    2.minion端指向master错误

    3.id错误,如果id变了需要变得东西

    4.配置文件的模块配置路径是否错误

   

2.2 编写SaltStack状态模块

   

这里以安装apache为例

说明:在编写状态文件的时候文件名必须以slsSaltStack的缩写)结尾命名。

[root@linux-node1 ~]# cd /srv/salt/base/
[root@linux-node1 base]# cat apache.sls 
apache-install:      # salt全局唯一ID声明(可自己定义,建议易读)
  pkg.installed:     # pkg是一个状态模块.installed状态模块的方法(用点引用)
    - name: httpd    # name是状态模块方法的参数
##这里的installed是状态,而非是安装,salt检测到没有httpd就去安装一个 
apache-service:      # id
  service.running:   # service是状态模块.running是状态模块的方法(保证该服务处于运行状态)
    - name: httpd    # 状态模块方法的参数
    - enable: True   # 状态模块的参数

     

node2执行该模块(state是个执行模块,它会在默认的base目录下会找apache这个文件,不过sls是被省略的)

[root@linux-node1 base]# salt "linux-node2*" state.sls apache   #执行单个状态
linux-node2.example.com:       #minion id
----------
          ID: apache-install  #状态id
    Function: pkg.installed   # 状态模块和方法
        Name: httpd           #参数
      Result: True            #成功
     Comment: The following packages were installed/updated: httpd  #描述信息
     Started: 22:51:17.450220   #启动时间
    Duration: 26470.913 ms      #使用的时间(秒)
     Changes:                   #如下安装的东西
              ----------
              apr:
                  ----------
                  new:
                      1.4.8-3.el7
                  old:
              apr-util:
                  ----------
                  new:
                      1.5.2-6.el7
                  old:
              httpd:
                  ----------
                  new:
                      2.4.6-67.el7.centos.6
                  old:
              httpd-tools:
                  ----------
                  new:
                      2.4.6-67.el7.centos.6
                  old:
              mailcap:
                  ----------
                  new:
                      2.1.41-2.el7
                  old:
----------
          ID: apache-service
    Function: service.running
        Name: httpd
      Result: True
     Comment: Service httpd has been enabled, and is running
     Started: 22:51:44.390769
    Duration: 297.177 ms
     Changes:   
              ----------
              httpd:
                  True

Summary for linux-node2.example.com
------------
Succeeded: 2 (changed=2)
Failed:    0
------------
Total states run:     2
Total run time:  26.768 s

执行成功!

   

2.3 SaltStack高级状态

  

2.3.1 多级目录引用模块

  

[root@linux-node1 base]# pwd
/srv/salt/base
[root@linux-node1 base]# mkdir -p web
[root@linux-node1 base]# mv apache.sls web/
[root@linux-node1 base]# salt 'linux-node2*' state.sls web.apache

   

2.3.2 编排执行高级状态

   

这里的top.sls其实就是将所有的模块编排在一个文件里然后在默认的路径下找top.sls这个模块,然后去执行它

编写top.sls(这是默认的命名方式,在配置文件master配置)

[root@linux-node1 base]# vim top.sls
base:
  'linux-node1.example.com':
    - web.apache
  'linux-node2.example.com':
    - web.apache

   

执行top.sls

[root@linux-node1 base]# salt '*' state.highstate

    

说明:state.highstatesalt的一个高级状态执行模块,当执行此状态模块时,谈会去base目录下读取top.sls这个文件执行它;top.sls可以进行minion的编排,对monion进行分类执行状态模块,适合在生产环境中使用。

   

   

zhaoyulin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: