saltstack远程执行

文章目录

  • saltstack远程执行
    • 1.远程执行shell命令
    • 2.编写远程执行模块
    • 3.配置管理
      • 3.1 了解YAML语法
      • 3.2 创建一个sls文件
      • 3.3 指定不同主机进行不同操作
      • 3.4 通过sls文件开启服务,重启服务
      • 3.5 源码部署nginx
      • 3.6 如果base路径下有和init.sls所在目录同名的sls文件,读取的是base路径下的sls文件

saltstack远程执行

1.远程执行shell命令

Salt命令由三个主要部分构成:

salt ''  [arguments]
#target: 指定哪些minion, 默认的规则是使用glob匹配minion id. 

例如

salt '*' test.ping
## *是所有被添加的minion,需要加单引号,否则匹配的是当前目录下的所有文件
## test是模块 ping是方法,也就是python中的函数

salt server3 test.pigng

saltstack远程执行_第1张图片
在这里插入图片描述

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' #指令有参数时,加单引号引起来,否则会出错

saltstack远程执行_第2张图片
Targets也可以指定列表:

salt -L 'server3,server4' test.ping 

saltstack远程执行_第3张图片
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     #卸载

saltstack远程执行_第4张图片saltstack远程执行_第5张图片
saltstack远程执行_第6张图片saltstack远程执行_第7张图片
可以看到,salt命令会匹配预定义的状态,所以安装时会解决依赖性,卸载时不会卸载依赖性

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

在这里插入图片描述saltstack远程执行_第8张图片
执行模块:
这是将模块发送到目标主机,再通过目标主机本地python调用这些模块
为了提高效率,还会将python编译为pyc文件。

salt server3 mydisk.df

saltstack远程执行_第9张图片saltstack远程执行_第10张图片

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的简称。

saltstack远程执行_第11张图片

还有一种写法:
在这里插入图片描述

salt server4 state.sls apache #指定状态文件apace.sls时不加.sls

saltstack远程执行_第12张图片
如果想在一个状态文件下指定安装多个软件包,可以:
在这里插入图片描述

这样比较繁琐,可以通过列表项一起指定:
saltstack远程执行_第13张图片

指定卸载
saltstack远程执行_第14张图片

3.3 指定不同主机进行不同操作

如果不同主机想要安装不同软件包,可以指定不同sls文件:
saltstack远程执行_第15张图片
然后指定不同主机运行不同状态文件

salt server3 state.sls apache ; salt server4 state.sls nfs

saltstack远程执行_第16张图片
也可以通过top文件:

vim /srv/salt/top.sls

在这里插入图片描述
salt '*' state.highstate
saltstack远程执行_第17张图片
而为了方便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文件也要修改为:
saltstack远程执行_第18张图片

更简便的方法为:

mv apache.sls init.sls #iinit.sls 在一个子目录里面表示引导文件,也就表示子目录本身, 所以``apache/init.sls`` 就是表示``apache``.

此时top文件也就是:
saltstack远程执行_第19张图片

3.4 通过sls文件开启服务,重启服务

vim /srv/salt/apache/init.sls

saltstack远程执行_第20张图片
将master端文件修改后推送:

vim httpd.conf 
salt server3 state.sls apache

在这里插入图片描述saltstack远程执行_第21张图片
minion端开启了服务:
在这里插入图片描述
但如果master再修改文件后推送,则目标主机服务端口不发生改变:

vim httpd.conf 
salt server3 state.sls apache

在这里插入图片描述
minion端端口未改变:
这是因为修改配置文件后服务未重启:
在这里插入图片描述
在master端指定minion端配置文件改变后重启服务:

vim init.sls
salt server3 state.sls apache

saltstack远程执行_第22张图片

此时minion端端口改变了:
在这里插入图片描述
我们还可以指定其他的信息:
saltstack远程执行_第23张图片
以上还有一种写法:
saltstack远程执行_第24张图片

3.5 源码部署nginx

mkdir /srv/salt/nginx
cd nginx
vim init.sls

saltstack远程执行_第25张图片
需要的nginx的systemd启动方式脚本地址:https://www.nginx.com/resources/wiki/start/topics/examples/systemd/

vim nginx.service

saltstack远程执行_第26张图片
而为了将nginx配置文件也可以推送过去,且改变时minion端可以重启,我们可以再定义一个状态文件:

vim /srv/salt/nginx/service.sls

saltstack远程执行_第27张图片
需要将两者关联起来:

vim init.sls

saltstack远程执行_第28张图片
进行推送:
可以看到顺序是规定的先安装,再推送配置文件的顺序:

salt server4 state.sls nginx

saltstack远程执行_第29张图片
上述两者也可以合在一起写:
因为执行顺序默认从上到下,就可以将安装写在前面,推送文件写在后面。
值得注意的是推送文件以及服务重启的顺序,最好做上约束

vim init.sls

saltstack远程执行_第30张图片

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

saltstack远程执行_第31张图片

你可能感兴趣的:(#,saltstack,企业实战)