0

0

Linux SaltStack 自动化任务编排

舞姬之光

舞姬之光

发布时间:2026-02-19 08:43:02

|

716人浏览过

|

来源于php中文网

原创

根本原因是salt master未启用runner监听或orchestrate文件未置于\_orch/目录下;文件须放/srv/salt/\_orch/且master配置runner_dirs包含该路径,否则salt-run找不到sls。

linux saltstack 自动化任务编排

为什么 salt-run state.orchestrate 不执行你的 orchestrate 文件?

根本原因通常是 Salt Master 没启用 runner 类型的外部事件监听,或者 orchestrate 文件路径没放在 _orch/ 目录下被同步。Salt 的 orchestrate 不是直接跑 SLS,而是靠 runner 服务在 Master 端解析并调度,它默认不自动加载任意位置的 SLS。

  • salt-run 命令只在 Master 本地运行,不会把文件推到 Minion,所以 state.orchestrate 读的是 Master 本地的 file_roots(通常是 /srv/salt)下的 _orch/ 子目录
  • 确保 /srv/salt/_orch/ 存在且有读权限;SLS 文件必须放在这里,比如 /srv/salt/_orch/deploy_app.sls
  • Master 配置里要确认 runner_dirs 包含 /srv/salt/_orch,否则 salt-run 根本找不到这个路径
  • 常见错误现象:State 'orch.my_state' was not found in SLS 'my_state' —— 实际是路径不对,不是语法错

Orchestrate SLS 里调用 state.applystate.sls 有什么区别?

本质区别在于执行上下文和返回控制权的方式。state.sls 是传统状态应用函数,而 state.apply 是它的别名(Salt 3000+ 后统一推荐),但在 orchestrate 中二者行为一致;真正关键的是你是否用了 requireonfail 来串起步骤。

  • _orch/ SLS 中写 state.apply 时,target 是 Minion ID 或 grain 匹配表达式,比如 target: 'web*',不是 target: 'G@os:Ubuntu' 这种复合写法——后者需要加引号且必须用双引号包裹整个字符串
  • 如果你依赖前一步的输出(比如部署完配置再重启服务),必须显式用 require 引用上一个 ID,不能只靠顺序;Salt 不保证 SLS 内 ID 的执行顺序
  • 性能影响:每个 state.apply 调用都会触发一次完整的状态编译+传输+执行流程,频繁小调用不如合并成一个 SLS 文件 + 多个 ID

如何让 orchestrate 在失败时中止后续步骤?

默认情况下,salt-run state.orchestrate 遇到某个 step 失败,会继续跑完所有定义的 steps,这跟预期不符。必须手动加 failhard: true 或用 onfail 显式控制流。

PageAdmin企业网站管理系统2.0
PageAdmin企业网站管理系统2.0

PageAdmin企业网站管理系统,采用ASP.NET2.0开发,功能强大,管理便捷;采用独立模块化设计,可在任意栏目自由调用各模块,充分体验ASP.NET2.0的强大功能。最新版修改了以下缺陷:1、增加了URL重写功能.2、添加了后台FCkeditor编辑器的上传验证.3、增加了首页排版的自定义(快捷菜单自定义,新闻自定义,滚动图片类型自定义)4、进一步增加了CSS的功能,是用户只需要更改CSS

下载
  • 全局中止:在 orchestrate SLS 最外层加 failhard: true,但注意这是 Salt 3005+ 才支持的特性,老版本无效
  • 条件中止:对关键步骤加 onfail,例如重启服务失败时触发回滚动作:rollback_config:state.apply: - mods: rollback.sls - target: web01 - onfail: - cmd.run: restart_failed
  • 容易踩的坑:用 cmd.run 执行 shell 命令时,如果命令本身返回非零退出码但没加 ignore_retcode: false,Salt 默认当成功处理,导致 onfail 不触发

为什么 salt-run jobs.list_jobs 看不到 orchestrate 任务?

因为 orchestrate 任务由 runner 执行,不走 Salt 的 job cache 机制,默认不会出现在 jobs.list_jobs 输出里。它属于 Master 本地调度行为,不是发往 Minion 的 job。

  • 查 orchestrate 执行日志只能看 Master 的 /var/log/salt/master,搜索关键词 orchestrate 或你的 SLS 文件名
  • 如果想追踪进度,可在 orchestrate SLS 里插入 test.echocmd.run 打点日志,例如:log_start: cmd.run: - name: echo "starting deploy at $(date)" - tgt: master - local: true
  • 兼容性注意:Salt 3006 开始引入 salt-run jobs.active 对 runner 任务的部分支持,但依然不包含 orchestrate,别指望它能列出来

Orchestrate 的“隐式执行模型”是最容易被忽略的一环——它不暴露 job ID、不进 event bus、不走 returner,调试时得切回 Master 日志和 salt-run 的实时输出,而不是习惯性去查 jobs.list_jobs

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
require的用法
require的用法

require的用法有引入模块、导入类或方法、执行特定任务。想了解更多require的相关内容,可以阅读本专题下面的文章。

481

2023.11.27

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

573

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

216

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1553

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

640

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

945

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

896

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

185

2025.07.29

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

561

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.3万人学习

Git 教程
Git 教程

共21课时 | 3.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号