fixed dependencies processing in case of helm install or upgrade for disabled/enabled sub charts

Signed-off-by: Florian Hopfensperger <f.hopfensperger@gmail.com>
pull/7514/head
Florian Hopfensperger 5 years ago
parent ecc0070417
commit d03db32c25

@ -173,6 +173,14 @@ Loop:
cd = append(cd, n) cd = append(cd, n)
} }
} }
// don't keep disabled charts in metadata
cdMetadata := []*chart.Dependency{}
copy(cdMetadata, c.Metadata.Dependencies[:0])
for _, n := range c.Metadata.Dependencies {
if _, ok := rm[n.Name]; !ok {
cdMetadata = append(cdMetadata, n)
}
}
// recursively call self to process sub dependencies // recursively call self to process sub dependencies
for _, t := range cd { for _, t := range cd {
@ -181,6 +189,9 @@ Loop:
return err return err
} }
} }
// set the correct dependencies in metadata
c.Metadata.Dependencies = nil
c.Metadata.Dependencies = append(c.Metadata.Dependencies, cdMetadata...)
c.SetDependencies(cd...) c.SetDependencies(cd...)
return nil return nil

@ -239,6 +239,36 @@ func TestProcessDependencyImportValues(t *testing.T) {
} }
} }
func TestProcessDependencyImportValuesForEnabledCharts(t *testing.T) {
c := loadChart(t, "testdata/import-values-from-enabled-subchart/parent-chart")
nameOverride := "parent-chart-prod"
if err := processDependencyImportValues(c); err != nil {
t.Fatalf("processing import values dependencies %v", err)
}
if len(c.Dependencies()) != 2 {
t.Fatalf("expected 2 dependencies for this chart, but got %d", len(c.Dependencies()))
}
if err := processDependencyEnabled(c, c.Values, ""); err != nil {
t.Fatalf("expected no errors but got %q", err)
}
if len(c.Dependencies()) != 1 {
t.Fatal("expected no changes in dependencies")
}
if len(c.Metadata.Dependencies) != 1 {
t.Fatalf("expected 1 dependency specified in Chart.yaml, got %d", len(c.Metadata.Dependencies))
}
prodDependencyValues := c.Dependencies()[0].Values
if prodDependencyValues["nameOverride"] != nameOverride {
t.Fatalf("dependency chart name should be %s but got %s", nameOverride, prodDependencyValues["nameOverride"])
}
}
func TestGetAliasDependency(t *testing.T) { func TestGetAliasDependency(t *testing.T) {
c := loadChart(t, "testdata/frobnitz") c := loadChart(t, "testdata/frobnitz")
req := c.Metadata.Dependencies req := c.Metadata.Dependencies

@ -0,0 +1,9 @@
dependencies:
- name: dev
repository: file://envs/dev
version: v0.1.0
- name: prod
repository: file://envs/prod
version: v0.1.0
digest: sha256:9403fc24f6cf9d6055820126cf7633b4bd1fed3c77e4880c674059f536346182
generated: "2020-02-03T10:38:51.180474+01:00"

@ -0,0 +1,22 @@
apiVersion: v2
name: parent-chart
version: v0.1.0
appVersion: v0.1.0
dependencies:
- name: dev
repository: "file://envs/dev"
version: ">= 0.0.1"
condition: dev.enabled,global.dev.enabled
tags:
- dev
import-values:
- data
- name: prod
repository: "file://envs/prod"
version: ">= 0.0.1"
condition: prod.enabled,global.prod.enabled
tags:
- prod
import-values:
- data

@ -0,0 +1,4 @@
apiVersion: v2
name: dev
version: v0.1.0
appVersion: v0.1.0

@ -0,0 +1,9 @@
# Dev values parent-chart
nameOverride: parent-chart-dev
exports:
data:
resources:
autoscaler:
minReplicas: 1
maxReplicas: 3
targetCPUUtilizationPercentage: 80

@ -0,0 +1,4 @@
apiVersion: v2
name: prod
version: v0.1.0
appVersion: v0.1.0

@ -0,0 +1,9 @@
# Prod values parent-chart
nameOverride: parent-chart-prod
exports:
data:
resources:
autoscaler:
minReplicas: 2
maxReplicas: 5
targetCPUUtilizationPercentage: 90

@ -0,0 +1,16 @@
###################################################################################################
# parent-chart horizontal pod autoscaler
###################################################################################################
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: {{ .Release.Name }}-autoscaler
namespace: {{ .Release.Namespace }}
spec:
scaleTargetRef:
apiVersion: apps/v1beta1
kind: Deployment
name: {{ .Release.Name }}
minReplicas: {{ required "A valid .Values.resources.autoscaler.minReplicas entry required!" .Values.resources.autoscaler.minReplicas }}
maxReplicas: {{ required "A valid .Values.resources.autoscaler.maxReplicas entry required!" .Values.resources.autoscaler.maxReplicas }}
targetCPUUtilizationPercentage: {{ required "A valid .Values.resources.autoscaler.targetCPUUtilizationPercentage!" .Values.resources.autoscaler.targetCPUUtilizationPercentage }}

@ -0,0 +1,10 @@
# Default values for parent-chart.
nameOverride: parent-chart
tags:
dev: false
prod: true
resources:
autoscaler:
minReplicas: 0
maxReplicas: 0
targetCPUUtilizationPercentage: 99
Loading…
Cancel
Save