24.5 saltstack远程执行命令linux
24.6 grainsnginx
24.7 pillarvim
24.8 安装配置httpdbash
24.9 配置管理文件 (分发文件)架构
24.5 saltstack远程执行命令函数
1.salt '*' test.ping //这里的*表示全部已经签名的minion端,也能够指定一个测试
2.salt 'aming-01' test.ping操作系统
3.salt '*' cmd.run "hostname"rest
说明: 这里的*必须是在master上已经被接受过认证的客户端,能够经过salt-key查到,一般是咱们已经设定的id值。关于这部份内容,它支持通配、列表以及正则。 好比两台客户端aming-01,aming-02, 那咱们能够写成salt 'aming-*', salt 'aming-0[12]' salt -L 'aming-01,aming-02' salt -E 'aming-(01|02)'等形式,使用列表,即多个机器用逗号分隔,并且须要加-L,使用正则必需要带-E选项。 它还支持grains,加-G选项,pillar 加-I选项,下面会介绍到。对象
实例:
[root@axinlinux-01 ~]# systemctl start salt-master
[root@axinlinux-01 ~]# systemctl start salt-minion
[root@axinlinux-02 ~]# systemctl start salt-minion
[root@axinlinux-01 ~]# salt '*' test.ping #这里的 '*' 表明的是全部机器,也就是下面指定salt-key经过的两台机器。 test.ping相似ping,测试机器是否互通
axinlinux-01:
True #显示为true,表明是互通的
axinlinux-02:
True
[root@axinlinux-01 ~]# salt-key
Accepted Keys:
axinlinux-01
axinlinux-02
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[root@axinlinux-01 ~]# salt '*' cmd.run "hostname" #调用系统的命令
axinlinux-02:
axinlinux-02
axinlinux-01:
axinlinux-01
[root@axinlinux-01 ~]# salt 'axinlinux-02' cmd.run "ip addr" #也能够指定某一台
[root@axinlinux-01 ~]# salt 'axin*' cmd.run "hostname" #可匹配正则统配
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24.6 grains
1.grains是在minion启动时收集到的一些信息,好比操做系统类型、网卡ip、内核版本、cpu架构等。
#静态的,不会去变动
2.salt 'aming-02' grains.ls 列出全部的grains项目名字
3.salt 'aming-02' grains.items 列出全部grains项目以及值
4.grains的信息并非动态的,并不会实时变动,它是在minion启动时收集到的。
5.咱们能够根据grains收集到的一些信息,作配置管理工做。
6.grains支持自定义信息。
saltstack – 自定义grains
1.minion上:
vim /etc/salt/grains(文件不存在) //添加:
role: nginx #至关于一个key,一个value
env: test
重启minion服务
systemctl restart salt-minion
master上:
获取grains:
salt '*' grains.item role env
2.能够借助grains的一些属性信息来执行
salt -G role:nginx cmd.run 'hostname'
#-G针对机器上role为nginx的机器,执行hostname命令
#那么,若是咱们想针对一组机器执行一些命令。那么咱们就能够针对这一些机器定义一个自定义的grains,而后用-G来执行
实例:
[root@axinlinux-01 ~]# salt 'axinlinux-02' grains.ls #仅列出项目名字
[root@axinlinux-01 ~]# salt 'axinlinux-02' grains.items #列出项目的名字和值,数据等等
这里数据能够作一个资产管理系统
[root@axinlinux-02 ~]# vim /etc/salt/grains
role: nginx #注意冒号后面空格
env: test
[root@axinlinux-02 ~]# systemctl restart salt-minion
[root@axinlinux-01 ~]# salt '*' grains.item role env #这样就会看到咱们刚才设置的key和value
axinlinux-02:
----------
env:
test
role:
nginx
axinlinux-01:
----------
env:
role:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24.7 pillar
1.pillar和grains不同,是在master上定义的,而且是针对minion定义的一些信息。像一些比较重要的数据(密码)能够存在pillar里,还能够定义变量等。
2.配置自定义pillar
vim /etc/salt/master
找到以下配置://去掉前面的警号
pillar_roots:
base: #此行前面有两个空格
- /srv/pillar #此行前面有4个空格
3.mkdir /srv/pillar
4.vim /srv/pillar/test.sls(salt的配置文件,后缀名为sls) //内容以下
conf: /etc/123.conf
5.vi /srv/pillar/top.sls //内容以下
base:
'aming-02': #此行前面有两个空格(针对那些机器,主机名)
- test #此行前面有4个空格(test表示的是这个目录下的test.sls)。若是写多个能够在下面写test1等等
6.重启master,修改/etc/salt/master文件才从新。写test.sls和top.sls的是不须要重启
systemctl restart salt-master
7.当更改完pillar配置文件后,咱们能够经过刷新pillar配置来获取新的pillar状态:
salt '*' saltutil.refresh_pillar
验证:salt '*' pillar.item conf
8.pillar一样能够用来做为salt的匹配对象。好比 salt -I 'conf:/etc/123.conf' test.ping
#pillar匹配的时候用的是-I(大写的i)。grains匹配的时候用的是-G(大写的g)
两个东西(grains和pillar)侧重点不同。pillar在服务端上定义,能够划分客户端,而grains倒是在客户端上收集信息的,这个能够在初始化系统的时候就设定好。
所谓初始化系统,你能够认为用通用的模板安装系统,或者用通用的初始化脚本去执行一些配置,总之很容易作到。
实例:
[root@axinlinux-01 ~]# vim /etc/salt/master
pillar_roots: #注意空格
base:
- /srv/pillar
[root@axinlinux-01 ~]# systemctl restart salt-master #只有在修改/etc/salt/master文件的时候,才重启服务
[root@axinlinux-01 ~]# ls /srv/pillar
ls: 没法访问/srv/pillar: 没有那个文件或目录
[root@axinlinux-01 ~]# mkdir /srv/pillar
[root@axinlinux-01 ~]# cd /srv/pillar/
[root@axinlinux-01 pillar]# #vim test.sls
conf: /etc/123.conf #冒号后面有个空格。跟定义grains的时候同样的格式
[root@axinlinux-01 pillar]# vim top.sls
base:
'aming-02':
- test #这个test表示的是这个目录下的test.sls文件
[root@axinlinux-01 pillar]# ls
test.sls top.sls
下面咱们在来写多个
[root@axinlinux-01 pillar]# vim test2.sls
dir: /data/123.conf #写个dir的,为test2
[root@axinlinux-01 pillar]# vim top.sls #top.sls也要改一下
base:
'axinlinux-02':
- test
'axinlinux-01': #能够这样写,02是test。01是test2
- test2 #test2对应的就是上面建立的test2文件
[root@axinlinux-01 pillar]# salt '*' saltutil.refresh_pillar #刷新一下。不须要重启
axinlinux-02:
True
axinlinux-01:
True
[root@axinlinux-01 pillar]# salt '*' pillar.item conf dir #查看一下就有了
axinlinux-02:
----------
conf:
/etc/123.conf
dir:
axinlinux-01:
----------
conf:
dir:
/data/123.conf
[root@axinlinux-01 pillar]# salt -I 'conf:/etc/123.conf' cmd.run "w" #匹配conf:/etc/123.conf的机器,执行w命令
axinlinux-02:
15:28:50 up 5:02, 1 user, load average: 0.03, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.208.1 10:31 28:58 0.19s 0.19s -bash
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24.8 安装配置httpd
使用saltstack安装httpd
1.master上 vi /etc/salt/master //搜索找到file_roots
打开以下内容的注释:(删掉#号)
file_roots:
base: #前面有两个空格
- /srv/salt #前面有4个空格
#意思是找到他的根目录,就是/srv/salt为他的总入口,在这个目录里配置文件
2.mkdir /srv/salt ; cd /srv/salt
3.vi /srv/salt/top.sls //加入以下内容
base:
'*': #前面有两个空格(*表示全部的机器,也能够写单独的)
- httpd #前面有4个空格(也就是说还要建立一个httpd.sls的文件)
意思是,在全部的客户端上执行httpd模块
4.重启 systemctl restart salt-master
5.master上vi /srv/salt/httpd.sls //加入以下内容,这个就是httpd模块的内容
httpd-service: #定义配置或者服务的名字
pkg.installed: #salt内置的一个模块,相似于cmd.run
- names: //就是你要安装包的名字。
- httpd
- httpd-devel
service.running: #也是salt的一个模块,用来启动某一个服务的
- name: httpd #这里也就是启动httpd这个服务(/lib/systemd/system/目录下的服务名字)
- enable: True #表示要启动,若是是false就是关闭
说明: httpd-service是id的名字,自定义的。pkg.installed 为包安装函数,下面是要安装的包的名字。service.running也是一个函数,来保证指定的服务启动,enable表示开机启动。
6.执行: salt 'aming-02' state.highstate
//执行过程会比较慢,由于客户端上在yum install httpd httpd-devel。也能够为 '*' ,所有机器都安装
#只要执行state.highstate,就会在/src/salt目录下找top.sls文件,里面相关的模块都会去执行
实例:
[root@axinlinux-01 ~]# vim /etc/salt/master
file_roots: #注意空格
base:
- /srv/salt/
[root@axinlinux-01 ~]# systemctl restart salt-master
[root@axinlinux-01 ~]# mkdir /srv/salt
[root@axinlinux-01 ~]# cd /srv/salt/
[root@axinlinux-01 salt]# vim top.sls
base: #同样注意空格
'*':
- httpd
[root@axinlinux-01 salt]# vim httpd.sls
httpd-service:
pkg.installed:
- names:
- httpd
- httpd-devel
service.running:
- name: httpd
- enable: True
[root@axinlinux-01 salt]# ls /lib/systemd/system #这个,目录下的服务的名字就是上面 - name: httpd,httpd的名字
[root@axinlinux-01 salt]# salt '*' state.highstate #由于安装的是nginx,因此机器上要关闭nginx
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24.9 配置管理文件
将master上的模板或是文件吧,分发到minion
1.master上vi /srv/salt/test.sls //加入以下内容
file_test:
file.managed: #(用到salt的模块)
- name: /tmp/aminglinux.com #分发到minion上的路径,也就是放到minion哪
- source: salt://test/123/1.txt #也就是来源文件,master上的,从哪里拷贝
- user: root #属主
- group: root #属组
- mode: 600 #权限
说明:第一行的file_test为自定的名字,表示该配置段的名字,能够在别的配置段中引用它,source指定文件从哪里拷贝,这里的salt://test/123/1.txt至关因而/srv/salt/test/123/1.txt(master上/etc/sala/msater配置文件里的file_roots定义的)
2.mkdir /srv/salt/test/123
#上面定义了source: salt://test/123/1.txt,因此要在/srv/salt下建立test和123目录
3.cp /etc/passwd /srv/salt/test/123/1.txt
vi /srv/salt/top.sls //改成以下内容
base:
'*':
- test
4.执行: salt 'aming-02' state.highstate
5.检查aming-02上是否有/tmp/aminglinux.com,检查内容以及权限
实例:
[root@axinlinux-01 salt]# vim test.sls
file_test:
file.managed:
- name: /tmp/aminglinux.com
- source: salt://test/123/1.txt #salt;//表明的是/etc/salt/master文件里file_roots定义的/src/salt、因此这里的额路径是/src/salt/test/123/1.txt
- user: root
- group: root
- mode: 600
[root@axinlinux-01 salt]# mkdir test
[root@axinlinux-01 salt]# cd test/
[root@axinlinux-01 test]# mkdir 123
[root@axinlinux-01 test]# cd 123/
[root@axinlinux-01 123]# cp /etc/inittab ./1.txt #拷贝个文件过来,做为测试
[root@axinlinux-01 123]# ls
1.txt
[root@axinlinux-01 123]# vim /srv/salt/top.sls #修改一下他的总入口为test
base:
'*':
- test
[root@axinlinux-01 123]# salt 'axinlinux-02' state.highstate
[root@axinlinux-02 ~]# ls -lt /tmp/aminglinux.com #回到minion上查看一下
-rw------- 1 root root 511 12月 7 17:37 /tmp/aminglinux.com
[root@axinlinux-02 ~]# cat !$
cat /tmp/aminglinux.com