3、saltstack学习-状态管理


1、状态管理-salt安装apache

1.1 编辑主配置文件,定义几个环境。

vim /etc/salt/master
file_roots:
  base:
    - /srv/salt/base
  dev:
    - /srv/salt/dev
  test:
    - /srv/salt/test
  prod:
    - /srv/salt/prod

1.2 然后创建相应目录,重启salt

mkdir -p /srv/salt/{base,dev,test,prod} systemctl restart salt-master.service

1.3 创建文件

cd /srv/salt/base/ vim apache.sls 说明,第一部分ID:
apache-install
第1行是声明,第2行pkg是状态模块,installed是方法。 第3行,name是个特殊参数,说明这台机器应该有一个httpd,如果没有安装,如果有什么也不做。 第二部分ID:
apache-service,是服务状态管理。
同理,需要有一个httpd的服务要启动,如果启动什么也不做,没启动就启动,默认为True
apache-install:
  pkg.installed:
    - name: httpd

apache-service:
  service.running:
    - name: httpd
    - enable: True
在master上向node2上执行下边的命令,state是执行模块,sls是方法。apache是传的参数。会在base下找apache.sls文件。必须省略.sls
salt '*node2*' state.sls apache

执行后看返回结果:上边是安装,下边是启动。看change那行,改变了几个地方,可以判断执行了几个ID。

linux-node2.example.com:
----------
          ID: apache-install
    Function: pkg.installed
        Name: httpd
      Result: True
     Comment: The following packages were installed/updated: httpd
     Started: 09:46:59.759738
    Duration: 9266.372 ms
     Changes:   
              ----------
              apr:
                  ----------
                  new:
                      1.4.8-7.el7
                  old:
              apr-util:
                  ----------
                  new:
                      1.5.2-6.el7
                  old:
              httpd:
                  ----------
                  new:
                      2.4.6-97.el7.centos
                  old:
              httpd-tools:
                  ----------
                  new:
                      2.4.6-97.el7.centos
                  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: 09:47:09.032003
    Duration: 189.507 ms
     Changes:   
              ----------
              httpd:
                  True

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

 这时可以到node2上去验证了,如果手动在node2上停止httpd,再在master上执行 salt 'linux-node2*' state.sls apache可以看到只改变了一个,会把服务启动起来。

多层配置目录:

可以在base下创建多个目录,然后把相应的状态文件到到相应的目录里。

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

2、高级状态管理

从base环境的目录下去找top.sls文件,按这个文件写的内容去告诉哪个minion执行哪个状态。

2.1 编排top.sls:

master文件里默认文件就是base下的top.sls,不需要修改,就直接用这个文件。

vim /srv/salt/base/top.sls

base:
  'master-2':
    - web.apache
  'master-3':
    - web.apache

执行:

salt '*' state.highstate

3、利用高级状态管理yum安装lamp(实验未安装mysql)

3.1 编写状态文件

cd /srv/salt/base/web

vim lamp.sls

lamp-install: # 安装
  pkg.installed:
    - pkgs:
      - httpd
      - php
      - php-pdo
      - php-mysql

#配置
apache-config:
  file.managed: # 文件管理
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://web/httpd.conf #这是个相对目录,相当于base目录下的web
    - user: root
    - group: root
    - mode: 644
php-config:
  file.managed:
    - name: /etc/php.ini
    - source: salt://web/php.ini
    - user: root
    - group: root
    - mode: 644
lamp-service:
  service.running:
    - name: httpd
    - enable: True

修改top.sls文件,指定在哪个机器安装

[root@master-1 web]# vim /srv/salt/base/top.sls

base:
  'master-2':
    - web.lamp
  'master-3':
    - web.lamp

以后要修改配置文件也可以直接修改salt主机的文件,然后再执行一下就可以了

先要找一个机器安装完,把两个配置文件放到/srv/salt/base/web/下边,需要用这个文件去覆盖目标服务器。

salt '*' state.highstate

# 下边这个是之前的写法,也可以直接指定所有机器去执行lamp.sls,但没有top.sls调用灵活。

##salt '*' state.sls web.lamp

 3.2 管理目录

修改lamp.sls

lamp-install: # 安装
  pkg.installed:
    - pkgs:
      - httpd
      - php
      - php-pdo
      - php-mysql

#配置
apache-config:
  file.managed: # 文件管理
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://web/files/httpd.conf #这是个相对目录,相当于base目录下的web
    - user: root
    - group: root
    - mode: 644

apache-conf:
  file.recurse:
    - name: /etc/httpd/conf.d
    - source: salt://web/files/apache-conf.d

php-config:
  file.managed:
    - name: /etc/php.ini
    - source: salt://web/files/php.ini
    - user: root
    - group: root
    - mode: 644
lamp-service:
  service.running:
    - name: httpd
    - enable: True

根据修改将原来的配置文件也都移到files目录里

cd /srv/salt/base/web

mv httpd.conf php.ini files/

然后创建新目录管理配置段的目录,和文件。

cd /srv/salt/base/web/files

mkdir apache-conf.d
cp -a /etc/httpd/conf.d/* apache-conf.d/

先找一个节点测试一下

salt 'master-2' state.highstate test=True

然后确认没问题后所有节点执行

salt '*' state.highstate 

4、追加

[root@master-1 web]# vim append.sls               

/etc/profile:
  file.append:
    - text:
      - "# append"

salt "*" state.sls web.append

5、watche 关注 如果文件有修改,服务就重启或重载,如果配置文件有reload就重载,没有就重启。

[root@master-1 web]# vim lamp.sls 

lamp-install: # 安装
  pkg.installed:
    - pkgs:
      - httpd
      - php
      - php-pdo
      - php-mysql

#配置
apache-config:
  file.managed: # 文件管理
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://web/files/httpd.conf #这是个相对目录,相当于base目录下的web
    - user: root
    - group: root
    - mode: 644

apache-conf:
  file.recurse:
    - name: /etc/httpd/conf.d
    - source: salt://web/files/apache-conf.d

php-config:
  file.managed:
    - name: /etc/php.ini
    - source: salt://web/files/php.ini
    - user: root
    - group: root
    - mode: 644
lamp-service:
  service.running:
    - name: httpd
    - enable: True
    - reload: True
    - watch: # 只要下边的配置文件有变更,就重载服务  
      - file: apache-conf #监控的状态模块,后边是状态ID
      - file: apache-config

然后修改一下配置文件,试一下

[root@master-1 web]# salt "*" state.highstate

6、依赖某个状态,require:就是某个状态执行不成功,我就不执行。

例如安装软件如果都执行不成功,那么下边的修改配置文件就不要执行了。

[root@master-1 web]# vim lamp.sls 

lamp-install: # 安装
  pkg.installed:
    - pkgs:
      - httpd
      - php
      - php-pdo
      - php-mysql

#配置
apache-config:
  file.managed: # 文件管理
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://web/files/httpd.conf #这是个相对目录,相当于base目录下的web
    - user: root
    - group: root
    - mode: 644
    - require: #依赖某个状态
      - pkg: lamp-install

apache-conf:
  file.recurse:
    - name: /etc/httpd/conf.d
    - source: salt://web/files/apache-conf.d

php-config:
  file.managed:
    - name: /etc/php.ini
    - source: salt://web/files/php.ini
    - user: root
    - group: root
    - mode: 644
lamp-service:
  service.running:
    - name: httpd
    - enable: True
    - reload: True
    - watch: # 关注某个状态,只要下边的配置文件有变更,就重载服务
      - file: apache-conf #监控的状态模块,后边是状态ID
      - file: apache-config