如下的操作均是在Salt-master上面进行。
[root@zhdy01 sbin]# salt '*' test.ping
zhdy01:
True
zhdy02:
True
//如上的测试: *代表所有已经接受(salt-key)的机器去ping测试。
运行系统的命令:
[[email protected] sbin]# salt '*' cmd.run "hostname"
zhdy01:
zhdy01
zhdy02:
zhdy02
// cmd.run代表着运行系统命令。
针对某台client 进行远程操作:
[root@zhdy01 sbin]# salt 'zhdy02' cmd.run "whoami"
zhdy02:
root
针对某些机器的hostname模糊查询:
[root@zhdy01 sbin]# salt 'zhdy*' cmd.run "whoami"
zhdy02:
root
zhdy01:
root
当然也支持正则去匹配:
[root@zhdy01 sbin]# salt -E 'zhdy0[12]+' cmd.run "pwd"
zhdy01:
/root
zhdy02:
/root
或者:
[root@zhdy01 sbin]# salt -E 'zhdy(01|02)' cmd.run "pwd"
zhdy02:
/root
zhdy01:
/root
grains是在minion启动时收集到的一些信息,比如操作系统类型、网卡ip、内核版本、cpu架构等。
列出所有的grains项目名字
salt 'zhdy02' grains.ls
列出所有grains项目以及值
salt 'zhdy02' grains.items
//利用如上的显示值我们可以统计资产管理信息。
minion上:
vim /etc/salt/grains //添加:
role: nginx
env: test
//一个key和一个vlue
重启minion服务
systemctl restart salt-minion
master上:
获取grains:
[[email protected] sbin]# salt '*' grains.item role env
zhdy02:
----------
env:
test
role:
nginx
zhdy01:
----------
env:
role:
可以借助grains的一些属性信息来针对相关机器去操作。
salt -G role:nginx cmd.run 'hostname'
上面的作用在集群中,还是蛮强大的,例如:我们有数百台web机器。我们可以给这些机器设定role:为web,然后针对这些role去操作。
pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息。像一些比较重要的数据(密码)可以存在pillar里,还可以定义变量等。
配置自定义pillar
vim /etc/salt/master
找到如下配置://去掉前面的警号
pillar_roots:
base: #此行前面有两个空格
- /srv/pillar #此行前面有4个空格
systemctl restart salt-master
mkdir /srv/pillar
vim /srv/pillar/test.sls
//内容如下
conf: /etc/123.conf
如上配置完成后,我们还不好去运行,因为这个配置文件没有入口,我们需要定义个:
vim top.sls
写入如下:
base:
'zhdy02':
- test
//zhdy02 机器号, test:就是我们刚刚创的test.sls
(当然我们也可以在test下面创建多个,例如test1,test2,然后,再目录下/srv/pillar去一一创建对应的即可)
vim top.sls
base:
'zhdy02':
- test
- test2
- asd
重启master
systemctl restart salt-master
当更改完pillar配置文件后,我们可以通过刷新pillar配置来获取新的pillar状态:
[[email protected] pillar]# salt '*' saltutil.refresh_pillar
zhdy02:
True
zhdy01:
True
验证:
[[email protected] pillar]# salt '*' pillar.item conf
zhdy01:
----------
conf:
zhdy02:
----------
conf:
/etc/123.conf
这样就获得了咱们刚刚所设置的,例如我们再次增加一个:
vim top.sls
base:
'zhdy02':
- test
- asd
vim asd.sls
dir: /usr/local/asd
再次刷新下:
salt '*' saltutil.refresh_pillar
[[email protected] pillar]# salt '*' pillar.item conf dir
zhdy02:
----------
conf:
/etc/123.conf
dir:
/usr/local/asd
zhdy01:
----------
conf:
dir:
如上配置一定要注意格式!
pillar同样可以用来作为salt的匹配对象。比如
[root@zhdy01 pillar]# salt -I 'conf:/etc/123.conf' cmd.run "w"
zhdy02:
16:40:25 up 1:52, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM [email protected] IDLE JCPU PCPU WHAT
root pts/0 192.168.59.1 14:49 1:02m 0.03s 0.03s -bash
master上
vi /etc/salt/master
//搜索找到file_roots
打开如下内容的注释:
file_roots:
base: #前面有两个空格
- /srv/salt #前面有4个空格
mkdir /srv/salt ; cd /srv/salt
编辑入口配置文件:
vi /srv/salt/top.sls
//加入如下内容
base:
'*': #前面有两个空格
- httpd #前面有4个空格
*:代表着所有的机器(当然也可以指定机器), httpd是需要安装的服务。
//在所有的客户端上执行httpd模块
重启
systemctl restart salt-master
master上:编辑配置文件
vi /srv/salt/httpd.sls
//加入如下内容,这个就是httpd模块的内容
httpd-service:
pkg.installed:
- names: //这里如果只有一个服务,那么就可以写成 –name: httpd 不用再换一行了。
- httpd
- httpd-devel
service.running:
- name: httpd
- enable: True
说明:
httpd-service是id的名字,自定义的。
pkg.installed 为包安装函数。
下面是要安装的包的名字。
service.running也是一个函数,来保证指定的服务启动(其主目录在ls /lib/systemd/system/)
enable表示开机启动。
执行:
先来检测下httpd服务有没有安装:
[[email protected] ~]# ps aux | grep httpd
root 3939 0.0 0.0 112668 972 pts/0 R+ 17:01 0:00 grep --color=auto httpd
执行httpd服务安装:
salt 'zhdy02' state.highstate
//执行过程会比较慢,因为客户端上在 yum install httpd httpd-devel
当然,如果不使用这种模式,使用之前所学的:(server端:)
salt 'zhdy02' cmd.run "yum install -y httpd*"
自己的粗心大意导致了如下错误:
大家仔细看:我的配置(错误前):
错误在 top.sls 缺少了两个 :
正确的配置:
[[email protected] salt]# cat top.sls
base:
'*':
- httpd
日常运维中,少不了对集群内的一组机器进行修改配置文件,首先我们先把模板搞好(详细到具体配置)然后告诉minion把配置文件分发到哪个具体位置:
vi /srv/salt/test.sls //加入如下内容
file_test:
file.managed:
- name: /tmp/zhdy.com
- source: salt://test/123/1.txt
- user: root
- group: root
- mode: 600
说明:第一行的file_test为自定的名字,表示该配置段的名字,可以在别的配置段中引用它。
source指定文件从哪里拷贝,这里的salt://test/123/1.txt相当于是/srv/salt/test/123/1.txt
user,group,mode 分别定义如上文件的所属主所属组以及文件权限是什么。
根据如上配置文件操作:
[[email protected] salt]# vim test.sls
[[email protected] salt]# mkdir -p /test/123/
[[email protected] salt]# cd !$
cd /test/123/
[[email protected] 123]# cp /etc/inittab 1.txt
vi /srv/salt/top.sls //改为如下内容
base:
'*':
- test
执行:
[[email protected] salt]# salt 'zhdy02' state.highstate
zhdy02:
----------
ID: file_test
Function: file.managed
Name: /tmp/zhdy.com
Result: True
Comment: File /tmp/zhdy.com updated
Started: 00:00:43.073267
Duration: 88.68 ms
Changes:
----------
diff:
New file
Summary for zhdy02
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1
Total run time: 88.680 ms
检查zhdy02上是否有/tmp/aminglinux.com,检查内容以及权限
[[email protected] ~]# ll /tmp/zhdy.com
-rw------- 1 root root 511 11月 4 00:00 /tmp/zhdy.com