123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- package kube
- import (
- _ "embed"
- "errors"
- "fmt"
- "text/template"
- "github.com/gookit/color"
- "github.com/spf13/cobra"
- "github.com/wuntsong-org/go-zero-plus/tools/goctlwt/util"
- "github.com/wuntsong-org/go-zero-plus/tools/goctlwt/util/pathx"
- )
- const (
- category = "kube"
- deployTemplateFile = "deployment.tpl"
- jobTemplateFile = "job.tpl"
- basePort = 30000
- portLimit = 32767
- )
- var (
- //go:embed deployment.tpl
- deploymentTemplate string
- //go:embed job.tpl
- jobTemplate string
- )
- // Deployment describes the k8s deployment yaml
- type Deployment struct {
- Name string
- Namespace string
- Image string
- Secret string
- Replicas int
- Revisions int
- Port int
- TargetPort int
- NodePort int
- UseNodePort bool
- RequestCpu int
- RequestMem int
- LimitCpu int
- LimitMem int
- MinReplicas int
- MaxReplicas int
- ServiceAccount string
- ImagePullPolicy string
- }
- // deploymentCommand is used to generate the kubernetes deployment yaml files.
- func deploymentCommand(_ *cobra.Command, _ []string) error {
- nodePort := varIntNodePort
- home := varStringHome
- remote := varStringRemote
- branch := varStringBranch
- if len(remote) > 0 {
- repo, _ := util.CloneIntoGitHome(remote, branch)
- if len(repo) > 0 {
- home = repo
- }
- }
- if len(home) > 0 {
- pathx.RegisterGoctlHome(home)
- }
- // 0 to disable the nodePort type
- if nodePort != 0 && (nodePort < basePort || nodePort > portLimit) {
- return errors.New("nodePort should be between 30000 and 32767")
- }
- text, err := pathx.LoadTemplate(category, deployTemplateFile, deploymentTemplate)
- if err != nil {
- return err
- }
- out, err := pathx.CreateIfNotExist(varStringO)
- if err != nil {
- return err
- }
- defer out.Close()
- if varIntTargetPort == 0 {
- varIntTargetPort = varIntPort
- }
- t := template.Must(template.New("deploymentTemplate").Parse(text))
- err = t.Execute(out, Deployment{
- Name: varStringName,
- Namespace: varStringNamespace,
- Image: varStringImage,
- Secret: varStringSecret,
- Replicas: varIntReplicas,
- Revisions: varIntRevisions,
- Port: varIntPort,
- TargetPort: varIntTargetPort,
- NodePort: nodePort,
- UseNodePort: nodePort > 0,
- RequestCpu: varIntRequestCpu,
- RequestMem: varIntRequestMem,
- LimitCpu: varIntLimitCpu,
- LimitMem: varIntLimitMem,
- MinReplicas: varIntMinReplicas,
- MaxReplicas: varIntMaxReplicas,
- ServiceAccount: varStringServiceAccount,
- ImagePullPolicy: varStringImagePullPolicy,
- })
- if err != nil {
- return err
- }
- fmt.Println(color.Green.Render("Done."))
- return nil
- }
- // Category returns the category of the deployments.
- func Category() string {
- return category
- }
- // Clean cleans the generated deployment files.
- func Clean() error {
- return pathx.Clean(category)
- }
- // GenTemplates generates the deployment template files.
- func GenTemplates() error {
- return pathx.InitTemplates(category, map[string]string{
- deployTemplateFile: deploymentTemplate,
- jobTemplateFile: jobTemplate,
- })
- }
- // RevertTemplate reverts the given template file to the default value.
- func RevertTemplate(name string) error {
- return pathx.CreateTemplate(category, name, deploymentTemplate)
- }
- // Update updates the template files to the templates built in current goctl.
- func Update() error {
- err := Clean()
- if err != nil {
- return err
- }
- return pathx.InitTemplates(category, map[string]string{
- deployTemplateFile: deploymentTemplate,
- jobTemplateFile: jobTemplate,
- })
- }
|