diff options
| author | Stephen Finucane <sfinucan@redhat.com> | 2020-11-04 10:14:00 +0000 |
|---|---|---|
| committer | Stephen Finucane <sfinucan@redhat.com> | 2021-01-06 12:02:24 +0000 |
| commit | 03776d82e58622b30b90260ed9c374b0cfc70f2b (patch) | |
| tree | 5dc89681a2ea6d8ae00680a769f113b24a9e47c8 /openstackclient/compute | |
| parent | f2c49142f057c2783bea46367ca66e4c19067c2e (diff) | |
| download | python-openstackclient-03776d82e58622b30b90260ed9c374b0cfc70f2b.tar.gz | |
compute: Fix 'server * -f yaml' output
Make use of 'FormattableColumn'-derived formatters, which provide better
output than what we were using before, particularly for the YAML output
format. For example, compare before for the 'server show' command:
$ openstack --os-compute-api-version 2.79 server show test-server -f yaml
...
addresses: private=fdff:77e3:9bb4:0:f816:3eff:fe6d:a944, 10.0.0.44
flavor: disk='1', ephemeral='0', extra_specs.hw_rng:allowed='True', original_name='m1.tiny',
ram='512', swap='0', vcpus='1'
...
To after:
$ openstack --os-compute-api-version 2.79 server show test-server -f yaml
...
addresses:
private:
- fdff:77e3:9bb4:0:f816:3eff:fe6d:a944
- 10.0.0.44
flavor:
disk: 1
ephemeral: 0
extra_specs:
hw_rng:allowed: 'True'
original_name: m1.tiny
ram: 512
swap: 0
vcpus: 1
...
Similarly, compare before for 'server list':
$ openstack --os-compute-api-version 2.79 server list -f yaml
- ...
Networks: private=fdff:77e3:9bb4:0:f816:3eff:fe6d:a944, 10.0.0.44
Power State: Running
Properties: ''
...
To after:
$ openstack --os-compute-api-version 2.79 server list -f yaml
- ...
Networks:
private:
- fdff:77e3:9bb4:0:f816:3eff:fe6d:a944
- 10.0.0.44
Power State: 1
Properties: {}
...
We also fix the human-readable output for the 'tags' field.
Before:
$ openstack --os-compute-api-version 2.79 server list
...
| tags | ['bar', 'foo'] |
After:
$ openstack --os-compute-api-version 2.79 server list
...
| tags | bar, foo |
Change-Id: I7a8349106e211c57c4577b75326b39b88bd9ac1e
Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
Diffstat (limited to 'openstackclient/compute')
| -rw-r--r-- | openstackclient/compute/v2/server.py | 58 |
1 files changed, 18 insertions, 40 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py index 2512a877..ba0243ef 100644 --- a/openstackclient/compute/v2/server.py +++ b/openstackclient/compute/v2/server.py @@ -21,6 +21,7 @@ import io import logging import os +from cliff import columns as cliff_columns import iso8601 from novaclient import api_versions from novaclient.v2 import servers @@ -41,28 +42,9 @@ LOG = logging.getLogger(__name__) IMAGE_STRING_FOR_BFV = 'N/A (booted from volume)' -def _format_servers_list_networks(networks): - """Return a formatted string of a server's networks +class PowerStateColumn(cliff_columns.FormattableColumn): + """Generate a formatted string of a server's power state.""" - :param networks: a Server.networks field - :rtype: a string of formatted network addresses - """ - output = [] - for (network, addresses) in networks.items(): - if not addresses: - continue - addresses_csv = ', '.join(addresses) - group = "%s=%s" % (network, addresses_csv) - output.append(group) - return '; '.join(output) - - -def _format_servers_list_power_state(state): - """Return a formatted string of a server's power state - - :param state: the power state number of a server - :rtype: a string mapped to the power state number - """ power_states = [ 'NOSTATE', # 0x00 'Running', # 0x01 @@ -74,10 +56,11 @@ def _format_servers_list_power_state(state): 'Suspended' # 0x07 ] - try: - return power_states[state] - except Exception: - return 'N/A' + def human_readable(self): + try: + return self.power_states[self._value] + except Exception: + return 'N/A' def _get_ip_address(addresses, address_type, ip_address_family): @@ -169,7 +152,7 @@ def _prep_server_detail(compute_client, image_client, server, refresh=True): except Exception: info['flavor'] = flavor_id else: - info['flavor'] = utils.format_dict(flavor_info) + info['flavor'] = format_columns.DictColumn(flavor_info) if 'os-extended-volumes:volumes_attached' in info: info.update( @@ -185,19 +168,15 @@ def _prep_server_detail(compute_client, image_client, server, refresh=True): info.pop('security_groups')) } ) + if 'tags' in info: + info.update({'tags': format_columns.ListColumn(info.pop('tags'))}) + # NOTE(dtroyer): novaclient splits these into separate entries... # Format addresses in a useful way - info['addresses'] = _format_servers_list_networks(server.networks) + info['addresses'] = format_columns.DictListColumn(server.networks) # Map 'metadata' field to 'properties' - if not info['metadata']: - info.update( - {'properties': utils.format_dict(info.pop('metadata'))} - ) - else: - info.update( - {'properties': format_columns.DictColumn(info.pop('metadata'))} - ) + info['properties'] = format_columns.DictColumn(info.pop('metadata')) # Migrate tenant_id to project_id naming if 'tenant_id' in info: @@ -205,7 +184,7 @@ def _prep_server_detail(compute_client, image_client, server, refresh=True): # Map power state num to meaningful string if 'OS-EXT-STS:power_state' in info: - info['OS-EXT-STS:power_state'] = _format_servers_list_power_state( + info['OS-EXT-STS:power_state'] = PowerStateColumn( info['OS-EXT-STS:power_state']) # Remove values that are long and not too useful @@ -1873,10 +1852,9 @@ class ListServer(command.Lister): s, columns, mixed_case_fields=mixed_case_fields, formatters={ - 'OS-EXT-STS:power_state': - _format_servers_list_power_state, - 'Networks': _format_servers_list_networks, - 'Metadata': utils.format_dict, + 'OS-EXT-STS:power_state': PowerStateColumn, + 'Networks': format_columns.DictListColumn, + 'Metadata': format_columns.DictColumn, }, ) for s in data ), |
