feature: add sync state for devops
Signed-off-by: shaowenchen <mail@chenshaowen.com>
This commit is contained in:
@@ -37,6 +37,7 @@ import (
|
||||
tenantv1alpha1informers "kubesphere.io/kubesphere/pkg/client/informers/externalversions/tenant/v1alpha1"
|
||||
tenantv1alpha1listers "kubesphere.io/kubesphere/pkg/client/listers/tenant/v1alpha1"
|
||||
"kubesphere.io/kubesphere/pkg/constants"
|
||||
modelsdevops "kubesphere.io/kubesphere/pkg/models/devops"
|
||||
devopsClient "kubesphere.io/kubesphere/pkg/simple/client/devops"
|
||||
"kubesphere.io/kubesphere/pkg/utils/k8sutil"
|
||||
"kubesphere.io/kubesphere/pkg/utils/sliceutil"
|
||||
@@ -212,6 +213,10 @@ func (c *Controller) syncHandler(key string) error {
|
||||
klog.V(8).Info(err, fmt.Sprintf("could not get devopsproject %s ", key))
|
||||
return err
|
||||
}
|
||||
//If the sync is successful, return handle
|
||||
if state, ok := project.Annotations[devopsv1alpha3.DevOpeProjectSyncStatusAnnoKey]; ok && state == modelsdevops.StatusSuccessful {
|
||||
return nil
|
||||
}
|
||||
copyProject := project.DeepCopy()
|
||||
// DeletionTimestamp.IsZero() means DevOps project has not been deleted.
|
||||
if project.ObjectMeta.DeletionTimestamp.IsZero() {
|
||||
@@ -302,14 +307,6 @@ func (c *Controller) syncHandler(key string) error {
|
||||
}
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(copyProject, project) {
|
||||
copyProject, err = c.kubesphereClient.DevopsV1alpha3().DevOpsProjects().Update(copyProject)
|
||||
if err != nil {
|
||||
klog.V(8).Info(err, fmt.Sprintf("failed to update ns %s ", key))
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if copyProject, err = c.bindWorkspace(copyProject); err != nil {
|
||||
klog.Error(err)
|
||||
return err
|
||||
@@ -326,6 +323,19 @@ func (c *Controller) syncHandler(key string) error {
|
||||
}
|
||||
}
|
||||
|
||||
//If there is no early return, then the sync is successful.
|
||||
if copyProject.Annotations == nil {
|
||||
copyProject.Annotations = map[string]string{}
|
||||
}
|
||||
copyProject.Annotations[devopsv1alpha3.DevOpeProjectSyncStatusAnnoKey] = modelsdevops.StatusSuccessful
|
||||
if !reflect.DeepEqual(copyProject, project) {
|
||||
copyProject, err = c.kubesphereClient.DevopsV1alpha3().DevOpsProjects().Update(copyProject)
|
||||
if err != nil {
|
||||
klog.V(8).Info(err, fmt.Sprintf("failed to update ns %s ", key))
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
// Finalizers processing logic
|
||||
if sliceutil.HasString(project.ObjectMeta.Finalizers, devopsv1alpha3.DevOpsProjectFinalizerName) {
|
||||
|
||||
@@ -180,26 +180,7 @@ func (f *fixture) runController(projectName string, startInformers bool, expectE
|
||||
}
|
||||
|
||||
actions := filterInformerActions(f.client.Actions())
|
||||
for i, action := range actions {
|
||||
if len(f.actions) < i+1 {
|
||||
f.t.Errorf("%d unexpected actions: %+v", len(actions)-len(f.actions), actions[i:])
|
||||
break
|
||||
}
|
||||
|
||||
expectedAction := f.actions[i]
|
||||
checkAction(expectedAction, action, f.t)
|
||||
}
|
||||
k8sActions := filterInformerActions(f.kubeclient.Actions())
|
||||
for i, action := range k8sActions {
|
||||
if len(f.kubeactions) < i+1 {
|
||||
f.t.Errorf("%d unexpected actions: %+v", len(k8sActions)-len(f.kubeactions), k8sActions[i:])
|
||||
break
|
||||
}
|
||||
|
||||
expectedAction := f.kubeactions[i]
|
||||
checkAction(expectedAction, action, f.t)
|
||||
}
|
||||
|
||||
if len(f.kubeactions) > len(k8sActions) {
|
||||
f.t.Errorf("%d additional expected actions:%+v", len(f.kubeactions)-len(k8sActions), f.kubeactions[len(k8sActions):])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user