95 lines
4.1 KiB
Go
95 lines
4.1 KiB
Go
package maker
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"yizhisec.com/hsv2/forge/pkg/downloader"
|
|
"yizhisec.com/hsv2/forge/pkg/logger"
|
|
"yizhisec.com/hsv2/forge/pkg/model"
|
|
)
|
|
|
|
func (m *maker) Longhorn(ctx context.Context, replica int) error {
|
|
const (
|
|
valuesContent = `# 设置 Longhorn 数据存储路径
|
|
defaultSettings:
|
|
defaultDataPath: "/data/longhorn"
|
|
# 设置默认副本数
|
|
persistence:
|
|
reclaimPolicy: Retain
|
|
defaultClassReplicaCount: %d
|
|
`
|
|
)
|
|
|
|
var (
|
|
err error
|
|
chartURL = "https://artifactory.yizhisec.com:443/artifactory/filestore/hsv3/charts/longhorn-1.10.0.tgz"
|
|
location = filepath.Join(m.workdir, "dependency", "longhorn")
|
|
chartFile = filepath.Join(location, "longhorn-1.10.0.tgz")
|
|
valuesFile = filepath.Join(location, "values.yaml")
|
|
)
|
|
|
|
logger.Info("☑️ 开始准备 Longhorn 资源...")
|
|
logger.Debug("下载地址: %s", chartURL)
|
|
logger.Debug("目标目录: %s", location)
|
|
|
|
if err = os.MkdirAll(filepath.Join(m.workdir, "dependency", "longhorn"), 0755); err != nil {
|
|
return err
|
|
}
|
|
|
|
// Download the chart file
|
|
if err = downloader.Download(
|
|
ctx,
|
|
chartURL,
|
|
chartFile,
|
|
downloader.WithInsecureSkipVerify(),
|
|
); err != nil {
|
|
logger.Info("❌ 下载 Longhorn chart 失败")
|
|
return err
|
|
}
|
|
|
|
// Create values.yaml file
|
|
bs := []byte(fmt.Sprintf(valuesContent, replica))
|
|
if err := os.WriteFile(valuesFile, bs, 0644); err != nil {
|
|
logger.Debug("创建 values.yaml 失败: %v", err)
|
|
logger.Info("❌ 创建 values.yaml 失败")
|
|
return err
|
|
}
|
|
|
|
var images = []*model.Image{
|
|
{Name: "docker.io/longhornio/longhorn-engine:v1.10.0", Fallback: "docker-mirror.yizhisec.com/longhornio/longhorn-engine:v1.10.0", Save: "longhorn.longhorn-engine.tar"},
|
|
{Name: "docker.io/longhornio/longhorn-manager:v1.10.0", Fallback: "docker-mirror.yizhisec.com/longhornio/longhorn-manager:v1.10.0", Save: "longhorn.longhorn-manager.tar"},
|
|
{Name: "docker.io/longhornio/longhorn-instance-manager:v1.10.0", Fallback: "docker-mirror.yizhisec.com/longhornio/longhorn-instance-manager:v1.10.0", Save: "longhorn.longhorn-instance-manager.tar"},
|
|
{Name: "docker.io/longhornio/longhorn-share-manager:v1.10.0", Fallback: "docker-mirror.yizhisec.com/longhornio/longhorn-share-manager:v1.10.0", Save: "longhorn.longhorn-share-manager.tar"},
|
|
{Name: "docker.io/longhornio/longhorn-ui:v1.10.0", Fallback: "docker-mirror.yizhisec.com/longhornio/longhorn-ui:v1.10.0", Save: "longhorn.longhorn-ui.tar"},
|
|
{Name: "docker.io/longhornio/csi-snapshotter:v8.3.0-20250826", Fallback: "docker-mirror.yizhisec.com/longhornio/csi-snapshotter:v8.3.0-20250826", Save: "longhorn.csi-snapshotter.tar"},
|
|
{Name: "docker.io/longhornio/csi-resizer:v1.14.0-20250826", Fallback: "docker-mirror.yizhisec.com/longhornio/csi-resizer:v1.14.0-20250826", Save: "longhorn.csi-resizer.tar"},
|
|
{Name: "docker.io/longhornio/csi-provisioner:v5.3.0-20250826", Fallback: "docker-mirror.yizhisec.com/longhornio/csi-provisioner:v5.3.0-20250826", Save: "longhorn.csi-provisioner.tar"},
|
|
{Name: "docker.io/longhornio/livenessprobe:v2.16.0-20250826", Fallback: "docker-mirror.yizhisec.com/longhornio/livenessprobe:v2.16.0-20250826", Save: "longhorn.livenessprobe.tar"},
|
|
{Name: "docker.io/longhornio/csi-node-driver-registrar:v2.14.0-20250826", Fallback: "docker-mirror.yizhisec.com/longhornio/csi-node-driver-registrar:v2.14.0-20250826", Save: "longhorn.csi-node-driver-registrar.tar"},
|
|
{Name: "docker.io/longhornio/csi-attacher:v4.9.0-20250826", Fallback: "docker-mirror.yizhisec.com/longhornio/csi-attacher:v4.9.0-20250826", Save: "longhorn.csi-attacher.tar"},
|
|
}
|
|
|
|
logger.Debug("MakeLonghorn: 开始获取镜像...")
|
|
for _, image := range images {
|
|
opts := []ImageOpt{
|
|
WithImageFallback(image.Fallback),
|
|
WithImageSave(filepath.Join(location, image.Save)),
|
|
WithImageForcePull(image.Force),
|
|
}
|
|
|
|
if err := m.Image(ctx, image.Name, opts...); err != nil {
|
|
logger.Error("❌ MakeLonghorn: 获取镜像失败: %s, 可以手动获取后重试", image.Name)
|
|
logger.Debug("❌ MakeLonghorn: 获取镜像失败: %s, %v", image.Name, err)
|
|
return err
|
|
}
|
|
}
|
|
logger.Debug("MakeLonghorn: 获取镜像成功!!!")
|
|
|
|
logger.Info("✅ 成功创建 longhorn 资源!!!")
|
|
|
|
return nil
|
|
}
|