模板系统设计(当前实现)
最后更新:2026-02-15
状态:生效中
1. 概述
本文描述 DistroNexus 模板系统的当前实现设计,涵盖元数据、核心服务、桌面端流程集成、PowerShell 命令面与自动化验证。
2. 架构分层
2.1 元数据层
主数据源:
config/templates.json
关键职责:
- 模板标识与分类定义;
- 脚本顺序与执行元数据;
- 版本/通道选项与默认值;
- 预检项与输出产物声明。
2.2 核心领域模型层
主要模型文件:
src/Client/DistroNexus.Core/Models/Template.cs
核心实体:
TemplateTemplateScriptTemplateVersionOption/TemplateOptionValueTemplatePreflightCheckTemplateOutputArtifactTemplateApplicationResultTemplateProgressTemplateValidationResult
2.3 服务层
服务契约:
src/Client/DistroNexus.Core/Interfaces/ITemplateService.cs
服务实现:
src/Client/DistroNexus.Core/Services/TemplateService.cs
核心能力:
- 目录加载与缓存;
- 模板检索;
- 应用流程编排;
- 校验与兼容性检查;
- 自定义模板导入导出;
- 应用历史持久化。
2.4 桌面端集成层
DI 注册:
src/Client/DistroNexus.Desktop/App.xaml.cs
向导集成:
src/Client/DistroNexus.Desktop/Wizard/InstallWizardWorkflowViewModel.cssrc/Client/DistroNexus.Desktop/Wizard/Steps/SelectTemplateStep.cssrc/Client/DistroNexus.Desktop/Wizard/Steps/TemplateApplyStep.cs
2.5 PowerShell 命令面层
模块导出:
src/PowerShell/DistroNexus.psd1
主要 cmdlet:
Get-DistroNexusTemplateApply-DistroNexusTemplateInvoke-DistroNexusTemplateAutomation
3. 运行时数据与存储
3.1 内置元数据源
config/templates.json
3.2 用户/运行时数据(AppData)
%APPDATA%\DistroNexus\templates.json(用户模板缓存)%APPDATA%\DistroNexus\template-application-history.json(执行历史)
4. 核心执行序列
执行入口:
TemplateService.ApplyTemplateAsync(templateId, instanceName, variables, progress, cancellationToken)
序列:
- 按 ID 解析模板。
- 构建生效变量集合。
- 执行预检。
- 按
Order顺序执行脚本。 - 通过
TemplateProgress上报进度。 - 持久化历史记录。
5. 变量解析策略
生效变量按以下顺序合并:
Template.VariablesTemplate.DefaultSelectionsTemplate.VersionOptions.DefaultValue(若缺失)- 调用时传入的运行时覆盖变量
后来源覆盖前来源。
6. 预检设计
预检由 TemplatePreflightCheck 建模,并在脚本执行前运行。
行为规则:
- 必需检查失败 => 中止应用流程。
- 可选检查失败 => 记录告警并继续。
- 通过
AppliesToVariable/AppliesToValue支持条件适用。
7. 脚本执行设计
7.1 脚本来源
脚本来源可为:
- 内联内容(
Content),或 - 相对路径(
ScriptPath,通过允许根目录解析)。
7.2 脚本类型
- Bash 脚本在目标 WSL 实例内执行。
- PowerShell 脚本在主机上下文执行。
7.3 顺序与失败处理
- 脚本按
Order排序执行。 - 每个脚本可配置超时(
TimeoutSeconds)。 ContinueOnError决定失败脚本是否中止整体流程。
8. 安全模型
当前路径与执行防护包括:
- 拒绝绝对脚本路径;
- 检测路径穿越;
- 强制脚本解析在允许根目录下。
这些控制用于防止模板执行期间的脚本路径注入。
9. 桌面端用户流程集成
向导中的模板流程:
- 用户进入模板选择步骤。
- 用户选择模板(或按流程支持跳过)。
- 应用步骤执行模板并展示状态/进度输出。
- 完成状态回传到最终流程状态。
10. PowerShell 集成设计
10.1 发现
Get-DistroNexusTemplate 按 ID/分类读取并筛选模板目录。
10.2 应用
Apply-DistroNexusTemplate 解析模板并在目标实例上执行脚本,支持变量覆盖。
10.3 自动化验证
Invoke-DistroNexusTemplateAutomation 支持:
AllTemplates或SelectedTemplates模式;DryRun;- 能力受限分类(
Blocked); - CI 防护与显式覆盖;
- 结果产物(
test-results.xml、run-manifest.json、summary.md)。