一、远程执行shell命令方式
Salt命令由三个主要部分构成:
salt '<target>' <function> [arguments]
target: 指定哪些minion, 默认的规则是使用glob匹配minion id.
匹配所有主机
# salt '*' test.ping
Targets也可以使用正则表达式:
# salt -E 'server[1-3]' test.ping
Targets也可以指定列表:
# salt -L 'server2,server3' test.ping
注意当执行的函数有参数时,需要引号(单双都可以)引起来:
[root@server1 minions]# salt -E 'server[1-4]' cmd.run 'df -h'
server3:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 17G 1.2G 16G 8% /
devtmpfs 484M 0 484M 0% /dev
tmpfs 496M 80K 496M 1% /dev/shm
tmpfs 496M 6.7M 489M 2% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/sda1 1014M 133M 882M 14% /boot
tmpfs 100M 0 100M 0% /run/user/0
funcation是module提供的功能,Salt内置了大量有效的functions.
# salt '*' cmd.run 'uname -a'
arguments通过空格来界定参数:
# salt 'server2' sys.doc pkg #查看模块文档
# salt 'server2' pkg.install httpd
# salt 'server2' pkg.remove httpd
salt内置的执行模块列表:
http://docs.saltstack.cn/ref/modules/all/index.html
二、自定义远程执行模块方式
1、编辑master配置文件:
# vim /etc/salt/master
file_roots:
base:
- /srv/salt
2、重启master服务:
# systemctl restart salt-master
3、slatstack默认的base文件目录为/srv/salt,其中salt目录需要我们自己新建:
[root@server1 ~]# mkdir /srv/salt
[root@server1 ~]# cd /srv/salt/
4、创建模块目录:
# mkdir /srv/salt/_modules
5、编写模块文件:
# vim /srv/salt/_modules/mydisk.py
def df():
return __salt__['cmd.run']('df -h')
以上文件表示定义了一个名为mydisk的模块,且模块内有一个函数df,函数的作用是运行df -h命令。
6、同步模块:
[root@server1 _modules]# salt '*' saltutil.sync_modules
server2:
- modules.mydisk
server3:
- modules.mydisk
同步后salt-master会将模块信息发送到指定的salt-minion,salt-minion将信息保存到/var/cache/salt/minion/目录下:
7、调用模块:
[root@server1 _modules]# salt '*' mydisk.df
三、sls文件方式
查看配置文件可以看出slatstack默认的base文件目录为/srv/salt,其中salt目录需要我们自己新建:
[root@server1 ~]# mkdir /srv/salt
[root@server1 ~]# cd /srv/salt/
1、sls文件概念
Salt 状态系统的核心是SLS,或者叫SaLt State 文件。
SLS表示系统将会是什么样的一种状态,而且是以一种很简单的格式来包含这些数据,常被叫做配置管理。
sls文件命名:
sls文件以”.sls”后缀结尾,但在调用是不用写此后缀。
使用子目录来做组织是个很好的选择。
init.sls 在一个子目录里面表示引导文件,也就表示子目录本身, 所以apache/init.sls就是表示apache.
如果同时存在apache.sls 和 apache/init.sls,则 apache/init.sls
被忽略,apache.sls将被用来表示 apache.
2、编辑的文件使用yaml语法:
规则一: 缩进 Salt需要每个缩进级别由两个空格组成,不要使用tabs。
规则二: 冒号 字典的keys在YAML中的表现形式是一个以冒号结尾的字符串。 my_key: my_value
规则三: 短横杠
想要表示列表项,使用一个短横杠加一个空格。
list_value_one
list_value_two
3、编写一个install。sls
[root@server1 salt]# vim install.sls
[root@server1 salt]# cat install.sls
apache:
pkg.installed:
- pkgs:
- httpd
- wget
- php
执行sls文件
[root@server1 salt]# salt server3 state.sls install
注意不用写sls后缀,再执行一次salt server3 state.sls install命令时状态将不会改变,这里与ansible类似
4、使用top。sls文件
如果我们想要在不同的节点安装不一样的包,可以用以下这种方式实现:
[root@server1 salt]# vim apache.sls
[root@server1 salt]# cat apache.sls
apache:
pkg.installed:
- pkgs:
- httpd
[root@server1 salt]# vim nfs.sls
[root@server1 salt]# cat nfs.sls
nfs:
pkg.installed:
- pkgs:
- nfs-utils
[root@server1 salt]# ls
apache.sls _modules nfs.sls
现在我们要求在server2安装apache文件,在server3安装nfs文件,原来的方法是分两次指定节点执行指定文件,也可以使用top文件的方式:
[root@server1 salt]# vim top.sls
[root@server1 salt]# cat top.sls
base:
'server2':
- apache
'server3':
- nfs
执行top文件:
[root@server1 salt]# salt '*' state.highstate
5、利用子目录避免base目录雍总
使用子目录来做组织:
[root@server1 salt]# ls
apache.sls _modules nfs.sls top.sls
[root@server1 salt]# mkdir apache
[root@server1 salt]# mkdir nfs
[root@server1 salt]# mv apache.sls apache
[root@server1 salt]# mv nfs.sls nfs
[root@server1 salt]# ls
apache _modules nfs top.sls
这时目录已经发生变化,我们现在需要调用apahce目录下的apache.sls文件时需要使用以下方式:
[root@server1 salt]# salt server2 state.sls apache.apache
注意:同样sls后缀不需要加。
修改top文件就需要这么写:
[root@server1 salt]# vim top.sls
[root@server1 salt]# cat top.sls
base:
'server2':
- apache.apache
'server3':
- nfs.nfs
[root@server1 salt]# salt '*' state.highstate
6、使用入口文件init.sls
也可以使用入口文件init.sls:
[root@server1 salt]# cd apache/
[root@server1 apache]# mv install.sls init.sls
当有入口文件时,我们不需要再指定文件,只需指定目录名称即可:
[root@server1 salt]# vim top.sls
[root@server1 salt]# cat top.sls
base:
'server2':
- apache
'server3':
- nfs.nfs
[root@server1 salt]# salt '*' state.highstate
三、使用saltstack安装配置httpd
1、编写sls文件
[root@server1 apache]# vim init.sls
[root@server1 apache]# cat init.sls
apache:
pkg.installed:
- pkgs:
- httpd
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/httpd.conf
service.running:
- name: httpd
- reload: true
- enable: true
- watch:
- file: apache
file.managed中的name表示的是minion端的文件路径,source表示master端的文件路径,salt://表示saltstack的base路径(即/srv/salt/)
watch:表示监控唯一性声明apache下的文件(即salt://apache/httpd.conf),当文件有更改时即重启服务。
reload :默认的触发方式为restart,我们也可以让它以reload的触发方式:
enable: true设置开即自启:
2、准备配置文件httpd.conf:
[root@server1 apache]# scp server3:/etc/httpd/conf/httpd.conf .
[root@server1 apache]# ls
httpd.conf init.sls
[root@server1 apache]# pwd
/srv/salt/apache
3.推送
[root@server1 apache]# salt server2 state.sls apache