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  }