diff --git a/client-cli/pvc.py b/client-cli/pvc.py index 66dbdef1..7363763e 100755 --- a/client-cli/pvc.py +++ b/client-cli/pvc.py @@ -1471,7 +1471,7 @@ def ceph_volume_snapshot_list(pool, volume, limit): """ zk_conn = pvc_common.startZKConnection(zk_host) - retcode, retmsg = pvc_ceph.get_list_snapshot(zk_conn, pool, snapshot, limit) + retcode, retmsg = pvc_ceph.get_list_snapshot(zk_conn, pool, volume, limit) cleanup(retcode, retmsg, zk_conn) diff --git a/client-common/ceph.py b/client-common/ceph.py index 15765fa1..685d0187 100644 --- a/client-common/ceph.py +++ b/client-common/ceph.py @@ -725,189 +725,79 @@ def formatVolumeList(zk_conn, volume_list): output_string = volume_list_output_header + '\n' + '\n'.join(sorted(volume_list_output)) return output_string -def getCephSnapshots(zk_conn): - snapshot_list = zkhandler.listchildren(zk_conn, '/ceph/snapshots') +def getCephSnapshots(zk_conn, pool, volume): + snapshot_list = list() + volume_list = list() + + if volume == 'all': + volume_list = getCephVolumes(zk_conn, pool) + else: + volume_list = [ '{}/{}'.format(pool, volume) ] + + for volume_name in volume_list: + for snapshot_name in zkhandler.listchildren(zk_conn, '/ceph/snapshots/{}'.format(volume_name)): + snapshot_list.append('{}@{}'.format(volume_name, snapshot_name)) + return snapshot_list def formatSnapshotList(zk_conn, snapshot_list): snapshot_list_output = [] - snapshot_id = dict() - snapshot_size = dict() - snapshot_num_objects = dict() - snapshot_num_clones = dict() - snapshot_num_copies = dict() - snapshot_num_degraded = dict() - snapshot_read_ops = dict() - snapshot_read_data = dict() - snapshot_write_ops = dict() - snapshot_write_data = dict() - snapshot_name_length = 5 - snapshot_id_length = 3 - snapshot_size_length = 5 - snapshot_num_objects_length = 6 - snapshot_num_clones_length = 7 - snapshot_num_copies_length = 7 - snapshot_num_degraded_length = 9 - snapshot_read_ops_length = 4 - snapshot_read_data_length = 5 - snapshot_write_ops_length = 4 - snapshot_write_data_length = 5 + snapshot_volume_length = 7 + snapshot_pool_length = 5 for snapshot in snapshot_list: + snapshot_pool, snapshot_detail = snapshot.split('/') + snapshot_volume, snapshot_name = snapshot_detail.split('@') + # Set the Snapshot name length - _snapshot_name_length = len(snapshot) + 1 + _snapshot_name_length = len(snapshot_name) + 1 if _snapshot_name_length > snapshot_name_length: snapshot_name_length = _snapshot_name_length - # Get stats - snapshot_stats = getSnapshotInformation(zk_conn, snapshot) + # Set the Snapshot volume length + _snapshot_volume_length = len(snapshot_volume) + 1 + if _snapshot_volume_length > snapshot_volume_length: + snapshot_volume_length = _snapshot_volume_length - # Set the parent node and length - try: - snapshot_id[snapshot] = snapshot_stats['id'] - # If this happens, the node hasn't checked in fully yet, so just ignore it - if not snapshot_id[snapshot]: - continue - except KeyError: - continue - - # Set the id and length - snapshot_id[snapshot] = snapshot_stats['id'] - _snapshot_id_length = len(str(snapshot_id[snapshot])) + 1 - if _snapshot_id_length > snapshot_id_length: - snapshot_id_length = _snapshot_id_length - - # Set the size and length - snapshot_size[snapshot] = snapshot_stats['size_formatted'] - _snapshot_size_length = len(str(snapshot_size[snapshot])) + 1 - if _snapshot_size_length > snapshot_size_length: - snapshot_size_length = _snapshot_size_length - - # Set the num_objects and length - snapshot_num_objects[snapshot] = snapshot_stats['num_objects'] - _snapshot_num_objects_length = len(str(snapshot_num_objects[snapshot])) + 1 - if _snapshot_num_objects_length > snapshot_num_objects_length: - snapshot_num_objects_length = _snapshot_num_objects_length - - # Set the num_clones and length - snapshot_num_clones[snapshot] = snapshot_stats['num_object_clones'] - _snapshot_num_clones_length = len(str(snapshot_num_clones[snapshot])) + 1 - if _snapshot_num_clones_length > snapshot_num_clones_length: - snapshot_num_clones_length = _snapshot_num_clones_length - - # Set the num_copies and length - snapshot_num_copies[snapshot] = snapshot_stats['num_object_copies'] - _snapshot_num_copies_length = len(str(snapshot_num_copies[snapshot])) + 1 - if _snapshot_num_copies_length > snapshot_num_copies_length: - snapshot_num_copies_length = _snapshot_num_copies_length - - # Set the num_degraded and length - snapshot_num_degraded[snapshot] = snapshot_stats['num_objects_degraded'] - _snapshot_num_degraded_length = len(str(snapshot_num_degraded[snapshot])) + 1 - if _snapshot_num_degraded_length > snapshot_num_degraded_length: - snapshot_num_degraded_length = _snapshot_num_degraded_length - - # Set the write IOPS/data and length - snapshot_write_ops[snapshot] = snapshot_stats['write_ops'] - _snapshot_write_ops_length = len(str(snapshot_write_ops[snapshot])) + 1 - if _snapshot_write_ops_length > snapshot_write_ops_length: - snapshot_write_ops_length = _snapshot_write_ops_length - snapshot_write_data[snapshot] = snapshot_stats['write_formatted'] - _snapshot_write_data_length = len(snapshot_write_data[snapshot]) + 1 - if _snapshot_write_data_length > snapshot_write_data_length: - snapshot_write_data_length = _snapshot_write_data_length - - # Set the read IOPS/data and length - snapshot_read_ops[snapshot] = snapshot_stats['read_ops'] - _snapshot_read_ops_length = len(str(snapshot_read_ops[snapshot])) + 1 - if _snapshot_read_ops_length > snapshot_read_ops_length: - snapshot_read_ops_length = _snapshot_read_ops_length - snapshot_read_data[snapshot] = snapshot_stats['read_formatted'] - _snapshot_read_data_length = len(snapshot_read_data[snapshot]) + 1 - if _snapshot_read_data_length > snapshot_read_data_length: - snapshot_read_data_length = _snapshot_read_data_length + # Set the Snapshot pool length + _snapshot_pool_length = len(snapshot_pool) + 1 + if _snapshot_pool_length > snapshot_pool_length: + snapshot_pool_length = _snapshot_pool_length # Format the output header snapshot_list_output_header = '{bold}\ -{snapshot_id: <{snapshot_id_length}} \ {snapshot_name: <{snapshot_name_length}} \ -{snapshot_size: <{snapshot_size_length}} \ -Obj: {snapshot_objects: <{snapshot_objects_length}} \ -{snapshot_clones: <{snapshot_clones_length}} \ -{snapshot_copies: <{snapshot_copies_length}} \ -{snapshot_degraded: <{snapshot_degraded_length}} \ -Rd: {snapshot_read_ops: <{snapshot_read_ops_length}} \ -{snapshot_read_data: <{snapshot_read_data_length}} \ -Wr: {snapshot_write_ops: <{snapshot_write_ops_length}} \ -{snapshot_write_data: <{snapshot_write_data_length}} \ +{snapshot_volume: <{snapshot_volume_length}} \ +{snapshot_pool: <{snapshot_pool_length}} \ {end_bold}'.format( bold=ansiprint.bold(), end_bold=ansiprint.end(), - snapshot_id_length=snapshot_id_length, snapshot_name_length=snapshot_name_length, - snapshot_size_length=snapshot_size_length, - snapshot_objects_length=snapshot_num_objects_length, - snapshot_clones_length=snapshot_num_clones_length, - snapshot_copies_length=snapshot_num_copies_length, - snapshot_degraded_length=snapshot_num_degraded_length, - snapshot_write_ops_length=snapshot_write_ops_length, - snapshot_write_data_length=snapshot_write_data_length, - snapshot_read_ops_length=snapshot_read_ops_length, - snapshot_read_data_length=snapshot_read_data_length, - snapshot_id='ID', + snapshot_volume_length=snapshot_volume_length, + snapshot_pool_length=snapshot_pool_length, snapshot_name='Name', - snapshot_size='Used', - snapshot_objects='Count', - snapshot_clones='Clones', - snapshot_copies='Copies', - snapshot_degraded='Degraded', - snapshot_write_ops='OPS', - snapshot_write_data='Data', - snapshot_read_ops='OPS', - snapshot_read_data='Data' + snapshot_volume='Volume', + snapshot_pool='Pool', ) for snapshot in snapshot_list: - # Format the output header + snapshot_pool, snapshot_detail = snapshot.split('/') + snapshot_volume, snapshot_name = snapshot_detail.split('@') snapshot_list_output.append('{bold}\ -{snapshot_id: <{snapshot_id_length}} \ {snapshot_name: <{snapshot_name_length}} \ -{snapshot_size: <{snapshot_size_length}} \ - {snapshot_objects: <{snapshot_objects_length}} \ -{snapshot_clones: <{snapshot_clones_length}} \ -{snapshot_copies: <{snapshot_copies_length}} \ -{snapshot_degraded: <{snapshot_degraded_length}} \ - {snapshot_read_ops: <{snapshot_read_ops_length}} \ -{snapshot_read_data: <{snapshot_read_data_length}} \ - {snapshot_write_ops: <{snapshot_write_ops_length}} \ -{snapshot_write_data: <{snapshot_write_data_length}} \ +{snapshot_volume: <{snapshot_volume_length}} \ +{snapshot_pool: <{snapshot_pool_length}} \ {end_bold}'.format( bold=ansiprint.bold(), end_bold=ansiprint.end(), - snapshot_id_length=snapshot_id_length, snapshot_name_length=snapshot_name_length, - snapshot_size_length=snapshot_size_length, - snapshot_objects_length=snapshot_num_objects_length, - snapshot_clones_length=snapshot_num_clones_length, - snapshot_copies_length=snapshot_num_copies_length, - snapshot_degraded_length=snapshot_num_degraded_length, - snapshot_write_ops_length=snapshot_write_ops_length, - snapshot_write_data_length=snapshot_write_data_length, - snapshot_read_ops_length=snapshot_read_ops_length, - snapshot_read_data_length=snapshot_read_data_length, - snapshot_id=snapshot_id[snapshot], - snapshot_name=snapshot, - snapshot_size=snapshot_size[snapshot], - snapshot_objects=snapshot_num_objects[snapshot], - snapshot_clones=snapshot_num_clones[snapshot], - snapshot_copies=snapshot_num_copies[snapshot], - snapshot_degraded=snapshot_num_degraded[snapshot], - snapshot_write_ops=snapshot_write_ops[snapshot], - snapshot_write_data=snapshot_write_data[snapshot], - snapshot_read_ops=snapshot_read_ops[snapshot], - snapshot_read_data=snapshot_read_data[snapshot] + snapshot_volume_length=snapshot_volume_length, + snapshot_pool_length=snapshot_pool_length, + snapshot_name=snapshot_name, + snapshot_volume=snapshot_volume, + snapshot_pool=snapshot_pool, ) )