From fbe6aec707fa47a0a79c5174dec22372b5e7cf2c Mon Sep 17 00:00:00 2001 From: kelvin Date: Fri, 20 Feb 2026 20:24:02 +0800 Subject: [PATCH] add config.yaml --- .gitignore | 1 + data/confs/confs.go | 2 +- data/confs/db/base.yaml | 123 -------- data/confs/frontend/config.yaml | 511 ++++++++++++++++++++++++++++++++ internal/cli/init/cfg.go | 14 +- 5 files changed, 516 insertions(+), 135 deletions(-) create mode 100644 .gitignore delete mode 100644 data/confs/db/base.yaml create mode 100644 data/confs/frontend/config.yaml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c1e4501 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +sunhpc diff --git a/data/confs/confs.go b/data/confs/confs.go index 0843546..62476d2 100644 --- a/data/confs/confs.go +++ b/data/confs/confs.go @@ -18,7 +18,7 @@ import ( // - db/*/*.yaml : 匹配data/一级子目录下的所有yaml文件. // - 如需递归匹配子目录(如data/db/sub/*.yaml),用 data/**/*.yaml(Go.18+) // -//go:embed db/*.yaml firewall/*.yaml +//go:embed frontend/*.yaml firewall/*.yaml var ConfigFS embed.FS // GetConfigFile 获取指定目录下的的单个配置文件内容 diff --git a/data/confs/db/base.yaml b/data/confs/db/base.yaml deleted file mode 100644 index 179f285..0000000 --- a/data/confs/db/base.yaml +++ /dev/null @@ -1,123 +0,0 @@ -# 基础数据配置文件 -version: 1.0 -description: "SunHPC 基础数据配置" - -# 节点基础数据 -nodes: - - name: frontend - cpus: 4 - memory: 8192 - disk: 100 - rack: null - rank: null - arch: x86_64 - os: linux - runaction: os - installaction: os - status: active - description: "管理节点" - -# 属性基础数据 -attributes: - # 国家地区 - - node_name: frontend # 通过节点名称关联 - attr: country - value: CN - shadow: "" - - node_name: frontend - attr: state - value: Liaoning - shadow: "" - - node_name: frontend - attr: city - value: Shenyang - shadow: "" - - # 网络配置 - - node_name: frontend - attr: network_type - value: management - shadow: "" - - node_name: frontend - attr: ip_address - value: 192.168.1.100 - shadow: "" - - node_name: frontend - attr: subnet_mask - value: 255.255.255.0 - shadow: "" - - # 硬件信息 - - node_name: frontend - attr: manufacturer - value: Dell - shadow: "" - - node_name: frontend - attr: model - value: PowerEdge R740 - shadow: "" - - # 系统配置 - - node_name: frontend - attr: timezone - value: Asia/Shanghai - shadow: "" - - node_name: frontend - attr: language - value: zh_CN.UTF-8 - shadow: "" - - node_name: frontend - attr: kernel_version - value: "5.10.0" - shadow: "" - -# 软件基础数据 -software: - - name: openssl - version: "1.1.1k" - vendor: OpenSSL - install_method: source - is_installed: 0 - description: "加密库" - - - name: slurm - version: "23.02" - vendor: SchedMD - install_method: source - is_installed: 0 - description: "作业调度系统" - - - name: openmpi - version: "4.1.5" - vendor: OpenMPI - install_method: source - is_installed: 0 - description: "MPI 并行计算库" - -# 网络基础数据 -networks: - - node_name: frontend - interface: eth0 - ip_address: 192.168.1.100 - netmask: 255.255.255.0 - gateway: 192.168.1.1 - type: management - mac: "00:11:22:33:44:55" - -# 分区基础数据 -partitions: - - node_name: frontend - device: /dev/sda1 - mount_point: /boot - size: 1024 - fs_type: ext4 - - node_name: frontend - device: /dev/sda2 - mount_point: / - size: 102400 - fs_type: ext4 - - node_name: frontend - device: /dev/sda3 - mount_point: /home - size: 51200 - fs_type: ext4 \ No newline at end of file diff --git a/data/confs/frontend/config.yaml b/data/confs/frontend/config.yaml new file mode 100644 index 0000000..d0d10e9 --- /dev/null +++ b/data/confs/frontend/config.yaml @@ -0,0 +1,511 @@ +# 数据中心/集群基础配置 +metadata: + version: "1.0" + last_updated: "2024-01-01" + description: "数据中心基础设施配置" + +# 集群配置 +cluster: + name: "sunhpc-cluster" + type: "control" + osname: "Rocky Linux" + osversion: "9.7" + location: + country: "China" + city: "Beijing" + timezone: + name: "Asia/Shanghai" + offset: "+08:00" + ntp_servers: + - "ntp1.aliyun.com" + - "ntp2.tencent.com" + - "pool.ntp.org" + environment: + type: "production" # production/staging/development + region: "华北" + availability_zone: "AZ-01" +network: + domain: "sunhpc.local" + dns: + primary: "8.8.8.8" + secondary: "114.114.114.114" + wan: + - interface: "eth0" + address: "202.96.128.86" + netmask: "255.255.255.0" + gateway: "202.96.128.1" + mtu: 1500 + type: "public" + description: "public network" + lan: + - interface: "eth1" + address: "192.168.1.100" + netmask: "255.255.255.0" + gateway: "" + mtu: 1500 + type: "management" + description: "management network" +disks: + - device: "/dev/sda" + model: "PowerVault ME484" + type: "ssd" + size: "50TB" + vendor: "Dell" + serial: "1234567890" + status: "online" + + partition: + - name: "sda1" + usage: "boot partition" + mount: "/boot" + size: "16GB" + fstype: "ext4" + filesystem: "ext4" + uuid: "12345678-90ab-cdef-1234-567890abcdef" + + - name: "sda2" + usage: "root partition" + mount: "/" + size: "100GB" + fstype: "ext4" + filesystem: "ext4" + uuid: "12345678-90ab-cdef-1234-567890abcdef" + options: "defaults,noatime" + + - name: "sda3" + usage: "home partition" + mount: "/home" + size: "50TB" + fstype: "xfs" + filesystem: "ext4" + uuid: "12345678-90ab-cdef-1234-567890abcdef" + + - name: "sda4" + usage: "var partition" + mount: "/var" + size: "150GB" + fstype: "xfs" + filesystem: "xfs" + uuid: "12345678-90ab-cdef-1234-567890abcdef" + + - device: "/dev/sdb" + model: "PowerVault ME484" + type: "ssd" + size: "50TB" + vendor: "Dell" + serial: "1234567890" + status: "online" + + partition: + - name: "sdb1" + usage: "data partition" + mount: "/data" + size: "50TB" + fstype: "xfs" + filesystem: "xfs" + uuid: "12345678-90ab-cdef-1234-567890abcdef" + + +firewall: + global_policies: + - name: "默认策略" + input: "drop" + output: "accept" + forward: "drop" + + zones: + - name: "public" + interfaces: ["eth0", "eth1"] + services_allowed: ["ssh", "http", "https"] + source_ranges: ["0.0.0.0/0"] + + - name: "internal" + interfaces: ["eth2"] + services_allowed: ["ssh", "mysql", "redis", "mongodb", "nfs", "samba"] + source_ranges: ["192.168.0.0/16", "10.0.0.0/8"] + + - name: "storage" + interfaces: ["eth3"] + services_allowed: ["iscsi", "nfs", "smb"] + source_ranges: ["172.16.0.0/12"] + + rules: + - name: "允许Ping" + protocol: "icmp" + action: "accept" + source: "any" + destination: "any" + + - name: "限制SSH访问" + protocol: "tcp" + port: 22 + action: "accept" + source: "192.168.1.0/24" + destination: "any" + +# 全局服务配置 +services: + common_services: + - name: "sshd" + port: 22 + protocol: "tcp" + enabled: true + description: "SSH远程登录服务" + + - name: "ntpd" + port: 123 + protocol: "udp" + enabled: true + description: "时间同步服务" + + - name: "rsyslog" + port: 514 + protocol: "udp" + enabled: true + description: "日志收集服务" + + monitoring_services: + - name: "prometheus" + port: 9090 + protocol: "tcp" + enabled: true + description: "监控数据采集" + + - name: "grafana" + port: 3000 + protocol: "tcp" + enabled: true + description: "监控数据可视化" + + - name: "node_exporter" + port: 9100 + protocol: "tcp" + enabled: true + description: "节点指标采集" + + database_services: + - name: "mysql" + port: 3306 + protocol: "tcp" + enabled: true + version: "8.0" + description: "关系型数据库" + + - name: "redis" + port: 6379 + protocol: "tcp" + enabled: true + version: "6.2" + description: "缓存数据库" + + - name: "mongodb" + port: 27017 + protocol: "tcp" + enabled: true + version: "5.0" + description: "文档数据库" + +# 节点列表 +nodes: + # 计算节点 + compute_nodes: + - name: "compute-01" + hostname: "compute01.example.local" + role: "compute" + status: "active" + + basic_info: + timezone: "Asia/Shanghai" + cpu: "Intel Xeon Gold 6248R 3.0GHz (48核)" + memory: "512GB DDR4" + os: "CentOS 7.9" + kernel: "3.10.0-1160" + virtualization: "KVM" + + network: + interfaces: + - name: "eth0" + ip_address: "192.168.1.11" + mac_address: "00:0c:29:xx:xx:01" + network_type: "management" + speed: "1Gbps" + + disk: + - device: "/dev/sda" + size: "480GB" + type: "SSD" + mount_point: "/" + filesystem: "xfs" + usage: "系统盘" + + - device: "/dev/sdb" + size: "3.6TB" + type: "NVMe" + mount_point: "/data/local" + filesystem: "xfs" + usage: "本地数据盘" + + - device: "/dev/sdc" + size: "10TB" + type: "HDD" + mount_point: "/data/shared" + filesystem: "xfs" + usage: "共享存储挂载" + + services: + enabled: + - "sshd" + - "ntpd" + - "docker" + - "kubelet" + - "node_exporter" + disabled: + - "firewalld" + - "postfix" + + firewall: + enabled: true + rules: + - port: 22 + protocol: "tcp" + source: "192.168.1.0/24" + action: "accept" + - port: 10250 + protocol: "tcp" + source: "10.10.0.0/16" + action: "accept" + + hardware: + manufacturer: "Dell" + model: "PowerEdge R740xd" + serial_number: "ABC123XYZ" + warranty_expiry: "2025-12-31" + + location: + rack: "RACK-01" + position: "01U" + power_consumption: "500W" + + - name: "compute-02" + hostname: "compute02.example.local" + role: "compute" + status: "active" + # ... 类似配置,IP地址递增 + + # 存储节点 + storage_nodes: + - name: "storage-01" + hostname: "storage01.example.local" + role: "storage" + status: "active" + + basic_info: + timezone: "Asia/Shanghai" + cpu: "Intel Xeon Silver 4210 2.2GHz (20核)" + memory: "128GB DDR4" + os: "CentOS 7.9" + storage_software: "Ceph" + + network: + interfaces: + - name: "eth0" + ip_address: "192.168.1.21" + network_type: "management" + speed: "1Gbps" + + - name: "eth1" + ip_address: "172.16.1.21" + network_type: "storage_frontend" + speed: "10Gbps" + + - name: "eth2" + ip_address: "172.16.2.21" + network_type: "storage_backend" + speed: "25Gbps" + + - name: "eth3" + ip_address: "172.16.3.21" + network_type: "cluster" + speed: "10Gbps" + + disk: + - device: "/dev/sda" + size: "240GB" + type: "SSD" + mount_point: "/" + filesystem: "xfs" + usage: "系统盘" + + - device: "/dev/sdb" + size: "480GB" + type: "SSD" + mount_point: "/var/lib/ceph/osd/ceph-0" + filesystem: "xfs" + usage: "OSD (日志/WAL)" + + - device: "/dev/sdc" + size: "8TB" + type: "HDD" + mount_point: "/var/lib/ceph/osd/ceph-1" + filesystem: "xfs" + usage: "OSD (数据)" + + - device: "/dev/sdd" + size: "8TB" + type: "HDD" + mount_point: "/var/lib/ceph/osd/ceph-2" + filesystem: "xfs" + usage: "OSD (数据)" + + services: + enabled: + - "sshd" + - "ntpd" + - "ceph-mon" + - "ceph-mgr" + - "ceph-osd" + + ceph_config: + cluster_name: "ceph-prod" + fsid: "12345678-1234-1234-1234-123456789012" + mon_hosts: + - "192.168.1.21" + - "192.168.1.22" + - "192.168.1.23" + + - name: "storage-02" + # ... 类似配置 + + # 其他节点 + other_nodes: + # 管理节点 + - name: "management-01" + hostname: "mgmt01.example.local" + role: "management" + status: "active" + + basic_info: + timezone: "Asia/Shanghai" + cpu: "Intel Xeon Bronze 3204 1.9GHz (6核)" + memory: "64GB DDR4" + os: "CentOS 7.9" + + network: + interfaces: + - name: "eth0" + ip_address: "192.168.1.31" + network_type: "management" + speed: "1Gbps" + + services: + enabled: + - "sshd" + - "ntpd" + - "ansible" + - "salt-master" + - "jumpserver" + + # 网关节点 + - name: "gateway-01" + hostname: "gw01.example.local" + role: "gateway" + status: "active" + + basic_info: + timezone: "Asia/Shanghai" + cpu: "Intel Xeon E-2234 3.6GHz (4核)" + memory: "32GB DDR4" + os: "pfSense 2.5.2" + + network: + interfaces: + - name: "wan" + ip_address: "202.96.128.86" + network_type: "external" + speed: "1Gbps" + + - name: "lan" + ip_address: "192.168.1.254" + network_type: "internal" + speed: "1Gbps" + + - name: "dmz" + ip_address: "192.168.100.254" + network_type: "dmz" + speed: "1Gbps" + + services: + enabled: + - "ssh" + - "dnsmasq" + - "nginx" + - "haproxy" + - "keepalived" + + # 监控节点 + - name: "monitoring-01" + hostname: "mon01.example.local" + role: "monitoring" + status: "active" + + basic_info: + timezone: "Asia/Shanghai" + cpu: "Intel Xeon Silver 4208 2.1GHz (8核)" + memory: "64GB DDR4" + os: "Ubuntu 20.04 LTS" + + services: + enabled: + - "prometheus" + - "grafana" + - "alertmanager" + - "elasticsearch" + - "kibana" + - "filebeat" + + + +# 节点基础数据 +nodes: + - name: frontend + cpus: 4 + memory: 8192 + disk: 100 + rack: null + rank: null + arch: x86_64 + os: linux + runaction: os + installaction: os + status: active + description: "管理节点" + +# 属性基础数据 +attributes: + # 国家地区 + - node_name: frontend # 通过节点名称关联 + attr: country + value: CN + shadow: "" +# 软件基础数据 +software: + - name: openssl + version: "1.1.1k" + vendor: OpenSSL + install_method: source + is_installed: 0 + description: "加密库" + + - name: slurm + version: "23.02" + vendor: SchedMD + install_method: source + is_installed: 0 + description: "作业调度系统" + + - name: openmpi + version: "4.1.5" + vendor: OpenMPI + install_method: source + is_installed: 0 + description: "MPI 并行计算库" diff --git a/internal/cli/init/cfg.go b/internal/cli/init/cfg.go index 18b17ca..211bd48 100644 --- a/internal/cli/init/cfg.go +++ b/internal/cli/init/cfg.go @@ -2,18 +2,14 @@ package initcmd import ( "sunhpc/internal/middler/auth" - "sunhpc/pkg/logger" "github.com/spf13/cobra" - "go.uber.org/zap" ) // NewConfigCmd 创建 "init config" 命令 func NewInitCfgCmd() *cobra.Command { var ( - force bool - path string - verbose bool + output string ) cmd := &cobra.Command{ @@ -24,23 +20,19 @@ func NewInitCfgCmd() *cobra.Command { 示例: sunhpc init config # 生成默认配置文件 - sunhpc init config -f # 强制覆盖已有配置文件 - sunhpc init config -p /etc/sunhpc/sunhpc.yaml # 指定路径 + sunhpc init config -o /etc/sunhpc/sunhpc.yaml # 指定路径 `, RunE: func(cmd *cobra.Command, args []string) error { if err := auth.RequireRoot(); err != nil { return err } - logger.Info("✅ 配置文件已生成", zap.String("path", path)) return nil }, } // 定义局部 flags - cmd.Flags().BoolVarP(&force, "force", "f", false, "强制覆盖已有配置文件") - cmd.Flags().StringVarP(&path, "path", "p", "", "指定配置文件路径") - cmd.Flags().BoolVarP(&verbose, "verbose", "v", false, "显示详细日志") + cmd.Flags().StringVarP(&output, "output", "o", "", "指定配置文件路径") return cmd }