Adding svc-optional

This commit is contained in:
2025-12-02 20:40:57 -06:00
parent 7230081401
commit 3a1c170140
6 changed files with 33 additions and 1 deletions

View File

@@ -195,7 +195,7 @@ func (chart *HelmChart) generateDeployment(service types.ServiceConfig, deployme
return err
}
// isgnored service
// is ignored service
if isIgnored(service) {
logger.Info("Ignoring service ", service.Name)
return nil

View File

@@ -34,6 +34,7 @@ type Service struct {
SamePod *string `yaml:"same-pod,omitempty" json:"same-pod,omitempty" jsonschema:"title=Same Pod,description=Service that should be in the same pod"`
Description *string `yaml:"description,omitempty" json:"description,omitempty" jsonschema:"title=Description,description=Description of the service that will be injected in the values.yaml file"`
Ignore *bool `yaml:"ignore,omitempty" json:"ignore,omitempty" jsonschema:"title=Ignore,description=Ignore the service in the conversion"`
SvcOptional *bool `yaml:"svc-optional,omitempty" json:"svc-optional,omitempty" jsonschema:"title=SvcOptional,description=SvcOptional the service in the conversion"`
Dependencies []labelstructs.Dependency `yaml:"dependencies,omitempty" json:"dependencies,omitempty" jsonschema:"title=Dependencies,description=Services that should be injected in the Chart.yaml file"`
ConfigMapFiles *labelstructs.ConfigMapFiles `yaml:"configmap-files,omitempty" json:"configmap-files,omitempty" jsonschema:"title=ConfigMap Files,description=Files that should be injected as ConfigMap"`
MapEnv *labelstructs.MapEnv `yaml:"map-env,omitempty" json:"map-env,omitempty" jsonschema:"title=Map Env,description=Map environment variables to another value"`
@@ -94,6 +95,7 @@ func OverrideWithConfig(project *types.Project) {
mustGetLabelContent(s.SamePod, labels.LabelSamePod)
mustGetLabelContent(s.Description, labels.LabelDescription)
mustGetLabelContent(s.Ignore, labels.LabelIgnore)
mustGetLabelContent(s.SvcOptional, labels.LabelSvcOptional)
mustGetLabelContent(s.Dependencies, labels.LabelDependencies)
mustGetLabelContent(s.ConfigMapFiles, labels.LabelConfigMapFiles)
mustGetLabelContent(s.MapEnv, labels.LabelMapEnv)

View File

@@ -30,6 +30,7 @@ const (
LabelSamePod Label = KatenaryLabelPrefix + "/same-pod"
LabelDescription Label = KatenaryLabelPrefix + "/description"
LabelIgnore Label = KatenaryLabelPrefix + "/ignore"
LabelSvcOptional Label = KatenaryLabelPrefix + "/svc-optional"
LabelDependencies Label = KatenaryLabelPrefix + "/dependencies"
LabelConfigMapFiles Label = KatenaryLabelPrefix + "/configmap-files"
LabelCronJob Label = KatenaryLabelPrefix + "/cronjob"

View File

@@ -183,6 +183,12 @@
example: "labels:\n {{ .KatenaryPrefix }}/ignore: \"true\""
type: "bool"
"svc-optional":
short: "Make the service optional in the resulting helm chart"
long: "Making a service optional to be exported in helm chart."
example: "labels:\n {{ .KatenaryPrefix }}/svc-optional: \"true\""
type: "bool"
"dependencies":
short: "Add Helm dependencies to the service."
long: |-

View File

@@ -84,6 +84,7 @@ func (s *Service) Yaml() ([]byte, error) {
return nil, err
}
// Remove any loadBalancer lines that may have been added unintentionally.
lines := []string{}
for line := range strings.SplitSeq(string(y), "\n") {
if regexp.MustCompile(`^\s*loadBalancer:\s*`).MatchString(line) {
@@ -93,5 +94,19 @@ func (s *Service) Yaml() ([]byte, error) {
}
y = []byte(strings.Join(lines, "\n"))
// If the service has the label "katenary.v3/svc-optional", wrap the output
// with a Helm values conditional.
if s.service != nil && s.service.Labels != nil {
if _, ok := s.service.Labels["katenary.v3/svc-optional"]; ok {
// Ensure we have a trailing newline before appending the closing block.
content := string(y)
if !strings.HasSuffix(content, "\n") {
content += "\n"
}
content = "{{- if .Values.service.enabled }}\n" + content + "{{- end }}\n"
y = []byte(content)
}
}
return y, err
}

View File

@@ -83,6 +83,14 @@ func isIgnored(service types.ServiceConfig) bool {
return false
}
// isSvcOptionald returns true if the service is optional.
func isSvcOptional(service types.ServiceConfig) bool {
if v, ok := service.Labels[labels.LabelSvcOptional]; ok {
return v == "true" || v == "yes" || v == "1"
}
return false
}
// UnWrapTPL removes the line wrapping from a template.
func UnWrapTPL(in []byte) []byte {
return regexpLineWrap.ReplaceAll(in, []byte(" }}"))