summaryrefslogtreecommitdiffstats
path: root/lcm/lcm/pub/vimapi
diff options
context:
space:
mode:
authorShobana Jothi <shobana.jothi@verizon.com>2018-08-28 17:40:10 +0530
committerShobana Jothi <shobana.jothi@verizon.com>2018-09-04 16:07:38 +0530
commit0b8b410f563039cfc8879631bcb2587974de7875 (patch)
tree99ad2d6689a3b9de457e4d147085ec157412f5ac /lcm/lcm/pub/vimapi
parent8f75d6276d4f1a8c5e9da1c77f2def362db11596 (diff)
Add operate api to GVNFM
Change-Id: I35e3b52b76beff7f014759cec7217e5e5315c985 Signed-off-by: Shobana Jothi<shobana.jothi@verizon.com> Issue-ID: VFC-996
Diffstat (limited to 'lcm/lcm/pub/vimapi')
-rw-r--r--lcm/lcm/pub/vimapi/adaptor.py45
-rw-r--r--lcm/lcm/pub/vimapi/api.py5
2 files changed, 50 insertions, 0 deletions
diff --git a/lcm/lcm/pub/vimapi/adaptor.py b/lcm/lcm/pub/vimapi/adaptor.py
index 9ca3e8de..8ebddab0 100644
--- a/lcm/lcm/pub/vimapi/adaptor.py
+++ b/lcm/lcm/pub/vimapi/adaptor.py
@@ -20,6 +20,7 @@ from lcm.pub.utils.values import ignore_case_get, set_opt_val
from lcm.pub.msapi.aai import get_flavor_info
from . import api
from .exceptions import VimException
+from lcm.nf.const import ACTION_TYPE
logger = logging.getLogger(__name__)
@@ -65,6 +66,50 @@ def get_res_id(res_cache, res_type, key):
return res_cache[res_type][key]
+def action_vm(action_type, server, vimId, tenantId):
+ param = {}
+ if action_type == ACTION_TYPE.START:
+ param = {
+ "os-start": None,
+ }
+ elif action_type == ACTION_TYPE.STOP:
+ param = {
+ "os-stop": None,
+ }
+ elif action_type == ACTION_TYPE.REBOOT:
+ param = {
+ "reboot": {}
+ }
+ if server["status"] == "ACTIVE":
+ param["reboot"]["type"] = "SOFT"
+ else:
+ param["reboot"]["type"] = "HARD"
+ res_id = server["id"]
+ api.action_vm(vimId, tenantId, res_id, param)
+
+
+# TODO Have to check if the resources should be started and stopped in some order.
+def operate_vim_res(data, changeStateTo, stopType, gracefulStopTimeout, do_notify_op):
+ for res in ignore_case_get(data, "vm"):
+ try:
+ if changeStateTo == "STARTED":
+ action_vm(ACTION_TYPE.START, res, res["vim_id"], res["tenant_id"])
+ do_notify_op("ACTIVE", res["id"])
+ elif changeStateTo == "STOPPED":
+ if stopType == "GRACEFUL":
+ if gracefulStopTimeout > 60:
+ gracefulStopTimeout = 60
+ time.sleep(gracefulStopTimeout)
+ action_vm(ACTION_TYPE.STOP, res, res["vim_id"], res["tenant_id"])
+ # TODO check if the we should poll getvm to get the status or the action_vm api
+ # successful return should suffice to mark vm as Active/Inactive
+ do_notify_op("INACTIVE", res["id"])
+ except VimException as e:
+ # TODO Have to update database appropriately on failure
+ logger.error("Failed to Heal %s(%s)", RES_VM, res["res_id"])
+ logger.error("%s:%s", e.http_code, e.message)
+
+
def create_vim_res(data, do_notify):
vim_cache, res_cache = {}, {}
for vol in ignore_case_get(data, "volume_storages"):
diff --git a/lcm/lcm/pub/vimapi/api.py b/lcm/lcm/pub/vimapi/api.py
index 0090d66f..2ceb82d0 100644
--- a/lcm/lcm/pub/vimapi/api.py
+++ b/lcm/lcm/pub/vimapi/api.py
@@ -145,6 +145,11 @@ def get_vm(vim_id, tenant_id, vm_id):
def list_vm(vim_id, tenant_id):
return call(vim_id, tenant_id, "servers", "GET")
+
+# Used to start/stop/restart a vm
+def action_vm(vim_id, tenant_id, vm_id, data):
+ return call(vim_id, tenant_id, "servers/%s/action" % vm_id, "POST", data)
+
######################################################################