diff options
author | Bin Yang <bin.yang@windriver.com> | 2018-05-15 04:56:04 +0000 |
---|---|---|
committer | Bin Yang <bin.yang@windriver.com> | 2018-05-15 04:56:04 +0000 |
commit | 1651f1627110c5ad87371c3646fcaf4a1b0a058a (patch) | |
tree | d04ab67aae4ef80e105aedd7f510c7ea0cfbe325 | |
parent | 7455cd6f9704b6e9e57ce833e57ec34f2a2ac0f4 (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>
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 |