grains
grains是在minion启动时收集到的一些信息,比如操作系统类型、网卡ip、内核版本、cpu架构等。
grains的信息并不是动态的,并不会实时变更,它是在minion启动时收集到的。
列出所有的grains项目名字
格式:salt ‘主机名’ grains.ls
[root@KXLZQ ~]# salt ‘*’ grains.ls
XXQ:
- SSDs
- biosreleasedate
- biosversion
列出所有grains项目以及值
格式:salt ‘主机名’ grains.items
[root@KXLZQ ~]# salt ‘*’ grains.items
XXQ:
SSDs:
biosreleasedate:
07/31/2013
biosversion:
6.00
grains支持自定义信息,等于给主机打标签
步骤
在XXQ上添加自定义grains信息
[root@XXQ ~]# vim /etc/salt/grains
添加以下内容:
role: web ##一个key对应一个value
env: test
重启minion服务
[root@XXQ ~]# systemctl restart salt-minion
在KXLZQ上根据grains信息执行命令
[root@KXLZQ ~]# salt ‘*’ grains.item role env ##列出所有grains是role env的值
XXQ:
env:
test
role:
web
KXLZQ:
env:
role:
让grains中role是web的主机运行命令w
格式: salt -G 定义的k-v cmd.run ‘命令’
[root@KXLZQ ~]# salt -G role:web cmd.run ‘w’
XXQ:
17:17:49 up 6:54, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.70.1 10:24 4:13 0.03s 0.03s -bash、
pillar
pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息。像一些比较重要的数据(密码)可以存在pillar里,还可以定义变量等。在master上给客户机打标签,更加安全。
配置自定义pillar
步骤
配置master配置文件
[root@KXLZQ ~]# vim /etc/salt/master
去掉下面参数的注释#
pillar_roots:
base: ##空两格
- /srv/pillar ##空四格
创建/srv/pillar目录,/srv/pillar目录用于存放pillar文件
[root@KXLZQ ~]# mkdir /srv/pillar
创建子和主配置文件
[root@KXLZQ ~]# cd /srv/pillar/ #移动至/srv/pillar/
[root@KXLZQ pillar]# vim top.sls #创建并编辑top.sls文件,salt都会先通过该配置文件去调用pillar的相关定义文件。
增加内容如下:
base:
‘KXLZQ’: ##空两格,定义主机- test ##空四格,定义调用的文件名称
‘XXQ’: ##空两格,定义主机 - test2 ##空四格,定义调用的文件名称
创建top.sls文件中定义的文件
[root@KXLZQ pillar]# vim test.sls
添加内容如下:
conf: /etc/123.conf
[root@KXLZQ pillar]#vim test2.sls
添加内容如下:
conf: /etc/123aa.conf
3.重启salt-master服务
[root@KXLZQ pillar]# systemctl restart salt-master
刷新pillar配置
格式:salt ‘主机名’ saltutil.refresh_pillar
[root@KXLZQ pillar]# salt ‘’ saltutil.refresh_pillar
XXQ:
True
KXLZQ:
True
查看特定pillar的值
格式:salt ‘主机名’ pillar.item 键
[root@KXLZQ pillar]# salt '’ pillar.item conf
KXLZQ:
- test ##空四格,定义调用的文件名称
conf:
/etc/123.conf
XXQ:
conf:
/etc/123aa.conf
安装配置httpd
使用saltstack来安装软件包 centOS默认使用yum安装
步骤
配置master配置文件
[root@KXLZQ ~]# vim /etc/salt/master
把下面参数#去掉,依然要留空格1、2、4
file_roots:
base:
- /srv/salt/
重启salt-master服务
[root@KXLZQ ~]# systemctl restart salt-master
创建/srv/salt目录
[root@KXLZQ ~]# mkdir /srv/salt
创建主配置文件
[root@KXLZQ ~]# cd /srv/salt/
[root@KXLZQ salt]# vim top.sls
base:
‘*’: - httpd
创建具体的安装配置文件httpd.sls,格式依然留空格1、2、4、6
[root@KXLZQ salt]# vim httpd.sls
httpd-service:
pkg.installed: - names:
- httpd
- httpd-devel
service.running: - name: httpd
- enable: True
httpd-service是id的名字,自定义的。pkg.installed 为包安装函数,下面是要安装的包的名字。service.running也是一个函数,来保证指定的服务启动,enable表示开机启动。
执行安装httpd包
格式:salt ‘主机名’ state.highstate
[root@KXLZQ salt]# salt ‘XXQ’ state.highstate
XXQ:
ID: httpd-service
Function: pkg.installed
Name: httpd
Result: True
Comment: The following packages were installed/updated: httpd
Duration: 106613.517 ms
查看XXQ上是否安装http服务
[root@XXQ ~]# ps aux |grep httpd
root 4395 0.1 0.4 224020 4992 ? 21:27 0:00 /usr/sbin/httpd -DFOREGROUND
apache 4396 0.0 0.2 224020 2952 ? 21:27 0:00 /usr/sbin/httpd -DFOREGROUND
[root@XXQ ~]# netstat -lntp |grep 80
tcp6 0 0 :::80 ::😗 LISTEN 4395/httpd
在centOS7中/lib/systemd/system/是存放服务service文件的目录
[root@XXQ ~]# ls /lib/systemd/system/httpd.service
/lib/systemd/system/httpd.service
配置管理文件
在服务端使用saltstack存放模板文件再分发到其他客户机上
步骤
配置master的salt的主配置文件
[root@KXLZQ ~]# vim /etc/salt/master
把下面参数#去掉
file_roots:
base:
- /srv/salt/
重启salt-master服务
[root@KXLZQ ~]# systemctl restart salt-master
创建/srv/salt目录
[root@KXLZQ ~]# mkdir /srv/salt
创建top.sls文件,用于定义具体配置文件的路径
[root@KXLZQ ~]# cd /srv/salt/
[root@KXLZQ salt]# vim top.sls
内容如下:
base:
‘*’:
- file
创建top文件中定义的配置文件,用于定义具体的参数和文件(需要留空)
[root@KXLZQ salt]# vim file.sls
内容如下:
file_test:
file.managed:
- name: /tmp/XXQ
- source: salt://test/1.txt
- user: root
- group: root
- mode: 600
第一行的file_test为自定的名字,表示该配置段的名字,managed文件管理模块 name指定客户机的文件路径 source指定文件从哪里拷贝,salt://test/1.txt相当于是/srv/salt/test/1.txt file
创建测试文件1.txt
[root@KXLZQ salt]# mkdir test
[root@KXLZQ salt]# echo “111” > test/1.txt
传输文件
[root@KXLZQ salt]# salt ‘XXQ’ state.highstate
XXQ:
ID: file_test
Function: file.managed
Name: /tmp/XXQ
Result: True
查看XXQ上是否有XXQ文件
[root@XXQ ~]# ll -a /tmp/XXQ
-rw------- 1 root root 4 9月 8 21:59 /tmp/XXQ
[root@XXQ ~]# cat /tmp/XXQ
配置管理目录
用saltstack把目录分发到客户机上执行
步骤
创建top.sls配置文件
[root@KXLZQ ~]# cd /srv/salt/
[root@KXLZQ salt]# vim top.sls
内容如下:
base:
‘*’:
- dir
创建top文件中定义的具体的规则文件dir.sls
[root@KXLZQ salt]# vim dir.sls
file_dir:
file.recurse:
- name: /tmp/testdir
- source: salt://test/123
- user: root
- file_mode: 640
- dir_mode: 750
- mkdir: True
- clean: True
clean加上它之后,源删除文件或目录,目标也会跟着删除,否则不会删除
创建对应目录
[root@KXLZQ salt]# mkdir test/123
分发目录
[root@KXLZQ salt]# salt ‘XXQ’ state.highstate
XXQ:
ID: file_dir
Function: file.recurse
Name: /tmp/testdir
在XXQ上查看
root@XXQ ~]# ll -ad /tmp/testdir/
drwxr-x— 2 root root 6 12月2711:25 /tmp/testdir/
在123目录下在创建一个空目录和文件
[root@KXLZQ salt]# mkdir test/123/11
[root@KXLZQ salt]# touch test/123/11.txt
[root@KXLZQ salt]# ls test/123/
11 11.txt
再次分发
[root@KXLZQ salt]# salt ‘XXQ’ state.highstate
到XXQ上查看
[root@XXQ ~]# ls /tmp/testdir/
11.txt
saltstack只分发了文件,空目录不会被分发
在11目录上创建文件再分发
[root@KXLZQ salt]# touch test/123/11/1.txt
[root@KXLZQ salt]# salt ‘XXQ’ state.highstate
再到XXQ上查看
[root@XXQ ~]# ls /tmp/testdir/ ##有11目录
11 11.txt
目录为非空目录时会被分发
配置管理远程命令
用saltstack把shell脚本分发到客户机上执行
步骤
创建top.sls配置文件
[root@KXLZQ salt]# vim top.sls
内容如下:
base:
‘*’:
- shell
创建top配置文件定义的规则文件shell.sls
[root@KXLZQ salt]# vim shell.sls
内容如下:
shell_test:
cmd.script:
- source: salt://test/1.sh
- user: root
创建对应的脚本
[root@KXLZQ salt]# vim test/1.sh
内容如下:
#!/bin/bash
touch /tmp/1122.txt
if [ ! -d /tmp/1122 ]
then
mkdir /tmp/1122
fi
分发脚本
[root@KXLZQ salt]# salt ‘XXQ’ state.highstate
在XXQ上查看,脚本执行成功
[root@XXQ ~]# ls /tmp/
1122
1122.txt斜体样式
配置管理计划任务
用saltstack把计划任务分发到客户机上执行
步骤
创建top.sls主配置文件
[root@KXLZQ salt]# vim top.sls
内容如下:
base:
‘*’:
- cron
创建top配置文件定义的规则文件cron.sls
[root@KXLZQ salt]# vim cron.sls
内容如下:
cron_test:
cron.present:- name: /bin/bash /tmp/111.txt
- user: root
- minute: ‘*’
- hour: 20
- daymonth: ‘*’
- month: ‘*’
- dayweek: ‘*’
*需要用单引号引起来。当然我们还可以使用file.managed模块来管理cron,因为系统的cron都是以配置文件的形式存在的。
分发任务计划到XXQ
[root@KXLZQ salt]# salt ‘XXQ’ state.highstate
在XXQ上查看crontab
[root@XXQ ~]# crontab -l
Lines below here are managed by Salt, do not edit # SALT_CRON_IDENTIFIER:/bin/bash /tmp/111.txt
- 20 * * * /bin/bash /tmp/111.txt
提示:# Lines below here are managed by Salt, do not edit 不能改动他们,否则就不能通过salt来管理这个任务计划
删除任务计划,需要修改规则文件
[root@KXLZQ salt]# vim cron.sls
内容如下
cron_test:
cron.absent:- name: /bin/bash /tmp/111.txt
执行命令删除任务计划
[root@KXLZQ salt]# salt ‘XXQ’ state.highstate
在XXQ上,查看crontab
[root@XXQ ~]# crontab -l
Lines below here are managed by Salt, do not edit
- name: /bin/bash /tmp/111.txt
其他命令
显示存活的minion
格式:salt-run manage.up
[root@KXLZQ salt]# salt-run manage.up
- KXLZQ
- XXQ
拷贝master上的文件到客户端
格式:salt ‘主机名’ cp.get_file salt://原文件 目标文件
[root@KXLZQ salt]# salt ‘’ cp.get_file salt://test/1.txt /tmp/123.txt
XXQ:
/tmp/123.txt
KXLZQ:
/tmp/123.txt
拷贝目录到客户端
格式:salt ‘主机名’ cp.get_dir salt://原目录 目标目录
[root@KXLZQ salt]# salt '’ cp.get_dir salt://test/123 /tmp/
KXLZQ: - /tmp//123/11.txt
- /tmp//123/11/1.txt
XXQ: - /tmp//123/11.txt
- /tmp//123/11/1.txt
分发并执行脚本
格式:salt ‘主机名’ cmd.script salt://原脚本路径
[root@KXLZQ salt]# salt ‘*’ cmd.script salt://test/1.sh
XXQ:
pid:
2493
retcode:
stderr:
stdout:
KXLZQ:
pid:
7470
retcode:
0
stderr:
stdout:
salt-ssh使用
salt-ssh不需要对客户端做认证,客户端也不用安装salt-minion
步骤
安装saltstack yum源和salt-ssh包
[root@KXLZQ ~]# yum install -y http://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
[root@KXLZQ ~]# yum install -y salt-ssh
修改配置文件
[root@KXLZQ ~]# vim /etc/salt/roster
添加下面参数:
KXLZQ:
host: 192.168.70.128
user: root
passwd: 38003800
XXQ:
host: 192.168.70.129
user: root
passwd: 38003800
使用salt-ssh执行命令
格式:salt-ssh [–key-deploy] ‘主机名’ -r ‘命令’
[root@KXLZQ ~]# salt-ssh --key-deploy ‘’ -r ‘hostname’
XXQ:
retcode:
254
stderr:
stdout:
The host key needs to be accepted, to auto accept run salt-ssh with the -i flag:
The authenticity of host ‘192.168.157.130 (192.168.157.130)’ can’t be established.
ECDSA key fingerprint is SHA256:2dycAKJ+5BsHwXALskxaqtyNdNwRCFReWhmwJ2peUu0.
ECDSA key fingerprint is MD5:00:30:54:23:97:64:c3:1d:ee:65:a0:99:0f:f9:28:5c.
Are you sure you want to continue connecting (yes/no)?
这里需要先ssh登录机器确认 --key-deploy是第一次执行把公钥放到客户机上
[root@KXLZQ ~]# salt-ssh --key-deploy '’ -r ‘hostname’
XXQ:
retcode:
stderr:
stdout:
XXQ
KXLZQ:
retcode:
stderr:
stdout:
KXLZQ
ssh认证成功之后可以把配置文件中密码行给删除
[root@KXLZQ ~]# vim /etc/salt/roster
删除密码:
KXLZQ:
host: 192.168.70.128
user: root
XXQ:
host: 192.168.70.129
user: root
通过salt-ssh直接使用命令
[root@KXLZQ ~]# salt-ssh ‘*’ -r ‘w’
XXQ:
retcode:
0
stderr:
stdout:
15:16:49 up 4:08, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.70.1 11:18 2:55m 0.04s 0.04s -bash
KXLZQ:
retcode:
0
stderr:
stdout:
15:16:49 up 4:08, 1 user, load average: 0.32, 0.16, 0.08
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.70.1 11:18 1.00s 0.71s 0.01s /usr/bin/python /usr/bin/salt-ssh * -r w