package maker import ( "context" "fmt" "os" "path/filepath" "yizhisec.com/hsv2/forge/pkg/logger" "yizhisec.com/hsv2/forge/pkg/model" "yizhisec.com/hsv2/forge/pkg/resource" ) func (m *maker) Flannel(ctx context.Context, mode string) error { var ( err error location = filepath.Join(m.workdir, "dependency", "flannel") ) logger.Info("☑️ 开始构建 flannel 资源...") logger.Debug("MakeFlannel location: %s", location) if err = os.Mkdir(location, 0755); err != nil { logger.Error("MakeFlannel: 创建目录 %s 失败", location) logger.Debug("MakeFlannel: 创建目录 %s 失败: %v", location, err) return err } bs := []byte(fmt.Sprintf(resource.YAMLFlannel, mode)) if err = os.WriteFile(filepath.Join(location, "flannel.yaml"), bs, 0644); err != nil { logger.Error("MakeFlannel: 创建文件 %s 失败", filepath.Join(location, "flannel.yaml")) logger.Debug("MakeFlannel: 创建文件 %s 失败: %v", filepath.Join(location, "flannel.yaml"), err) return err } var images = []*model.Image{ {Name: "ghcr.io/flannel-io/flannel:v0.27.4", Fallback: "swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/flannel-io/flannel:v0.27.4", Save: "flannel.tar"}, {Name: "ghcr.io/flannel-io/flannel-cni-plugin:v1.8.0-flannel1", Fallback: "swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/flannel-io/flannel-cni-plugin:v1.8.0-flannel1", Save: "flannel-cni-plugin.tar"}, } logger.Debug("MakeFlannel: 开始获取镜像...") 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("❌ MakeFlannel: 获取镜像失败: %s, 可以手动获取后重试", image.Name) logger.Debug("❌ MakeFlannel: 获取镜像失败: %s, %v", image.Name, err) return err } } logger.Debug("MakeFlannel: 获取镜像成功!!!") logger.Info("✅ 构建 flannel 成功!!!") return nil }