Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

文件组织方式

概述

本文档详细说明 Sys-Operator 中的文件组织方式,包括配置文件的结构、模块文件的存储、工作流文件的编排等,帮助你理解如何有效地组织和管理系统文件。

配置文件组织

1. 系统级配置文件

系统级配置文件存储在 sys/ 目录下,定义整个系统的基础架构和配置。

sys_model.yml - 系统模型定义

文件作用: 定义系统的基本信息和目标运行环境

配置结构:

# 基础系统定义
name: system_name                    # 系统名称(必需)
model: arm-mac14-host               # 目标平台模型(必需)
vender: "Galaxy-Ops"                # 厂商信息(可选)

命名规范:

  • 文件名必须为 sys_model.yml
  • 系统名称必须唯一且有意义
  • 模型名称遵循 arch-os-spc 格式
  • 版本号遵循语义化版本规范

mod_list.yml - 模块列表定义

文件作用: 定义系统包含的所有模块及其配置

配置结构:

# 基础模块列表
- name: module_name                     # 模块名称(必需)
  addr:                                  # 模块地址(必需)
    repo: "https://github.com/user/repo" # Git 仓库(可选)
    tag: "v1.0.0"                        # 标签(可选)
    branch: "main"                       # 分支(可选)
    path: "./local/path"                 # 本地路径(可选)
  model: arm-mac14-host                 # 目标平台模型(必需)
  enable: true                           # 是否启用(可选,默认为 true)

# 高级模块配置
- name: advanced_module
  addr:
    repo: "https://github.com/user/module"
    tag: "v2.0.0"
  model: x86-ubt22-k8s
  enable: true
  setting:                              # 模块特定设置(可选)
    src: "${GXL_PRJ_ROOT}/sys/setting/module"
    dst: "${GXL_PRJ_ROOT}/sys/mods/module/local/"

配置验证:

  • 模块名称不能重复
  • 模块地址必须有效
  • 模型必须存在
  • 依赖关系不能形成循环

vars.yml - 系统变量定义

文件作用: 定义系统级别的环境变量和配置参数

配置结构:

# 基础变量
vars:
- name: VARIABLE_NAME             # 变量名(必需)
  value: "default_value"          # 默认值(必需)
  desp: "变量描述"               # 描述(可选)

# 类型化变量
- name: INT_VAR
  type: integer                  # 数据类型(可选)
  min: 1                         # 最小值(可选)
  max: 100                       # 最大值(可选)
  value: 10

- name: BOOL_VAR
  type: boolean
  value: true

- name: ENUM_VAR
  type: enum                     # 枚举类型
  values: [opt1, opt2, opt3]     # 可选值(必需)
  value: opt1

- name: REGEX_VAR
  type: string
  pattern: "^[a-zA-Z]+$"         # 正则模式(必需)
  value: "valid_string"

# 分组变量
vars:
# 网络配置
- name: HTTP_PORT
  group: network
  value: 80

- name: HTTPS_PORT
  group: network
  value: 443

# 数据库配置
- name: DB_HOST
  group: database
  value: "localhost"

- name: DB_PORT
  group: database
  type: integer
  min: 1
  max: 65535
  value: 5432

# 环境变量替换
- name: CONFIG_PATH
  value: "${CONFIG_PATH:/etc/app/config}"

- name: DEBUG_MODE
  value: "${DEBUG_MODE:false}"

# 条件变量
- name: FEATURE_FLAG
  value: "${FEATURE_FLAG:default}"

2. 项目级配置文件

项目级配置文件存储在 _gal/ 目录下,定义项目级别的管理配置。

_gal/adm.gxl - 系统管理配置

文件作用: 定义系统的版本管理和发布配置

配置结构:

#![allow(unused)]
fn main() {
// 引入版本管理模块
extern mod ver,git,ver_adm {
    git = "https://github.com/galaxy-operators/cfm-gxl.git",
    channel = "${GXL_CHANNEL:main}"
}

// 环境定义
mod envs {
    env default {
        PKG_NAME = "your_system";        // 系统包名
        VERSION = "1.0.0";              // 系统版本
        MAINTAINER = "devops@example.com";
        DESCRIPTION = "System description";
    }

    env production {
        PKG_NAME = "production-system";
        VERSION = "1.0.0";
        MAINTAINER = "prod-team@example.com";
    }
}

// 主模块继承版本管理功能
mod main : ver_adm {
    // 版本信息任务
    #[task(name="version")]
    flow version {
        gx.echo("System version: ${VERSION}");
        gx.echo("Package name: ${PKG_NAME}");
        gx.echo("Maintainer: ${MAINTAINER}");
    }

    // 发布任务(可选)
    #[task(name="publish")]
    flow publish {
        gx.echo("Publishing system to registry...");
        // 发布逻辑
    }
}
}

_gal/work.gxl - 工作流环境配置

文件作用: 定义系统的工作流环境和执行配置

配置结构:

