summaryrefslogtreecommitdiffstats
path: root/windriver
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 /windriver
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>
Diffstat (limited to 'windriver')
-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