Fix output of interface-attach command
Add output of a result in the 'nova interface-attach' command when it is successful. Make the following methods return a 'NetworkInterface' object instead of a 'Server' object. * The 'interface_attach' method in the 'novaclient.v2.Server' class * The 'interface_attach' method in the 'novaclient.v2.ServerManager' class Remove unnecessary code in the 'nova interface-detach' command because the response body is not returned. Change-Id: Id5316d8ad4a4b67e8399b51e602aafc83bc128c6 Closes-Bug: #1816511
This commit is contained in:
parent
81ea9887f0
commit
7e56102201
@ -358,15 +358,19 @@ class Manager(HookableMixin):
|
|||||||
return self.resource_class(self, content, loaded=True,
|
return self.resource_class(self, content, loaded=True,
|
||||||
resp=resp)
|
resp=resp)
|
||||||
|
|
||||||
def _create(self, url, body, response_key, return_raw=False, **kwargs):
|
def _create(self, url, body, response_key, return_raw=False,
|
||||||
|
obj_class=None, **kwargs):
|
||||||
self.run_hooks('modify_body_for_create', body, **kwargs)
|
self.run_hooks('modify_body_for_create', body, **kwargs)
|
||||||
resp, body = self.api.client.post(url, body=body)
|
resp, body = self.api.client.post(url, body=body)
|
||||||
if return_raw:
|
if return_raw:
|
||||||
return self.convert_into_with_meta(body[response_key], resp)
|
return self.convert_into_with_meta(body[response_key], resp)
|
||||||
|
|
||||||
with self.completion_cache('human_id', self.resource_class, mode="a"):
|
if obj_class is None:
|
||||||
with self.completion_cache('uuid', self.resource_class, mode="a"):
|
obj_class = self.resource_class
|
||||||
return self.resource_class(self, body[response_key], resp=resp)
|
|
||||||
|
with self.completion_cache('human_id', obj_class, mode="a"):
|
||||||
|
with self.completion_cache('uuid', obj_class, mode="a"):
|
||||||
|
return obj_class(self, body[response_key], resp=resp)
|
||||||
|
|
||||||
def _delete(self, url):
|
def _delete(self, url):
|
||||||
resp, body = self.api.client.delete(url)
|
resp, body = self.api.client.delete(url)
|
||||||
|
@ -326,3 +326,20 @@ class TestServersDetailsFlavorInfo(base.ClientTestBase):
|
|||||||
flavor_output = self.nova("flavor-show %s" % self.flavor.id)
|
flavor_output = self.nova("flavor-show %s" % self.flavor.id)
|
||||||
flavor_val = self._get_value_from_the_table(flavor_output, 'disk')
|
flavor_val = self._get_value_from_the_table(flavor_output, 'disk')
|
||||||
self.assertEqual(flavor_val, server_flavor_val)
|
self.assertEqual(flavor_val, server_flavor_val)
|
||||||
|
|
||||||
|
|
||||||
|
class TestInterfaceAttach(base.ClientTestBase):
|
||||||
|
|
||||||
|
COMPUTE_API_VERSION = '2.latest'
|
||||||
|
|
||||||
|
def test_interface_attach(self):
|
||||||
|
server = self._create_server()
|
||||||
|
output = self.nova("interface-attach --net-id %s %s" %
|
||||||
|
(self.network.id, server.id))
|
||||||
|
|
||||||
|
for key in ('ip_address', 'mac_addr', 'port_id', 'port_state'):
|
||||||
|
self._get_value_from_the_table(output, key)
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
self.network.id,
|
||||||
|
self._get_value_from_the_table(output, 'net_id'))
|
||||||
|
@ -941,6 +941,7 @@ class ServersTest(utils.FixturedTestCase):
|
|||||||
ret = s.interface_attach(None, None, None)
|
ret = s.interface_attach(None, None, None)
|
||||||
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
||||||
self.assert_called('POST', '/servers/1234/os-interface')
|
self.assert_called('POST', '/servers/1234/os-interface')
|
||||||
|
self.assertIsInstance(ret, servers.NetworkInterface)
|
||||||
|
|
||||||
def test_interface_detach(self):
|
def test_interface_detach(self):
|
||||||
s = self.cs.servers.get(1234)
|
s = self.cs.servers.get(1234)
|
||||||
@ -1409,6 +1410,7 @@ class ServersV249Test(ServersV2_37Test):
|
|||||||
{'interfaceAttachment':
|
{'interfaceAttachment':
|
||||||
{'port_id': '7f42712e-63fe-484c-a6df-30ae4867ff66',
|
{'port_id': '7f42712e-63fe-484c-a6df-30ae4867ff66',
|
||||||
'tag': 'test_tag'}})
|
'tag': 'test_tag'}})
|
||||||
|
self.assertIsInstance(ret, servers.NetworkInterface)
|
||||||
|
|
||||||
def test_add_fixed_ip(self):
|
def test_add_fixed_ip(self):
|
||||||
# novaclient.v2.servers.Server.add_fixed_ip()
|
# novaclient.v2.servers.Server.add_fixed_ip()
|
||||||
|
@ -1944,7 +1944,8 @@ class ServerManager(base.BootingManagerWithFind):
|
|||||||
{'ip_address': fixed_ip}]
|
{'ip_address': fixed_ip}]
|
||||||
|
|
||||||
return self._create('/servers/%s/os-interface' % base.getid(server),
|
return self._create('/servers/%s/os-interface' % base.getid(server),
|
||||||
body, 'interfaceAttachment')
|
body, 'interfaceAttachment',
|
||||||
|
obj_class=NetworkInterface)
|
||||||
|
|
||||||
@api_versions.wraps("2.49")
|
@api_versions.wraps("2.49")
|
||||||
def interface_attach(self, server, port_id, net_id, fixed_ip, tag=None):
|
def interface_attach(self, server, port_id, net_id, fixed_ip, tag=None):
|
||||||
@ -1973,7 +1974,8 @@ class ServerManager(base.BootingManagerWithFind):
|
|||||||
body['interfaceAttachment']['tag'] = tag
|
body['interfaceAttachment']['tag'] = tag
|
||||||
|
|
||||||
return self._create('/servers/%s/os-interface' % base.getid(server),
|
return self._create('/servers/%s/os-interface' % base.getid(server),
|
||||||
body, 'interfaceAttachment')
|
body, 'interfaceAttachment',
|
||||||
|
obj_class=NetworkInterface)
|
||||||
|
|
||||||
def interface_detach(self, server, port_id):
|
def interface_detach(self, server, port_id):
|
||||||
"""
|
"""
|
||||||
|
@ -4530,10 +4530,21 @@ def do_interface_attach(cs, args):
|
|||||||
if 'tag' in args and args.tag:
|
if 'tag' in args and args.tag:
|
||||||
update_kwargs['tag'] = args.tag
|
update_kwargs['tag'] = args.tag
|
||||||
|
|
||||||
res = server.interface_attach(args.port_id, args.net_id, args.fixed_ip,
|
network_interface = server.interface_attach(
|
||||||
**update_kwargs)
|
args.port_id, args.net_id, args.fixed_ip, **update_kwargs)
|
||||||
if isinstance(res, dict):
|
|
||||||
utils.print_dict(res)
|
_print_interface(network_interface)
|
||||||
|
|
||||||
|
|
||||||
|
def _print_interface(interface):
|
||||||
|
ni_dict = interface.to_dict()
|
||||||
|
|
||||||
|
fixed_ips = ni_dict.pop('fixed_ips', None)
|
||||||
|
ni_dict['ip_address'] = (",".join(
|
||||||
|
[fip['ip_address'] for fip in fixed_ips])
|
||||||
|
if fixed_ips is not None else None)
|
||||||
|
|
||||||
|
utils.print_dict(ni_dict)
|
||||||
|
|
||||||
|
|
||||||
@utils.arg('server', metavar='<server>', help=_('Name or ID of server.'))
|
@utils.arg('server', metavar='<server>', help=_('Name or ID of server.'))
|
||||||
@ -4541,10 +4552,7 @@ def do_interface_attach(cs, args):
|
|||||||
def do_interface_detach(cs, args):
|
def do_interface_detach(cs, args):
|
||||||
"""Detach a network interface from a server."""
|
"""Detach a network interface from a server."""
|
||||||
server = _find_server(cs, args.server)
|
server = _find_server(cs, args.server)
|
||||||
|
server.interface_detach(args.port_id)
|
||||||
res = server.interface_detach(args.port_id)
|
|
||||||
if isinstance(res, dict):
|
|
||||||
utils.print_dict(res)
|
|
||||||
|
|
||||||
|
|
||||||
@api_versions.wraps("2.17")
|
@api_versions.wraps("2.17")
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
upgrade:
|
||||||
|
- The ``nova interface-attach`` command shows output of its result
|
||||||
|
when it is successful.
|
||||||
|
- |
|
||||||
|
The following methods return a ``NetworkInterface`` object
|
||||||
|
instead of a ``Server`` object.
|
||||||
|
|
||||||
|
* The ``interface_attach`` method in the ``novaclient.v2.Server`` class
|
||||||
|
* The ``interface_attach`` method in the ``novaclient.v2.ServerManager``
|
||||||
|
class
|
Loading…
Reference in New Issue
Block a user