一 Saltstack安装配置认证

   Saltstack安装

   1 两台机器  

     172.7.15.106 172.7.15.111

   2 设置hostname以及hosts

    172.7.15.106 web9.aming.com

    172.7.15.111 web10.aming.com

   3 关闭selinux,情况iptables规则

   4 106上:

     yum install -y epel-release

     yum install -y salt-master salt-minion

   5 111上:

     yum install -y epel-release

     yum install -y salt-minion

   Saltstack启动服务

   1 106上:

     vim /etc/salt/minion  //大概16行修改或增加

     master: 172.7.15.106

   2 启动服务

     service salt-master start

     service salt-minion start

  3 111上:

    vim /etc/salt/minion //大概16行增加或修改

    master: 172.7.15.106

  4 启动服务

    service salt-minion start

  Saltstack配置认证

  以下操作都是在106上:

  salt-key -a web10.aming.com

  此时我们在client的/etc/salt/pki/minion目录下面会多出一个minion_master.pub文件

  可以使用salt-key命令查看到已经签名的客户端

  salt-key可以使用-A签名所有主机,也可以使用-d删除指定主机的key

  Saltstack远程执行命令

  示例1: salt '*' test.ping 这里的*表示已经签名的客户端,也可以指定其中一个,比如wen10.aming.com

  示例2: salt '*' cmd.run 'df -h'

  说明:这里的* 必须是master上已经被接受过的客户端,可以通过salt-key查到,通常是我们已经设定的id值.关于这部分内容,它支持通配,列表以及正则.比如两台客户端web10 web11 ,那我们可以写成salt 'web*' salt 'web1[01]' salt -L 'web10,web11' salt -E 'web(10|11)'等形式,使用列表,即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项>.它还支持grains,加-G选项,pillar加-I选项,下面会介绍到. 

  

二 saltstack grains 

   1 grains是在minion启动是收集到的一些信息,比如操作系统类型 ,网卡IP,内核版本,CPU架构等.

     salt 'web10.aming.com' grains.ls 列出所有的grains项目名字

     salt 'web10.aming.com' grains.items列出所有grains项目以及值

   2 grains信息并不是动态的,并不会时时变更,它只是在minion启动时收集到的.

   3 我们可以根据grains收集到的一些信息,做配置管理工作.

   4 grains支持自定义信息.

  saltstack-自定义grains

   1 111上:

     vim /etc/salt/grains //添加:

     role: nginx

     env: test

   2 重启minion服务

     service salt-minion restart

   3 106上:

     获取grains:

     salt '*' grains.item role env

   4 可以借助grains的一些属性信息来执行

      salt -G role:nginx cmd.run 'hostname'

三 saltstack pillar

   Saltstack-pillar

   1 pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息。像一些比较重要的数据(密码)可以存在pillar里,还可以定义变量等。

   2 配置自定义pillar

    vim /etc/salt/mster

    找到如下配置:

    pillar_roots:

     base:

       - /srv/pillar  //yaml格式

    去掉前面的井号

    mkdir /srv/pillar

    vim /srv/pillar/test.sls //内容如下  自定义的pillar

    conf: /etc/123.conf

    vim /srv/pillar/top.sls //内容如下

    base:

      'web10.aming.com':

        - test

    重启master

    /etc/init.d/salt-master restart

    当更改完pillar配置文件后,我们可以通过刷新pillar配置来获取新的pillar状态:

    salt '*' saltutil.refresh_pillar  //刷新

    验证: salt '*' pillar.item conf  //salt ‘web10.aming.com' pillar.items

    pillar同样可以用来作为salt的匹配对象。比如salt -I 'conf:/etc/123.conf' test.ping

四 Saltstack配置Apache

  Saltstack -配置管理安装Apache

  106上:vim /etc/salt/master //搜索找到file_roots

  打开如下内容的注释:

  file_roots:

    base:

     - /srv/salt

  mkdir /srv/salt;cd /srv/salt

  vim /srv/salt/top.sls //加入如下内容

  base:

   '*':

    - apache

  意思是,在所有的客户端上执行Apache模块

  重启/etc/init.d/salt-master restart

  vim /srv/salt/apache.sls //加入如下内容,这个就是apache模块的内容

  apache-service:

   pkg.installed:

    - names:   //这里如果只有一个服务,那么就可以写成- name: httpd不用再换一行了

     - httpd

     - httpd-devel

   service.running:

    - name: httpd

    - enable: True

   说明,apache-service是id的名字,自定义的。pkg.installed为安装包函数,下面是要安装的包的名字。service.running也是一个函数,来保证指定的服务启动,enable表示开机启动。

   执行:salt 'web10.aming.com' state.highstate 

五 saltstack文件和目录管理

   file_test:

     file.managed:

       - name: /tmp/aminglinux.com

       - source: salt://test/123/1.txt

       - user: root

       - group: root

       - mode: 644

     说明:第一行的file_test为自定义的名字,表示该配置段的名字,可以在别的配置段中引用它,source指定文件从哪里拷贝,这里的test相当于是/srv/salt/test

    saltstack-配置管理目录

    file_dir:

      file.recurse:

        - name: /tmp/testdir/

        - source: salt://test/123

        - user: root

        - file_mode: 644

        - dir_mode: 755

        - mkdir: True

        - clean: True //加上它之后,源删除文件或目录,目标也会跟着删除,否则不会删除.

    参考:http://www.0550go.com/automation-deployment/saltstack/saltstack-file-recurse.html



七 saltstack远程执行命令

  saltstack-配置管理远程命令

  cmd_test:

    cmd.run:

      - onlyif:test -f /tmp/aminglinux.txt

      - names:

        - touch /tmp/111.txt

        - mkdir /tmp/1233

      - user:root

  还可以加unless,和onlyif正好相反




八 saltstack远程执行shell脚本

  Saltstack - 配置管理远程脚本

  shell_test:

    cmd.script:

      - source: salt://test/1.sh

      - user: root  //指对方机器上的用户



 cat /srv/salt/test/1.sh

  #! /bin/bash

  touch /tmp/111.txt

  if [ -d /tmp/1233 ]

  then 

   rm -rf /tmp/1233

  fi


九 saltstack管理任务计划

  Saltstack - 配置管理任务计划

  cron_test:

    cron.present:

      - name: /bin/touch /tmp/111.txt

      - user: root

      - minute:'*'

      - hour: 20

      - daymonth: '*'

      - month: '*'

      - dayweek: '*'

   注意,*需要用单引号引起来。当然我们还可以使用file.managed模块来管理cron,因为系统的cron都是以配置文件的形式存在。想要删除该cron,需要增加:

  cron.absent

    - name: /bin/touch /tmp/111.txt

  两者不能共存,要想删除一个cron,那之前的present就得去掉。


十 saltstack几个常用的命令

  Saltstack - 可能会用到的命令

  cp.get_file 拷贝master上的文件到客户端

  salt '*' cp.get_file salt://test/1.txt /tmp/123.txt

  cp.get_dir 拷贝目录

  salt '*' cp.get_dir salt://test/conf /tmp/   //会自动在客户端创建conf目录,所以后面不用加conf,如果写成/tmp/conf/ 则会在/tmp/conf/目录下又创建conf

  salt-run manage.up 显示存活的minion

  salt '*' cmd.script salt://test/1.sh  命令行下执行master上的shell脚本