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    
Size: Mime:
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()