Repository URL to install this package:
Version:
5.2.8 ▾
|
python3-workloadmgrclient
/
usr
/
lib
/
python3
/
dist-packages
/
workloadmgrclient
/
v1
/
migration.py
|
---|
import six
import json
import os
from cliff import show, lister
from osc_lib import exceptions
from osc_lib import utils as osc_utils
from osc_lib.cli import format_columns
from workloadmgrclient import utils
from workloadmgrclient.v1 import WorkloadmgrCommand
migration_json_path = os.path.abspath(
(os.path.join(os.path.dirname(__file__), "../input-files/migrate.json"))
)
class MigrationCommand(WorkloadmgrCommand):
resource = "migrations"
class CreateMigration(MigrationCommand):
"""Execute a migration plan."""
@staticmethod
def _add_arguments(parser):
parser.add_argument(
"migration_plan_id",
metavar="<migration_plan_id>",
help="ID of the migration_plan to migrate.",
)
parser.add_argument(
"--filename",
metavar="<filename>",
type=open,
default=migration_json_path,
help="Provide file path(relative or absolute) including file name,"
"by default it will read file: %s."
"You can use this for reference or replace values into"
" this file." % migration_json_path,
)
def take_action(self, parsed_args):
migration_options = {}
#parsed_args.migration_type, parsed_args.displaname,
#parsed_args.display_description
file_data = utils.read_file(parsed_args.filename)
try:
migration_options = json.loads(file_data)
except Exception as ex:
raise exceptions.CommandError(
"JSON conversion failed with error: {}".format(
getattr(ex, "context", ex)
)
)
client = self.get_client()
migration_obj = client.create(
parsed_args.migration_plan_id, migration_options)
if migration_obj:
return (
["ID", "Name", "Status"],
(
osc_utils.get_item_properties(obj, ["id", "name", "status"])
for obj in [migration_obj]
),
)
return
class ListMigrations(MigrationCommand, lister.Lister):
"""List all the migrations for the migration plan."""
@staticmethod
def _add_arguments(parser):
parser.add_argument(
"--migration_plan_id",
metavar="<migration_plan_id>",
default=None,
help="Filter results by migration_plan_id",
)
def take_action(self, parsed_args):
client = self.get_client()
search_opts = {
"migration_plan_id": parsed_args.migration_plan_id,
}
migrations = client.list(search_opts=search_opts) or []
return (
["Created At", "Name", "ID", "Migration Plan ID", "Status"],
(
osc_utils.get_item_properties(
obj, ["created_at", "name", "id", "migration_plan_id", "status"]
)
for obj in migrations
),
)
class ShowMigration(MigrationCommand, show.ShowOne):
"""Show details about migration of the migration plan"""
@staticmethod
def _add_arguments(parser):
parser.add_argument(
"migration_id", metavar="<migration_id>", help="ID of the migration."
)
parser.add_argument(
"--output",
metavar="<output>",
help="Option to get additional migration details, "
"Specify --output metadata for migration metadata,"
"--output networks "
"--output subnets "
"--output routers "
"--output flavors ",
)
def take_action(self, parsed_args):
client = self.get_client()
migration_obj = utils.find_resource(client, parsed_args.migration_id)
info = {}
info.update(migration_obj._info)
info.pop("links", None)
metadata = info.pop("metadata", [])
networks = info.pop("networks", [])
subnets = info.pop("subnets", [])
routers = info.pop("routers", [])
flavors = info.pop("flavors", [])
meta = [{str(item["key"]): str(item["value"])} for item in metadata]
if parsed_args.output == "metadata":
utils.print_data_vertically(meta, ["Metadata", "Value"])
if parsed_args.output == "networks":
utils.print_data_vertically(networks, ["Networks", "Value"])
if parsed_args.output == "subnets":
utils.print_data_vertically(subnets, ["Subnets", "Value"])
if parsed_args.output == "routers":
utils.print_data_vertically(routers, ["Routers", "Value"])
if parsed_args.output == "flavors":
utils.print_data_vertically(flavors, ["Flavors", "Value"])
columns = list(info.keys())
data = osc_utils.get_dict_properties(info, columns)
return columns, data
class CancelMigration(MigrationCommand):
"""Cancel the migration."""
@staticmethod
def _add_arguments(parser):
parser.add_argument(
"migration_id", metavar="<migration_id>", help="ID of migration to cancel."
)
def take_action(self, parsed_args):
client = self.get_client()
migration_obj = utils.find_resource(client, parsed_args.migration_id)
migration_obj.cancel()
class DeleteMigration(MigrationCommand):
"""Delete the migration."""
@staticmethod
def _add_arguments(parser):
parser.add_argument(
"migration_id", metavar="<migrations_id>", help="ID of the migration to delete."
)
def take_action(self, parsed_args):
client = self.get_client()
migration_obj = utils.find_resource(client, parsed_args.migration_id)
migration_obj.delete()