文章目录
saltstack远程执行
1.远程执行shell命令
Salt命令由三个主要部分构成:
salt '<target>' <function> [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' #指令有参数时,加单引号引起来,否则会出错

Targets也可以指定列表:
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命令会匹配预定义的状态,所以安装时会解决依赖性,卸载时不会卸载依赖性
所有模块分类:https://docs.saltstack.com/en/latest/ref/index.htmll (最常用的state模块状态模块)
2.编写远程执行模块
当有需求时,也可以自行编写模块
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


3.配置管理
3.1 了解YAML语法
- 规则一: 缩进 Salt需要每个缩进级别由两个空格组成,不要使用tabs。
- 规则二: 冒号 字典的keys在YAML中的表现形式是一个以冒号结尾的字符串。 my_key: my_value
- 规则三: 短横杠 想要表示列表项,使用一个短横杠加一个空格。
- list_value_one
- list_value_two
3.2 创建一个sls文件
vim /srv/salt/apache.sls #状态文件必须以.sls结尾。sls是salt state的简称。

还有一种写法:
salt server4 state.sls apache #指定状态文件apace.sls时不加.sls

如果想在一个状态文件下指定安装多个软件包,可以:
这样比较繁琐,可以通过列表项一起指定:
指定卸载
3.3 指定不同主机进行不同操作
如果不同主机想要安装不同软件包,可以指定不同sls文件:
然后指定不同主机运行不同状态文件:
salt server3 state.sls apache ; salt server4 state.sls nfs

也可以通过top文件:
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
top文件也要修改为:
更简便的方法为:
mv apache.sls init.sls #iinit.sls 在一个子目录里面表示引导文件,也就表示子目录本身, 所以``apache/init.sls`` 就是表示``apache``.
此时top文件也就是:
3.4 通过sls文件开启服务,重启服务
vim /srv/salt/apache/init.sls

将master端文件修改后推送:
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端端口改变了:
我们还可以指定其他的信息:
以上还有一种写法:
3.5 源码部署nginx
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

3.6 如果base路径下有和init.sls所在目录同名的sls文件,读取的是base路径下的sls文件
