Repository URL to install this package:
|
Version:
5.0.6.dev28 ▾
|
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright (c) 2013 TrilioData, Inc.
# All Rights Reserved.
import pickle as pickle
from workloadmgr.openstack.common import log as logging
from workloadmgr.api import common
LOG = logging.getLogger(__name__)
class ViewBuilder(common.ViewBuilder):
"""Model migrations API responses as a python dictionary."""
_collection_name = "migrations"
def __init__(self):
"""Initialize view builder."""
super(ViewBuilder, self).__init__()
def summary_list(self, request, migrations):
"""Show a list of migrations without many details."""
return self._list_view(self.summary, request, migrations)
def detail_list(self, request, migrations):
"""Detailed view of a list of migrations ."""
return self._list_view(self.detail, request, migrations)
def summary(self, request, migration):
"""Generic, non-detailed view of a migration."""
d = {}
d["id"] = migration["id"]
d["status"] = migration["status"]
d["migration_type"] = migration["migration_type"]
if migration.get("migration_plan_id"):
d["migration_plan_id"] = migration["migration_plan_id"]
if "vms" in migration:
vms = []
for vm in migration["vms"]:
vm_inst = {
"id": vm["id"],
"name": vm["name"],
"status": vm["status"],
"metadata": vm["metadata"],
}
if "flavor" in vm:
vm_inst["flavor"] = vm["flavor"]
if "nics" in vm:
vm_inst["nics"] = vm["nics"]
vms.append(vm_inst)
d["vms"] = vms
if "networks" in migration:
d["networks"] = migration["networks"]
if "subnets" in migration:
d["subnets"] = migration["subnets"]
if "routers" in migration:
d["routers"] = migration["routers"]
if "flavors" in migration:
d["flavors"] = migration["flavors"]
if "flavors" in migration:
d["flavors"] = migration["flavors"]
d["links"] = self._get_links(request, migration["id"])
d["name"] = migration["display_name"]
d["description"] = migration["display_description"]
d["host"] = migration["host"]
return {"migration": d}
def detail(self, request, migration):
"""Detailed view of a single migration."""
d = {}
d["id"] = migration["id"]
d["created_at"] = migration["created_at"]
d["updated_at"] = migration["created_at"]
d["finished_at"] = migration["finished_at"]
d["user_id"] = migration["user_id"]
d["project_id"] = migration["project_id"]
d["status"] = migration["status"]
d["migration_type"] = migration["migration_type"]
d["migration_plan_id"] = migration["migration_plan_id"]
if "instances" in migration:
instances = []
for vm in migration["instances"]:
instance = {
"id": vm["id"],
"name": vm["name"],
"status": vm["status"],
"metadata": vm["metadata"],
}
if "flavor" in vm:
instance["flavor"] = vm["flavor"]
if "nics" in vm:
instance["nics"] = vm["nics"]
instances.append(instance)
d["instances"] = instances
if "networks" in migration:
d["networks"] = migration["networks"]
if "subnets" in migration:
d["subnets"] = migration["subnets"]
if "routers" in migration:
d["routers"] = migration["routers"]
d["links"] = self._get_links(request, migration["id"])
d["name"] = migration["display_name"]
d["description"] = migration["display_description"]
d["host"] = migration["host"]
d["progress_percent"] = migration["progress_percent"]
d["progress_msg"] = migration["progress_msg"]
d["warning_msg"] = migration["warning_msg"]
d["error_msg"] = migration["error_msg"]
d["time_taken"] = migration["time_taken"]
d["migration_options"] = {}
if hasattr(migration, "pickle") and migration.pickle:
d["migration_options"] = pickle.loads(
bytes(migration.pickle, "utf-8")
)
# For backword compatibilty decoding only when name or desc is encoded.
if d["migration_options"].get("name") and isinstance(d["migration_options"]["name"], bytes):
d["migration_options"]["name"] = d["migration_options"]["name"].decode(encoding='UTF-8')
if d["migration_options"].get("description") and isinstance(d["migration_options"]["description"], bytes):
d["migration_options"]["description"] = d["migration_options"]["description"].decode(encoding='UTF-8')
if hasattr(migration, "metadata") or "metadata" in migration:
d["metadata"] = migration["metadata"]
else:
d["metadata"] = []
return {"migration": d}
def _list_view(self, func, request, migrations):
"""Provide a view for a list of restores."""
migrations_list = [func(request, migration)["migration"] for migration in migrations]
migrations_links = self._get_collection_links(
request, migrations, self._collection_name
)
migrations_dict = dict(migrations=migrations_list)
if migrations_links:
migrations_dict["migrations_links"] = migrations_links
return migrations_dict