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  }