[salt 安装和查看版本]


安装 省略


查看版本: salt --versions-report


【salt的目录结构】

环境是有默认的,不过可以更改配置/etc/salt/master文件中file_roots

file_roots:

  base:

    - /data1/salt/base/

  db:

    - /data1/salt/db/

  dev:

    - /data1/salt/dev/

  prod:

    - /data1/salt/prod/


saltstack知道这些就很好用了_第1张图片



【先掌握saltstack的SLS文件命名空间问题】


遵照以下规则:

  1. sls是扩展名

  2. .sls是被省略的(如 zabbix.sls使用的时候 为 zabbix)

  3. 存在包的时候 如:执行包1/xxx.sls ,用包1.xxx的方式表示

  4.  如果包目录创建一个init.sls的文件,引用的时候仅指定该目录即可 (例如 包1/init.sls 可以简称为 包1)

  5. 如果一个目录下同时存在包1.sls 和 包1/init.sls,那么包1/init.sls 将被忽略,SLS文件引用的包1将只引用包1.sls 





【从以下三个执行方式就可以理解以上说的了】


salt "dev-mysql001" state.highstate  -v test=true


highstate意思就是从base环境(默认是执行base环境)目录下的top.sls开始执行


所以你的top.sls就可能写成以下这个样子

base:

    '*':

        - init         # the system init

        - users        # add users three user one pubkey

        - sudoer        # config sudoer

        - yum          # repos config file

        - hosts         # sync host and resolve 

        - ssh          # ssh-client,ssh-server config

        - ntpd         # service ntpd

        - syslog        # log server config

        - monitor       # zabbix,salt-minion config

        - vim          # vim,vimconfig vimcolor 




salt 'dev-mysql001' state.sls monitor -v test=true


state.sls的意思是执行指定的一个.sls文件。 monitor更具sls命名规则的第4条规则,执行包1下面的init.sls


可能monitor包下面的sls文件就这样写的了

# cat monitor/init.sls 

include:

   - .zabbix


# cat monitor/zabbix.sls 

zabbix-agent:

    pkg:

        - installed

        - names: 

            - zabbix-agent



salt "dev-mysql001" state.sls  saltenv='prod'  nginx.stock


指定的是prod环境,而不是默认的base环境


【关于其他的嘛,知道一下几点就可以了】

1 懂得如何-v test=true 去验证 (cmd.rum 执行命令这个是没用的哦记住哦,别犯傻)

2 salt "dev-mysql001" cmd.run  "you command" 

 注意"you command " 和 'you command' 的区别,双引号中可以使用变量如

    for i in dev-app001.novalocal; do salt "$i" cmd.run "hostname `echo $i| sed 's#\.novalocal##g'` " ;done


3 slat "dev-mysql001" test.ping

4 知道如何tail -f /var/log/salt/minion 查看(master执行的会在minion中生成日志)

