123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- 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"
- envPre = "pre"
- envPro = "pro"
- )
- 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
- }
|