From cac9f9c7cc1e47024f5b69ee7a76634d8cf3c61c Mon Sep 17 00:00:00 2001 From: Adam Reese Date: Thu, 8 Dec 2016 09:07:22 -0800 Subject: [PATCH] ref(kube): isolate ensureNamespace and add tests --- pkg/kube/client.go | 21 +++++-------------- pkg/kube/namespace.go | 41 ++++++++++++++++++++++++++++++++++++++ pkg/kube/namespace_test.go | 36 +++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 16 deletions(-) create mode 100644 pkg/kube/namespace.go create mode 100644 pkg/kube/namespace_test.go diff --git a/pkg/kube/client.go b/pkg/kube/client.go index 9cec157db..875865f81 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -77,7 +77,11 @@ func (e ErrAlreadyExists) Error() string { // // Namespace will set the namespace func (c *Client) Create(namespace string, reader io.Reader) error { - if err := c.ensureNamespace(namespace); err != nil { + client, err := c.ClientSet() + if err != nil { + return err + } + if err := ensureNamespace(client, namespace); err != nil { return err } return perform(c, namespace, reader, createResource) @@ -394,21 +398,6 @@ func waitForJob(e watch.Event, name string) (bool, error) { return false, nil } -func (c *Client) ensureNamespace(namespace string) error { - client, err := c.ClientSet() - if err != nil { - return err - } - - ns := &api.Namespace{} - ns.Name = namespace - _, err = client.Namespaces().Create(ns) - if err != nil && !errors.IsAlreadyExists(err) { - return err - } - return nil -} - func deleteUnwantedResources(currentInfos, targetInfos []*resource.Info) { for _, cInfo := range currentInfos { if _, ok := findMatchingInfo(cInfo, targetInfos); !ok { diff --git a/pkg/kube/namespace.go b/pkg/kube/namespace.go new file mode 100644 index 000000000..81784c95c --- /dev/null +++ b/pkg/kube/namespace.go @@ -0,0 +1,41 @@ +/* +Copyright 2016 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package kube // import "k8s.io/helm/pkg/kube" + +import ( + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" +) + +func createNamespace(client internalclientset.Interface, namespace string) error { + ns := &api.Namespace{ + ObjectMeta: api.ObjectMeta{ + Name: namespace, + }, + } + _, err := client.Core().Namespaces().Create(ns) + return err +} + +func ensureNamespace(client internalclientset.Interface, namespace string) error { + err := createNamespace(client, namespace) + if err != nil && !errors.IsAlreadyExists(err) { + return err + } + return nil +} diff --git a/pkg/kube/namespace_test.go b/pkg/kube/namespace_test.go new file mode 100644 index 000000000..869b65bb7 --- /dev/null +++ b/pkg/kube/namespace_test.go @@ -0,0 +1,36 @@ +/* +Copyright 2016 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package kube // import "k8s.io/helm/pkg/kube" + +import ( + "testing" + + "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake" +) + +func TestEnsureNamespace(t *testing.T) { + client := fake.NewSimpleClientset() + if err := ensureNamespace(client, "foo"); err != nil { + t.Fatalf("unexpected error: %s", err) + } + if err := ensureNamespace(client, "foo"); err != nil { + t.Fatalf("unexpected error: %s", err) + } + if _, err := client.Core().Namespaces().Get("foo"); err != nil { + t.Fatalf("unexpected error: %s", err) + } +}