自动化运维工具SaltStack03 – 之SaltStack的配置管理1

  • A+
所属分类:DevOps saltstack

前面写了:

今天来写下SaltStack的配置管理。

一、配置管理说明

  • 配置管理,顾名思义及配置与管理,
  • salt-master的配置文件编写格式之YAML语法说明:

          数据的结构通过缩进来表示,每一级用两个空格来表示缩进,如果有下一级结构需要以冒号结尾,连续的列表通过减号“-”来表示,减号后面需要有空格,不是以冒号结尾的冒号后面需要有空格。

  • 规则:

          salt需要每个缩进级别由两个空格组成,不支持tabs键,冒号{如果有下一级结构需要以冒号结尾,如果不是以冒号结尾则冒号后面需要有一个空格}

二、配置管理实现

2.1、修改配置文件

# vim /etc/salt/master +416
416 file_roots:        #告诉salt状态文件的位置
417   base:    #base为必须存在的,
418     - /srv/salt/base
419   dev:
420     - /srv/salt/dev
421   test:
422     - /srv/salt/test
423   prod:
424     - /srv/salt/prod

说明:

        配置文件这里也是YAML格式(注意缩进),缩进以两个空格的方式,如果没有空格或者多了空格都会报错, - 后面也是有一个空格的,多了或者没有都会报错

1.2、创建对应目录并重启master

# mkdir -p /srv/salt/{base,dev,test,prod}    #创建目录
# systemctl restart salt-master          #重启master
# salt 'linux-node1*' test.ping         #测试master与minion的连通性
linux-node1.example.com: 
True #成功

1.3、通过配置管理协议个安装httpd的状态并执行

# cd /srv/salt/base
# vim apache.sls
apache-install:    #安装状态的ID声明
  pkg.installed:    #pkg为状态模块,installed是pkg模块下的安装方法
    - name: httpd    #installed方法的参数,name是一个特殊的参数,安装的服务为httpd
注:以上整个状态的意思为:{应该有一个httpd服务,如果有则啥也不干,如果没有则下载一个}

apache-service:    #服务状态的ID
  service.running:   #service是状态模块,running是service模块下的启动方法
    - name: httpd    #方法的目标参数(对哪个目标进行操作)
    - enable: True   #目标参数的动作(True为启动)

# salt "linux-node1*" state.sls apache         #执行安装httpd的状态

1.4、执行结果与说明

自动化运维工具SaltStack03 - 之SaltStack的配置管理1

1.5、确认httpd的状态是否安装成功

自动化运维工具SaltStack03 - 之SaltStack的配置管理1

至此就验证我们的httpd状态安装启动是没问题的!!!

三、配置管理之多级目录引用

        如果需要调用多级目录可以通过.来引用,例:父目录.子目录

3.1、创建web目录并写安装tomcat的状态

# cd /srv/salt/base/
# mkdir web       #在base目录下创建web目录并进入web目录
# cd web/
# cat install-jdk.sls         #写安装JDK状态
install-jdk:
file.managed:
- name: /usr/local/src/jdk-8u121-linux-x64.tar.gz
- source: salt://web/files/jdk-8u121-linux-x64.tar.gz
- user: root
- group: root
- mode: 644
cmd.run:
- name: cd /usr/local/src && tar xf jdk-8u121-linux-x64.tar.gz -C /usr/local
- unless: test -d /usr/local/jdk1.8.0_121

set-path:
file.append:
- name: /etc/profile
- text:
- "JAVA_HOME=/usr/local/jdk1.8.0_121"
- "CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
- "PATH=$PATH:$JAVA_HOME/bin"
- "export JAVA_HOME PATH CLASSPATH"
- unless: grep "JAVA_HOME=/usr/local/jdk1.8.0_121" /etc/profile
- watch:
- file: install-jdk

# cat tomcat.sls          #安装tomcat状态
jdk-install:
  pkg.installed:         #安装jdk
    - name: java-1.8.0-openjdk

