Repository URL to install this package:
|
Version:
5.2.8 ▾
|
# Copyright (c) 2013 TrilioData, Inc.
"""
WorkloadPolicy Interface (1.1 extension).
"""
from workloadmgrclient import base
class WorkloadPolicy(base.Resource):
"""A workload_policy describes the policy of a workload"""
def __repr__(self):
return "<WorkloadPolicy: %s>" % self.id
class WorkloadPolicyManager(base.ManagerWithFind):
"""Manage :class:`WorkloadPolicy` resources."""
resource_class = WorkloadPolicy
def create(self, name=None, description=None, field_values=None, metadata=None):
"""Create a workload_policy."""
body = {
"workload_policy": {
"display_name": name,
"display_description": description,
"field_values": field_values,
"metadata": metadata,
}
}
return self._create("/workload_policy/", body, "policy")
def update(
self, policy_id, name=None, description=None, field_values=None, metadata=None
):
"""Update a workload_policy."""
policy = {}
if name:
policy["display_name"] = name
if description:
policy["display_description"] = description
if field_values and len(field_values) > 0:
policy["field_values"] = field_values
if metadata and len(metadata) > 0:
policy["metadata"] = metadata
body = {"policy": policy}
result = self._update("/workload_policy/%s" % base.getid(policy_id), body)
return self.resource_class(self, result["policy"])
def get(self, policy_id, query_string=None):
"""Show details of a workload_policy.
:param policy_id: The ID of the workload_policy to display.
:rtype: :class:`WorkloadPolicy`
"""
return self._get("/workload_policy/%s" % policy_id, "policy")
def list(self):
"""Get a list of all workload_policies.
:rtype: list of :class:`WorkloadPolicy`
"""
return self._list("/workload_policy/", "policy_list")
def delete(self, id):
"""Delete a workload_policy.
:param id: id of :class:`WorkloadPolicy` to delete.
"""
self._delete("/workload_policy/%s" % base.getid(id))
def assign(self, id, add_projects=[], remove_projects=[]):
"""Assign/Remove a workload_policy on given project.
:param id: id of :class:`WorkloadPolicy` to apply.
:param add_projects: id's of project to apply policy.
:param remove_projects: id's of project to remove policy.
"""
body = {
"policy": {"add_projects": add_projects, "remove_projects": remove_projects}
}
result = self._post("/workload_policy/%s/assign" % (base.getid(id)), body)
return {
"policy": self.resource_class(self, result["policy"]),
"failed_ids": result["failed_ids"],
}
def get_assigned_policies(self, project_id):
"""List assigned policies on given project.
:param project_id: id of project to get assigned policies.
"""
result = self._list_assigned_policies(
"/workload_policy/assigned/%s" % (base.getid(project_id))
)
return result["policies"]
def policy_field_create(self, name=None, type=None):
"""Create new policy field.
:param name: name of the policy field.
:param type: type of policy field.
"""
body = {"policy_field": {"name": name, "type": type}}
return self._create("/policy_field/", body, "policy_field")
def policy_field_list(self):
"""List policy field."""
return self._list("/policy_field/", "policy_field_list")