Repository URL to install this package:
|
Version:
5.2.8 ▾
|
# 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")