Files
ProjectOctopus/agent-deploy/d_app/DeployCmiiApp.go
2024-06-18 09:52:28 +08:00

166 lines
4.8 KiB
Go
Executable File

package d_app
import (
"github.com/go-playground/validator/v10"
"os"
"wdd.io/agent-common/logger"
"wdd.io/agent-common/utils"
"wdd.io/agent-deploy/z_dep"
)
var (
DefaultCmiiBackendConfig = &CmiiBackendConfig{}
DefaultCmiiFrontendConfig = &CmiiFrontendConfig{}
DefaultIngressConfig = &IngressConfig{
FrontendShortNameMaps: FrontendShortNameMaps,
BackendImageVersionMap: CmiiBackendAppMap,
}
log = logger.Log
)
type CmiiBackendConfig struct {
z_dep.CommonEnvironmentConfig
AppName string `json:"app_name,omitempty" validate:"required"`
ImageTag string `json:"image_tag,omitempty" validate:"required"`
Replicas string `json:"replicas,omitempty" validate:"required" default:"1"`
NodePort string `json:"node_port,omitempty"`
NeedPvcCache bool `json:"need_pvc_cache,omitempty"`
CustomJvmOpt string `json:"custom_jvm_opt,omitempty"`
}
type CmiiFrontendConfig struct {
z_dep.CommonEnvironmentConfig `json:"z___dep_._common_environment_config"`
AppName string `json:"app_name,omitempty" validate:"required"`
ImageTag string `json:"image_tag,omitempty" validate:"required"`
Replicas string `json:"replicas,omitempty" validate:"required" default:"1"`
ShortName string `json:"short_name,omitempty" validate:"required"`
ClientId string
}
type IngressConfig struct {
z_dep.CommonEnvironmentConfig
FrontendShortNameMaps map[string]string
BackendImageVersionMap map[string]string `json:"backend_image_version_map,omitempty" validate:"required"`
}
func (backend *CmiiBackendConfig) BackendDeploy(common *z_dep.CommonEnvironmentConfig) bool {
// copy
utils.CopySameFields(common, backend)
validate := validator.New()
err := validate.Struct(backend)
if err != nil {
log.ErrorF("backend config validate error: %v\n", err)
return false
}
if !z_dep.ParseEnvToApplyFile(backend, CmiiBackendDeploymentTemplate, z_dep.BackendApplyFilePath) {
return false
}
if !z_dep.ParseEnvToApplyFile(backend, CmiiBackendServiceTemplate, z_dep.BackendApplyFilePath) {
return false
}
// pvc
if backend.NeedPvcCache {
if !z_dep.ParseEnvToApplyFile(backend, CmiiBackendPVCTemplate, z_dep.BackendApplyFilePath) {
return false
}
}
return true
}
func (frontend *CmiiFrontendConfig) FrontendDeploy(common *z_dep.CommonEnvironmentConfig) bool {
// copy
utils.CopySameFields(common, frontend)
validate := validator.New()
err := validate.Struct(frontend)
if err != nil {
log.ErrorF("backend config validate error: %v\n", err)
return false
}
if !z_dep.ParseEnvToApplyFile(frontend, CmiiFrontendDeploymentTemplate, z_dep.FrontendApplyFilePath) {
return false
}
if !z_dep.ParseEnvToApplyFile(frontend, CmiiFrontendServiceTemplate, z_dep.FrontendApplyFilePath) {
return false
}
return true
}
func (frontend *CmiiFrontendConfig) ConfigMapDeploy(commonEnv *z_dep.CommonEnvironmentConfig) bool {
// copy
utils.CopySameFields(commonEnv, frontend)
// manual validate
if frontend.ShortName == "" || frontend.ClientId == "" {
log.ErrorF("short name or client id is empty !")
return false
}
return z_dep.ParseEnvToApplyFile(frontend, CmiiFrontendConfigMapTemplate, z_dep.ConfigMapApplyFilePath)
}
func (ingress *IngressConfig) IngressDeploy(commonEnv *z_dep.CommonEnvironmentConfig) bool {
// copy
utils.CopySameFields(commonEnv, ingress)
// manual validate
if ingress.FrontendShortNameMaps == nil || len(ingress.FrontendShortNameMaps) == 0 {
log.Error("frontend short name is empty !")
return false
}
if ingress.BackendImageVersionMap == nil || len(ingress.BackendImageVersionMap) == 0 {
log.Error("backend image version map is empty !")
return false
}
if !z_dep.ParseEnvToApplyFile(ingress, CmiiFrontendIngressTemplate, z_dep.IngresApplyFilePath) {
return false
}
if !z_dep.ParseEnvToApplyFile(ingress, CmiiBackendIngressTemplate, z_dep.IngresApplyFilePath) {
return false
}
if !z_dep.ParseEnvToApplyFile(ingress, CmiiGatewayIngressTemplate, z_dep.IngresApplyFilePath) {
return false
}
return true
}
func IngressDeploy(commonEnv *z_dep.CommonEnvironmentConfig) bool {
if !commonEnv.ParseCommonEnvToApplyFile(CmiiFrontendIngressTemplate, z_dep.IngresApplyFilePath) {
return false
}
if !commonEnv.ParseCommonEnvToApplyFile(CmiiBackendIngressTemplate, z_dep.IngresApplyFilePath) {
return false
}
if !commonEnv.ParseCommonEnvToApplyFile(CmiiGatewayIngressTemplate, z_dep.IngresApplyFilePath) {
return false
}
return true
}
func SRSDeploy(commonEnv *z_dep.CommonEnvironmentConfig) bool {
os.Remove(z_dep.SRSApplyFilePath)
return commonEnv.ParseCommonEnvToApplyFile(CmiiSrsTemplate, z_dep.SRSApplyFilePath)
}
func FrontendDefaultNginxDeploy(commonEnv *z_dep.CommonEnvironmentConfig) bool {
return commonEnv.ParseCommonEnvToApplyFile(CmiiFrontendDefaultNginxConfTemplate, z_dep.FrontendApplyFilePath)
}