- reduce complexity - use better tools to format the code - add more tests - and too many things to list here We are rewriting for V3, so these commits are sometimes big and not fully detailed. Of course, further work will be more documented.
106 lines
3.3 KiB
Go
106 lines
3.3 KiB
Go
package generator
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/compose-spec/compose-go/types"
|
|
)
|
|
|
|
// RepositoryValue is a docker repository image and tag that will be saved in values.yaml.
|
|
type RepositoryValue struct {
|
|
Image string `yaml:"image"`
|
|
Tag string `yaml:"tag"`
|
|
}
|
|
|
|
// PersistenceValue is a persistence configuration that will be saved in values.yaml.
|
|
type PersistenceValue struct {
|
|
StorageClass string `yaml:"storageClass"`
|
|
Size string `yaml:"size"`
|
|
AccessMode []string `yaml:"accessMode"`
|
|
Enabled bool `yaml:"enabled"`
|
|
}
|
|
|
|
// IngressValue is a ingress configuration that will be saved in values.yaml.
|
|
type IngressValue struct {
|
|
Annotations map[string]string `yaml:"annotations"`
|
|
Host string `yaml:"host"`
|
|
Path string `yaml:"path"`
|
|
Class string `yaml:"class"`
|
|
Enabled bool `yaml:"enabled"`
|
|
}
|
|
|
|
// Value will be saved in values.yaml. It contains configuraiton for all deployment and services.
|
|
type Value struct {
|
|
Repository *RepositoryValue `yaml:"repository,omitempty"`
|
|
Persistence map[string]*PersistenceValue `yaml:"persistence,omitempty"`
|
|
Ingress *IngressValue `yaml:"ingress,omitempty"`
|
|
Environment map[string]any `yaml:"environment,omitempty"`
|
|
Replicas *uint32 `yaml:"replicas,omitempty"`
|
|
CronJob *CronJobValue `yaml:"cronjob,omitempty"`
|
|
NodeSelector map[string]string `yaml:"nodeSelector"`
|
|
Resources map[string]any `yaml:"resources"`
|
|
ImagePullPolicy string `yaml:"imagePullPolicy,omitempty"`
|
|
ServiceAccount string `yaml:"serviceAccount"`
|
|
}
|
|
|
|
// CronJobValue is a cronjob configuration that will be saved in values.yaml.
|
|
type CronJobValue struct {
|
|
Repository *RepositoryValue `yaml:"repository,omitempty"`
|
|
Environment map[string]any `yaml:"environment,omitempty"`
|
|
ImagePullPolicy string `yaml:"imagePullPolicy,omitempty"`
|
|
Schedule string `yaml:"schedule"`
|
|
}
|
|
|
|
// NewValue creates a new Value from a compose service.
|
|
// The value contains the necessary information to deploy the service (image, tag, replicas, etc.).
|
|
//
|
|
// If `main` is true, the tag will be empty because
|
|
// it will be set in the helm chart appVersion.
|
|
func NewValue(service types.ServiceConfig, main ...bool) *Value {
|
|
replicas := uint32(1)
|
|
v := &Value{
|
|
Replicas: &replicas,
|
|
}
|
|
|
|
// find the image tag
|
|
tag := ""
|
|
split := strings.Split(service.Image, ":")
|
|
v.Repository = &RepositoryValue{
|
|
Image: split[0],
|
|
}
|
|
|
|
// for main service, the tag should the appVersion. So here we set it to empty.
|
|
if len(main) > 0 && !main[0] {
|
|
if len(split) > 1 {
|
|
tag = split[1]
|
|
}
|
|
v.Repository.Tag = tag
|
|
} else {
|
|
v.Repository.Tag = ""
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// AddPersistence adds persistence configuration to the Value.
|
|
func (v *Value) AddPersistence(volumeName string) {
|
|
if v.Persistence == nil {
|
|
v.Persistence = make(map[string]*PersistenceValue, 0)
|
|
}
|
|
v.Persistence[volumeName] = &PersistenceValue{
|
|
Enabled: true,
|
|
StorageClass: "-",
|
|
Size: "1Gi",
|
|
AccessMode: []string{"ReadWriteOnce"},
|
|
}
|
|
}
|
|
|
|
func (v *Value) AddIngress(host, path string) {
|
|
v.Ingress = &IngressValue{
|
|
Enabled: true,
|
|
Host: host,
|
|
Path: path,
|
|
Class: "-",
|
|
}
|
|
}
|