github.com/unionj-cloud/go-doudou@v1.3.8-0.20221011095552-0088008e5b31/cmd/internal/svc/codegen/k8sstatefulset.go (about) 1 package codegen 2 3 import ( 4 "github.com/sirupsen/logrus" 5 "io/ioutil" 6 "os" 7 "path/filepath" 8 "text/template" 9 ) 10 11 var statefulsetTmpl = `apiVersion: apps/v1 12 kind: StatefulSet 13 metadata: 14 name: {{.SvcName}}-statefulset 15 spec: 16 selector: 17 matchLabels: 18 app: {{.SvcName}} 19 serviceName: {{.SvcName}}-svc-headless 20 replicas: 1 21 template: 22 metadata: 23 labels: 24 app: {{.SvcName}} 25 spec: 26 terminationGracePeriodSeconds: 10 27 containers: 28 - name: {{.SvcName}} 29 image: {{.Image}} 30 imagePullPolicy: Always 31 ports: 32 - name: http-port 33 containerPort: 6060 34 protocol: TCP 35 resources: 36 requests: 37 cpu: 100m 38 memory: 128Mi 39 restartPolicy: Always 40 --- 41 apiVersion: v1 42 kind: Service 43 metadata: 44 name: {{.SvcName}}-svc-headless 45 spec: 46 selector: 47 app: {{.SvcName}} 48 ports: 49 - protocol: TCP 50 port: 6060 51 targetPort: 6060 52 clusterIP: None` 53 54 // GenK8sStatefulset generates statefulset kind yaml file for kubernetes deploy 55 func GenK8sStatefulset(dir string, svcname, image string) { 56 var ( 57 f *os.File 58 tpl *template.Template 59 ) 60 file := filepath.Join(dir, svcname+"_statefulset.yaml") 61 if _, err := os.Stat(file); os.IsNotExist(err) { 62 if f, err = os.Create(file); err != nil { 63 panic(err) 64 } 65 defer f.Close() 66 67 if tpl, err = template.New("statefulset.tmpl").Parse(statefulsetTmpl); err != nil { 68 panic(err) 69 } 70 if err = tpl.Execute(f, struct { 71 SvcName string 72 Image string 73 }{ 74 SvcName: svcname, 75 Image: image, 76 }); err != nil { 77 panic(err) 78 } 79 } else { 80 logrus.Warnf("image version will be modified in file %s", file) 81 err = ioutil.WriteFile(file, modifyVersion(file, image), os.ModePerm) 82 if err != nil { 83 panic(err) 84 } 85 } 86 }