Repository URL to install this package:
|
Version:
4.1.142 ▾
|
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright (c) 2013 TrilioData, Inc.
# All Rights Reserved.
from workloadmgr.openstack.common import log as logging
from workloadmgr.api import common
LOG = logging.getLogger(__name__)
class ViewBuilder(common.ViewBuilder):
"""Model workload API responses as a python dictionary."""
_collection_name = "workloads"
def __init__(self):
"""Initialize view builder."""
super(ViewBuilder, self).__init__()
def summary_list(self, request, workloads, api=None, *args, **kwargs):
"""Show a list of workloads without many details."""
return self._list_view(self.summary, request, workloads, api, *args, **kwargs)
def detail_list(self, request, workloads, api=None, *args, **kwargs):
"""Detailed view of a list of workloads ."""
return self._list_view(self.detail, request, workloads, api, *args, **kwargs)
def summary(self, request, workload, api=None, *args, **kwargs):
"""Generic, non-detailed view of a workload."""
context = request.environ["workloadmgr.context"]
res = None
fetch_scheduler_trust = kwargs.get("scheduler_trust", False)
if fetch_scheduler_trust:
if not api:
LOG.exception(
"'scheduler_trust' and 'api' both should be provided to ViewBuilder"
)
else:
res = api.validate_scheduler_trust(context, workload.id)
return {
"workload": {
"project_id": workload.get("project_id"),
"user_id": workload.get("user_id"),
"id": workload["id"],
"name": workload["display_name"],
"snapshots_info": "",
"description": workload["display_description"],
"workload_type_id": workload["workload_type_id"],
"status": workload["status"],
"created_at": workload.get("created_at"),
"updated_at": workload.get("updated_at"),
"scheduler_trust": res,
#'storage_usage': workload['storage_usage'],
#'instances': workload['instances'],
"links": self._get_links(request, workload["id"]),
},
}
def restore_summary(self, request, restore, api=None):
"""Generic, non-detailed view of a restore."""
return {
"restore": {
"workload_id": restore["workload_id"],
"instance_id": restore["instance_id"],
},
}
def detail(self, request, workload, api=None, *args, **kwargs):
"""Detailed view of a single workload."""
context = request.environ["workloadmgr.context"]
if api is not None:
workload = api.workload_show(context, workload_id=workload['id'])
res = None
fetch_scheduler_trust = kwargs.get("scheduler_trust", False)
if fetch_scheduler_trust:
if not api:
LOG.exception(
"'scheduler_trust' and 'api' both should be provided to ViewBuilder"
)
else:
res = api.validate_scheduler_trust(context, workload['id'])
policy_id = None
meta_data = workload.get("metadata", {})
if meta_data:
if isinstance(meta_data, list):
for i in meta_data:
policy_id = i.get('value') if i.get('key') == 'policy_id' else None
if policy_id:
break
if isinstance(meta_data, dict):
policy_id = meta_data.get("policy_id", None)
return {
"workload": {
"created_at": workload.get("created_at"),
"updated_at": workload.get("updated_at"),
"id": workload.get("id"),
"user_id": workload.get("user_id"),
"project_id": workload.get("project_id"),
"availability_zone": workload.get("availability_zone"),
"workload_type_id": workload.get("workload_type_id"),
"name": workload.get("display_name"),
"description": workload.get("display_description"),
"interval": workload.get("hours"),
"storage_usage": workload.get("storage_usage"),
"instances": workload.get("instances"),
"metadata": workload.get("metadata"),
"jobschedule": workload.get("jobschedule"),
"status": workload.get("status"),
"error_msg": workload.get("error_msg"),
"links": self._get_links(request, workload["id"]),
"scheduler_trust": res,
"policy_id": policy_id,
}
}
def _list_view(self, func, request, workloads, api=None, *args, **kwargs):
"""Provide a view for a list of workloads."""
workloads_list = [
func(request, workload, api, *args, **kwargs)["workload"]
for workload in workloads
]
workloads_links = self._get_collection_links(
request, workloads, self._collection_name
)
workloads_dict = dict(workloads=workloads_list)
if workloads_links:
workloads_dict["workloads_links"] = workloads_links
return workloads_dict