Skip to content

Commit

Permalink
fix: properly update the component's deployment when the env vars change
Browse files Browse the repository at this point in the history
Fixes #241
  • Loading branch information
metacosm committed May 26, 2020
1 parent 409aa66 commit dc9bd1c
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 15 deletions.
41 changes: 41 additions & 0 deletions pkg/controller/component/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ import (
"halkyon.io/api/v1beta1"
"halkyon.io/operator-framework"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime"
"reflect"
)

type deployment struct {
Expand Down Expand Up @@ -49,3 +51,42 @@ func (res deployment) GetCondition(underlying runtime.Object, err error) *v1beta
cond.Message = ""
})
}

func (res deployment) Update(toUpdate runtime.Object) (bool, runtime.Object, error) {
deployment := toUpdate.(*appsv1.Deployment)
container := deployment.Spec.Template.Spec.Containers[0]
c := res.ownerAsComponent()
envAsMap, err := getEnvAsMap(c)
if err != nil {
return false, nil, err
}
existingAsMap := make(map[string]string, len(container.Env))
for _, envVar := range container.Env {
existingAsMap[envVar.Name] = envVar.Value
}
if !reflect.DeepEqual(envAsMap, existingAsMap) {
newEnvVars := make([]corev1.EnvVar, 0, len(envAsMap))
for k, v := range envAsMap {
newEnvVars = append(newEnvVars, corev1.EnvVar{Name: k, Value: v})
}
container.Env = newEnvVars
deployment.Spec.Template.Spec.Containers[0] = container
return true, deployment, nil
}
return false, deployment, nil
}

func populatePodEnvVar(component *component.Component) []corev1.EnvVar {
tmpEnvVar, err := getEnvAsMap(component)
if err != nil {
panic(err)
}

// Convert Map to Slice
newEnvVars := make([]corev1.EnvVar, 0, len(tmpEnvVar))
for k, v := range tmpEnvVar {
newEnvVars = append(newEnvVars, corev1.EnvVar{Name: k, Value: v})
}

return newEnvVars
}
15 changes: 0 additions & 15 deletions pkg/controller/component/dev_deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,18 +95,3 @@ func getBaseContainerFor(component *component.Component) (corev1.Container, erro
}
return container, nil
}

func populatePodEnvVar(component *component.Component) []corev1.EnvVar {
tmpEnvVar, err := getEnvAsMap(component)
if err != nil {
panic(err)
}

// Convert Map to Slice
newEnvVars := make([]corev1.EnvVar, 0, len(tmpEnvVar))
for k, v := range tmpEnvVar {
newEnvVars = append(newEnvVars, corev1.EnvVar{Name: k, Value: v})
}

return newEnvVars
}

0 comments on commit dc9bd1c

Please sign in to comment.