Add support for setting TILLER_HISTORY_MAX on existing clusters

Signed-off-by: Ross Fairbanks <ross@rossfairbanks.com>
pull/5867/head
Ross Fairbanks 6 years ago
parent 2ca025d482
commit 0735d6525a

@ -30,6 +30,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
corev1 "k8s.io/client-go/kubernetes/typed/core/v1" corev1 "k8s.io/client-go/kubernetes/typed/core/v1"
extensionsclient "k8s.io/client-go/kubernetes/typed/extensions/v1beta1" extensionsclient "k8s.io/client-go/kubernetes/typed/extensions/v1beta1"
@ -71,6 +72,11 @@ func Upgrade(client kubernetes.Interface, opts *Options) error {
} }
obj.Spec.Template.Spec.Containers[0].Image = opts.SelectImage() obj.Spec.Template.Spec.Containers[0].Image = opts.SelectImage()
obj.Spec.Template.Spec.Containers[0].ImagePullPolicy = opts.pullPolicy() obj.Spec.Template.Spec.Containers[0].ImagePullPolicy = opts.pullPolicy()
if opts.MaxHistory > 0 {
obj.Spec.Template.Spec.Containers[0].Env = updateEnv(obj.Spec.Template.Spec.Containers[0].Env,
[]v1.EnvVar{{Name: "TILLER_HISTORY_MAX", Value: fmt.Sprintf("%d", opts.MaxHistory)}},
[]string{""})
}
obj.Spec.Template.Spec.ServiceAccountName = opts.ServiceAccount obj.Spec.Template.Spec.ServiceAccountName = opts.ServiceAccount
if _, err := client.ExtensionsV1beta1().Deployments(opts.Namespace).Update(obj); err != nil { if _, err := client.ExtensionsV1beta1().Deployments(opts.Namespace).Update(obj); err != nil {
return err return err
@ -378,6 +384,16 @@ func createSecret(client corev1.SecretsGetter, opts *Options) error {
return err return err
} }
// findEnv searches a slice of env vars for a single env var.
func findEnv(env []v1.EnvVar, name string) (v1.EnvVar, bool) {
for _, e := range env {
if e.Name == name {
return e, true
}
}
return v1.EnvVar{}, false
}
// generateSecret builds the secret object that hold Tiller secrets. // generateSecret builds the secret object that hold Tiller secrets.
func generateSecret(opts *Options) (*v1.Secret, error) { func generateSecret(opts *Options) (*v1.Secret, error) {
@ -407,3 +423,32 @@ func generateSecret(opts *Options) (*v1.Secret, error) {
} }
func read(path string) (b []byte, err error) { return ioutil.ReadFile(path) } func read(path string) (b []byte, err error) { return ioutil.ReadFile(path) }
// updateEnv updates the existing env vars and allows env vars to be removed
// by name.
func updateEnv(existing []v1.EnvVar, env []v1.EnvVar, remove []string) []v1.EnvVar {
out := []v1.EnvVar{}
covered := sets.NewString(remove...)
for _, e := range existing {
if covered.Has(e.Name) {
continue
}
newer, ok := findEnv(env, e.Name)
if ok {
covered.Insert(e.Name)
out = append(out, newer)
continue
}
out = append(out, e)
}
for _, e := range env {
if covered.Has(e.Name) {
continue
}
covered.Insert(e.Name)
out = append(out, e)
}
return out
}

Loading…
Cancel
Save