override kube namespace with install/upgrade ns

Signed-off-by: Patrik Cyvoct <patrik@ptrk.io>
pull/7122/head
Patrik Cyvoct 6 years ago
parent 22e00bebdf
commit 36a9cf3ba4
No known key found for this signature in database
GPG Key ID: 4334D82B950FB63A

@ -54,7 +54,7 @@ func (cfg *Configuration) execHook(rl *release.Release, hook release.HookEvent,
return err return err
} }
resources, err := cfg.KubeClient.Build(bytes.NewBufferString(h.Manifest), true) resources, err := cfg.KubeClient.Build(bytes.NewBufferString(h.Manifest), true, "")
if err != nil { if err != nil {
return errors.Wrapf(err, "unable to build kubernetes object for %s hook %s", hook, h.Path) return errors.Wrapf(err, "unable to build kubernetes object for %s hook %s", hook, h.Path)
} }
@ -126,7 +126,7 @@ func (cfg *Configuration) deleteHookByPolicy(h *release.Hook, policy release.Hoo
return nil return nil
} }
if hookHasDeletePolicy(h, policy) { if hookHasDeletePolicy(h, policy) {
resources, err := cfg.KubeClient.Build(bytes.NewBufferString(h.Manifest), false) resources, err := cfg.KubeClient.Build(bytes.NewBufferString(h.Manifest), false, "")
if err != nil { if err != nil {
return errors.Wrapf(err, "unable to build kubernetes object for deleting hook %s", h.Path) return errors.Wrapf(err, "unable to build kubernetes object for deleting hook %s", h.Path)
} }

@ -113,7 +113,7 @@ func (i *Install) installCRDs(crds []*chart.File) error {
totalItems := []*resource.Info{} totalItems := []*resource.Info{}
for _, obj := range crds { for _, obj := range crds {
// Read in the resources // Read in the resources
res, err := i.cfg.KubeClient.Build(bytes.NewBuffer(obj.Data), false) res, err := i.cfg.KubeClient.Build(bytes.NewBuffer(obj.Data), false, i.Namespace)
if err != nil { if err != nil {
return errors.Wrapf(err, "failed to install CRD %s", obj.Name) return errors.Wrapf(err, "failed to install CRD %s", obj.Name)
} }
@ -226,7 +226,7 @@ func (i *Install) Run(chrt *chart.Chart, vals map[string]interface{}) (*release.
// Mark this release as in-progress // Mark this release as in-progress
rel.SetStatus(release.StatusPendingInstall, "Initial install underway") rel.SetStatus(release.StatusPendingInstall, "Initial install underway")
resources, err := i.cfg.KubeClient.Build(bytes.NewBufferString(rel.Manifest), true) resources, err := i.cfg.KubeClient.Build(bytes.NewBufferString(rel.Manifest), true, i.Namespace)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "unable to build kubernetes objects from release manifest") return nil, errors.Wrap(err, "unable to build kubernetes objects from release manifest")
} }

@ -141,11 +141,11 @@ func (r *Rollback) performRollback(currentRelease, targetRelease *release.Releas
return targetRelease, nil return targetRelease, nil
} }
current, err := r.cfg.KubeClient.Build(bytes.NewBufferString(currentRelease.Manifest), false) current, err := r.cfg.KubeClient.Build(bytes.NewBufferString(currentRelease.Manifest), false, "")
if err != nil { if err != nil {
return targetRelease, errors.Wrap(err, "unable to build kubernetes objects from current release manifest") return targetRelease, errors.Wrap(err, "unable to build kubernetes objects from current release manifest")
} }
target, err := r.cfg.KubeClient.Build(bytes.NewBufferString(targetRelease.Manifest), false) target, err := r.cfg.KubeClient.Build(bytes.NewBufferString(targetRelease.Manifest), false, "")
if err != nil { if err != nil {
return targetRelease, errors.Wrap(err, "unable to build kubernetes objects from new release manifest") return targetRelease, errors.Wrap(err, "unable to build kubernetes objects from new release manifest")
} }

@ -189,7 +189,7 @@ func (u *Uninstall) deleteRelease(rel *release.Release) (string, []error) {
for _, file := range filesToDelete { for _, file := range filesToDelete {
builder.WriteString("\n---\n" + file.Content) builder.WriteString("\n---\n" + file.Content)
} }
resources, err := u.cfg.KubeClient.Build(strings.NewReader(builder.String()), false) resources, err := u.cfg.KubeClient.Build(strings.NewReader(builder.String()), false, "")
if err != nil { if err != nil {
return "", []error{errors.Wrap(err, "unable to build kubernetes objects for delete")} return "", []error{errors.Wrap(err, "unable to build kubernetes objects for delete")}
} }

@ -190,11 +190,11 @@ func (u *Upgrade) prepareUpgrade(name string, chart *chart.Chart, vals map[strin
} }
func (u *Upgrade) performUpgrade(originalRelease, upgradedRelease *release.Release) (*release.Release, error) { func (u *Upgrade) performUpgrade(originalRelease, upgradedRelease *release.Release) (*release.Release, error) {
current, err := u.cfg.KubeClient.Build(bytes.NewBufferString(originalRelease.Manifest), false) current, err := u.cfg.KubeClient.Build(bytes.NewBufferString(originalRelease.Manifest), false, u.Namespace)
if err != nil { if err != nil {
return upgradedRelease, errors.Wrap(err, "unable to build kubernetes objects from current release manifest") return upgradedRelease, errors.Wrap(err, "unable to build kubernetes objects from current release manifest")
} }
target, err := u.cfg.KubeClient.Build(bytes.NewBufferString(upgradedRelease.Manifest), true) target, err := u.cfg.KubeClient.Build(bytes.NewBufferString(upgradedRelease.Manifest), true, u.Namespace)
if err != nil { if err != nil {
return upgradedRelease, errors.Wrap(err, "unable to build kubernetes objects from new release manifest") return upgradedRelease, errors.Wrap(err, "unable to build kubernetes objects from new release manifest")
} }
@ -373,7 +373,7 @@ func (u *Upgrade) reuseValues(chart *chart.Chart, current *release.Release, newV
} }
func validateManifest(c kube.Interface, manifest []byte) error { func validateManifest(c kube.Interface, manifest []byte) error {
_, err := c.Build(bytes.NewReader(manifest), true) _, err := c.Build(bytes.NewReader(manifest), true, "")
return err return err
} }

@ -122,16 +122,21 @@ func (c *Client) newBuilder() *resource.Builder {
} }
// Build validates for Kubernetes objects and returns unstructured infos. // Build validates for Kubernetes objects and returns unstructured infos.
func (c *Client) Build(reader io.Reader, validate bool) (ResourceList, error) { func (c *Client) Build(reader io.Reader, validate bool, namespace string) (ResourceList, error) {
schema, err := c.Factory.Validator(validate) schema, err := c.Factory.Validator(validate)
if err != nil { if err != nil {
return nil, err return nil, err
} }
result, err := c.newBuilder(). builder := c.newBuilder().
Unstructured(). Unstructured().
Schema(schema). Schema(schema).
Stream(reader, ""). Stream(reader, "")
Do().Infos()
if namespace != "" {
builder = builder.NamespaceParam(namespace)
}
result, err := builder.Do().Infos()
return result, scrubValidationError(err) return result, scrubValidationError(err)
} }

@ -153,11 +153,11 @@ func TestUpdate(t *testing.T) {
} }
}), }),
} }
first, err := c.Build(objBody(&listA), false) first, err := c.Build(objBody(&listA), false, "")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
second, err := c.Build(objBody(&listB), false) second, err := c.Build(objBody(&listB), false, "")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -222,7 +222,7 @@ func TestBuild(t *testing.T) {
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
// Test for an invalid manifest // Test for an invalid manifest
infos, err := c.Build(tt.reader, false) infos, err := c.Build(tt.reader, false, "")
if err != nil && !tt.err { if err != nil && !tt.err {
t.Errorf("Got error message when no error should have occurred: %v", err) t.Errorf("Got error message when no error should have occurred: %v", err)
} else if err != nil && strings.Contains(err.Error(), "--validate=false") { } else if err != nil && strings.Contains(err.Error(), "--validate=false") {
@ -266,7 +266,7 @@ func TestPerform(t *testing.T) {
} }
c := newTestClient() c := newTestClient()
infos, err := c.Build(tt.reader, false) infos, err := c.Build(tt.reader, false, "")
if err != nil && err.Error() != tt.errMessage { if err != nil && err.Error() != tt.errMessage {
t.Errorf("Error while building manifests: %v", err) t.Errorf("Error while building manifests: %v", err)
} }
@ -289,7 +289,7 @@ func TestPerform(t *testing.T) {
func TestReal(t *testing.T) { func TestReal(t *testing.T) {
t.Skip("This is a live test, comment this line to run") t.Skip("This is a live test, comment this line to run")
c := New(nil) c := New(nil)
resources, err := c.Build(strings.NewReader(guestbookManifest), false) resources, err := c.Build(strings.NewReader(guestbookManifest), false, "")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -299,7 +299,7 @@ func TestReal(t *testing.T) {
testSvcEndpointManifest := testServiceManifest + "\n---\n" + testEndpointManifest testSvcEndpointManifest := testServiceManifest + "\n---\n" + testEndpointManifest
c = New(nil) c = New(nil)
resources, err = c.Build(strings.NewReader(testSvcEndpointManifest), false) resources, err = c.Build(strings.NewReader(testSvcEndpointManifest), false, "")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -307,7 +307,7 @@ func TestReal(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
resources, err = c.Build(strings.NewReader(testEndpointManifest), false) resources, err = c.Build(strings.NewReader(testEndpointManifest), false, "")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -316,7 +316,7 @@ func TestReal(t *testing.T) {
t.Fatal(errs) t.Fatal(errs)
} }
resources, err = c.Build(strings.NewReader(testSvcEndpointManifest), false) resources, err = c.Build(strings.NewReader(testSvcEndpointManifest), false, "")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

@ -83,11 +83,11 @@ func (f *FailingKubeClient) Update(r, modified kube.ResourceList, ignoreMe bool)
} }
// Build returns the configured error if set or prints // Build returns the configured error if set or prints
func (f *FailingKubeClient) Build(r io.Reader, _ bool) (kube.ResourceList, error) { func (f *FailingKubeClient) Build(r io.Reader, _ bool, _ string) (kube.ResourceList, error) {
if f.BuildError != nil { if f.BuildError != nil {
return []*resource.Info{}, f.BuildError return []*resource.Info{}, f.BuildError
} }
return f.PrintingKubeClient.Build(r, false) return f.PrintingKubeClient.Build(r, false, "")
} }
// WaitAndGetCompletedPodPhase returns the configured error if set or prints // WaitAndGetCompletedPodPhase returns the configured error if set or prints

@ -82,7 +82,7 @@ func (p *PrintingKubeClient) Update(_, modified kube.ResourceList, _ bool) (*kub
} }
// Build implements KubeClient Build. // Build implements KubeClient Build.
func (p *PrintingKubeClient) Build(_ io.Reader, _ bool) (kube.ResourceList, error) { func (p *PrintingKubeClient) Build(_ io.Reader, _ bool, _ string) (kube.ResourceList, error) {
return []*resource.Info{}, nil return []*resource.Info{}, nil
} }

@ -53,7 +53,7 @@ type Interface interface {
// by "\n---\n") // by "\n---\n")
// //
// Validates against OpenAPI schema if validate is true. // Validates against OpenAPI schema if validate is true.
Build(reader io.Reader, validate bool) (ResourceList, error) Build(reader io.Reader, validate bool, namespace string) (ResourceList, error)
// WaitAndGetCompletedPodPhase waits up to a timeout until a pod enters a completed phase // WaitAndGetCompletedPodPhase waits up to a timeout until a pod enters a completed phase
// and returns said phase (PodSucceeded or PodFailed qualify). // and returns said phase (PodSucceeded or PodFailed qualify).

Loading…
Cancel
Save