summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBin Yang <bin.yang@windriver.com>2018-05-15 04:56:04 +0000
committerBin Yang <bin.yang@windriver.com>2018-05-15 04:56:04 +0000
commit1651f1627110c5ad87371c3646fcaf4a1b0a058a (patch)
treed04ab67aae4ef80e105aedd7f510c7ea0cfbe325
parent7455cd6f9704b6e9e57ce833e57ec34f2a2ac0f4 (diff)
Add logic to build backlog for VM fault event
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>
-rw-r--r--windriver/titanium_cloud/vesagent/event_domain/__init__.py16
-rw-r--r--windriver/titanium_cloud/vesagent/event_domain/fault_vm.py74
-rw-r--r--windriver/titanium_cloud/vesagent/vesagent_ctrl.py13
3 files changed, 103 insertions, 0 deletions
diff --git a/windriver/titanium_cloud/vesagent/event_domain/__init__.py b/windriver/titanium_cloud/vesagent/event_domain/__init__.py
new file mode 100644
index 00000000..e4fe7a00
--- /dev/null
+++ b/windriver/titanium_cloud/vesagent/event_domain/__init__.py
@@ -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
index 00000000..b0baac55
--- /dev/null
+++ b/windriver/titanium_cloud/vesagent/event_domain/fault_vm.py
@@ -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
+
diff --git a/windriver/titanium_cloud/vesagent/vesagent_ctrl.py b/windriver/titanium_cloud/vesagent/vesagent_ctrl.py
index 0a915b2d..987a0966 100644
--- a/windriver/titanium_cloud/vesagent/vesagent_ctrl.py
+++ b/windriver/titanium_cloud/vesagent/vesagent_ctrl.py
@@ -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