From dd8da6d984675a7861521ada733ce85bea0e22e0 Mon Sep 17 00:00:00 2001 From: Nilo Lisboa Date: Fri, 21 Apr 2017 18:19:23 -0500 Subject: [PATCH 1/3] Implementation of slcli block/file volume-count --- SoftLayer/CLI/block/count.py | 55 +++++++++++++++++++++++++ SoftLayer/CLI/block/detail.py | 1 - SoftLayer/CLI/block/list.py | 5 ++- SoftLayer/CLI/file/count.py | 55 +++++++++++++++++++++++++ SoftLayer/CLI/file/list.py | 5 ++- SoftLayer/CLI/routes.py | 2 + SoftLayer/fixtures/SoftLayer_Account.py | 2 +- SoftLayer/managers/block.py | 18 +++++++- SoftLayer/managers/file.py | 17 +++++++- tests/CLI/modules/block_tests.py | 14 ++++++- tests/CLI/modules/file_tests.py | 13 +++++- 11 files changed, 179 insertions(+), 8 deletions(-) create mode 100644 SoftLayer/CLI/block/count.py create mode 100644 SoftLayer/CLI/file/count.py diff --git a/SoftLayer/CLI/block/count.py b/SoftLayer/CLI/block/count.py new file mode 100644 index 000000000..52211f0d5 --- /dev/null +++ b/SoftLayer/CLI/block/count.py @@ -0,0 +1,55 @@ +"""List number of block storage volumes per datacenter.""" +# :license: MIT, see LICENSE for more details. + +import click +import SoftLayer +from SoftLayer.CLI import columns as column_helper +from SoftLayer.CLI import environment +from SoftLayer.CLI import formatting + +COLUMNS = [ + column_helper.Column('Datacenter', + ('serviceResource', 'datacenter', 'name'), + mask="serviceResource.datacenter.name"), + column_helper.Column('Count', + '', + mask=None) +] + +DEFAULT_COLUMNS = [ + 'Datacenter', + 'Count' +] + + +@click.command() +@click.option('--datacenter', '-d', help='Datacenter shortname') +@click.option('--sortby', help='Column to sort by', default='Datacenter') +@click.option('--columns', + callback=column_helper.get_formatter(COLUMNS), + help='Columns to display. Options: {0}'.format( + ', '.join(column.name for column in COLUMNS)), + default=','.join(DEFAULT_COLUMNS)) +@environment.pass_env +def cli(env, sortby, columns, datacenter): + """List number of block storage volumes per datacenter.""" + block_manager = SoftLayer.BlockStorageManager(env.client) + block_volumes = block_manager.list_block_volumes(datacenter=datacenter, + mask=columns.mask()) + + # cycle through all block volumes and count datacenter occurences. + datacenters = dict() + for volume in block_volumes: + service_resource = volume['serviceResource'] + if 'datacenter' in service_resource: + datacenter = service_resource['datacenter']['name'] + if datacenter not in datacenters.keys(): + datacenters[datacenter] = 1 + else: + datacenters[datacenter] += 1 + + table = formatting.KeyValueTable(columns.columns) + table.sortby = sortby + for datacenter in datacenters: + table.add_row([datacenter, datacenters[datacenter]]) + env.fout(table) diff --git a/SoftLayer/CLI/block/detail.py b/SoftLayer/CLI/block/detail.py index b8ba8bed5..a618c675a 100644 --- a/SoftLayer/CLI/block/detail.py +++ b/SoftLayer/CLI/block/detail.py @@ -16,7 +16,6 @@ def cli(env, volume_id): block_manager = SoftLayer.BlockStorageManager(env.client) block_volume = block_manager.get_block_volume_details(volume_id) block_volume = utils.NestedDict(block_volume) - table = formatting.KeyValueTable(['Name', 'Value']) table.align['Name'] = 'r' table.align['Value'] = 'l' diff --git a/SoftLayer/CLI/block/list.py b/SoftLayer/CLI/block/list.py index 41e09ca30..4cc9afd2b 100644 --- a/SoftLayer/CLI/block/list.py +++ b/SoftLayer/CLI/block/list.py @@ -28,6 +28,8 @@ column_helper.Column('lunId', ('lunId',), mask="lunId"), column_helper.Column('active_transactions', ('activeTransactionCount',), mask="activeTransactionCount"), + column_helper.Column('rep_partner_count', ('replicationPartnerCount',), + mask="replicationPartnerCount"), column_helper.Column( 'created_by', ('billingItem', 'orderItem', 'order', 'userRecord', 'username')), @@ -42,7 +44,8 @@ 'bytes_used', 'ip_addr', 'lunId', - 'active_transactions' + 'active_transactions', + 'rep_partner_count' ] diff --git a/SoftLayer/CLI/file/count.py b/SoftLayer/CLI/file/count.py new file mode 100644 index 000000000..fc0700cc7 --- /dev/null +++ b/SoftLayer/CLI/file/count.py @@ -0,0 +1,55 @@ +"""List number of file storage volumes per datacenter.""" +# :license: MIT, see LICENSE for more details. + +import click +import SoftLayer +from SoftLayer.CLI import columns as column_helper +from SoftLayer.CLI import environment +from SoftLayer.CLI import formatting + +COLUMNS = [ + column_helper.Column('Datacenter', + ('serviceResource', 'datacenter', 'name'), + mask="serviceResource.datacenter.name"), + column_helper.Column('Count', + '', + mask=None) +] + +DEFAULT_COLUMNS = [ + 'Datacenter', + 'Count' +] + + +@click.command() +@click.option('--datacenter', '-d', help='Datacenter shortname') +@click.option('--sortby', help='Column to sort by', default='Datacenter') +@click.option('--columns', + callback=column_helper.get_formatter(COLUMNS), + help='Columns to display. Options: {0}'.format( + ', '.join(column.name for column in COLUMNS)), + default=','.join(DEFAULT_COLUMNS)) +@environment.pass_env +def cli(env, sortby, columns, datacenter): + """List number of file storage volumes per datacenter.""" + + file_manager = SoftLayer.FileStorageManager(env.client) + file_volumes = file_manager.list_file_volumes(datacenter=datacenter, + mask=columns.mask()) + + datacenters = dict() + for volume in file_volumes: + service_resource = volume['serviceResource'] + if 'datacenter' in service_resource: + datacenter = service_resource['datacenter']['name'] + if datacenter not in datacenters.keys(): + datacenters[datacenter] = 1 + else: + datacenters[datacenter] += 1 + + table = formatting.KeyValueTable(columns.columns) + table.sortby = sortby + for datacenter in datacenters: + table.add_row([datacenter, datacenters[datacenter]]) + env.fout(table) diff --git a/SoftLayer/CLI/file/list.py b/SoftLayer/CLI/file/list.py index 40399538c..86028f4ee 100644 --- a/SoftLayer/CLI/file/list.py +++ b/SoftLayer/CLI/file/list.py @@ -29,6 +29,8 @@ mask="activeTransactionCount"), column_helper.Column('mount_addr', ('fileNetworkMountAddress',), mask="fileNetworkMountAddress",), + column_helper.Column('rep_partner_count', ('replicationPartnerCount',), + mask="replicationPartnerCount"), column_helper.Column( 'created_by', ('billingItem', 'orderItem', 'order', 'userRecord', 'username')), @@ -43,7 +45,8 @@ 'bytes_used', 'ip_addr', 'active_transactions', - 'mount_addr' + 'mount_addr', + 'rep_partner_count' ] diff --git a/SoftLayer/CLI/routes.py b/SoftLayer/CLI/routes.py index fe2bb12f8..682b36651 100644 --- a/SoftLayer/CLI/routes.py +++ b/SoftLayer/CLI/routes.py @@ -76,6 +76,7 @@ ('block:snapshot-order', 'SoftLayer.CLI.block.snapshot.order:cli'), ('block:snapshot-restore', 'SoftLayer.CLI.block.snapshot.restore:cli'), ('block:volume-cancel', 'SoftLayer.CLI.block.cancel:cli'), + ('block:volume-count', 'SoftLayer.CLI.block.count:cli'), ('block:volume-detail', 'SoftLayer.CLI.block.detail:cli'), ('block:volume-duplicate', 'SoftLayer.CLI.block.duplicate:cli'), ('block:volume-list', 'SoftLayer.CLI.block.list:cli'), @@ -100,6 +101,7 @@ ('file:snapshot-order', 'SoftLayer.CLI.file.snapshot.order:cli'), ('file:snapshot-restore', 'SoftLayer.CLI.file.snapshot.restore:cli'), ('file:volume-cancel', 'SoftLayer.CLI.file.cancel:cli'), + ('file:volume-count', 'SoftLayer.CLI.file.count:cli'), ('file:volume-detail', 'SoftLayer.CLI.file.detail:cli'), ('file:volume-duplicate', 'SoftLayer.CLI.file.duplicate:cli'), ('file:volume-list', 'SoftLayer.CLI.file.list:cli'), diff --git a/SoftLayer/fixtures/SoftLayer_Account.py b/SoftLayer/fixtures/SoftLayer_Account.py index 561ff3926..b8005e0ee 100644 --- a/SoftLayer/fixtures/SoftLayer_Account.py +++ b/SoftLayer/fixtures/SoftLayer_Account.py @@ -536,7 +536,7 @@ 'notes': """{'status': 'available'}""", 'password': '', 'serviceProviderId': 1, - 'serviceResource': {'datacenter': {'id': 449500}}, + 'serviceResource': {'datacenter': {'name': 'dal05', 'id': 449500}}, 'serviceResourceBackendIpAddress': '10.1.2.3', 'serviceResourceName': 'Storage Type 01 Aggregate staaspar0101_pc01', 'username': 'username', diff --git a/SoftLayer/managers/block.py b/SoftLayer/managers/block.py index 37e73d6f4..283d2ce2b 100644 --- a/SoftLayer/managers/block.py +++ b/SoftLayer/managers/block.py @@ -43,10 +43,25 @@ def list_block_volumes(self, datacenter=None, username=None, 'bytesUsed', 'serviceResource.datacenter[name]', 'serviceResourceBackendIpAddress', - 'activeTransactionCount' + 'activeTransactionCount', + 'replicationPartnerCount', + ',replicationPartners[id,username,' + 'serviceResourceBackendIpAddress,' + 'serviceResource[datacenter[name]],' + 'storageType,capacityGb,lunId,bytesUsed,' + 'activeTransactionCount,' + 'replicationSchedule[type[keyname]]]', ] kwargs['mask'] = ','.join(items) + # Retrieve relevant replicant information to be displayed. + kwargs['mask'] += ',replicationPartners[id,username,'\ + 'serviceResourceBackendIpAddress,'\ + 'serviceResource[datacenter[name]],'\ + 'storageType,capacityGb,lunId,bytesUsed,'\ + 'activeTransactionCount,'\ + 'replicationSchedule[type[keyname]]]' + _filter = utils.NestedDict(kwargs.get('filter') or {}) _filter['iscsiNetworkStorage']['serviceResource']['type']['type'] = \ @@ -54,6 +69,7 @@ def list_block_volumes(self, datacenter=None, username=None, _filter['iscsiNetworkStorage']['storageType']['keyName'] = ( utils.query_filter('*BLOCK_STORAGE*')) + if storage_type: _filter['iscsiNetworkStorage']['storageType']['keyName'] = ( utils.query_filter('%s_BLOCK_STORAGE' % storage_type.upper())) diff --git a/SoftLayer/managers/file.py b/SoftLayer/managers/file.py index 6caf1f5f1..4a98b73ec 100644 --- a/SoftLayer/managers/file.py +++ b/SoftLayer/managers/file.py @@ -38,10 +38,25 @@ def list_file_volumes(self, datacenter=None, username=None, 'serviceResource.datacenter[name]', 'serviceResourceBackendIpAddress', 'activeTransactionCount', - 'fileNetworkMountAddress' + 'fileNetworkMountAddress', + 'replicationPartnerCount', + ',replicationPartners[id,username,' + 'serviceResourceBackendIpAddress,' + 'serviceResource[datacenter[name]],' + 'storageType,capacityGb,lunId,bytesUsed,' + 'activeTransactionCount,' + 'replicationSchedule[type[keyname]]]', ] kwargs['mask'] = ','.join(items) + # Retrieve relevant replicant information to be displayed. + kwargs['mask'] += ',replicationPartners[id,username,'\ + 'serviceResourceBackendIpAddress,'\ + 'serviceResource[datacenter[name]],'\ + 'storageType,capacityGb,lunId,bytesUsed,'\ + 'activeTransactionCount,'\ + 'replicationSchedule[type[keyname]]]' + _filter = utils.NestedDict(kwargs.get('filter') or {}) _filter['nasNetworkStorage']['serviceResource']['type']['type'] = \ diff --git a/tests/CLI/modules/block_tests.py b/tests/CLI/modules/block_tests.py index c754e25dc..637f2bcac 100644 --- a/tests/CLI/modules/block_tests.py +++ b/tests/CLI/modules/block_tests.py @@ -102,16 +102,27 @@ def test_volume_list(self): { 'bytes_used': None, 'capacity_gb': 20, - 'datacenter': None, + 'datacenter': 'dal05', 'id': 100, 'ip_addr': '10.1.2.3', 'lunId': None, + 'rep_partner_count': None, 'storage_type': 'ENDURANCE', 'username': 'username', 'active_transactions': None }], json.loads(result.output)) + def test_volume_count(self): + result = self.run_command(['block', 'volume-count']) + + self.assert_no_fail(result) + self.assertEqual( + { + 'dal05': 1 + }, + json.loads(result.output)) + def test_volume_order_performance_iops_not_given(self): result = self.run_command(['block', 'volume-order', '--storage-type=performance', '--size=20', @@ -354,6 +365,7 @@ def test_replication_locations(self): def test_replication_locations_unsuccessful(self, locations_mock): locations_mock.return_value = False result = self.run_command(['block', 'replica-locations', '1234']) + self.assert_no_fail(result) self.assertEqual('No data centers compatible for replication.\n', result.output) diff --git a/tests/CLI/modules/file_tests.py b/tests/CLI/modules/file_tests.py index 4c96706c5..7b7df8ab4 100644 --- a/tests/CLI/modules/file_tests.py +++ b/tests/CLI/modules/file_tests.py @@ -48,10 +48,21 @@ def test_volume_list(self): 'storage_type': 'ENDURANCE', 'username': 'user', 'active_transactions': None, - 'mount_addr': '127.0.0.1:/TEST' + 'mount_addr': '127.0.0.1:/TEST', + 'rep_partner_count': None }], json.loads(result.output)) + def test_volume_count(self): + result = self.run_command(['block', 'volume-count']) + + self.assert_no_fail(result) + self.assertEqual( + { + 'dal05': 1 + }, + json.loads(result.output)) + def test_snapshot_list(self): result = self.run_command(['file', 'snapshot-list', '1234']) From 6753f5adefd9e2d50808f55549bbe037a1379a5b Mon Sep 17 00:00:00 2001 From: David Pickle Date: Mon, 7 Aug 2017 15:30:42 -0500 Subject: [PATCH 2/3] Address PR #819 feedback (pass in mask for counts; improve unit tests) --- SoftLayer/CLI/block/count.py | 16 +++++++++------- SoftLayer/CLI/block/detail.py | 1 + SoftLayer/CLI/file/count.py | 17 +++++++++-------- SoftLayer/CLI/file/detail.py | 4 ++-- SoftLayer/managers/block.py | 17 +---------------- SoftLayer/managers/file.py | 16 +--------------- tests/CLI/modules/block_tests.py | 12 ++++++++++-- tests/CLI/modules/file_tests.py | 15 ++++++++++++--- 8 files changed, 45 insertions(+), 53 deletions(-) diff --git a/SoftLayer/CLI/block/count.py b/SoftLayer/CLI/block/count.py index 52211f0d5..a9b5e2741 100644 --- a/SoftLayer/CLI/block/count.py +++ b/SoftLayer/CLI/block/count.py @@ -34,22 +34,24 @@ def cli(env, sortby, columns, datacenter): """List number of block storage volumes per datacenter.""" block_manager = SoftLayer.BlockStorageManager(env.client) + mask = "mask[serviceResource[datacenter[name]],"\ + "replicationPartners[serviceResource[datacenter[name]]]]" block_volumes = block_manager.list_block_volumes(datacenter=datacenter, - mask=columns.mask()) + mask=mask) # cycle through all block volumes and count datacenter occurences. datacenters = dict() for volume in block_volumes: service_resource = volume['serviceResource'] if 'datacenter' in service_resource: - datacenter = service_resource['datacenter']['name'] - if datacenter not in datacenters.keys(): - datacenters[datacenter] = 1 + datacenter_name = service_resource['datacenter']['name'] + if datacenter_name not in datacenters.keys(): + datacenters[datacenter_name] = 1 else: - datacenters[datacenter] += 1 + datacenters[datacenter_name] += 1 table = formatting.KeyValueTable(columns.columns) table.sortby = sortby - for datacenter in datacenters: - table.add_row([datacenter, datacenters[datacenter]]) + for datacenter_name in datacenters: + table.add_row([datacenter_name, datacenters[datacenter_name]]) env.fout(table) diff --git a/SoftLayer/CLI/block/detail.py b/SoftLayer/CLI/block/detail.py index a618c675a..b8ba8bed5 100644 --- a/SoftLayer/CLI/block/detail.py +++ b/SoftLayer/CLI/block/detail.py @@ -16,6 +16,7 @@ def cli(env, volume_id): block_manager = SoftLayer.BlockStorageManager(env.client) block_volume = block_manager.get_block_volume_details(volume_id) block_volume = utils.NestedDict(block_volume) + table = formatting.KeyValueTable(['Name', 'Value']) table.align['Name'] = 'r' table.align['Value'] = 'l' diff --git a/SoftLayer/CLI/file/count.py b/SoftLayer/CLI/file/count.py index fc0700cc7..7cf3d2655 100644 --- a/SoftLayer/CLI/file/count.py +++ b/SoftLayer/CLI/file/count.py @@ -33,23 +33,24 @@ @environment.pass_env def cli(env, sortby, columns, datacenter): """List number of file storage volumes per datacenter.""" - file_manager = SoftLayer.FileStorageManager(env.client) + mask = "mask[serviceResource[datacenter[name]],"\ + "replicationPartners[serviceResource[datacenter[name]]]]" file_volumes = file_manager.list_file_volumes(datacenter=datacenter, - mask=columns.mask()) + mask=mask) datacenters = dict() for volume in file_volumes: service_resource = volume['serviceResource'] if 'datacenter' in service_resource: - datacenter = service_resource['datacenter']['name'] - if datacenter not in datacenters.keys(): - datacenters[datacenter] = 1 + datacenter_name = service_resource['datacenter']['name'] + if datacenter_name not in datacenters.keys(): + datacenters[datacenter_name] = 1 else: - datacenters[datacenter] += 1 + datacenters[datacenter_name] += 1 table = formatting.KeyValueTable(columns.columns) table.sortby = sortby - for datacenter in datacenters: - table.add_row([datacenter, datacenters[datacenter]]) + for datacenter_name in datacenters: + table.add_row([datacenter_name, datacenters[datacenter_name]]) env.fout(table) diff --git a/SoftLayer/CLI/file/detail.py b/SoftLayer/CLI/file/detail.py index 3c9af3f23..9bfb37f0c 100644 --- a/SoftLayer/CLI/file/detail.py +++ b/SoftLayer/CLI/file/detail.py @@ -16,8 +16,6 @@ def cli(env, volume_id): file_manager = SoftLayer.FileStorageManager(env.client) file_volume = file_manager.get_file_volume_details(volume_id) file_volume = utils.NestedDict(file_volume) - used_space = int(file_volume['bytesUsed'])\ - if file_volume['bytesUsed'] else 0 table = formatting.KeyValueTable(['Name', 'Value']) table.align['Name'] = 'r' @@ -29,6 +27,8 @@ def cli(env, volume_id): table.add_row(['Type', storage_type]) table.add_row(['Capacity (GB)', "%iGB" % file_volume['capacityGb']]) + used_space = int(file_volume['bytesUsed'])\ + if file_volume['bytesUsed'] else 0 if used_space < (1 << 10): table.add_row(['Used Space', "%dB" % used_space]) elif used_space < (1 << 20): diff --git a/SoftLayer/managers/block.py b/SoftLayer/managers/block.py index 283d2ce2b..33bb1810b 100644 --- a/SoftLayer/managers/block.py +++ b/SoftLayer/managers/block.py @@ -44,24 +44,10 @@ def list_block_volumes(self, datacenter=None, username=None, 'serviceResource.datacenter[name]', 'serviceResourceBackendIpAddress', 'activeTransactionCount', - 'replicationPartnerCount', - ',replicationPartners[id,username,' - 'serviceResourceBackendIpAddress,' - 'serviceResource[datacenter[name]],' - 'storageType,capacityGb,lunId,bytesUsed,' - 'activeTransactionCount,' - 'replicationSchedule[type[keyname]]]', + 'replicationPartnerCount' ] kwargs['mask'] = ','.join(items) - # Retrieve relevant replicant information to be displayed. - kwargs['mask'] += ',replicationPartners[id,username,'\ - 'serviceResourceBackendIpAddress,'\ - 'serviceResource[datacenter[name]],'\ - 'storageType,capacityGb,lunId,bytesUsed,'\ - 'activeTransactionCount,'\ - 'replicationSchedule[type[keyname]]]' - _filter = utils.NestedDict(kwargs.get('filter') or {}) _filter['iscsiNetworkStorage']['serviceResource']['type']['type'] = \ @@ -69,7 +55,6 @@ def list_block_volumes(self, datacenter=None, username=None, _filter['iscsiNetworkStorage']['storageType']['keyName'] = ( utils.query_filter('*BLOCK_STORAGE*')) - if storage_type: _filter['iscsiNetworkStorage']['storageType']['keyName'] = ( utils.query_filter('%s_BLOCK_STORAGE' % storage_type.upper())) diff --git a/SoftLayer/managers/file.py b/SoftLayer/managers/file.py index 4a98b73ec..61e434d43 100644 --- a/SoftLayer/managers/file.py +++ b/SoftLayer/managers/file.py @@ -39,24 +39,10 @@ def list_file_volumes(self, datacenter=None, username=None, 'serviceResourceBackendIpAddress', 'activeTransactionCount', 'fileNetworkMountAddress', - 'replicationPartnerCount', - ',replicationPartners[id,username,' - 'serviceResourceBackendIpAddress,' - 'serviceResource[datacenter[name]],' - 'storageType,capacityGb,lunId,bytesUsed,' - 'activeTransactionCount,' - 'replicationSchedule[type[keyname]]]', + 'replicationPartnerCount' ] kwargs['mask'] = ','.join(items) - # Retrieve relevant replicant information to be displayed. - kwargs['mask'] += ',replicationPartners[id,username,'\ - 'serviceResourceBackendIpAddress,'\ - 'serviceResource[datacenter[name]],'\ - 'storageType,capacityGb,lunId,bytesUsed,'\ - 'activeTransactionCount,'\ - 'replicationSchedule[type[keyname]]]' - _filter = utils.NestedDict(kwargs.get('filter') or {}) _filter['nasNetworkStorage']['serviceResource']['type']['type'] = \ diff --git a/tests/CLI/modules/block_tests.py b/tests/CLI/modules/block_tests.py index 637f2bcac..fc9da044f 100644 --- a/tests/CLI/modules/block_tests.py +++ b/tests/CLI/modules/block_tests.py @@ -113,13 +113,21 @@ def test_volume_list(self): }], json.loads(result.output)) - def test_volume_count(self): + @mock.patch('SoftLayer.BlockStorageManager.list_block_volumes') + def test_volume_count(self, list_mock): + list_mock.return_value = [ + {'serviceResource': {'datacenter': {'name': 'dal05'}}}, + {'serviceResource': {'datacenter': {'name': 'ams01'}}}, + {'serviceResource': {'datacenter': {'name': 'dal05'}}} + ] + result = self.run_command(['block', 'volume-count']) self.assert_no_fail(result) self.assertEqual( { - 'dal05': 1 + 'dal05': 2, + 'ams01': 1 }, json.loads(result.output)) diff --git a/tests/CLI/modules/file_tests.py b/tests/CLI/modules/file_tests.py index 7b7df8ab4..161d6b0ca 100644 --- a/tests/CLI/modules/file_tests.py +++ b/tests/CLI/modules/file_tests.py @@ -53,13 +53,21 @@ def test_volume_list(self): }], json.loads(result.output)) - def test_volume_count(self): - result = self.run_command(['block', 'volume-count']) + @mock.patch('SoftLayer.FileStorageManager.list_file_volumes') + def test_volume_count(self, list_mock): + list_mock.return_value = [ + {'serviceResource': {'datacenter': {'name': 'dal09'}}}, + {'serviceResource': {'datacenter': {'name': 'ams01'}}}, + {'serviceResource': {'datacenter': {'name': 'ams01'}}} + ] + + result = self.run_command(['file', 'volume-count']) self.assert_no_fail(result) self.assertEqual( { - 'dal05': 1 + 'ams01': 2, + 'dal09': 1 }, json.loads(result.output)) @@ -410,6 +418,7 @@ def test_replication_locations(self): def test_replication_locations_unsuccessful(self, locations_mock): locations_mock.return_value = False result = self.run_command(['file', 'replica-locations', '1234']) + self.assert_no_fail(result) self.assertEqual('No data centers compatible for replication.\n', result.output) From bf389ca25a10ce05c15e6cd8b5453b681d341aae Mon Sep 17 00:00:00 2001 From: David Pickle Date: Wed, 9 Aug 2017 10:21:06 -0500 Subject: [PATCH 3/3] Remove '--columns' option from volume-count commands --- SoftLayer/CLI/block/count.py | 19 ++----------------- SoftLayer/CLI/file/count.py | 19 ++----------------- 2 files changed, 4 insertions(+), 34 deletions(-) diff --git a/SoftLayer/CLI/block/count.py b/SoftLayer/CLI/block/count.py index a9b5e2741..dc4fb89c1 100644 --- a/SoftLayer/CLI/block/count.py +++ b/SoftLayer/CLI/block/count.py @@ -3,19 +3,9 @@ import click import SoftLayer -from SoftLayer.CLI import columns as column_helper from SoftLayer.CLI import environment from SoftLayer.CLI import formatting -COLUMNS = [ - column_helper.Column('Datacenter', - ('serviceResource', 'datacenter', 'name'), - mask="serviceResource.datacenter.name"), - column_helper.Column('Count', - '', - mask=None) -] - DEFAULT_COLUMNS = [ 'Datacenter', 'Count' @@ -25,13 +15,8 @@ @click.command() @click.option('--datacenter', '-d', help='Datacenter shortname') @click.option('--sortby', help='Column to sort by', default='Datacenter') -@click.option('--columns', - callback=column_helper.get_formatter(COLUMNS), - help='Columns to display. Options: {0}'.format( - ', '.join(column.name for column in COLUMNS)), - default=','.join(DEFAULT_COLUMNS)) @environment.pass_env -def cli(env, sortby, columns, datacenter): +def cli(env, sortby, datacenter): """List number of block storage volumes per datacenter.""" block_manager = SoftLayer.BlockStorageManager(env.client) mask = "mask[serviceResource[datacenter[name]],"\ @@ -50,7 +35,7 @@ def cli(env, sortby, columns, datacenter): else: datacenters[datacenter_name] += 1 - table = formatting.KeyValueTable(columns.columns) + table = formatting.KeyValueTable(DEFAULT_COLUMNS) table.sortby = sortby for datacenter_name in datacenters: table.add_row([datacenter_name, datacenters[datacenter_name]]) diff --git a/SoftLayer/CLI/file/count.py b/SoftLayer/CLI/file/count.py index 7cf3d2655..addb14300 100644 --- a/SoftLayer/CLI/file/count.py +++ b/SoftLayer/CLI/file/count.py @@ -3,19 +3,9 @@ import click import SoftLayer -from SoftLayer.CLI import columns as column_helper from SoftLayer.CLI import environment from SoftLayer.CLI import formatting -COLUMNS = [ - column_helper.Column('Datacenter', - ('serviceResource', 'datacenter', 'name'), - mask="serviceResource.datacenter.name"), - column_helper.Column('Count', - '', - mask=None) -] - DEFAULT_COLUMNS = [ 'Datacenter', 'Count' @@ -25,13 +15,8 @@ @click.command() @click.option('--datacenter', '-d', help='Datacenter shortname') @click.option('--sortby', help='Column to sort by', default='Datacenter') -@click.option('--columns', - callback=column_helper.get_formatter(COLUMNS), - help='Columns to display. Options: {0}'.format( - ', '.join(column.name for column in COLUMNS)), - default=','.join(DEFAULT_COLUMNS)) @environment.pass_env -def cli(env, sortby, columns, datacenter): +def cli(env, sortby, datacenter): """List number of file storage volumes per datacenter.""" file_manager = SoftLayer.FileStorageManager(env.client) mask = "mask[serviceResource[datacenter[name]],"\ @@ -49,7 +34,7 @@ def cli(env, sortby, columns, datacenter): else: datacenters[datacenter_name] += 1 - table = formatting.KeyValueTable(columns.columns) + table = formatting.KeyValueTable(DEFAULT_COLUMNS) table.sortby = sortby for datacenter_name in datacenters: table.add_row([datacenter_name, datacenters[datacenter_name]])