Skip to content

Commit 4be716e

Browse files
tang-chenTerryHowe
andcommitted
Migrate network client to SDK.
The previous patches have migrate all network commands to the new version using sdk. This patch will remove the temporary method, and implement a new make_client() to create sdk network client. And also, find() in openstackclient/network/common.py must support sdk. The logic of this function will become much easier than before, so this patch also removes two useless test cases of find(). This patch will also remove the patched methods in tests. Change-Id: Ic2f7bca073beb9757172d16f95d9b82c48cbbc12 Implements: blueprint neutron-client Co-Authored-By: Terry Howe <terrylhowe@gmail.com> Co-Authored-By: Tang Chen <tangchen@cn.fujitsu.com>
1 parent 2a2cb4f commit 4be716e

6 files changed

Lines changed: 48 additions & 163 deletions

File tree

openstackclient/network/client.py

Lines changed: 10 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
import logging
1515

16+
from openstack import connection
17+
1618
from openstackclient.common import utils
1719

1820

@@ -22,62 +24,18 @@
2224
API_VERSION_OPTION = 'os_network_api_version'
2325
API_NAME = "network"
2426
API_VERSIONS = {
25-
"2.0": "neutronclient.v2_0.client.Client",
26-
"2": "neutronclient.v2_0.client.Client",
27-
}
28-
# Translate our API version to auth plugin version prefix
29-
API_VERSION_MAP = {
30-
'2.0': 'v2.0',
31-
'2': 'v2.0',
32-
}
33-
34-
NETWORK_API_TYPE = 'network'
35-
NETWORK_API_VERSIONS = {
36-
'2.0': 'openstackclient.api.network_v2.APIv2',
37-
'2': 'openstackclient.api.network_v2.APIv2',
27+
"2.0": "openstack.connection.Connection",
28+
"2": "openstack.connection.Connection",
3829
}
3930

4031

4132
def make_client(instance):
42-
"""Returns an network service client"""
43-
network_client = utils.get_client_class(
44-
API_NAME,
45-
instance._api_version[API_NAME],
46-
API_VERSIONS)
47-
LOG.debug('Instantiating network client: %s', network_client)
48-
49-
endpoint = instance.get_endpoint_for_service_type(
50-
API_NAME,
51-
region_name=instance._region_name,
52-
interface=instance._interface,
53-
)
54-
55-
# Remember endpoint_type only if it is set
56-
kwargs = utils.build_kwargs_dict('endpoint_type', instance._interface)
57-
58-
client = network_client(
59-
session=instance.session,
60-
region_name=instance._region_name,
61-
**kwargs
62-
)
63-
64-
network_api = utils.get_client_class(
65-
API_NAME,
66-
instance._api_version[API_NAME],
67-
NETWORK_API_VERSIONS)
68-
LOG.debug('Instantiating network api: %s', network_client)
69-
70-
# v2 is hard-coded until discovery is completed, neutron only has one atm
71-
client.api = network_api(
72-
session=instance.session,
73-
service_type=NETWORK_API_TYPE,
74-
endpoint='/'.join([
75-
endpoint,
76-
API_VERSION_MAP[instance._api_version[API_NAME]],
77-
])
78-
)
79-
80-
return client
33+
"""Returns a network proxy"""
34+
conn = connection.Connection(authenticator=instance.session.auth)
35+
LOG.debug('Connection: %s', conn)
36+
LOG.debug('Network client initialized using OpenStack SDK: %s',
37+
conn.network)
38+
return conn.network
8139

8240

8341
def build_option_parser(parser):

openstackclient/network/common.py

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
# under the License.
1212
#
1313

14-
from openstackclient.common import exceptions
15-
1614

1715
def find(client, resource, resources, name_or_id, name_attr='name'):
1816
"""Find a network resource
@@ -26,22 +24,6 @@ def find(client, resource, resources, name_or_id, name_attr='name'):
2624
For example:
2725
n = find(netclient, 'network', 'networks', 'matrix')
2826
"""
29-
list_method = getattr(client, "list_%s" % resources)
30-
31-
# Search by name
32-
kwargs = {name_attr: name_or_id, 'fields': 'id'}
33-
data = list_method(**kwargs)
34-
info = data[resources]
35-
if len(info) == 1:
36-
return info[0]['id']
37-
if len(info) > 1:
38-
msg = "More than one %s exists with the name '%s'."
39-
raise exceptions.CommandError(msg % (resource, name_or_id))
40-
41-
# Search by id
42-
data = list_method(id=name_or_id, fields='id')
43-
info = data[resources]
44-
if len(info) == 1:
45-
return info[0]['id']
46-
msg = "No %s with a name or ID of '%s' exists." % (resource, name_or_id)
47-
raise exceptions.CommandError(msg)
27+
list_method = getattr(client, "find_%s" % resource)
28+
data = list_method(name_or_id, ignore_missing=False)
29+
return data.id

openstackclient/network/v2/network.py

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
from cliff import lister
2020
from cliff import show
2121

22-
from openstack import connection
23-
2422
from openstackclient.common import exceptions
2523
from openstackclient.common import utils
2624
from openstackclient.identity import common as identity_common
@@ -41,12 +39,6 @@ def _format_router_external(item):
4139
}
4240

4341

44-
def _make_client_sdk(instance):
45-
"""Return a network proxy"""
46-
conn = connection.Connection(authenticator=instance.session.auth)
47-
return conn.network
48-
49-
5042
class CreateNetwork(show.ShowOne):
5143
"""Create new network"""
5244

@@ -96,8 +88,6 @@ def get_parser(self, prog_name):
9688

