Add logic to build backlog for VM fault event 19/47519/1
authorBin Yang <bin.yang@windriver.com>
Tue, 15 May 2018 04:56:04 +0000 (04:56 +0000)
committerBin Yang <bin.yang@windriver.com>
Tue, 15 May 2018 04:56:04 +0000 (04:56 +0000)
place the MultiCloud proxy endpoint into backlog
so later the worker will query VM status via MultiCloud

Change-Id: I9cdfe194698dc362c8936c39ca16b3835af9f5f4
Issue-ID: MULTICLOUD-230
Signed-off-by: Bin Yang <bin.yang@windriver.com>
windriver/titanium_cloud/vesagent/event_domain/__init__.py [new file with mode: 0644]
windriver/titanium_cloud/vesagent/event_domain/fault_vm.py [new file with mode: 0644]
windriver/titanium_cloud/vesagent/vesagent_ctrl.py

diff --git a/windriver/titanium_cloud/vesagent/event_domain/__init__.py b/windriver/titanium_cloud/vesagent/event_domain/__init__.py
new file mode 100644 (file)
index 0000000..e4fe7a0
--- /dev/null
@@ -0,0 +1,16 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (c) 2017-2018 Wind River Systems, Inc.
+#
+# 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.
+
diff --git a/windriver/titanium_cloud/vesagent/event_domain/fault_vm.py b/windriver/titanium_cloud/vesagent/event_domain/fault_vm.py
new file mode 100644 (file)
index 0000000..b0baac5
--- /dev/null
@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (c) 2017-2018 Wind River Systems, Inc.
+#
+# 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.
+
+import logging
+import json
+import uuid
+
+
+logger = logging.getLogger(__name__)
+
+### build backlog with domain:"fault", type:"vm"
+
+def buildBacklog_fault_vm(vimid, backlog_input):
+
+    logger.info("vimid: %s" % vimid)
+    logger.debug("with input: %s" % backlog_input)
+
+    try:
+
+        #must resolve the tenant id and server id while building the backlog
+        tenant_id = backlog_input.get("tenantid", None)
+        server_id = backlog_input.get("sourceid", None)
+
+        # should resolve the name to id later
+        if tenant_id is None:
+            tenant_name = backlog_input["tenant"]
+            server_name = backlog_input["source"]
+
+            if tenant_name is None or server_name is None:
+                logger.warn("tenant and source should be provided as backlog config")
+                return None
+
+            # get token
+            #TBD resolve tenant_name to tenant_id
+
+            if server_id is None:
+                #TBD resolve server_name to server_id
+                pass
+
+        #m.c. proxied OpenStack API
+        api_url_fmt = "/{f_vim_id}/compute/v2.1/{f_tenant_id}/servers/{f_server_id}"
+        api_url = api_url_fmt.format(
+                        f_vim_id=vimid, f_tenant_id=tenant_id, f_server_id=server_id)
+
+        backlog = {
+            "backlog_uuid":str(uuid.uuid3(uuid.NAMESPACE_URL,
+                                          str("%s-%s-%s"%(vimid, tenant_id,server_id)))),
+            "tenant_id": tenant_id,
+            "server_id": server_id,
+            "api_method": "GET",
+            "api_link": api_url,
+        }
+        backlog.update(backlog_input)
+    except Exception as e:
+        logger.error("exception:%s" % str(e))
+        return None
+
+    logger.info("return")
+    logger.debug("with backlog: %s" % backlog)
+    return backlog
+
index 0a915b2..987a096 100644 (file)
@@ -22,6 +22,7 @@ from rest_framework.views import APIView
 
 from django.conf import settings
 from common.msapi import extsys
+from titanium_cloud.vesagent.event_domain.fault_vm import buildBacklog_fault_vm
 
 from django.core.cache import cache
 
@@ -267,4 +268,16 @@ class VesAgentCtrl(APIView):
         self._logger.info("build backlog for: %s" % vimid)
         self._logger.debug("with input: %s" % backlog_input)
 
+        try:
+            if backlog_input["domain"] == "fault" and backlog_input["type"] == "vm":
+                return buildBacklog_fault_vm(vimid, backlog_input)
+            else:
+                self._logger.warn("return with failure: unsupported backlog domain:%s, type:%s"
+                                  % (backlog_input["domain"], backlog_input["type"] == "vm"))
+                return None
+        except Exception as e:
+            self._logger.error("exception:%s" % str(e))
+            return None
+
+        self._logger.info("return without backlog")
         return None