fixed to track all namespaces

pull/507/head
Neil Toledo 2020-06-10 07:16:03 -07:00
parent 05357f9715
commit 370779e5b7
4 changed files with 53 additions and 20 deletions

2
go.mod
View File

@ -57,6 +57,7 @@ require (
github.com/rusenask/docker-registry-client v0.0.0-20200210164146-049272422097
github.com/ryanuber/go-glob v1.0.0
github.com/sirupsen/logrus v1.6.0
github.com/stretchr/testify v1.5.1
github.com/tbruyelle/hipchat-go v0.0.0-20170717082847-35aebc99209a
github.com/urfave/negroni v1.0.0
golang.org/x/net v0.0.0-20200602114024-627f9648deb9
@ -66,6 +67,7 @@ require (
helm.sh/helm/v3 v3.0.0-00010101000000-000000000000
k8s.io/api v0.17.2
k8s.io/apimachinery v0.17.2
k8s.io/cli-runtime v0.17.2
k8s.io/client-go v0.17.2
k8s.io/helm v0.0.0-00010101000000-000000000000
sigs.k8s.io/yaml v1.1.0

View File

@ -286,6 +286,7 @@ func (p *Provider) createUpdatePlans(event *types.Event) ([]*UpdatePlan, error)
}).Error("provider.helm3: failed to process versioned release")
continue
}
if update {
helm3VersionedUpdatesCounter.With(prometheus.Labels{"chart": fmt.Sprintf("%s/%s", release.Namespace, release.Name)}).Inc()
plans = append(plans, plan)
@ -314,9 +315,8 @@ func (p *Provider) applyPlans(plans []*UpdatePlan) error {
},
})
// err := updateHelmRelease(p.implementer, plan.Name, plan.Chart, plan.Values)
err := updateHelmRelease(p.implementer, plan.Name, plan.Chart, plan.Values, plan.EmptyConfig)
err := updateHelmRelease(p.implementer, plan.Name, plan.Chart, plan.Values, plan.Namespace, plan.EmptyConfig)
if err != nil {
log.WithFields(log.Fields{
"error": err,
@ -379,14 +379,14 @@ func (p *Provider) applyPlans(plans []*UpdatePlan) error {
return nil
}
func updateHelmRelease(implementer Implementer, releaseName string, chart *hapi_chart.Chart, overrideValues map[string]string, opts ...bool) error {
func updateHelmRelease(implementer Implementer, releaseName string, chart *hapi_chart.Chart, overrideValues map[string]string, namespace string, opts ...bool) error {
// set reuse values to false if currentRelease.config is nil
emptyConfig := false
if len(opts) == 1 && opts[0] {
emptyConfig = opts[0]
}
resp, err := implementer.UpdateReleaseFromChart(releaseName, chart, overrideValues, emptyConfig)
resp, err := implementer.UpdateReleaseFromChart(releaseName, chart, overrideValues, namespace, emptyConfig)
if err != nil {
return err

View File

@ -73,7 +73,7 @@ func (i *fakeImplementer) ListReleases() ([]*release.Release, error) {
return i.listReleasesResponse, nil
}
func (i *fakeImplementer) UpdateReleaseFromChart(rlsName string, chart *chart.Chart, vals map[string]string, opts ...bool) (*release.Release, error) {
func (i *fakeImplementer) UpdateReleaseFromChart(rlsName string, chart *chart.Chart, vals map[string]string, namespace string, opts ...bool) (*release.Release, error) {
// func (i *fakeImplementer) UpdateReleaseFromChart(rlsName string, chart *chart.Chart, opts ...helm.UpdateOption) (*rls.UpdateReleaseResponse, error) {
i.updatedRlsName = rlsName
i.updatedChart = chart

View File

@ -10,7 +10,9 @@ import (
"helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/release"
"helm.sh/helm/v3/pkg/cli"
// "helm.sh/helm/v3/pkg/cli"
"k8s.io/cli-runtime/pkg/genericclioptions"
)
// to do:
@ -23,33 +25,41 @@ const DefaultUpdateTimeout = 300
type Implementer interface {
// ListReleases(opts ...helm.ReleaseListOption) ([]*release.Release, error)
ListReleases() ([]*release.Release, error)
UpdateReleaseFromChart(rlsName string, chart *chart.Chart, vals map[string]string, opts ...bool) (*release.Release, error)
UpdateReleaseFromChart(rlsName string, chart *chart.Chart, vals map[string]string, namespace string, opts ...bool) (*release.Release, error)
}
// Helm3Implementer - actual helm3 implementer
type Helm3Implementer struct {
actionConfig *action.Configuration
// actionConfig *action.Configuration
HelmDriver string
KubeContext string
KubeToken string
KubeAPIServer string
}
// NewHelm3Implementer - get new helm implementer
func NewHelm3Implementer() *Helm3Implementer {
settings := cli.New()
// settings := cli.New()
actionConfig := &action.Configuration{}
// You can pass an empty string instead of settings.Namespace() to list
// all namespaces
if err := actionConfig.Init(settings.RESTClientGetter(), settings.Namespace(), os.Getenv("HELM_DRIVER"), log.Printf); err != nil {
log.Printf("%+v", err)
os.Exit(1)
}
// actionConfig := &action.Configuration{}
// // You can pass an empty string instead of settings.Namespace() to list
// // all namespaces
// if err := actionConfig.Init(settings.RESTClientGetter(), "", os.Getenv("HELM_DRIVER"), log.Printf); err != nil {
// log.Printf("%+v", err)
// os.Exit(1)
// }
return &Helm3Implementer{
actionConfig: actionConfig,
HelmDriver: os.Getenv("HELM_DRIVER"),
KubeContext: os.Getenv("HELM_KUBECONTEXT"),
KubeToken: os.Getenv("HELM_KUBETOKEN"),
KubeAPIServer: os.Getenv("HELM_KUBEAPISERVER"),
}
}
// ListReleases - list available releases
func (i *Helm3Implementer) ListReleases() ([]*release.Release, error) {
client := action.NewList(i.actionConfig)
actionConfig := i.generateConfig("")
client := action.NewList(actionConfig)
results, err := client.Run()
if err != nil {
log.WithFields(log.Fields{
@ -62,8 +72,10 @@ func (i *Helm3Implementer) ListReleases() ([]*release.Release, error) {
// UpdateReleaseFromChart - update release from chart
// func (i *Helm3Implementer) UpdateReleaseFromChart(rlsName string, chart *chart.Chart, vals map[string]string) (*release.Release, error) {
func (i *Helm3Implementer) UpdateReleaseFromChart(rlsName string, chart *chart.Chart, vals map[string]string, opts ...bool) (*release.Release, error) {
client := action.NewUpgrade(i.actionConfig)
func (i *Helm3Implementer) UpdateReleaseFromChart(rlsName string, chart *chart.Chart, vals map[string]string, namespace string, opts ...bool) (*release.Release, error) {
actionConfig := i.generateConfig(namespace)
client := action.NewUpgrade(actionConfig)
client.Namespace = namespace
client.Force = true
client.Timeout = DefaultUpdateTimeout;
client.ReuseValues = true
@ -86,6 +98,25 @@ func (i *Helm3Implementer) UpdateReleaseFromChart(rlsName string, chart *chart.C
return results, err
}
func (i *Helm3Implementer) generateConfig(namespace string) (*action.Configuration) {
// settings := cli.New()
config := &genericclioptions.ConfigFlags{
Namespace: &namespace,
Context: &i.KubeContext,
BearerToken: &i.KubeToken,
APIServer: &i.KubeAPIServer,
}
actionConfig := &action.Configuration{}
if err := actionConfig.Init(config, namespace, i.HelmDriver, log.Printf); err != nil {
log.Printf("%+v", err)
os.Exit(1)
}
return actionConfig
}
// convert map[string]string to map[string]interface
// converts:
// map[string]string{"image.tag": "0.1.0"}