package clusters import ( "strconv" "strings" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/httpdns/httpdnsutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/systemconfigs" "github.com/iwind/TeaGo/actions" ) type CreateAction struct { actionutils.ParentAction } func (this *CreateAction) Init() { this.Nav("httpdns", "cluster", "") } func (this *CreateAction) RunGet(params struct{}) { httpdnsutils.AddLeftMenu(this.Parent()) this.Show() } func (this *CreateAction) RunPost(params struct { Name string GatewayDomain string CacheTtl int32 FallbackTimeout int32 InstallDir string IsOn bool IsDefaultPrimary bool IsDefaultBackup bool Must *actions.Must }) { params.Name = strings.TrimSpace(params.Name) params.GatewayDomain = strings.TrimSpace(params.GatewayDomain) params.InstallDir = strings.TrimSpace(params.InstallDir) if len(params.InstallDir) == 0 { params.InstallDir = "/opt/edge-httpdns" } if params.CacheTtl <= 0 { params.CacheTtl = 30 } if params.FallbackTimeout <= 0 { params.FallbackTimeout = 300 } params.Must.Field("name", params.Name).Require("请输入集群名称") params.Must.Field("gatewayDomain", params.GatewayDomain).Require("请输入服务域名") if params.IsDefaultPrimary && !params.IsOn { this.Fail("默认主集群必须保持启用状态") return } if params.IsDefaultBackup && !params.IsOn { this.Fail("默认备用集群必须保持启用状态") return } if params.IsDefaultPrimary && params.IsDefaultBackup { this.Fail("默认主集群和默认备用集群不能是同一个集群") return } resp, err := this.RPC().HTTPDNSClusterRPC().CreateHTTPDNSCluster(this.AdminContext(), &pb.CreateHTTPDNSClusterRequest{ Name: params.Name, ServiceDomain: params.GatewayDomain, DefaultTTL: params.CacheTtl, FallbackTimeoutMs: params.FallbackTimeout, InstallDir: params.InstallDir, IsOn: params.IsOn, IsDefault: params.IsDefaultPrimary, }) if err != nil { this.ErrorPage(err) return } if params.IsDefaultBackup { _, err = this.RPC().SysSettingRPC().UpdateSysSetting(this.AdminContext(), &pb.UpdateSysSettingRequest{ Code: string(systemconfigs.SettingCodeHTTPDNSDefaultBackupClusterId), ValueJSON: []byte(strconv.FormatInt(resp.GetClusterId(), 10)), }) if err != nil { this.ErrorPage(err) return } } this.Data["clusterId"] = resp.GetClusterId() this.Success() }