github.com/Racer159/jackal@v0.32.7-0.20240401174413-0bd2339e4f2e/src/pkg/packager/composer/override.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // SPDX-FileCopyrightText: 2021-Present The Jackal Authors 3 4 // Package composer contains functions for composing components within Jackal packages. 5 package composer 6 7 import ( 8 "fmt" 9 10 "github.com/Racer159/jackal/src/types" 11 ) 12 13 func overrideMetadata(c *types.JackalComponent, override types.JackalComponent) error { 14 c.Name = override.Name 15 c.Default = override.Default 16 c.Required = override.Required 17 18 // Override description if it was provided. 19 if override.Description != "" { 20 c.Description = override.Description 21 } 22 23 if override.Only.LocalOS != "" { 24 if c.Only.LocalOS != "" { 25 return fmt.Errorf("component %q: \"only.localOS\" %q cannot be redefined as %q during compose", c.Name, c.Only.LocalOS, override.Only.LocalOS) 26 } 27 28 c.Only.LocalOS = override.Only.LocalOS 29 } 30 31 return nil 32 } 33 34 func overrideDeprecated(c *types.JackalComponent, override types.JackalComponent) { 35 // Override cosign key path if it was provided. 36 if override.DeprecatedCosignKeyPath != "" { 37 c.DeprecatedCosignKeyPath = override.DeprecatedCosignKeyPath 38 } 39 40 c.DeprecatedGroup = override.DeprecatedGroup 41 42 // Merge deprecated scripts for backwards compatibility with older jackal binaries. 43 c.DeprecatedScripts.Before = append(c.DeprecatedScripts.Before, override.DeprecatedScripts.Before...) 44 c.DeprecatedScripts.After = append(c.DeprecatedScripts.After, override.DeprecatedScripts.After...) 45 46 if override.DeprecatedScripts.Retry { 47 c.DeprecatedScripts.Retry = true 48 } 49 if override.DeprecatedScripts.ShowOutput { 50 c.DeprecatedScripts.ShowOutput = true 51 } 52 if override.DeprecatedScripts.TimeoutSeconds > 0 { 53 c.DeprecatedScripts.TimeoutSeconds = override.DeprecatedScripts.TimeoutSeconds 54 } 55 } 56 57 func overrideActions(c *types.JackalComponent, override types.JackalComponent) { 58 // Merge create actions. 59 c.Actions.OnCreate.Defaults = override.Actions.OnCreate.Defaults 60 c.Actions.OnCreate.Before = append(c.Actions.OnCreate.Before, override.Actions.OnCreate.Before...) 61 c.Actions.OnCreate.After = append(c.Actions.OnCreate.After, override.Actions.OnCreate.After...) 62 c.Actions.OnCreate.OnFailure = append(c.Actions.OnCreate.OnFailure, override.Actions.OnCreate.OnFailure...) 63 c.Actions.OnCreate.OnSuccess = append(c.Actions.OnCreate.OnSuccess, override.Actions.OnCreate.OnSuccess...) 64 65 // Merge deploy actions. 66 c.Actions.OnDeploy.Defaults = override.Actions.OnDeploy.Defaults 67 c.Actions.OnDeploy.Before = append(c.Actions.OnDeploy.Before, override.Actions.OnDeploy.Before...) 68 c.Actions.OnDeploy.After = append(c.Actions.OnDeploy.After, override.Actions.OnDeploy.After...) 69 c.Actions.OnDeploy.OnFailure = append(c.Actions.OnDeploy.OnFailure, override.Actions.OnDeploy.OnFailure...) 70 c.Actions.OnDeploy.OnSuccess = append(c.Actions.OnDeploy.OnSuccess, override.Actions.OnDeploy.OnSuccess...) 71 72 // Merge remove actions. 73 c.Actions.OnRemove.Defaults = override.Actions.OnRemove.Defaults 74 c.Actions.OnRemove.Before = append(c.Actions.OnRemove.Before, override.Actions.OnRemove.Before...) 75 c.Actions.OnRemove.After = append(c.Actions.OnRemove.After, override.Actions.OnRemove.After...) 76 c.Actions.OnRemove.OnFailure = append(c.Actions.OnRemove.OnFailure, override.Actions.OnRemove.OnFailure...) 77 c.Actions.OnRemove.OnSuccess = append(c.Actions.OnRemove.OnSuccess, override.Actions.OnRemove.OnSuccess...) 78 } 79 80 func overrideResources(c *types.JackalComponent, override types.JackalComponent) { 81 c.DataInjections = append(c.DataInjections, override.DataInjections...) 82 c.Files = append(c.Files, override.Files...) 83 c.Images = append(c.Images, override.Images...) 84 c.Repos = append(c.Repos, override.Repos...) 85 86 // Merge charts with the same name to keep them unique 87 for _, overrideChart := range override.Charts { 88 existing := false 89 for idx := range c.Charts { 90 if c.Charts[idx].Name == overrideChart.Name { 91 if overrideChart.Namespace != "" { 92 c.Charts[idx].Namespace = overrideChart.Namespace 93 } 94 if overrideChart.ReleaseName != "" { 95 c.Charts[idx].ReleaseName = overrideChart.ReleaseName 96 } 97 c.Charts[idx].ValuesFiles = append(c.Charts[idx].ValuesFiles, overrideChart.ValuesFiles...) 98 existing = true 99 } 100 } 101 102 if !existing { 103 c.Charts = append(c.Charts, overrideChart) 104 } 105 } 106 107 // Merge manifests with the same name to keep them unique 108 for _, overrideManifest := range override.Manifests { 109 existing := false 110 for idx := range c.Manifests { 111 if c.Manifests[idx].Name == overrideManifest.Name { 112 if overrideManifest.Namespace != "" { 113 c.Manifests[idx].Namespace = overrideManifest.Namespace 114 } 115 c.Manifests[idx].Files = append(c.Manifests[idx].Files, overrideManifest.Files...) 116 c.Manifests[idx].Kustomizations = append(c.Manifests[idx].Kustomizations, overrideManifest.Kustomizations...) 117 118 existing = true 119 } 120 } 121 122 if !existing { 123 c.Manifests = append(c.Manifests, overrideManifest) 124 } 125 } 126 }