tomcat-install:
  file.managed:       #file模块下的managed的方法(分发文件方法),把master端的文件放到minion端
    - name: /usr/local/src/apache-tomcat-8.0.46.tar.gz     #放到minion端的位置
    - source: salt://web/files/apache-tomcat-8.0.46.tar.gz     #在master端的文件
    - user: root    #到minion端的文件的用户组和权限配置
    - group: root
    - mode: 755
  cmd.run:         #在状态里写shell命令,在minion端执行
    - name: cd /usr/local/src && tar zxf apache-tomcat-8.0.46.tar.gz && mv apache-tomcat-8.0.46 /usr/local/ && ln -s /usr/local/apache-tomcat-8.0.46 /usr/local/tomcat
    - unless: test -L /usr/local/tomcat && test -d /usr/local/apache-tomcat-8.0.46

# salt "*" state.sls web.tomcat     #通过多级目录调用的方式执行安装tomcat状态
说明:salt "*",这个*表示所有,即所有的minion端,也可以匹配,如linux-node1*

四、saltstack配置管理之模拟执行

        在执行的命令后面加上test=True,即这条salt命令模拟执行,不会真的执行,但是执行后会有变化的内容会以黄色字体表示出来;

# salt "*" state.sls apache test=True

五、saltstack配置管理之使master端目录下的文件生效到minion端下

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

六、saltstack配置管理之往minion端配置文件里追加内容

# cat append.sls 
/etc/profile:    #目标文件
  file.append:   #动作,追加内容
    - text:      #类型text文件
      - "#aaa"   #追加的内容

七、配置管理之状态之间的关系处理

  •  实现前置的状态执行不成功,依赖前面状态的状态不往下执行,
  • 实现监控一个状态,被监控状态内的功能发生了改变则监控的状态实现该表
# cat 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
    - user: root
    - group: root
    - mode: 644
    - template: jinja
    - defaults:
      PORT: 80
      IPADDR: {{ grains['fqdn_ip4'][0] }}
    - require:        #依赖于某个状态{即lamp-install:状态执行不成功,不执行当前状态}
      - pkg: lamp-install    #pkg指的是pkg模块,lamp-install是状态ID。

apache-conf:
  file.recurse:
    - name: /etc/httpd/conf.d
    - source: salt://web/files/apache-conf.d
    - watch_in:     #被lamp-service状态关注{即本状态内发生改变,lamp-service状态会被触发}
       - service: lamp-service   #service模块,lamp-service是ID号

php-config:
  file.managed:
    - name: /etc/php.ini
    - source: salt://web/files/php.ini
    - user: root
    - group: root
- mode: 644
    - watch_in:    #被lamp-service状态关注{即本状态内发生改变,lamp-service状态会被触发}
      - service: lamp-service     #service模块,lamp-service是ID号

lamp-service:
  service.running:
    - name: httpd
    - enable: True
    - reload: True    #重载
    - watch:      #关注apache-config状态,如果apache-config状态发生改变则触发本状态
      - file: apache-config     #file表示模块,apache-config为ID号

说明:

         require     #我依赖某个状态,即依赖的状态触发成功后,该状态便执行

         require_in  #我被某个状态依赖,即该状态执行后,依赖于该状态的状态自动触发

         watch      #我关注某个状态,即该状态关注某个状态,被关注的状态执行后自动触发该状态

         watch_in    #我被某个状态关注,即该状态被某个状态关注,改状态执行后,关注该状态的状态自动执行

八、saltstack配置管理之状态之间的判断,如果存在则不执行

# cat tomcat.sls 
jdk-install:      #安装jdk
  pkg.installed:
    - name: java-1.8.0-openjdk

tomcat-install:    #安装tomcat
  file.managed:
    - name: /usr/local/src/apache-tomcat-8.0.46.tar.gz      #minion端的文件路径
    - source: salt://web/files/apache-tomcat-8.0.46.tar.gz    #master端的文件路径
    - user: root
    - group: root
    - mode: 755    #权限
  cmd.run:    #命令模块
    - name: cd /usr/local/src && tar zxf apache-tomcat-8.0.46.tar.gz && mv apache-tomcat-8.0.46 /usr/local/ && ln -s /usr/local/apache-tomcat-8.0.46 /usr/local/tomcat    #tomcat解压,做软连接的过程
    - unless: test -L /usr/local/tomcat && test -d /usr/local/apache-tomcat-8.0.46    #判断,如果存在解压目录和软连接则不再执行

说明:

        cmd.run命令模块支持判断,用unless来实现判断

        unless     #给unless一个条件,这个条件为真则不执行,假则执行

 

 

 

发表评论

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