#![allow(unused)]
fn main() {
// 引入操作符和版本管理模块
extern mod operators { path = "./sys/workflows"; }
extern mod ver,git {
    git = "https://github.com/galaxy-operators/cfm-gxl.git",
    channel = "${GXL_CHANNEL:main}"
}

// 环境定义
mod envs {
    // 默认环境
    env default : _common {
        FORCE_FLAG = "";                // 强制标志
        LOG_LEVEL = "";                 // 日志级别
        SYS_BIN = "gsys";              // 系统管理器
        MOD_BIN = "gmod";              // 模块管理器
        SYS = "sys";                    // 系统标识
        MODULE_ENV = "default";         // 模块环境
    }

    // 强制执行环境
    env force {
        FORCE_FLAG = "-f 3";
        LOG_LEVEL = "--log debug";
    }

    // 生产环境
    env production {
        FORCE_FLAG = "-f 2";
        LOG_LEVEL = "--log info";
        MODULE_ENV = "production";
    }

    // 通用配置
    env _common {
        BUILD_PATH = "${GXL_PRJ_ROOT}/build";    // 构建路径
        DEPLOY_PATH = "${GXL_PRJ_ROOT}/deploy";   // 部署路径
    }
}

// 主模块继承操作符功能
mod main : operators {
    BUILD_PATH = "${GXL_PRJ_ROOT}/build";

    // 自动加载入口
    #[auto_load(entry)]
    flow ver.use | @_into_main {
        ENV_SYS_MODEL = ${DEFINE.MODEL};          // 设置系统模型
        ENV_PKG_NAME = ${DEFINE.NAME};             // 设置包名
    }

    // 主配置任务
    #[task(name="main conf")]
    flow conf {
        gx.echo("=== 开始系统配置 ===");

        // 更新系统配置
        gx.cmd ("${ENV_SYS_BIN} update ${ENV_LOG_LEVEL} ${ENV_FORCE_FLAG}");

        // 本地化系统配置
        gx.cmd ("${ENV_SYS_BIN} localize ${ENV_LOG_LEVEL}");

        gx.echo("=== 系统配置完成 ===");
    }
}
}

3. 模块文件组织

模块文件存储在 sys/mods/ 目录下,每个模块有自己的本地化副本。

模块目录结构

sys/mods/
├── module_name/
│   └── platform_model/
│       ├── spec/                    # 规范文件
│       │   ├── module_spec.yml      # 模块规范
│       │   └── interfaces.yml       # 接口定义
│       ├── local/                   # 本地化配置
│       │   ├── config.yml           # 本地配置
│       │   ├── templates/            # 模板文件
│       │   └── scripts/             # 脚本文件
│       ├── values/                  # 值文件
│       │   ├── production.yml       # 生产环境值
│       │   ├── staging.yml          # 测试环境值
│       │   └── development.yml      # 开发环境值
│       ├── vars.yml                 # 模块变量
│       ├── setting.yml              # 本地化设置
│       └── workflows/               # 模块工作流
│           ├── install.gxl          # 安装工作流
│           ├── configure.gxl        # 配置工作流
│           └── start.gxl             # 启动工作流

模块配置文件

vars.yml - 模块变量:

# 模块特定变量
vars:
- name: MODULE_VERSION
  value: "1.0.0"
  description: "模块版本"

- name: MODULE_TYPE
  value: "service"
  description: "模块类型"

- name: MODULE_PORT
  type: integer
  min: 1
  max: 65535
  value: 8080
  description: "服务端口"

setting.yml - 本地化设置:

TODO

模块工作流文件

workflows/install.gxl - 安装工作流:

// 模块安装工作流
mod install {
    // 安装任务
    #[task(name="module_install")]
    flow install {
        gx.echo("=== 开始模块安装 ===");
        gx.echo("模块名称: ${MODULE.NAME}");
        gx.echo("模块版本: ${MODULE.VERSION}");

        // 预检查
        gx.echo("1. 执行预检查...");
        gx.pre_check();

        // 依赖安装
        gx.echo("2. 安装依赖...");
        gx.install_dependencies();

        // 配置文件
        gx.echo("3. 配置文件...");
        gx.configure();

        // 验证安装
        gx.echo("4. 验证安装...");
        gx.validate();

        gx.echo("=== 模块安装完成 ===");
    }
}

4. 工作流文件组织

系统工作流文件存储在 sys/workflows/ 目录下。

operators.gxl - 系统操作符工作流

文件作用: 定义系统级别的操作流程

配置结构:

TODO

5. 项目配置文件

sys-prj.yml - 系统项目配置

文件作用: 定义系统项目的完整配置

配置结构:

# 基础项目配置
name: "Production Web System"               # 系统项目名称
version: "1.0.0"                           # 项目版本
description: "Production web application system with monitoring"

# 测试环境配置
test_envs:
  dep_root: "./test_deps"                   # 依赖根目录
  deps:
    - addr:
        repo: https://github.com/galaxy-operators/bitnami-common.git
      local: ./test_res/bit-common          # 本地路径
      rename: bit-common                    # 重命名
      enable: true                          # 是否启用




总结

Sys-Operator 的文件组织方式遵循了模块化、标准化、可维护性的原则。通过合理的文件结构和配置组织,可以有效管理系统配置,提高开发效率,降低维护成本。理解并遵循这些文件组织方式对于有效使用 Sys-Operator 至关重要。


更多详情请参考 目录结构命名规范