cli: minor restructuring for loading helm charts (#1441)

Use one loadRelease function instead of one function for each
release.
This commit is contained in:
Otto Bittner 2023-03-20 17:05:58 +01:00 committed by GitHub
parent b3b1809251
commit 1b12147d83
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 71 deletions

View File

@ -106,23 +106,23 @@ func AvailableServiceVersions() (string, error) {
// Load the embedded helm charts. // Load the embedded helm charts.
func (i *ChartLoader) Load(config *config.Config, conformanceMode bool, masterSecret, salt []byte) ([]byte, error) { func (i *ChartLoader) Load(config *config.Config, conformanceMode bool, masterSecret, salt []byte) ([]byte, error) {
ciliumRelease, err := i.loadCilium() ciliumRelease, err := i.loadRelease(ciliumInfo)
if err != nil { if err != nil {
return nil, fmt.Errorf("loading cilium: %w", err) return nil, fmt.Errorf("loading cilium: %w", err)
} }
extendCiliumValues(ciliumRelease.Values, conformanceMode) extendCiliumValues(ciliumRelease.Values, conformanceMode)
certManagerRelease, err := i.loadCertManager() certManagerRelease, err := i.loadRelease(certManagerInfo)
if err != nil { if err != nil {
return nil, fmt.Errorf("loading cilium: %w", err) return nil, fmt.Errorf("loading cert-manager: %w", err)
} }
operatorRelease, err := i.loadOperators() operatorRelease, err := i.loadRelease(constellationOperatorsInfo)
if err != nil { if err != nil {
return nil, fmt.Errorf("loading operators: %w", err) return nil, fmt.Errorf("loading operators: %w", err)
} }
conServicesRelease, err := i.loadConstellationServices() conServicesRelease, err := i.loadRelease(constellationServicesInfo)
if err != nil { if err != nil {
return nil, fmt.Errorf("loading constellation-services: %w", err) return nil, fmt.Errorf("loading constellation-services: %w", err)
} }
@ -139,23 +139,40 @@ func (i *ChartLoader) Load(config *config.Config, conformanceMode bool, masterSe
return rel, nil return rel, nil
} }
// loadCilium prepares a helm release for use in a helm install action. // loadRelease loads the embedded chart and values depending on the given info argument.
func (i *ChartLoader) loadCilium() (helm.Release, error) { func (i *ChartLoader) loadRelease(info chartInfo) (helm.Release, error) {
chart, err := loadChartsDir(helmFS, ciliumInfo.path) chart, err := loadChartsDir(helmFS, info.path)
if err != nil { if err != nil {
return helm.Release{}, fmt.Errorf("loading cilium chart: %w", err) return helm.Release{}, fmt.Errorf("loading %s chart: %w", info.releaseName, err)
} }
values, err := i.loadCiliumValues()
var values map[string]any
switch info.releaseName {
case ciliumInfo.releaseName:
values, err = i.loadCiliumValues()
case certManagerInfo.releaseName:
values = i.loadCertManagerValues()
case constellationOperatorsInfo.releaseName:
updateVersions(chart, compatibility.EnsurePrefixV(constants.VersionInfo()))
values, err = i.loadOperatorsValues()
case constellationServicesInfo.releaseName:
updateVersions(chart, compatibility.EnsurePrefixV(constants.VersionInfo()))
values, err = i.loadConstellationServicesValues()
}
if err != nil { if err != nil {
return helm.Release{}, fmt.Errorf("loading cilium values: %w", err) return helm.Release{}, fmt.Errorf("loading %s values: %w", info.releaseName, err)
} }
chartRaw, err := i.marshalChart(chart) chartRaw, err := i.marshalChart(chart)
if err != nil { if err != nil {
return helm.Release{}, fmt.Errorf("packaging cilium chart: %w", err) return helm.Release{}, fmt.Errorf("packaging %s chart: %w", info.releaseName, err)
} }
return helm.Release{Chart: chartRaw, Values: values, ReleaseName: ciliumInfo.releaseName, Wait: false}, nil return helm.Release{Chart: chartRaw, Values: values, ReleaseName: info.releaseName, Wait: false}, nil
} }
// loadCiliumValues is used to separate the marshalling step from the loading step. // loadCiliumValues is used to separate the marshalling step from the loading step.
@ -194,21 +211,6 @@ func extendCiliumValues(in map[string]any, conformanceMode bool) {
} }
} }
func (i *ChartLoader) loadCertManager() (helm.Release, error) {
chart, err := loadChartsDir(helmFS, certManagerInfo.path)
if err != nil {
return helm.Release{}, fmt.Errorf("loading cert-manager chart: %w", err)
}
values := i.loadCertManagerValues()
chartRaw, err := i.marshalChart(chart)
if err != nil {
return helm.Release{}, fmt.Errorf("packaging cert-manager chart: %w", err)
}
return helm.Release{Chart: chartRaw, Values: values, ReleaseName: certManagerInfo.releaseName, Wait: false}, nil
}
// loadCertManagerHelper is used to separate the marshalling step from the loading step. // loadCertManagerHelper is used to separate the marshalling step from the loading step.
// This reduces the time unit tests take to execute. // This reduces the time unit tests take to execute.
func (i *ChartLoader) loadCertManagerValues() map[string]any { func (i *ChartLoader) loadCertManagerValues() map[string]any {
@ -278,27 +280,6 @@ func (i *ChartLoader) loadCertManagerValues() map[string]any {
} }
} }
func (i *ChartLoader) loadOperators() (helm.Release, error) {
chart, err := loadChartsDir(helmFS, constellationOperatorsInfo.path)
if err != nil {
return helm.Release{}, fmt.Errorf("loading operators chart: %w", err)
}
updateVersions(chart, compatibility.EnsurePrefixV(constants.VersionInfo()))
values, err := i.loadOperatorsValues()
if err != nil {
return helm.Release{}, err
}
chartRaw, err := i.marshalChart(chart)
if err != nil {
return helm.Release{}, fmt.Errorf("packaging operators chart: %w", err)
}
return helm.Release{Chart: chartRaw, Values: values, ReleaseName: constellationOperatorsInfo.releaseName, Wait: false}, nil
}
// loadOperatorsHelper is used to separate the marshalling step from the loading step. // loadOperatorsHelper is used to separate the marshalling step from the loading step.
// This reduces the time unit tests take to execute. // This reduces the time unit tests take to execute.
func (i *ChartLoader) loadOperatorsValues() (map[string]any, error) { func (i *ChartLoader) loadOperatorsValues() (map[string]any, error) {
@ -364,28 +345,6 @@ func (i *ChartLoader) loadOperatorsValues() (map[string]any, error) {
return values, nil return values, nil
} }
// loadConstellationServices prepares a helm release for use in a helm install action.
func (i *ChartLoader) loadConstellationServices() (helm.Release, error) {
chart, err := loadChartsDir(helmFS, constellationServicesInfo.path)
if err != nil {
return helm.Release{}, fmt.Errorf("loadingg constellation-services chart: %w", err)
}
updateVersions(chart, compatibility.EnsurePrefixV(constants.VersionInfo()))
values, err := i.loadConstellationServicesValues()
if err != nil {
return helm.Release{}, err
}
chartRaw, err := i.marshalChart(chart)
if err != nil {
return helm.Release{}, fmt.Errorf("packaging constellation-services chart: %w", err)
}
return helm.Release{Chart: chartRaw, Values: values, ReleaseName: constellationServicesInfo.releaseName, Wait: false}, nil
}
// loadConstellationServicesHelper is used to separate the marshalling step from the loading step. // loadConstellationServicesHelper is used to separate the marshalling step from the loading step.
// This reduces the time unit tests take to execute. // This reduces the time unit tests take to execute.
func (i *ChartLoader) loadConstellationServicesValues() (map[string]any, error) { func (i *ChartLoader) loadConstellationServicesValues() (map[string]any, error) {

View File

@ -30,6 +30,7 @@ go_test(
"issuer_test.go", "issuer_test.go",
"validator_test.go", "validator_test.go",
], ],
data = glob(["testdata/**"]),
embed = [":snp"], embed = [":snp"],
# keep # keep
gotags = select({ gotags = select({