5 知道如何调整minion配置文件中log_level = debug这个调整在排查的时候很有作用(默认是#log_level: warning)

6 观察执行结果中的绿色 ×××  红色代表啥意思~~·

    ×××是即将要更改的(test=true模式中)

    蓝色是更改了的

    绿色为更改

    红色更改失败

7 获取静态minion端的静态变量

salt "dev-mysql001" grains.items
 
salt "dev-mysql001" grains.ls
 
salt "mysql001" grains.item fqdn


【关于如何写.sls文件,如果理解一上的,百度百度就知道如何写了】





【关于自带的模块】

1 拷贝文件

salt "shnh-db001*" cp.get_file salt://monitor/file/db.conf /data1/env/zabbix30/etc/zabbix_agentd.d/db.conf

salt:// 对应的根目录是 master 配置文件中的 file_roots 的 base 项。


问题: 

1 权限不能同步,不如x权限不能同步的想cp -p一样保持。

    解决方法:cmd.run 'chmod +x xxx.file'

2 只能是相对salt目录



【自定义grains的方法】

  1. 可以在minion端写,并且重启salt-minion

  2. 在master端写.py脚本,然后同步到指定的或者所有的minion端


方法1:

参考:http://blog.csdn.net/hnhuangyiyang/article/details/50410709

步骤

在minion.d下创建test.conf文件定义grains

grains:   #这是一个标签

    idc:

        - hhe

        - nice

    user: cuizhiliang



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

minion端获取验证:

[root@dev-vhost012 minion.d]# salt-call -l error grains.item idc

local:

    ----------

    idc:

        - hhe

        - nice





注意: 删除这个静态变量,删除文件重启salt-minion即可。


方法二(不需要重启minion客户端)

在master端书写.py文件,然后同步到指定的minion端jike

参考:http://blog.csdn.net/hnhuangyiyang/article/details/50410709


在file_roots目录下(默认是/srv/salt/),如果更改就是base目录的那个file_roots下面。


1. 在此目录下创建_grains目录(/data1/salt/base/_grains),在建立你的py文件,且py文件中返回值要是一个字典形式,且脚本一定要有执行权限。

2. 写wlink.py文件

[root@dev-mon001 _grains]# cat wlink.py 

def wlink():  
    wlink={}  
    wlink['wlink']='yes'  
    return wlink



3.增加可执行权限

chmod +x wlink.py


4 同步到指定的minion

[root@dev-xxx001 _grains]# salt  "localhost.localdomain.a.pa.com"  saltutil.sync_grains  

localhost.localdomain.a.pa.com:

    - grains.wlink


5 验证获取

[root@dev-xxx001 _grains]# salt  "localhost.localdomain.a.pa.com"  grains.item wlink

localhost.localdomain.a.pa.com:

    ----------

    wlink:

        yes




注:删除这个grains,删出文件,在同一一次即可。




【pillar】

1 master 端定义

2 master配置文件中找到pillar_roots (默认/srv/pillar)

3 确定pillar_opts: True 这个参数,表示master配置文件都将当做pillar的key/value

4 pillar如何定义,如何使用

    像写sls文见一样

如:

[root@dev-vhost012 pillar]# cat top.sls 

base:

  "*":

    - data

    - users

[root@dev-vhost012 pillar]# cat users/init.sls 

users:

  user1: 4000

  user2: 4001

  user3: 4002

  user4: 4004

  user5: 4005



pillar写完后,是不需要重启master的。

验证:

salt "*" pillar.items


立刻同步到minion当中,(也可以不做,如果未生效可以使用一下  刷新pillar)

salt ‘*’ saltutil.refresh_pillar

salt shzr* saltutil.refresh_pillar



5 用途:

1 salt -I "key/value"  过滤出对已的客户端 (不常用)

2 使用咋模板当中(常用)


如:

[root@dev-vhost012 base]# pwd

/data1/salt/base

[root@dev-vhost012 base]# cat top.sls 

base:

    "*":

        - users


[root@dev-vhost012 base]# cat users/init.sls 

{% for user, uid in pillar.get('users',{}).items() %}

`user`:

  user.present:

    - uid: `uid`

{% endfor %}



【pillar中查看nodegroups】

查看nodegroups的方法

1 cat /etc/salt/master 文件或者 cat /etc/salt/master.d/ 配置文件

2 pillar.items查看

salt "dev-db001.a.pa.com" pillar.items |grep -A10 nodegroups

salt "dev-db001.a.pa.com" pillar.item master



[salt的job 相关遇见]

master端显示正在运行的job

salt-run jobs.active


结束指定的jobs

salt '*' saltutil.term_job 20141230094047407913


salt "10.20.101.97" saltutil.kill_job 20160728144218830252


slave端可以查看正在cache的job

/var/cache/salt/minion/proc/20160728144218830252


[salt-run命令]

一般在master端进行执行

salt-run [options] [runner.func]

salt-run manage.status   ##查看所有minion状态

salt-run manage.down     ##查看所有没在线minion

salt-run manged.up       ##查看所有在线minion






###########################  salt 报错解决 ##########################

salt 报错解决:

If you are confident that you are connecting to a valid Salt Master, then remove the master public key and restart the Salt Minion.

The master public key can be found at:

/etc/salt/pki/minion/minion_master.pub



解决:

master 端删除key

salt -d app001.a.pa.com -y


client 端 删除salt-master的key缓存

rm /etc/salt/pki/minion/minion_master.pub

重启salt-minion

/etc/init.d/salt-minion restart


master端 接收

salt-key -a app001.a.pa.com -y 


clinet 这个而被重新生成

/etc/salt/pki/minion/minion_master.pub