github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/caas/kubernetes/provider/template.go (about) 1 // Copyright 2019 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package provider 5 6 import ( 7 "fmt" 8 "strings" 9 "text/template" 10 11 "github.com/juju/errors" 12 "gopkg.in/yaml.v2" 13 ) 14 15 var containerTemplate = ` 16 - name: {{.Name}} 17 {{if .Ports}} 18 ports: 19 {{- range .Ports }} 20 - containerPort: {{.ContainerPort}} 21 {{if .Name}}name: {{.Name}}{{end}} 22 {{if .Protocol}}protocol: {{.Protocol}}{{end}} 23 {{- end}} 24 {{end}} 25 {{if .Command}} 26 command: 27 {{ toYaml .Command | indent 4 }} 28 {{end}} 29 {{if .Args}} 30 args: 31 {{ toYaml .Args | indent 4 }} 32 {{end}} 33 {{if .WorkingDir}} 34 workingDir: {{.WorkingDir}} 35 {{end}}`[1:] 36 37 var defaultPodTemplateStr = fmt.Sprintf(` 38 {{if .Containers}} 39 containers: 40 {{- range .Containers }} 41 %s 42 {{- end}} 43 {{end}} 44 {{if .InitContainers}} 45 initContainers: 46 {{- range .InitContainers }} 47 %s 48 {{- end}} 49 {{end}} 50 `[1:], containerTemplate, containerTemplate) 51 52 var defaultPodTemplate = template.Must(template.New("").Funcs(templateAddons).Parse(defaultPodTemplateStr)) 53 54 func toYaml(val interface{}) (string, error) { 55 data, err := yaml.Marshal(val) 56 if err != nil { 57 return "", errors.Annotatef(err, "marshalling to yaml for %v", val) 58 } 59 return string(data), nil 60 } 61 62 func indent(n int, str string) string { 63 out := "" 64 prefix := strings.Repeat(" ", n) 65 for _, line := range strings.Split(str, "\n") { 66 out += prefix + line + "\n" 67 } 68 return out 69 } 70 71 var templateAddons = template.FuncMap{ 72 "toYaml": toYaml, 73 "indent": indent, 74 }