配置:
修改master配置文件,告诉master, state.sls作业存放的路径
file_roots:
base:
- /srv/salt/base
dev:
- /srv/salt/dev
注:
- 配置完配置文件之后,需要确定以上配置的目录都必须存在,才可以重启,如果配置的目录不存在,是起不来的。
- base目录是必须有的。
创建state的作业脚本
cd /src/salt/base
vim mytest.sls # 必须是.sls结尾的
nginx_install: # 此作业的ID
pkg.installed: # 使用的功能
- name: nginx # 参数
说明: sls作业脚本遵循yaml语法
运行作业脚本
salt '*' state.sls mytest # 注意是作业脚本文件名
state.sls也可以指定读取哪个环境:state.sls salt_env=’dev’xxxx.sls,这个xxxx.sls可以不在top.sls中记录。
作业目录
一般会将作业的脚本通过目录来分类,例如刚才我们创建的mysql.sls就可以归为web类,可以在base目录下创建一个web目录,存放这类的作业脚本,然后运行的时候通过点.来区分目录结构,如下
cd /srv/salt/base
mkdir web
mv mytest.sls web
salt '*' state.sls web.mytest # 注意 文件夹名.文件名
state.highstate高级状态
state.sls默认读取base环境,但是它并不会读取top.sls文件。你可以指定state.sls执行哪个sls文件,只要这个sls文件在base环境下存在;
state.highstate会读取所有环境(包括base环境)的top.sls文件,并且执行top.sls文件内容里面定义的sls文件,不在top.sls文件里面记录的sls则不会被执行;
用法:
cd /srv/salt/base
vim top.sls
base:
'*': # 指定minion, * 即所有minion
- web.mytest # 执行的作业脚本
'192.168.3.82': # 指定minion
- web.mytest2 # 执行的作业脚本
salt '*' state.highstate
问题:
The function"state.sls" is running as PID 3869 and was started at 2022, Mar 23 10:19:32.691177 with jid 20220323101932691177
原因:salt-minion执行的 sls策略未执行完有收到了sls策略任务,或者并发的执行两个sls策略出现的问题
解决:
添加 queue=true 参数, 这样会判断如果当前正在运行任何其他状态,这会将状态排队。请记住,此选项会为每个排队的状态运行启动一个新线程
salt "*" state.sls firewalld.level queue=true
作业脚本内可以使用的方法功能:
salt 一些state模块函数的使用方法记录 - LYCong - 博客园
SaltStack其他常用的状态模块和方法 - *年少轻狂* - 博客园
参考:
saltstack使用指南:saltstack组件之state状态管理_东城绝神的博客-CSDN博客_saltstack state
saltstack的state.sls和state.highstate之区别
若出现 State pkg.installed found in sls mytest is unavailable 错误