summaryrefslogtreecommitdiffstats
path: root/src/dcm/api
diff options
context:
space:
mode:
authorIgor D.C <igor.duarte.cardoso@intel.com>2020-10-01 17:50:20 +0000
committerIgor D.C <igor.duarte.cardoso@intel.com>2020-10-02 22:56:05 +0000
commita1df0c268ffe34884b115fb3873c2d4ba6ad27b8 (patch)
tree384413abb6346dcbc4d63a67c60c578fb3823434 /src/dcm/api
parent44c33f538cf03455c3fd32f837f56f31957bb4a0 (diff)
Reimplement Terminate to be compatible with Status
This also includes modifying Apply and Delete, since there are strict conditions that need to be met in each, to prevent Logical Clouds (LCs) from entering a bad state. Summary of what's being done here: - When applying: - set tag 'lccontext' in the LC to the context ID (was already done) - and let rsync know about the appcontext (grpc) (was already done) - if tag was already set, check current context /status - if context /status is actually Terminated, 'lccontext' is set to new context ID and previous AppContext deleted - When terminating: - lets rsync know about the termination request (grpc) - When deleting: - checks whether the current context /status is Terminated - if it is, then it will remove the latest LC context This particular commit disables the TestDeleteLogicalCloud test until a known issue behind the test is resolved. This commit does not leverage the full capacity of the Status framework, but is sufficient to support all operations. A future patch will entirely migrate DCM to the Status framework. Until then, a known issue exists where DCM will forget about context IDs previously associated to a particular Logical Cloud (only keeps last). Issue-ID: MULTICLOUD-1143 Change-Id: I7a6034eba543c2a27daa41b7fe6298cb2a85f9ce Signed-off-by: Igor D.C <igor.duarte.cardoso@intel.com>
Diffstat (limited to 'src/dcm/api')
-rw-r--r--src/dcm/api/logicalCloudHandler.go15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/dcm/api/logicalCloudHandler.go b/src/dcm/api/logicalCloudHandler.go
index 5bc2cd27..b305b202 100644
--- a/src/dcm/api/logicalCloudHandler.go
+++ b/src/dcm/api/logicalCloudHandler.go
@@ -188,6 +188,10 @@ func (h logicalCloudHandler) deleteHandler(w http.ResponseWriter, r *http.Reques
http.Error(w, err.Error(), http.StatusNotFound)
return
}
+ if err.Error() == "The Logical Cloud can't be deleted yet, it is being terminated." {
+ http.Error(w, err.Error(), http.StatusConflict)
+ return
+ }
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
@@ -212,13 +216,6 @@ func (h logicalCloudHandler) applyHandler(w http.ResponseWriter, r *http.Request
return
}
- _, ctxVal, err := h.client.GetLogicalCloudContext(project, name)
- if ctxVal != "" {
- err = pkgerrors.New("Logical Cloud already applied")
- http.Error(w, err.Error(), http.StatusConflict)
- return
- }
-
// Get Clusters
clusters, err := h.clusterClient.GetAllClusters(project, name)
@@ -241,6 +238,10 @@ func (h logicalCloudHandler) applyHandler(w http.ResponseWriter, r *http.Request
// Apply the Logical Cloud
err = module.Apply(project, lc, clusters, quotas)
if err != nil {
+ if err.Error() == "The Logical Cloud can't be re-applied yet, it is being terminated." {
+ http.Error(w, err.Error(), http.StatusConflict)
+ return
+ }
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}