Playbook 与 MCP
XOps 提供 YAML 声明式任务编排(xops play)和内置 Model Context Protocol 服务端(xops mcp)。
若希望让支持 Skill 的 AI 助手在本地直接调用
xopsCLI 完成运维操作(无需启动 MCP 服务),请参阅 Agent Skill 与功能概览。
Playbook 声明式编排
Playbook 使用 YAML 编排多台主机上的自动化步骤,支持 shell(执行命令)、script(分发执行本地脚本)、copy(上传文件)、ensure(状态检查与幂等收敛)和 template(渲染配置模板)。
1. 快速上手示例
创建 deploy-service.yaml:
yaml
name: deploy-service
targets:
tags: [web]
settings:
concurrency: 5
on_error: stop
execution:
interpreter: bash
launch_dialect: posix
login: true
vars:
http_port: "8080"
steps:
- name: 检查系统运行时间
shell: uptime
- name: 确保 Nginx 已安装
ensure:
check: "nginx -v"
action: "apt-get update && apt-get install -y nginx"
sudo: true
- name: 渲染并分发配置文件
template:
src: "./nginx.conf.tmpl"
dest: "/etc/nginx/nginx.conf"
sudo: true
- name: 重启服务
shell: "systemctl restart nginx"
sudo: true运行与调试命令:
bash
# 预览目标主机与执行步骤(不连接远端、不执行任何更改)
xops play deploy-service.yaml --dry-run
# 正式运行 Playbook
xops play deploy-service.yaml
# 命令行注入或覆盖变量(未定义的模板变量会在执行前报错)
xops play deploy-service.yaml --var http_port=8081
# 仅在指定节点列表上执行
xops play deploy-service.yaml --limit web-01,web-022. 失败策略、重试与执行配置
- 失败控制(
settings.on_error):stop(默认):出错主机停止后续步骤,其他并行主机继续执行。abort_all:任一主机连接失败或步骤失败时,立即取消所有其他正在运行的主机任务。continue:当前主机忽略该步骤错误,继续执行后续步骤。
- 安全重试边界:步骤配置
retries后,仅当远端命令确认已执行完毕且无 I/O 或通道清理错误时才会按retry_delay重试;若连接中断导致远端执行结果不确定(unknown),XOps 绝不自动重放,避免重复产生副作用。本地脚本内容在任务开始前一次性读取并冻结。 - 执行环境继承(
execution):支持在步骤级step.execution、全局settings.execution或节点配置中指定interpreter(如bash、sh、zsh、fish、powershell、pwsh、cmd、server)与launch_dialect。
3. script 与 ensure 按需探测及状态码规则
当未指定解释器且启动方言未知时,无 shebang 的 script 步骤和 ensure 步骤会在运行用户代码前自动发起一次有界只读探测(同一连接共享缓存,不改写磁盘配置,也不影响普通 shell 步骤的默认 server 直通):
- 支持范围:
script与ensure支持bash、sh、zsh和原生fish(外层启动方言须为posix或fish)。若探测到 Windows 环境,会在执行用户代码前直接报错拒绝,不做跨平台语法翻译。显式解释器(含server)、UTF-8 BOM 和非白名单 shebang 不会被自动替换;白名单 shebang 仍需已知兼容的外层方言。 ensure收敛与保留退出码保护:ensure先运行check:返回0则判定满足条件并跳过action(StatusSkipped);确认返回普通非零状态(如false返回1)时执行action,随后再次运行check复查(check、action、复查全程冻结使用同一执行配置)。- 异常退出码拦截:若
check返回保留错误码126/127(命令不可执行或未找到)、fish 保留错误码121/123/124/125、发生语法错误、超时、断连或丢失控制帧(例如在check中调用exec替换了 Shell 进程),均直接判定步骤失败(StatusFailed),严禁触发action。
MCP 服务接入
XOps 内置 MCP 服务端,可供 Claude Desktop、Cursor、Codex 等 AI 客户端调用受控的主机查询、远程命令、文件传输与 SSH 隧道工具。
bash
# 启动默认 stdio 模式 MCP 服务
xops mcp serve1. 客户端接入与安全护栏
在 AI 客户端的 MCP 配置中,将启动命令设为 xops 的绝对路径,参数设为 ["mcp", "serve"]。
在 ~/.xops/xops_config.yaml 的 guardrail 字段中可配置审批阈值、高危命令拦截、受保护文件路径和审计日志路径:
- 操作审批:当工具调用达到需审批的风险级别时,客户端会弹出审批请求(需确认
approved=true),拒绝、取消或超时均不会执行远端操作。 - 默认超时与非交互凭据:单次工具调用默认超时为 5 分钟(可通过
mcp.tool_timeout调整,如30m)。MCP 全程运行在非交互模式下,不会弹出终端密码提示或密钥环解锁窗口,启动前可用xops credential doctor检查凭据可用性。