From a48d7f54788b17e8c4204191a3ce4cdb14b7f98b Mon Sep 17 00:00:00 2001 From: runzexia Date: Mon, 23 Mar 2020 16:13:49 +0800 Subject: [PATCH] create devops job with admin ns name Signed-off-by: runzexia --- .../devopsproject/devopsproject_controller.go | 27 ++++++++++--------- .../devopsproject_controller_test.go | 18 ++++++------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/pkg/controller/devopsproject/devopsproject_controller.go b/pkg/controller/devopsproject/devopsproject_controller.go index 12bf5bd8b..9191d510f 100644 --- a/pkg/controller/devopsproject/devopsproject_controller.go +++ b/pkg/controller/devopsproject/devopsproject_controller.go @@ -197,18 +197,7 @@ func (c *Controller) syncHandler(key string) error { if !sliceutil.HasString(project.ObjectMeta.Finalizers, devopsv1alpha3.DevOpsProjectFinalizerName) { copyProject.ObjectMeta.Finalizers = append(copyProject.ObjectMeta.Finalizers, devopsv1alpha3.DevOpsProjectFinalizerName) } - // Check project exists, otherwise we will create it. - _, err := c.devopsClient.GetDevOpsProject(key) - if err != nil && devopsClient.GetDevOpsStatusCode(err) != http.StatusNotFound { - klog.Error(err, fmt.Sprintf("failed to get project %s ", key)) - return err - } else { - _, err := c.devopsClient.CreateDevOpsProject(key) - if err != nil { - klog.Error(err, fmt.Sprintf("failed to get project %s ", key)) - return err - } - } + if project.Status.AdminNamespace != "" { ns, err := c.namespaceLister.Get(project.Status.AdminNamespace) if err != nil && !errors.IsNotFound(err) { @@ -244,6 +233,7 @@ func (c *Controller) syncHandler(key string) error { return err } } + } else { // list ns by devops project namespaces, err := c.namespaceLister.List( @@ -283,6 +273,7 @@ func (c *Controller) syncHandler(key string) error { } } + if !reflect.DeepEqual(copyProject, project) { _, err := c.kubesphereClient.DevopsV1alpha3().DevOpsProjects().Update(copyProject) if err != nil { @@ -290,6 +281,18 @@ func (c *Controller) syncHandler(key string) error { return err } } + // Check project exists, otherwise we will create it. + _, err := c.devopsClient.GetDevOpsProject(copyProject.Status.AdminNamespace) + if err != nil && devopsClient.GetDevOpsStatusCode(err) != http.StatusNotFound { + klog.Error(err, fmt.Sprintf("failed to get project %s ", key)) + return err + } else { + _, err := c.devopsClient.CreateDevOpsProject(copyProject.Status.AdminNamespace) + if err != nil { + klog.Error(err, fmt.Sprintf("failed to get project %s ", key)) + return err + } + } } else { // Finalizers processing logic diff --git a/pkg/controller/devopsproject/devopsproject_controller_test.go b/pkg/controller/devopsproject/devopsproject_controller_test.go index fd933e987..c5c9f259a 100644 --- a/pkg/controller/devopsproject/devopsproject_controller_test.go +++ b/pkg/controller/devopsproject/devopsproject_controller_test.go @@ -301,8 +301,8 @@ func TestDoNothing(t *testing.T) { f.devopsProjectLister = append(f.devopsProjectLister, project) f.namespaceLister = append(f.namespaceLister, ns) f.objects = append(f.objects, project) - f.initDevOpsProject = []string{project.Name} - f.expectDevOpsProject = []string{project.Name} + f.initDevOpsProject = []string{ns.Name} + f.expectDevOpsProject = []string{ns.Name} f.run(getKey(project, t)) } @@ -318,8 +318,8 @@ func TestUpdateProjectFinalizers(t *testing.T) { f.namespaceLister = append(f.namespaceLister, ns) f.objects = append(f.objects, project) f.kubeobjects = append(f.kubeobjects, ns) - f.initDevOpsProject = []string{project.Name} - f.expectDevOpsProject = []string{project.Name} + f.initDevOpsProject = []string{ns.Name} + f.expectDevOpsProject = []string{ns.Name} expectUpdateProject := project.DeepCopy() expectUpdateProject.Finalizers = []string{devops.DevOpsProjectFinalizerName} f.expectUpdateDevOpsProjectAction(expectUpdateProject) @@ -337,8 +337,8 @@ func TestUpdateProjectStatus(t *testing.T) { f.namespaceLister = append(f.namespaceLister, ns) f.objects = append(f.objects, project) f.kubeobjects = append(f.kubeobjects, ns) - f.initDevOpsProject = []string{project.Name} - f.expectDevOpsProject = []string{project.Name} + f.initDevOpsProject = []string{ns.Name} + f.expectDevOpsProject = []string{ns.Name} expectUpdateProject := project.DeepCopy() expectUpdateProject.Status.AdminNamespace = nsName f.expectUpdateDevOpsProjectAction(expectUpdateProject) @@ -356,8 +356,8 @@ func TestUpdateNsOwnerReference(t *testing.T) { f.namespaceLister = append(f.namespaceLister, ns) f.objects = append(f.objects, project) f.kubeobjects = append(f.kubeobjects, ns) - f.initDevOpsProject = []string{project.Name} - f.expectDevOpsProject = []string{project.Name} + f.initDevOpsProject = []string{ns.Name} + f.expectDevOpsProject = []string{ns.Name} expectUpdateNs := newNamespace(nsName, projectName, false, true) f.expectUpdateNamespaceAction(expectUpdateNs) @@ -370,7 +370,7 @@ func TestCreateDevOpsProjects(t *testing.T) { ns := newNamespace("test-123", "test", true, true) f.devopsProjectLister = append(f.devopsProjectLister, project) f.objects = append(f.objects, project) - f.expectDevOpsProject = []string{project.Name} + f.expectDevOpsProject = []string{""} // because generateName not work in fakeClient, so DevOpsProject would not be update // f.expectUpdateDevOpsProjectAction(project)