模板与命令流
rauto 的核心优势之一,是把“可复用执行逻辑”拆成了两类:
- 命令模板:适合生成最终命令文本
- 命令流模板:适合处理交互式 prompt/response 流程
命令模板基于 Minijinja,兼容 Jinja2 语法,适合把重复命令结构参数化。
一个典型模板
Section titled “一个典型模板”conf t{% for vlan in vlans %}vlan {{ vlan.id }} name {{ vlan.name }}{% endfor %}end对应变量:
{ "vlans": [ { "id": 10, "name": "市场部" }, { "id": 20, "name": "工程部" } ]}执行方式:
rauto template configure_vlan.j2 \ --vars ./vars.json \ --connection core-sw-01模板存储方式
Section titled “模板存储方式”命令模板不是简单放在本地目录中,而是保存在 rauto 的 SQLite 运行时数据中,由 CLI 和 Web 共用。
常用管理命令:
rauto templates listrauto templates show configure_vlan.j2rauto templates delete configure_vlan.j2当你面对的不是“一次性下发一串命令”,而是这种流程时:
- 设备反复提问
- 每个 prompt 需要不同响应
- 可能还要引用运行时变量或其他连接信息
这时更适合 rauto flow。
命令流能处理什么场景
Section titled “命令流能处理什么场景”- Cisco 风格的
copy scp:/copy tftp: - 安装向导式 CLI
- 多轮确认操作
- 设备侧文件分发
- 依赖运行时输入的交互式命令序列
示例:Cisco 风格复制流
Section titled “示例:Cisco 风格复制流”rauto 仓库里自带了一个可编辑示例:
name = "cisco_like_copy"description = "Generic interactive SCP/TFTP copy flow for Cisco-like CLIs."stop_on_error = truedefault_mode = "Enable"
[[vars]]name = "command"required = true
[[steps]]timeout_secs = 300command = "{{command}}"
[[steps.prompts]]patterns = ["(?i)^Address or name of remote host.*\\?\\s*$"]response = "{{server_addr}}"这个模型的关键点是:
- 每个
step对应一段命令执行 prompts负责匹配设备输出并自动响应vars可以声明变量结构,用于 CLI 校验和 Web 表单生成
运行时变量规则
Section titled “运行时变量规则”命令流支持多种变量注入方式:
--vars <file>:从文件加载 JSON 变量--vars-json <json>:直接传内联 JSON- 在模板中使用顶层变量,例如
{{server_addr}} - 也可以通过
vars对象引用,例如{{vars.server_addr}} - 连接变量支持引用其他已保存连接参数,例如
{{peer.host}}
当前 README 还补充了这些运行时规则:
- 运行时变量会同时注入到顶层字段与嵌套的
vars对象中 - 支持
connection_name.param_name这种跨连接引用 - 直接写
param_name时,会先查请求 vars,再回退到当前目标连接参数 - 命令流模板可以声明
current_connection_alias = "<alias>",从而直接用{{alias.host}}、{{alias.username}}等引用当前执行目标 - 某个运行时变量本身也可以指向另一条已保存连接名,例如
peer=edge94后直接使用{{peer.host}}
命令流变量 Schema
Section titled “命令流变量 Schema”命令流模板可以声明 vars schema,这样 CLI 和 Web 都能更可靠地校验和渲染运行时输入。
README 当前明确提到支持这些字段:
nametyperequireddefaultoptionslabeldescription
这对企业级场景很重要,因为它让命令流从“字符串模板”升级成“可治理的操作接口”。
内置命令流与选择器行为
Section titled “内置命令流与选择器行为”当前 README 还说明了内置命令流的暴露方式:
- 内置模板通过
/api/flow-templates/builtins暴露 - CLI 可通过
--template builtin:<name>执行 - Web 侧下拉选择器也使用
builtin:<name>值
这意味着一个团队可以同时混合使用:
- 产品内置命令流
- 保存在 SQLite 中的团队级命令流
- 临时本地 TOML 文件做实验
流程控制与分支
Section titled “流程控制与分支”当前命令流模型支持这些输出分支动作:
nextjumpstop_successstop_failure
这也是为什么 rauto flow 不只是简单的 expect 宏,而是能够表达带分支的运维流程。
命令流的录制行为
Section titled “命令流的录制行为”当前 README 明确指出:
- 所有执行默认都会录制会话
--record-level key-events-only保留最小审计级信息--record-level full会保留更丰富的 prompt 与状态切换细节--record-file可以把同一份 JSONL 录制导出到文件
管理命令流模板
Section titled “管理命令流模板”rauto flow-template listrauto flow-template show cisco_like_copyrauto flow-template create cisco_like_copy --file ./my-flow.tomlrauto flow-template update cisco_like_copy --file ./my-flow.tomlrauto flow-template delete cisco_like_copyflow 与 upload 的区别
Section titled “flow 与 upload 的区别”适合设备侧交互,比如:
- 设备执行
copy scp: - 设备要求你输入 server、username、password
- 过程里存在多个 prompt
upload
Section titled “upload”适合 SSH 主机直接走 sftp 子系统上传本地文件:
rauto upload \ --local-path ./configs/daemon.conf \ --remote-path /tmp/daemon.conf \ --connection linux-jump-01很多网络设备不支持 SFTP,所以不能把它当成 flow 的替代。
- 纯命令拼装,优先用命令模板
- 存在设备交互,优先用命令流模板
- 需要跨多人复用时,把模板保存进
rauto存储而不是散落在脚本目录 - 对复杂流程优先先做
--dry-run或在测试环境执行 - 对涉及文件传输、安装向导的场景,优先给模板声明清晰的
vars
如果你接下来要做可回滚变更,请继续看 事务与多设备编排。