145 lines
4.9 KiB
Go
Executable File
145 lines
4.9 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 = ""
|
|
|
|
K8sDashboardApplyFileName = "k8s-dashboard.yaml"
|
|
EmqxApplyFileName = "k8s-emqx.yaml"
|
|
MongoApplyFileName = "k8s-mongo.yaml"
|
|
RabbitMQApplyFileName = "k8s-rabbitmq.yaml"
|
|
RedisApplyFileName = "k8s-redis.yaml"
|
|
MySQLApplyFileName = "k8s-mysql.yaml"
|
|
NacosApplyFileName = "k8s-nacos.yaml"
|
|
PVCApplyFileName = "k8s-pvc.yaml"
|
|
NfsApplyFileName = "k8s-nfs.yaml"
|
|
NfsTestApplyFileName = "k8s-nfs-test.yaml"
|
|
SRSApplyFileName = "k8s-srs.yaml"
|
|
IngresApplyFileName = "k8s-ingress.yaml"
|
|
ConfigMapApplyFileName = "k8s-configmap.yaml"
|
|
FrontendApplyFileName = "k8s-frontend.yaml"
|
|
BackendApplyFileName = "k8s-backend.yaml"
|
|
|
|
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, K8sDashboardApplyFileName)
|
|
EmqxApplyFilePath = filepath.Join(env.ApplyFilePrefix, EmqxApplyFileName)
|
|
MongoApplyFilePath = filepath.Join(env.ApplyFilePrefix, MongoApplyFileName)
|
|
RabbitMQApplyFilePath = filepath.Join(env.ApplyFilePrefix, RabbitMQApplyFileName)
|
|
RedisApplyFilePath = filepath.Join(env.ApplyFilePrefix, RedisApplyFileName)
|
|
MySQLApplyFilePath = filepath.Join(env.ApplyFilePrefix, MySQLApplyFileName)
|
|
NacosApplyFilePath = filepath.Join(env.ApplyFilePrefix, NacosApplyFileName)
|
|
PVCApplyFilePath = filepath.Join(env.ApplyFilePrefix, PVCApplyFileName)
|
|
NfsApplyFilePath = filepath.Join(env.ApplyFilePrefix, NfsApplyFileName)
|
|
NfsTestApplyFilePath = filepath.Join(env.ApplyFilePrefix, NfsTestApplyFileName)
|
|
BackendApplyFilePath = filepath.Join(env.ApplyFilePrefix, BackendApplyFileName)
|
|
FrontendApplyFilePath = filepath.Join(env.ApplyFilePrefix, FrontendApplyFileName)
|
|
SRSApplyFilePath = filepath.Join(env.ApplyFilePrefix, SRSApplyFileName)
|
|
IngresApplyFilePath = filepath.Join(env.ApplyFilePrefix, IngresApplyFileName)
|
|
ConfigMapApplyFilePath = filepath.Join(env.ApplyFilePrefix, ConfigMapApplyFileName)
|
|
|
|
}
|
|
|
|
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
|
|
}
|