From 03776d82e58622b30b90260ed9c374b0cfc70f2b Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Wed, 4 Nov 2020 10:14:00 +0000 Subject: 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 --- .../tests/functional/compute/v2/test_server.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'openstackclient/tests/functional') diff --git a/openstackclient/tests/functional/compute/v2/test_server.py b/openstackclient/tests/functional/compute/v2/test_server.py index 44d9c61f..bad3f93d 100644 --- a/openstackclient/tests/functional/compute/v2/test_server.py +++ b/openstackclient/tests/functional/compute/v2/test_server.py @@ -10,6 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. +import itertools import json import time import uuid @@ -346,6 +347,14 @@ class ServerTests(common.ComputeTestCase): # DevStack without cells. self.skipTest("No Network service present") + def _chain_addresses(addresses): + # Flatten a dict of lists mapping network names to IP addresses, + # returning only the IP addresses + # + # >>> _chain_addresses({'private': ['10.1.0.32', '172.24.5.41']}) + # ['10.1.0.32', '172.24.5.41'] + return itertools.chain(*[*addresses.values()]) + cmd_output = self.server_create() name = cmd_output['name'] self.wait_for_status(name, "ACTIVE") @@ -387,7 +396,7 @@ class ServerTests(common.ComputeTestCase): 'server show -f json ' + name )) - if floating_ip not in cmd_output['addresses']: + if floating_ip not in _chain_addresses(cmd_output['addresses']): # Hang out for a bit and try again print('retrying floating IP check') wait_time += 10 @@ -397,7 +406,7 @@ class ServerTests(common.ComputeTestCase): self.assertIn( floating_ip, - cmd_output['addresses'], + _chain_addresses(cmd_output['addresses']), ) # detach ip @@ -417,7 +426,7 @@ class ServerTests(common.ComputeTestCase): 'server show -f json ' + name )) - if floating_ip in cmd_output['addresses']: + if floating_ip in _chain_addresses(cmd_output['addresses']): # Hang out for a bit and try again print('retrying floating IP check') wait_time += 10 @@ -431,7 +440,7 @@ class ServerTests(common.ComputeTestCase): )) self.assertNotIn( floating_ip, - cmd_output['addresses'], + _chain_addresses(cmd_output['addresses']), ) def test_server_reboot(self): @@ -856,8 +865,7 @@ class ServerTests(common.ComputeTestCase): server = json.loads(self.openstack( 'server show -f json ' + server_name )) - self.assertIsNotNone(server['addresses']) - self.assertEqual('', server['addresses']) + self.assertEqual({}, server['addresses']) def test_server_create_with_security_group(self): """Test server create with security group ID and name""" -- cgit v1.2.1