From 7d45cfc3ccd9a2231ba1bb3240b1eff22c25f75e Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Wed, 11 Apr 2018 14:31:09 -0700 Subject: [PATCH] scripts/rpc.py: pass named args to lvol.py Also add docstrings to all lvol.py methods. Change-Id: I2fb0c0622450a8862d2d6182f1f800da4d15a780 Signed-off-by: Daniel Verkamp Reviewed-on: https://review.gerrithub.io/407372 Tested-by: SPDK Automated Test System Reviewed-by: Ben Walker Reviewed-by: Jim Harris Reviewed-by: John Kariuki --- scripts/rpc.py | 40 ++++++++--- scripts/rpc/lvol.py | 164 +++++++++++++++++++++++++++++++------------- 2 files changed, 146 insertions(+), 58 deletions(-) diff --git a/scripts/rpc.py b/scripts/rpc.py index fbbbdc330..f6871ea86 100755 --- a/scripts/rpc.py +++ b/scripts/rpc.py @@ -480,7 +480,10 @@ if __name__ == "__main__": # lvol @call_cmd def construct_lvol_store(args): - print_array(rpc.lvol.construct_lvol_store(args.client, args)) + print_array(rpc.lvol.construct_lvol_store(args.client, + bdev_name=args.bdev_name, + lvs_name=args.lvs_name, + cluster_sz=args.cluster_sz)) p = subparsers.add_parser('construct_lvol_store', help='Add logical volume store on base bdev') p.add_argument('bdev_name', help='base bdev name') @@ -490,7 +493,9 @@ if __name__ == "__main__": @call_cmd def rename_lvol_store(args): - rpc.lvol.rename_lvol_store(args.client, args) + rpc.lvol.rename_lvol_store(args.client, + old_name=args.old_name, + new_name=args.new_name) p = subparsers.add_parser('rename_lvol_store', help='Change logical volume store name') p.add_argument('old_name', help='old name') @@ -499,7 +504,12 @@ if __name__ == "__main__": @call_cmd def construct_lvol_bdev(args): - print_array(rpc.lvol.construct_lvol_bdev(args.client, args)) + print_array(rpc.lvol.construct_lvol_bdev(args.client, + lvol_name=args.lvol_name, + size=args.size * 1024 * 1024, + thin_provision=args.thin_provision, + uuid=args.uuid, + lvs_name=args.lvs_name)) p = subparsers.add_parser('construct_lvol_bdev', help='Add a bdev with an logical volume backend') p.add_argument('-u', '--uuid', help='lvol store UUID', required=False) @@ -511,7 +521,9 @@ if __name__ == "__main__": @call_cmd def snapshot_lvol_bdev(args): - rpc.lvol.snapshot_lvol_bdev(args.client, args) + rpc.lvol.snapshot_lvol_bdev(args.client, + lvol_name=args.lvol_name, + snapshot_name=args.snapshot_name) p = subparsers.add_parser('snapshot_lvol_bdev', help='Create a snapshot of an lvol bdev') p.add_argument('lvol_name', help='lvol bdev name') @@ -520,7 +532,9 @@ if __name__ == "__main__": @call_cmd def clone_lvol_bdev(args): - rpc.lvol.clone_lvol_bdev(args.client, args) + rpc.lvol.clone_lvol_bdev(args.client, + snapshot_name=args.snapshot_name, + clone_name=args.clone_name) p = subparsers.add_parser('clone_lvol_bdev', help='Create a clone of an lvol snapshot') p.add_argument('snapshot_name', help='lvol snapshot name') @@ -529,7 +543,9 @@ if __name__ == "__main__": @call_cmd def rename_lvol_bdev(args): - rpc.lvol.rename_lvol_bdev(args.client, args) + rpc.lvol.rename_lvol_bdev(args.client, + old_name=args.old_name, + new_name=args.new_name) p = subparsers.add_parser('rename_lvol_bdev', help='Change lvol bdev name') p.add_argument('old_name', help='lvol bdev name') @@ -538,7 +554,9 @@ if __name__ == "__main__": @call_cmd def resize_lvol_bdev(args): - rpc.lvol.resize_lvol_bdev(args.client, args) + rpc.lvol.resize_lvol_bdev(args.client, + name=args.name, + size=args.size * 1024 * 1024) p = subparsers.add_parser('resize_lvol_bdev', help='Resize existing lvol bdev') p.add_argument('name', help='lvol bdev name') @@ -547,7 +565,9 @@ if __name__ == "__main__": @call_cmd def destroy_lvol_store(args): - rpc.lvol.destroy_lvol_store(args.client, args) + rpc.lvol.destroy_lvol_store(args.client, + uuid=args.uuid, + lvs_name=args.lvs_name) p = subparsers.add_parser('destroy_lvol_store', help='Destroy an logical volume store') p.add_argument('-u', '--uuid', help='lvol store UUID', required=False) @@ -556,7 +576,9 @@ if __name__ == "__main__": @call_cmd def get_lvol_stores(args): - print_dict(rpc.lvol.get_lvol_stores(args.client, args)) + print_dict(rpc.lvol.get_lvol_stores(args.client, + uuid=args.uuid, + lvs_name=args.lvs_name)) p = subparsers.add_parser('get_lvol_stores', help='Display current logical volume store list') p.add_argument('-u', '--uuid', help='lvol store UUID', required=False) diff --git a/scripts/rpc/lvol.py b/scripts/rpc/lvol.py index 9863fecc5..76d2d1773 100755 --- a/scripts/rpc/lvol.py +++ b/scripts/rpc/lvol.py @@ -1,84 +1,150 @@ -def construct_lvol_store(client, args): - params = {'bdev_name': args.bdev_name, 'lvs_name': args.lvs_name} - if args.cluster_sz: - params['cluster_sz'] = args.cluster_sz +def construct_lvol_store(client, bdev_name, lvs_name, cluster_sz=None): + """Construct a logical volume store. + + Args: + bdev_name: bdev on which to construct logical volume store + lvs_name: name of the logical volume store to create + cluster_sz: cluster size of the logical volume store in bytes (optional) + + Returns: + UUID of created logical volume store. + """ + params = {'bdev_name': bdev_name, 'lvs_name': lvs_name} + if cluster_sz: + params['cluster_sz'] = cluster_sz return client.call('construct_lvol_store', params) -def rename_lvol_store(client, args): +def rename_lvol_store(client, old_name, new_name): + """Rename a logical volume store. + + Args: + old_name: existing logical volume store name + new_name: new logical volume store name + """ params = { - 'old_name': args.old_name, - 'new_name': args.new_name + 'old_name': old_name, + 'new_name': new_name } return client.call('rename_lvol_store', params) -def construct_lvol_bdev(client, args): - num_bytes = (args.size * 1024 * 1024) - params = {'lvol_name': args.lvol_name, 'size': num_bytes} - if args.thin_provision: - params['thin_provision'] = args.thin_provision - if (args.uuid and args.lvs_name) or (not args.uuid and not args.lvs_name): - print("You need to specify either uuid or name of lvolstore") - else: - if args.uuid: - params['uuid'] = args.uuid - if args.lvs_name: - params['lvs_name'] = args.lvs_name - return client.call('construct_lvol_bdev', params) +def construct_lvol_bdev(client, lvol_name, size, thin_provision=False, uuid=None, lvs_name=None): + """Create a logical volume on a logical volume store. + + Args: + lvol_name: name of logical volume to create + size: desired size of logical volume in bytes (will be rounded up to a multiple of cluster size) + thin_provision: True to enable thin provisioning + uuid: UUID of logical volume store to create logical volume on (optional) + lvs_name: name of logical volume store to create logical volume on (optional) + + Either uuid or lvs_name must be specified, but not both. + """ + if (uuid and lvs_name) or (not uuid and not lvs_name): + raise ValueError("Either uuid or lvs_name must be specified, but not both") + + params = {'lvol_name': lvol_name, 'size': size} + if thin_provision: + params['thin_provision'] = thin_provision + if uuid: + params['uuid'] = uuid + if lvs_name: + params['lvs_name'] = lvs_name + return client.call('construct_lvol_bdev', params) -def snapshot_lvol_bdev(client, args): +def snapshot_lvol_bdev(client, lvol_name, snapshot_name): + """Capture a snapshot of the current state of a logical volume. + + Args: + lvol_name: logical volume to create a snapshot from + snapshot_name: name for the newly created snapshot + """ params = { - 'lvol_name': args.lvol_name, - 'snapshot_name': args.snapshot_name + 'lvol_name': lvol_name, + 'snapshot_name': snapshot_name } return client.call('snapshot_lvol_bdev', params) -def clone_lvol_bdev(client, args): +def clone_lvol_bdev(client, snapshot_name, clone_name): + """Create a logical volume based on a snapshot. + + Args: + snapshot_name: snapshot to clone + clone_name: name of logical volume to create + """ params = { - 'snapshot_name': args.snapshot_name, - 'clone_name': args.clone_name + 'snapshot_name': snapshot_name, + 'clone_name': clone_name } return client.call('clone_lvol_bdev', params) -def rename_lvol_bdev(client, args): +def rename_lvol_bdev(client, old_name, new_name): + """Rename a logical volume. + + Args: + old_name: existing logical volume name + new_name: new logical volume name + """ params = { - 'old_name': args.old_name, - 'new_name': args.new_name + 'old_name': old_name, + 'new_name': new_name } return client.call('rename_lvol_bdev', params) -def resize_lvol_bdev(client, args): - num_bytes = (args.size * 1024 * 1024) +def resize_lvol_bdev(client, name, size): + """Resize a logical volume. + + Args: + name: name of logical volume to resize + size: desired size of logical volume in bytes (will be rounded up to a multiple of cluster size) + """ params = { - 'name': args.name, - 'size': num_bytes, + 'name': name, + 'size': size, } return client.call('resize_lvol_bdev', params) -def destroy_lvol_store(client, args): +def destroy_lvol_store(client, uuid=None, lvs_name=None): + """Destroy a logical volume store. + + Args: + uuid: UUID of logical volume store to destroy (optional) + lvs_name: name of logical volume store to destroy (optional) + + Either uuid or lvs_name must be specified, but not both. + """ + if (uuid and lvs_name) or (not uuid and not lvs_name): + raise ValueError("Exactly one of uuid or lvs_name must be specified") + params = {} - if (args.uuid and args.lvs_name) or (not args.uuid and not args.lvs_name): - print("You need to specify either uuid or name of lvolstore") - else: - if args.uuid: - params['uuid'] = args.uuid - if args.lvs_name: - params['lvs_name'] = args.lvs_name - return client.call('destroy_lvol_store', params) + if uuid: + params['uuid'] = uuid + if lvs_name: + params['lvs_name'] = lvs_name + return client.call('destroy_lvol_store', params) -def get_lvol_stores(client, args): +def get_lvol_stores(client, uuid=None, lvs_name=None): + """List logical volume stores. + + Args: + uuid: UUID of logical volume store to retrieve information about (optional) + lvs_name: name of logical volume store to retrieve information about (optional) + + Either uuid or lvs_name may be specified, but not both. + If both uuid and lvs_name are omitted, information about all logical volume stores is returned. + """ + if (uuid and lvs_name): + raise ValueError("Exactly one of uuid or lvs_name may be specified") params = {} - if (args.uuid and args.lvs_name): - print("You can only specify either uuid or name of lvolstore") - if args.uuid: - params['uuid'] = args.uuid - if args.lvs_name: - params['lvs_name'] = args.lvs_name + if uuid: + params['uuid'] = uuid + if lvs_name: + params['lvs_name'] = lvs_name return client.call('get_lvol_stores', params)