9789
def take_action(self, parsed_args):
9890
self.log.debug('take_action(%s)' % parsed_args)
99-
self.app.client_manager.network = \
100-
_make_client_sdk(self.app.client_manager)
10191
client = self.app.client_manager.network
10292
body = self.get_body(parsed_args)
10393
obj = client.create_network(**body)
@@ -138,8 +128,6 @@ def get_parser(self, prog_name):
138128

139129
def take_action(self, parsed_args):
140130
self.log.debug('take_action(%s)' % parsed_args)
141-
self.app.client_manager.network = \
142-
_make_client_sdk(self.app.client_manager)
143131
client = self.app.client_manager.network
144132
for network in parsed_args.networks:
145133
obj = client.find_network(network)
@@ -170,8 +158,6 @@ def get_parser(self, prog_name):
170158

171159
def take_action(self, parsed_args):
172160
self.log.debug('take_action(%s)' % parsed_args)
173-
self.app.client_manager.network = \
174-
_make_client_sdk(self.app.client_manager)
175161
client = self.app.client_manager.network
176162

177163
if parsed_args.long:
@@ -270,8 +256,6 @@ def get_parser(self, prog_name):
270256

271257
def take_action(self, parsed_args):
272258
self.log.debug('take_action(%s)' % parsed_args)
273-
self.app.client_manager.network = \
274-
_make_client_sdk(self.app.client_manager)
275259
client = self.app.client_manager.network
276260
obj = client.find_network(parsed_args.identifier, ignore_missing=False)
277261

@@ -306,8 +290,6 @@ def get_parser(self, prog_name):
306290

307291
def take_action(self, parsed_args):
308292
self.log.debug('take_action(%s)' % parsed_args)
309-
self.app.client_manager.network = \
310-
_make_client_sdk(self.app.client_manager)
311293
client = self.app.client_manager.network
312294
obj = client.find_network(parsed_args.identifier, ignore_missing=False)
313295
columns = sorted(obj.keys())

openstackclient/tests/compute/v2/test_server.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,18 @@ def test_server_create_with_network(self):
231231
list_networks.return_value = {'networks': [{'id': 'net1_uuid'}]}
232232
list_ports.return_value = {'ports': [{'id': 'port1_uuid'}]}
233233

234+
# Mock sdk APIs.
235+
_network = mock.Mock()
236+
_network.id = 'net1_uuid'
237+
_port = mock.Mock()
238+
_port.id = 'port1_uuid'
239+
find_network = mock.Mock()
240+
find_port = mock.Mock()
241+
find_network.return_value = _network
242+
find_port.return_value = _port
243+
self.app.client_manager.network.find_network = find_network
244+
self.app.client_manager.network.find_port = find_port
245+
234246
# DisplayCommandBase.take_action() returns two tuples
235247
columns, data = self.cmd.take_action(parsed_args)
236248

openstackclient/tests/network/test_common.py

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
import mock
1515

16-
from openstackclient.common import exceptions
1716
from openstackclient.network import common
1817
from openstackclient.tests import utils
1918

@@ -28,45 +27,31 @@ def setUp(self):
2827
super(TestFind, self).setUp()
2928
self.mock_client = mock.Mock()
3029
self.list_resources = mock.Mock()
31-
self.mock_client.list_resources = self.list_resources
32-
self.matrix = {'id': ID}
30+
self.mock_client.find_resource = self.list_resources
31+
self.resource = mock.Mock()
32+
self.resource.id = ID
3333

3434
def test_name(self):
35-
self.list_resources.return_value = {RESOURCES: [self.matrix]}
35+
self.list_resources.return_value = self.resource
3636

3737
result = common.find(self.mock_client, RESOURCE, RESOURCES, NAME)
3838

3939
self.assertEqual(ID, result)
40-
self.list_resources.assert_called_with(fields='id', name=NAME)
40+
self.list_resources.assert_called_with(NAME, ignore_missing=False)
4141

4242
def test_id(self):
43-
self.list_resources.side_effect = [{RESOURCES: []},
44-
{RESOURCES: [self.matrix]}]
43+
self.list_resources.return_value = self.resource
4544

4645
result = common.find(self.mock_client, RESOURCE, RESOURCES, NAME)
4746

4847
self.assertEqual(ID, result)
49-
self.list_resources.assert_called_with(fields='id', id=NAME)
48+
self.list_resources.assert_called_with(NAME, ignore_missing=False)
5049

5150
def test_nameo(self):
52-
self.list_resources.return_value = {RESOURCES: [self.matrix]}
51+
self.list_resources.return_value = self.resource
5352

5453
result = common.find(self.mock_client, RESOURCE, RESOURCES, NAME,
5554
name_attr='nameo')
5655

5756
self.assertEqual(ID, result)
58-
self.list_resources.assert_called_with(fields='id', nameo=NAME)
59-
60-
def test_dups(self):
61-
dup = {'id': 'Larry'}
62-
self.list_resources.return_value = {RESOURCES: [self.matrix, dup]}
63-
64-
self.assertRaises(exceptions.CommandError, common.find,
65-
self.mock_client, RESOURCE, RESOURCES, NAME)
66-
67-
def test_nada(self):
68-
self.list_resources.side_effect = [{RESOURCES: []},
69-
{RESOURCES: []}]
70-
71-
self.assertRaises(exceptions.CommandError, common.find,
72-
self.mock_client, RESOURCE, RESOURCES, NAME)
57+
self.list_resources.assert_called_with(NAME, ignore_missing=False)

0 commit comments

Comments
 (0)