From 3684e9837fa79a989b06eb619e834d143c1a602d Mon Sep 17 00:00:00 2001 From: Zhenyu Zheng Date: Sat, 23 Dec 2023 23:56:24 +0800 Subject: [PATCH] Add cli part for Flavor Add cli part for Flavor Signed-off-by: Zhenyu Zheng --- eulerlauncher/cli.py | 66 +++++++++++++++++++ eulerlauncher/grpcs/client.py | 6 +- .../grpcs/eulerlauncher_grpc/flavors.proto | 6 ++ .../grpcs/eulerlauncher_grpc/flavors_pb2.py | 12 ++-- eulerlauncher/grpcs/flavors.py | 7 +- 5 files changed, 86 insertions(+), 11 deletions(-) diff --git a/eulerlauncher/cli.py b/eulerlauncher/cli.py index 630eaa9..d4795ff 100644 --- a/eulerlauncher/cli.py +++ b/eulerlauncher/cli.py @@ -89,6 +89,69 @@ def delete_image(name): print(ret['msg']) +# List all usable flavors +@click.command() +def flavors(): + + try: + ret = launcher_client.list_flavors() + except Exception: + print('Calling to EulerLauncherd daemon failed, please check EulerLauncherd daemon status ...') + else: + tb = pt.PrettyTable() + + tb.field_names = ["ID", "Name", "CPU", "RAM", "DISK"] + + for flavor in ret['flavors']: + tb.add_row( + [flavor['flavor_id'], flavor['flavor_name'], + flavor['cpucores_num'], flavor['ram_capacity'], flavor['disk_capacity']]) + + print(tb) + + +@click.command() +@click.argument('flavor_name') +@click.option('--cpu', help='Flavor CPU number') +@click.option('--ram', help='Flavor RAM size') +@click.option('--disk', help='Flavor Disk Size') +def create_flavor(name, cpu, ram, disk): + + try: + ret = launcher_client.create_flavor(name, cpu, ram, disk) + except Exception: + print('Calling to EulerLauncherd daemon failed, please check EulerLauncherd daemon status ...') + else: + if ret['ret'] == 1: + tb = pt.PrettyTable() + tb.field_names = ["ID", "Name", "CPU", "RAM", "DISK"] + + tb.add_row( + [ret['flavor']['flavor_id'], + ret['flavor']['flavor_name'], + ret['flavor']['cpucores_num'], + ret['flavor']['ram_capacity'], + ret['flavor']['disk_capacity'], + ] + ) + print(tb) + + else: + print(ret['msg']) + + +@click.command() +@click.argument('name') +def delete_flavor(name): + + try: + ret = launcher_client.delete_flavor(name) + except Exception: + print('Calling to EulerLauncherd daemon failed, please check EulerLauncherd daemon status ...') + else: + print(ret['msg']) + + @click.command() @click.argument('name') def delete_instance(name): @@ -174,6 +237,9 @@ if __name__ == '__main__': cli.add_command(load_image) cli.add_command(launch) cli.add_command(delete_image) + cli.add_command(flavors) + cli.add_command(create_flavor) + cli.add_command(delete_flavor) cli.add_command(delete_instance) cli.add_command(take_snapshot) cli.add_command(export_development_image) diff --git a/eulerlauncher/grpcs/client.py b/eulerlauncher/grpcs/client.py index da7f0f9..dd36e3b 100644 --- a/eulerlauncher/grpcs/client.py +++ b/eulerlauncher/grpcs/client.py @@ -76,7 +76,7 @@ class Client(object): @eulerlauncher_utils.response2dict def list_flavors(self, filters=None): - """ [IMAGE] List flavors + """ List flavors :param filters(list): None :return: dict -- list of flavors' info @@ -85,11 +85,11 @@ class Client(object): return self._flavors.list() @eulerlauncher_utils.response2dict - def create_flavor(self, name): + def create_flavor(self, name, cpu, ram, disk): """ Create a new flavor """ - return self._flavors.create(name) + return self._flavors.create(name, cpu, ram, disk) @eulerlauncher_utils.response2dict def delete_flavor(self, name): diff --git a/eulerlauncher/grpcs/eulerlauncher_grpc/flavors.proto b/eulerlauncher/grpcs/eulerlauncher_grpc/flavors.proto index 07105b8..b1554ab 100644 --- a/eulerlauncher/grpcs/eulerlauncher_grpc/flavors.proto +++ b/eulerlauncher/grpcs/eulerlauncher_grpc/flavors.proto @@ -37,6 +37,12 @@ message DeleteFlavorRequest { string flavor_id = 1; } +message CreateFlavorResponse { + uint32 ret = 1; + string msg = 2; + optional Flavor flavor = 3; +} + message FlavorResponse { string message = 1; } diff --git a/eulerlauncher/grpcs/eulerlauncher_grpc/flavors_pb2.py b/eulerlauncher/grpcs/eulerlauncher_grpc/flavors_pb2.py index 5c87975..182a842 100644 --- a/eulerlauncher/grpcs/eulerlauncher_grpc/flavors_pb2.py +++ b/eulerlauncher/grpcs/eulerlauncher_grpc/flavors_pb2.py @@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default() -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rflavors.proto\x12\x07\x66lavors\"s\n\x06\x46lavor\x12\x11\n\tflavor_id\x18\x01 \x01(\t\x12\x13\n\x0b\x66lavor_name\x18\x02 \x01(\t\x12\x14\n\x0c\x63pucores_num\x18\x03 \x01(\t\x12\x14\n\x0cram_capacity\x18\x04 \x01(\t\x12\x15\n\rdisk_capacity\x18\x05 \x01(\t\"\x14\n\x12ListFlavorsRequest\"7\n\x13ListFlavorsResponse\x12 \n\x07\x66lavors\x18\x01 \x03(\x0b\x32\x0f.flavors.Flavor\"m\n\x13\x43reateFlavorRequest\x12\x13\n\x0b\x66lavor_name\x18\x01 \x01(\t\x12\x14\n\x0c\x63pucores_num\x18\x02 \x01(\t\x12\x14\n\x0cram_capacity\x18\x03 \x01(\t\x12\x15\n\rdisk_capacity\x18\x04 \x01(\t\"(\n\x13\x44\x65leteFlavorRequest\x12\x11\n\tflavor_id\x18\x01 \x01(\t\"!\n\x0e\x46lavorResponse\x12\x0f\n\x07message\x18\x01 \x01(\t2\xf3\x01\n\x11\x46lavorGrpcService\x12J\n\x0blist_flavor\x12\x1b.flavors.ListFlavorsRequest\x1a\x1c.flavors.ListFlavorsResponse\"\x00\x12H\n\rcreate_flavor\x12\x1c.flavors.CreateFlavorRequest\x1a\x17.flavors.FlavorResponse\"\x00\x12H\n\rdelete_flavor\x12\x1c.flavors.DeleteFlavorRequest\x1a\x17.flavors.FlavorResponse\"\x00\x42\x03\x80\x01\x01\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rflavors.proto\x12\x07\x66lavors\"s\n\x06\x46lavor\x12\x11\n\tflavor_id\x18\x01 \x01(\t\x12\x13\n\x0b\x66lavor_name\x18\x02 \x01(\t\x12\x14\n\x0c\x63pucores_num\x18\x03 \x01(\t\x12\x14\n\x0cram_capacity\x18\x04 \x01(\t\x12\x15\n\rdisk_capacity\x18\x05 \x01(\t\"\x14\n\x12ListFlavorsRequest\"7\n\x13ListFlavorsResponse\x12 \n\x07\x66lavors\x18\x01 \x03(\x0b\x32\x0f.flavors.Flavor\"m\n\x13\x43reateFlavorRequest\x12\x13\n\x0b\x66lavor_name\x18\x01 \x01(\t\x12\x14\n\x0c\x63pucores_num\x18\x02 \x01(\t\x12\x14\n\x0cram_capacity\x18\x03 \x01(\t\x12\x15\n\rdisk_capacity\x18\x04 \x01(\t\"(\n\x13\x44\x65leteFlavorRequest\x12\x11\n\tflavor_id\x18\x01 \x01(\t\"a\n\x14\x43reateFlavorResponse\x12\x0b\n\x03ret\x18\x01 \x01(\r\x12\x0b\n\x03msg\x18\x02 \x01(\t\x12$\n\x06\x66lavor\x18\x03 \x01(\x0b\x32\x0f.flavors.FlavorH\x00\x88\x01\x01\x42\t\n\x07_flavor\"!\n\x0e\x46lavorResponse\x12\x0f\n\x07message\x18\x01 \x01(\t2\xf3\x01\n\x11\x46lavorGrpcService\x12J\n\x0blist_flavor\x12\x1b.flavors.ListFlavorsRequest\x1a\x1c.flavors.ListFlavorsResponse\"\x00\x12H\n\rcreate_flavor\x12\x1c.flavors.CreateFlavorRequest\x1a\x17.flavors.FlavorResponse\"\x00\x12H\n\rdelete_flavor\x12\x1c.flavors.DeleteFlavorRequest\x1a\x17.flavors.FlavorResponse\"\x00\x42\x03\x80\x01\x01\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -32,8 +32,10 @@ if _descriptor._USE_C_DESCRIPTORS == False: _globals['_CREATEFLAVORREQUEST']._serialized_end=331 _globals['_DELETEFLAVORREQUEST']._serialized_start=333 _globals['_DELETEFLAVORREQUEST']._serialized_end=373 - _globals['_FLAVORRESPONSE']._serialized_start=375 - _globals['_FLAVORRESPONSE']._serialized_end=408 - _globals['_FLAVORGRPCSERVICE']._serialized_start=411 - _globals['_FLAVORGRPCSERVICE']._serialized_end=654 + _globals['_CREATEFLAVORRESPONSE']._serialized_start=375 + _globals['_CREATEFLAVORRESPONSE']._serialized_end=472 + _globals['_FLAVORRESPONSE']._serialized_start=474 + _globals['_FLAVORRESPONSE']._serialized_end=507 + _globals['_FLAVORGRPCSERVICE']._serialized_start=510 + _globals['_FLAVORGRPCSERVICE']._serialized_end=753 # @@protoc_insertion_point(module_scope) diff --git a/eulerlauncher/grpcs/flavors.py b/eulerlauncher/grpcs/flavors.py index 67ca766..772fbac 100644 --- a/eulerlauncher/grpcs/flavors.py +++ b/eulerlauncher/grpcs/flavors.py @@ -7,13 +7,14 @@ class Flavor(object): def list(self): """Get list of flavors""" - request = flavors_pb2.ListFlavorsRequest + request = flavors_pb2.ListFlavorsRequest() response = self.client.list_flavors(request) return response - def create(self): + def create(self, name, cpu, ram, disk): """Create a new flavor""" - request = flavors_pb2.CreateFlavorRequest + request = flavors_pb2.CreateFlavorRequest( + flavor_name=name, cpucores_num=cpu, ram_capacity=ram, disk_capacity=disk) response = self.clent.create_flavor(request) return response -- Gitee