Files
ProjectOctopus/agent-deploy/z_dep/G.go
2024-06-14 18:01:50 +08:00

129 lines
4.2 KiB
Go
Executable File

package z_dep
import (
"bytes"
"fmt"
"github.com/go-playground/validator/v10"
"path/filepath"
"text/template"
"wdd.io/agent-common/assert"
"wdd.io/agent-common/logger"
"wdd.io/agent-common/utils"
)
var (
K8sDashboardApplyFilePath = ""
EmqxApplyFilePath = ""
MongoApplyFilePath = ""
RabbitMQApplyFilePath = ""
RedisApplyFilePath = ""
MySQLApplyFilePath = ""
NacosApplyFilePath = ""
PVCApplyFilePath = ""
NfsApplyFilePath = ""
NfsTestApplyFilePath = ""
BackendApplyFilePath = ""
FrontendApplyFilePath = ""
SRSApplyFilePath = ""
IngresApplyFilePath = ""
ConfigMapApplyFilePath = ""
log = logger.Log
Asserter = assert.Asserter
)
type CommonEnvironmentConfig struct {
WebIP string `json:"web_ip,omitempty" valid:"required"` //A1C1IP
WebPort string `json:"web_port,omitempty" valid:"required"` //A1C1JS
HarborIP string `json:"harbor_ip,omitempty" valid:"required"` //A1C2IP
HarborPort string `json:"harbor_port,omitempty" valid:"required"` // default 8033
Namespace string `json:"namespace,omitempty" valid:"required"` // SUPREME
TagVersion string `json:"tag_version,omitempty" valid:"required"` // KIMMY
TenantEnv string `json:"tenant_env,omitempty"` // TENANT_ENV 只在内部使用
MinioPublicIP string `json:"minio_public_ip,omitempty"` // M2C1IP
MinioInnerIP string `json:"minio_inner_ip,omitempty"` // M2D2IP
NFSServerIP string `json:"nfs_server_ip,omitempty"` // N1C2IP
ApplyFilePrefix string
}
//func (env *CommonEnvironmentConfig) CompactEnv() {
//
// copySameFields(env, c_app.DefaultCmiiBackendConfig)
// copySameFields(env, c_app.DefaultCmiiFrontendConfig)
//}
//
//
func (env *CommonEnvironmentConfig) ValidateAndUniform() bool {
validate := validator.New()
err := validate.Struct(env)
if err != nil {
fmt.Printf("backend config validate error: %v\n", err)
return false
}
// uniform all
if env.MinioInnerIP == "" {
env.MinioInnerIP = env.HarborIP
}
if env.MinioPublicIP == "" {
env.MinioPublicIP = env.WebIP
}
return true
}
func (env *CommonEnvironmentConfig) ParseCommonEnvToApplyFile(applyTemplate string, applyFilePath string) bool {
return ParseEnvToApplyFile(env, applyTemplate, applyFilePath)
}
func (env *CommonEnvironmentConfig) GenerateApplyFilePath() {
Asserter.NotEmpty(env.ApplyFilePrefix, "apply file prefix is empty!")
K8sDashboardApplyFilePath = filepath.Join(env.ApplyFilePrefix, "k8s-dashboard.yaml")
EmqxApplyFilePath = filepath.Join(env.ApplyFilePrefix, "k8s-emqx.yaml")
MongoApplyFilePath = filepath.Join(env.ApplyFilePrefix, "k8s-mongo.yaml")
RabbitMQApplyFilePath = filepath.Join(env.ApplyFilePrefix, "k8s-rabbitmq.yaml")
RedisApplyFilePath = filepath.Join(env.ApplyFilePrefix, "k8s-redis.yaml")
MySQLApplyFilePath = filepath.Join(env.ApplyFilePrefix, "k8s-mysql.yaml")
NacosApplyFilePath = filepath.Join(env.ApplyFilePrefix, "k8s-nacos.yaml")
PVCApplyFilePath = filepath.Join(env.ApplyFilePrefix, "k8s-pvc.yaml")
NfsApplyFilePath = filepath.Join(env.ApplyFilePrefix, "k8s-nfs.yaml")
NfsTestApplyFilePath = filepath.Join(env.ApplyFilePrefix, "k8s-nfs-test.yaml")
BackendApplyFilePath = filepath.Join(env.ApplyFilePrefix, "k8s-backend.yaml")
FrontendApplyFilePath = filepath.Join(env.ApplyFilePrefix, "k8s-frontend.yaml")
SRSApplyFilePath = filepath.Join(env.ApplyFilePrefix, "k8s-srs.yaml")
IngresApplyFilePath = filepath.Join(env.ApplyFilePrefix, "k8s-ingress.yaml")
ConfigMapApplyFilePath = filepath.Join(env.ApplyFilePrefix, "k8s-configmap.yaml")
}
func ParseEnvToApplyFile(environment any, applyTemplate string, applyFilePath string) bool {
randomString := utils.GenerateRandomString(8, false)
// Deployment
tmpl, err := template.New(randomString).Parse(applyTemplate)
if err != nil {
log.ErrorF("parse template error: %v", err)
return false
}
// 应用数据并打印结果
var result bytes.Buffer
err = tmpl.Execute(&result, environment)
if err != nil {
log.ErrorF("template execute error: %v", err)
return false
}
// append to file
if !utils.AppendContentWithSplitLineToFile(result.String(), applyFilePath) {
return false
}
return true
}