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 / migration_plan.py
Size: Mime:
# Copyright (c) 2014 TrilioData, Inc.
# All Rights Reserved.

"""
Migration Plan Interface (1.1 extension).
"""
import json
from datetime import datetime
from workloadmgrclient import base
import six

try:
    from urllib import urlencode
except ImportError:
    from urllib.parse import urlencode


class MigrationPlan(base.Resource):
    """A migration plan describes a grouping of one or more VMs"""

    def __repr__(self):
        return "<Migration Plan: %s>" % self.id

    def delete(self):
        """Delete this migration plan."""
        return self.manager.delete(self)

    def unlock(self):
        """Unlock the migration plan"""
        return self.manager.unlock(self)

    def update(self, migration_plan_id, name, description, vms, metadata):
        """Update the migration plan"""
        return self.manager.update(
            migration_plan_id, name, description, vms, metadata
        )

    def discover_vms(self, migration_plan_id):
        """Discover VMs in a migration plan"""
        return self.manager.discovervms(self, migration_plan_id)


class MigrationPlanManager(base.ManagerWithFind):
    """Manage :class:`Migration Plan` resources."""

    resource_class = MigrationPlan

    def create(self, name, description, vms, metadata, source_platform):
        """Create a migration plan.

        :param name: The name of the migration plan.
        :param description: The description of the migration plan.
        :param vms: List of vms to be included in the migration plan.
        :param metadata: Metadata of the migration plan
        :param source_platform: Source platform such as vmware.
        :rtype: :class:`MigrationPlan`
        """

        body = {
            "migration_plan": {
                "name": name,
                "description": description,
                "vms": vms,
                "metadata": metadata,
                "source_platform": source_platform,
            }
        }
        return self._create("/migration_plans", body, "migration_plan")

    def get(self, migration_plan_id, search_opts=None):
        """Show details of a migration_plan.

        :param migration_plan_id: The ID of the migration_plan to display.
        :rtype: :class:`MigrationPlan`
        """
        if search_opts is None:
            search_opts = {}

        qparams = {}

        for opt, val in six.iteritems(search_opts):
            if val:
                qparams[opt] = val

        query_string = "?%s" % urlencode(qparams) if qparams else ""
        return self._get("/migration_plans/%s%s" % (migration_plan_id, query_string), "migration_plan")

    def list(self, detailed=False, search_opts=None):
        """Get a list of all migration_plans.

        :rtype: list of :class:`MigrationPlan`
        """
        if search_opts is None:
            search_opts = {}

        qparams = {}

        for opt, val in six.iteritems(search_opts):
            if val:
                qparams[opt] = val

        query_string = "?%s" % urlencode(qparams) if qparams else ""

        detail = ""
        if detailed:
            detail = "/detail"
        return self._list("/migration_plans%s%s" % (detail, query_string), "migration_plans")

    def list_by_page(self, page):
        """Get a list of all migration_plans by page.

        :rtype: list of :class:`MigrationPlan`

        """
        return self._list("/migration_plans?page_number=%s" % page, "migration_plans")

    def delete(self, migration_plan_id):
        """Delete a migration_plan.

        :param migration_plan_id: The :class:`MigrationPlan` to delete.
        """
        self._delete(
            "/migration_plans/%s?" % (base.getid(migration_plan_id))
        )

    def unlock(self, migration_plan_id):
        """
        unlock a migration plan.
        """
        return self._unlock("/migration_plans/%s/unlock" % base.getid(migration_plan_id))

    def update(self, migration_plan_id, name, description, vms, metadata):
        migration_plan = {}
        if name:
            migration_plan["name"] = name
        if description:
            migration_plan["description"] = description
        if vms and len(vms) > 0:
            migration_plan["vms"] = vms
        if metadata and len(metadata) > 0:
            migration_plan["metadata"] = metadata

        body = {"migration_plan": migration_plan}
        self._update("/migration_plans/%s" %
              (base.getid(migration_plan_id)), body)

    def get_vms(self):
        """
        Get VMs used in all migration plans
        """
        return self._get_vms("/migration_plans/metrics/migration_plan_get_vms")

    def get_vcenter_vms(self):
        """
        Get all the VMs from vCenter
        """
        return self._get_vcenter_vms("/migration_plans/metrics/get_vcenter_vms")

    def discover_vms(self, migration_plan_id):
        """
        reset a workload.
        """
        return self._discovervms("/migration_plans/%s/discovervms" % base.getid(migration_plan_id))

    def get_import_migration_plans_list(self, project_id=None):
        """
        Get import migration plans list from backup media
        """
        if project_id is not None:
            query_string = "?project_id=%s" % (project_id)
            url = "/migration_plans/get_list/import_migration_plans%s" % (query_string)
        else:
            url = "/migration_plans/get_list/import_migration_plans"

        return self._import_migration_plans(url, "migration_plans", method="list")

    def import_migration_plans(self, migration_plan_ids=[], upgrade=True):
        """
        import migration_plan records from backup media
        """
        return self._import_migration_plans(
            "/migration_plans/import_migration_plans",
            "migration_plans",
            migration_plan_ids=migration_plan_ids,
            upgrade=upgrade,
        )

    def migration_plan_get_by_vmid(self, vm_id):
        """Get a migration plan by given vm_id.

        :rtype: list of :class:`MigrationPlan`
        """
        qparams = {'vm_id': vm_id}

        query_string = "?%s" % urlencode(qparams)

        return self._list("/migration_plan_get_by_vmid%s" % (query_string), "migration_plans")