Salt命令由三个主要部分构成:
salt '' [arguments]
#target: 指定哪些minion, 默认的规则是使用glob匹配minion id.
例如
:
salt '*' test.ping
## *是所有被添加的minion,需要加单引号,否则匹配的是当前目录下的所有文件
## test是模块 ping是方法,也就是python中的函数
salt server3 test.pigng
Targets也可以使用正则表达式:
salt -E 'server[1-4]' test.ping
salt -E 'server[1-4]' cmd.run hostname #cmd.run指令
salt -E 'server[1-4]' cmd.run df
salt -E 'server[1-4]' cmd.run 'df -h' #指令有参数时,加单引号引起来,否则会出错
salt -L 'server3,server4' test.ping
funcation是module提供的功能,Salt内置了大量有效的functions.
salt '*' cmd.run 'uname -a'
arguments通过空格来界定参数:
salt 'server3' sys.doc pkg #查看pkg模块的文档
salt 'server3' pkg.install httpd #安装httpd
salt 'server3' pkg.remove httpd #卸载
可以看到,salt命令会匹配预定义的状态,所以安装时会解决依赖性,卸载时不会卸载依赖性
salt内置的执行模块列表:中文文档或者官方文档
所有模块分类:https://docs.saltstack.com/en/latest/ref/index.htmll (最常用的state模块状态模块)
当有需求时,也可以自行编写模块
mkdir -p /srv/salt/_modules #默认的模块目录在base路径下的_modules目录。默认不存在,需手动创建
cd /srv/salt/_modules
定义一个简单的模块
:
vim mydisk.py
同步模块
:
这是将这个模块发送到目标主机的/var/cache/salt目录下保存
salt server3 saltutil.sync_modules
执行模块
:
这是将模块发送到目标主机,再通过目标主机本地python调用这些模块
为了提高效率,还会将python编译为pyc文件。
salt server3 mydisk.df
vim /srv/salt/apache.sls #状态文件必须以.sls结尾。sls是salt state的简称。
salt server4 state.sls apache #指定状态文件apace.sls时不加.sls
如果不同主机想要安装不同软件包,可以指定不同sls文件:
然后指定不同主机运行不同状态文件
:
salt server3 state.sls apache ; salt server4 state.sls nfs
vim /srv/salt/top.sls
salt '*' state.highstate
而为了方便base路径下的文件管理,一般都将sls文件放在同名的目录下:
mkdir /srv/salt/apache
mv apache.sls apache
mkdir /srv/salt/nfs
mv nfs.sls nfs
这时目录结构发生变化,因此指定状态文件需要改变:
salt server3 state.sls apache.apache #状态文件为base路径下的apache目录里的apache.sls
更简便的方法为:
mv apache.sls init.sls #iinit.sls 在一个子目录里面表示引导文件,也就表示子目录本身, 所以``apache/init.sls`` 就是表示``apache``.
vim /srv/salt/apache/init.sls
vim httpd.conf
salt server3 state.sls apache
minion端开启了服务:
但如果master再修改文件后推送,则目标主机服务端口不发生改变:
vim httpd.conf
salt server3 state.sls apache
minion端端口未改变:
这是因为修改配置文件后服务未重启:
在master端指定minion端配置文件改变后重启服务:
vim init.sls
salt server3 state.sls apache
此时minion端端口改变了:
我们还可以指定其他的信息:
以上还有一种写法:
mkdir /srv/salt/nginx
cd nginx
vim init.sls
需要的nginx的systemd启动方式脚本地址:https://www.nginx.com/resources/wiki/start/topics/examples/systemd/
vim nginx.service
而为了将nginx配置文件也可以推送过去,且改变时minion端可以重启,我们可以再定义一个状态文件:
vim /srv/salt/nginx/service.sls
vim init.sls
进行推送:
可以看到顺序是规定的先安装,再推送配置文件的顺序:
salt server4 state.sls nginx
上述两者也可以合在一起写:
因为执行顺序默认从上到下,就可以将安装写在前面,推送文件写在后面。
值得注意的是推送文件以及服务重启的顺序,最好做上约束
vim init.sls