fix(schema): Use ingress default values

Ingress has some default values, like path and classname. We need to
ensure that values are taken or nil, and to apply them if they are not
set explicitally. Port is a sepcial case.
This commit is contained in:
2024-11-22 15:55:59 +01:00
parent e925f58e82
commit 7b890df1c5
3 changed files with 31 additions and 8 deletions

View File

@@ -51,9 +51,9 @@ func NewIngress(service types.ServiceConfig, Chart *HelmChart) *Ingress {
Chart.Values[service.Name].(*Value).Ingress = &IngressValue{ Chart.Values[service.Name].(*Value).Ingress = &IngressValue{
Enabled: mapping.Enabled, Enabled: mapping.Enabled,
Path: mapping.Path, Path: *mapping.Path,
Host: mapping.Hostname, Host: mapping.Hostname,
Class: mapping.Class, Class: *mapping.Class,
Annotations: mapping.Annotations, Annotations: mapping.Annotations,
TLS: TLS{Enabled: mapping.TLS.Enabled}, TLS: TLS{Enabled: mapping.TLS.Enabled},
} }

View File

@@ -107,6 +107,19 @@ func getLabelContent(o any, service *types.ServiceConfig, labelName string) erro
return err return err
} }
val := strings.TrimSpace(string(c)) val := strings.TrimSpace(string(c))
if labelName == labels.LabelIngress {
// special case, values must be set from some defaults
ing, err := labelStructs.IngressFrom(val)
if err != nil {
log.Fatal(err)
return err
}
c, err := yaml.Marshal(ing)
if err != nil {
return err
}
val = strings.TrimSpace(string(c))
}
service.Labels[labelName] = val service.Labels[labelName] = val
return nil return nil

View File

@@ -1,33 +1,43 @@
package labelStructs package labelStructs
import "gopkg.in/yaml.v3" import (
"fmt"
"gopkg.in/yaml.v3"
)
type TLS struct { type TLS struct {
Enabled bool `yaml:"enabled" json:"enabled,omitempty"` Enabled bool `yaml:"enabled" json:"enabled,omitempty"`
} }
type Ingress struct { type Ingress struct {
Port *int32 `yaml:"port,omitempty" jsonschema:"nullable" json:"port,omitempty"` Port *int32 `yaml:"port,omitempty" json:"port,omitempty"`
Annotations map[string]string `yaml:"annotations,omitempty" jsonschema:"nullable" json:"annotations,omitempty"` Annotations map[string]string `yaml:"annotations,omitempty" jsonschema:"nullable" json:"annotations,omitempty"`
Hostname string `yaml:"hostname" json:"hostname,omitempty"` Hostname string `yaml:"hostname" json:"hostname,omitempty"`
Path string `yaml:"path" json:"path,omitempty"` Path *string `yaml:"path,omitempty" json:"path,omitempty"`
Class string `yaml:"class" json:"class,omitempty" jsonschema:"default:-"` Class *string `yaml:"class,omitempty" json:"class,omitempty" jsonschema:"default:-"`
Enabled bool `yaml:"enabled" json:"enabled,omitempty"` Enabled bool `yaml:"enabled" json:"enabled,omitempty"`
TLS *TLS `yaml:"tls,omitempty" json:"tls,omitempty"` TLS *TLS `yaml:"tls,omitempty" json:"tls,omitempty"`
} }
// IngressFrom creates a new Ingress from a compose service. // IngressFrom creates a new Ingress from a compose service.
func IngressFrom(data string) (*Ingress, error) { func IngressFrom(data string) (*Ingress, error) {
strPtr := func(s string) *string {
return &s
}
mapping := Ingress{ mapping := Ingress{
Hostname: "", Hostname: "",
Path: "/", Path: strPtr("/"),
Enabled: false, Enabled: false,
Class: "-", Class: strPtr("-"),
Port: nil, Port: nil,
TLS: &TLS{Enabled: true}, TLS: &TLS{Enabled: true},
} }
if err := yaml.Unmarshal([]byte(data), &mapping); err != nil { if err := yaml.Unmarshal([]byte(data), &mapping); err != nil {
return nil, err return nil, err
} }
if mapping.Port == nil {
return nil, fmt.Errorf("port is required in ingress definition")
}
return &mapping, nil return &mapping, nil
} }