You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
3.8 KiB
Go
135 lines
3.8 KiB
Go
4 years ago
|
package k8s
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"errors"
|
||
|
"fmt"
|
||
|
"text/template"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
errUnknownServiceType = errors.New("unknown service type")
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
ServiceTypeApi ServiceType = "api"
|
||
|
ServiceTypeRpc ServiceType = "rpc"
|
||
|
ServiceTypeJob ServiceType = "job"
|
||
|
ServiceTypeRmq ServiceType = "rmq"
|
||
|
ServiceTypeSync ServiceType = "sync"
|
||
|
envDev = "dev"
|
||
|
)
|
||
|
|
||
|
type (
|
||
|
ServiceType string
|
||
|
K8sRequest struct {
|
||
|
Env string
|
||
|
ServiceName string
|
||
|
ServiceType ServiceType
|
||
|
Namespace string
|
||
|
Schedule string
|
||
|
Replicas int
|
||
|
RevisionHistoryLimit int
|
||
|
Port int
|
||
|
LimitCpu int
|
||
|
LimitMem int
|
||
|
RequestCpu int
|
||
|
RequestMem int
|
||
|
SuccessfulJobsHistoryLimit int
|
||
|
HpaMinReplicas int
|
||
|
HpaMaxReplicas int
|
||
|
}
|
||
|
)
|
||
|
|
||
|
func Gen(req K8sRequest) (string, error) {
|
||
|
switch req.ServiceType {
|
||
|
case ServiceTypeApi, ServiceTypeRpc:
|
||
|
return genApiRpc(req)
|
||
|
case ServiceTypeJob:
|
||
|
return genJob(req)
|
||
|
case ServiceTypeRmq, ServiceTypeSync:
|
||
|
return genRmqSync(req)
|
||
|
default:
|
||
|
return "", errUnknownServiceType
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func genApiRpc(req K8sRequest) (string, error) {
|
||
|
t, err := template.New("api_rpc").Parse(apiRpcTmeplate)
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
buffer := new(bytes.Buffer)
|
||
|
err = t.Execute(buffer, map[string]interface{}{
|
||
|
"name": fmt.Sprintf("%s-%s", req.ServiceName, req.ServiceType),
|
||
|
"namespace": req.Namespace,
|
||
|
"replicas": req.Replicas,
|
||
|
"revisionHistoryLimit": req.RevisionHistoryLimit,
|
||
|
"port": req.Port,
|
||
|
"limitCpu": req.LimitCpu,
|
||
|
"limitMem": req.LimitMem,
|
||
|
"requestCpu": req.RequestCpu,
|
||
|
"requestMem": req.RequestMem,
|
||
|
"serviceName": req.ServiceName,
|
||
|
"env": req.Env,
|
||
|
"envIsPreOrPro": req.Env != envDev,
|
||
|
"envIsDev": req.Env == envDev,
|
||
|
"minReplicas": req.HpaMinReplicas,
|
||
|
"maxReplicas": req.HpaMaxReplicas,
|
||
|
})
|
||
|
if err != nil {
|
||
|
return "", nil
|
||
|
}
|
||
|
return buffer.String(), nil
|
||
|
}
|
||
|
|
||
|
func genRmqSync(req K8sRequest) (string, error) {
|
||
|
t, err := template.New("rmq_sync").Parse(rmqSyncTmeplate)
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
buffer := new(bytes.Buffer)
|
||
|
err = t.Execute(buffer, map[string]interface{}{
|
||
|
"name": fmt.Sprintf("%s-%s", req.ServiceName, req.ServiceType),
|
||
|
"namespace": req.Namespace,
|
||
|
"replicas": req.Replicas,
|
||
|
"revisionHistoryLimit": req.RevisionHistoryLimit,
|
||
|
"limitCpu": req.LimitCpu,
|
||
|
"limitMem": req.LimitMem,
|
||
|
"requestCpu": req.RequestCpu,
|
||
|
"requestMem": req.RequestMem,
|
||
|
"serviceName": req.ServiceName,
|
||
|
"env": req.Env,
|
||
|
"envIsPreOrPro": req.Env != envDev,
|
||
|
"envIsDev": req.Env == envDev,
|
||
|
})
|
||
|
if err != nil {
|
||
|
return "", nil
|
||
|
}
|
||
|
return buffer.String(), nil
|
||
|
}
|
||
|
|
||
|
func genJob(req K8sRequest) (string, error) {
|
||
|
t, err := template.New("job").Parse(jobTmeplate)
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
buffer := new(bytes.Buffer)
|
||
|
err = t.Execute(buffer, map[string]interface{}{
|
||
|
"name": fmt.Sprintf("%s-%s", req.ServiceName, req.ServiceType),
|
||
|
"namespace": req.Namespace,
|
||
|
"schedule": req.Schedule,
|
||
|
"successfulJobsHistoryLimit": req.SuccessfulJobsHistoryLimit,
|
||
|
"limitCpu": req.LimitCpu,
|
||
|
"limitMem": req.LimitMem,
|
||
|
"requestCpu": req.RequestCpu,
|
||
|
"requestMem": req.RequestMem,
|
||
|
"serviceName": req.ServiceName,
|
||
|
"env": req.Env,
|
||
|
})
|
||
|
if err != nil {
|
||
|
return "", nil
|
||
|
}
|
||
|
return buffer.String(), nil
|
||
|
}
|