diff options
author | Igor D.C <igor.duarte.cardoso@intel.com> | 2020-10-01 17:50:20 +0000 |
---|---|---|
committer | Igor D.C <igor.duarte.cardoso@intel.com> | 2020-10-02 22:56:05 +0000 |
commit | a1df0c268ffe34884b115fb3873c2d4ba6ad27b8 (patch) | |
tree | 384413abb6346dcbc4d63a67c60c578fb3823434 /src/dcm/api | |
parent | 44c33f538cf03455c3fd32f837f56f31957bb4a0 (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.go | 15 |
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 } |