Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
workloadmgrclient / workloadmgrclient / v1 / managers / workload_policy.py
Size: Mime:
# 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")