diff --git a/novaclient/tests/unit/v2/test_shell.py b/novaclient/tests/unit/v2/test_shell.py index 5e9b9951a..ae11d89a0 100644 --- a/novaclient/tests/unit/v2/test_shell.py +++ b/novaclient/tests/unit/v2/test_shell.py @@ -1334,6 +1334,18 @@ class ShellTest(utils.TestCase): }}, ) + @mock.patch.object(servers.Server, 'networks', + new_callable=mock.PropertyMock) + def test_boot_with_not_found_when_accessing_addresses_attribute( + self, mock_networks): + mock_networks.side_effect = exceptions.NotFound( + 404, 'Instance %s could not be found.' % FAKE_UUID_1) + ex = self.assertRaises( + exceptions.CommandError, self.run_command, + 'boot --flavor 1 --image %s some-server' % FAKE_UUID_2) + self.assertIn('Instance %s could not be found.' % FAKE_UUID_1, + six.text_type(ex)) + def test_flavor_list(self): out, _ = self.run_command('flavor-list') self.assert_called_anytime('GET', '/flavors/detail') diff --git a/novaclient/v2/servers.py b/novaclient/v2/servers.py index 98f22ba2b..0843e4e3e 100644 --- a/novaclient/v2/servers.py +++ b/novaclient/v2/servers.py @@ -405,7 +405,7 @@ class Server(base.Resource): for network_label, address_list in self.addresses.items(): networks[network_label] = [a['addr'] for a in address_list] return networks - except Exception: + except AttributeError: return {} @api_versions.wraps("2.0", "2.24") diff --git a/novaclient/v2/shell.py b/novaclient/v2/shell.py index ef025a279..c98724c92 100644 --- a/novaclient/v2/shell.py +++ b/novaclient/v2/shell.py @@ -2368,7 +2368,11 @@ def _print_server(cs, args, server=None, wrap=0): minimal = getattr(args, "minimal", False) - networks = server.networks + try: + networks = server.networks + except Exception as e: + raise exceptions.CommandError(six.text_type(e)) + info = server.to_dict() for network_label, address_list in networks.items(): info['%s network' % network_label] = ', '.join(address_list)