Skip to content

Commit c6e46aa

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "[Subnet pool] Add 'subnet pool create' command support"
2 parents cf0f229 + 3d741d3 commit c6e46aa

5 files changed

Lines changed: 176 additions & 4 deletions

File tree

doc/source/command-objects/subnet-pool.rst

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,43 @@ subnet pool
44

55
Network v2
66

7+
subnet pool create
8+
------------------
9+
10+
Create subnet pool
11+
12+
.. program:: subnet pool create
13+
.. code:: bash
14+
15+
os subnet pool create
16+
[--pool-prefix <pool-prefix> [...]]
17+
[--default-prefix-length <default-prefix-length>]
18+
[--min-prefix-length <min-prefix-length>]
19+
[--max-prefix-length <max-prefix-length>]
20+
<name>
21+
22+
.. option:: --pool-prefix <pool-prefix>
23+
24+
Set subnet pool prefixes (in CIDR notation).
25+
Repeat this option to set multiple prefixes.
26+
27+
.. option:: --default-prefix-length <default-prefix-length>
28+
29+
Set subnet pool default prefix length
30+
31+
.. option:: --min-prefix-length <min-prefix-length>
32+
33+
Set subnet pool minimum prefix length
34+
35+
.. option:: --max-prefix-length <max-prefix-length>
36+
37+
Set subnet pool maximum prefix length
38+
39+
.. _subnet_pool_create-name:
40+
.. describe:: <name>
41+
42+
Name of the new subnet pool
43+
744
subnet pool delete
845
------------------
946

openstackclient/network/v2/subnet_pool.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,29 @@ def _add_prefix_options(parser):
7777
)
7878

7979

80+
class CreateSubnetPool(command.ShowOne):
81+
"""Create subnet pool"""
82+
83+
def get_parser(self, prog_name):
84+
parser = super(CreateSubnetPool, self).get_parser(prog_name)
85+
parser.add_argument(
86+
'name',
87+
metavar="<name>",
88+
help='Name of the new subnet pool'
89+
)
90+
_add_prefix_options(parser)
91+
92+
return parser
93+
94+
def take_action(self, parsed_args):
95+
client = self.app.client_manager.network
96+
attrs = _get_attrs(parsed_args)
97+
obj = client.create_subnet_pool(**attrs)
98+
columns = _get_columns(obj)
99+
data = utils.get_item_properties(obj, columns, formatters=_formatters)
100+
return (columns, data)
101+
102+
80103
class DeleteSubnetPool(command.Command):
81104
"""Delete subnet pool"""
82105

openstackclient/tests/network/v2/fakes.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -734,15 +734,15 @@ def create_one_subnet_pool(attrs={}, methods={}):
734734
'id': 'subnet-pool-id-' + uuid.uuid4().hex,
735735
'name': 'subnet-pool-name-' + uuid.uuid4().hex,
736736
'prefixes': ['10.0.0.0/24', '10.1.0.0/24'],
737-
'default_prefixlen': 8,
737+
'default_prefixlen': '8',
738738
'address_scope_id': 'address-scope-id-' + uuid.uuid4().hex,
739739
'tenant_id': 'project-id-' + uuid.uuid4().hex,
740740
'is_default': False,
741741
'shared': False,
742-
'max_prefixlen': 32,
743-
'min_prefixlen': 8,
742+
'max_prefixlen': '32',
743+
'min_prefixlen': '8',
744744
'default_quota': None,
745-
'ip_version': 4,
745+
'ip_version': '4',
746746
}
747747

748748
# Overwrite default attributes.

openstackclient/tests/network/v2/test_subnet_pool.py

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,117 @@ def setUp(self):
3030
self.network = self.app.client_manager.network
3131

3232

33+
class TestCreateSubnetPool(TestSubnetPool):
34+
35+
# The new subnet pool to create.
36+
_subnet_pool = network_fakes.FakeSubnetPool.create_one_subnet_pool()
37+
38+
columns = (
39+
'address_scope_id',
40+
'default_prefixlen',
41+
'default_quota',
42+
'id',
43+
'ip_version',
44+
'is_default',
45+
'max_prefixlen',
46+
'min_prefixlen',
47+
'name',
48+
'prefixes',
49+
'project_id',
50+
'shared',
51+
)
52+
data = (
53+
_subnet_pool.address_scope_id,
54+
_subnet_pool.default_prefixlen,
55+
_subnet_pool.default_quota,
56+
_subnet_pool.id,
57+
_subnet_pool.ip_version,
58+
_subnet_pool.is_default,
59+
_subnet_pool.max_prefixlen,
60+
_subnet_pool.min_prefixlen,
61+
_subnet_pool.name,
62+
utils.format_list(_subnet_pool.prefixes),
63+
_subnet_pool.project_id,
64+
_subnet_pool.shared,
65+
)
66+
67+
def setUp(self):
68+
super(TestCreateSubnetPool, self).setUp()
69+
70+
self.network.create_subnet_pool = mock.Mock(
71+
return_value=self._subnet_pool)
72+
73+
# Get the command object to test
74+
self.cmd = subnet_pool.CreateSubnetPool(self.app, self.namespace)
75+
76+
def test_create_no_options(self):
77+
arglist = []
78+
verifylist = []
79+
80+
# Missing required args should bail here
81+
self.assertRaises(tests_utils.ParserException, self.check_parser,
82+
self.cmd, arglist, verifylist)
83+
84+
def test_create_default_options(self):
85+
arglist = [
86+
'--pool-prefix', '10.0.10.0/24',
87+
self._subnet_pool.name,
88+
]
89+
verifylist = [
90+
('prefixes', ['10.0.10.0/24']),
91+
('name', self._subnet_pool.name),
92+
]
93+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
94+
95+
columns, data = (self.cmd.take_action(parsed_args))
96+
97+
self.network.create_subnet_pool.assert_called_with(**{
98+
'prefixes': ['10.0.10.0/24'],
99+
'name': self._subnet_pool.name,
100+
})
101+
self.assertEqual(self.columns, columns)
102+
self.assertEqual(self.data, data)
103+
104+
def test_create_prefixlen_options(self):
105+
arglist = [
106+
'--default-prefix-length', self._subnet_pool.default_prefixlen,
107+
'--max-prefix-length', self._subnet_pool.max_prefixlen,
108+
'--min-prefix-length', self._subnet_pool.min_prefixlen,
109+
self._subnet_pool.name,
110+
]
111+
verifylist = [
112+
('default_prefix_length', self._subnet_pool.default_prefixlen),
113+
('max_prefix_length', self._subnet_pool.max_prefixlen),
114+
('min_prefix_length', self._subnet_pool.min_prefixlen),
115+
('name', self._subnet_pool.name),
116+
]
117+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
118+
119+
columns, data = (self.cmd.take_action(parsed_args))
120+
121+
self.network.create_subnet_pool.assert_called_with(**{
122+
'default_prefix_length': self._subnet_pool.default_prefixlen,
123+
'max_prefix_length': self._subnet_pool.max_prefixlen,
124+
'min_prefix_length': self._subnet_pool.min_prefixlen,
125+
'name': self._subnet_pool.name,
126+
})
127+
self.assertEqual(self.columns, columns)
128+
self.assertEqual(self.data, data)
129+
130+
def test_create_len_negative(self):
131+
arglist = [
132+
self._subnet_pool.name,
133+
'--min-prefix-length', '-16',
134+
]
135+
verifylist = [
136+
('subnet_pool', self._subnet_pool.name),
137+
('min_prefix_length', '-16'),
138+
]
139+
140+
self.assertRaises(argparse.ArgumentTypeError, self.check_parser,
141+
self.cmd, arglist, verifylist)
142+
143+
33144
class TestDeleteSubnetPool(TestSubnetPool):
34145

35146
# The subnet pool to delete.

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,7 @@ openstack.network.v2 =
355355
subnet_list = openstackclient.network.v2.subnet:ListSubnet
356356
subnet_show = openstackclient.network.v2.subnet:ShowSubnet
357357

358+
subnet_pool_create = openstackclient.network.v2.subnet_pool:CreateSubnetPool
358359
subnet_pool_delete = openstackclient.network.v2.subnet_pool:DeleteSubnetPool
359360
subnet_pool_list = openstackclient.network.v2.subnet_pool:ListSubnetPool
360361
subnet_pool_set = openstackclient.network.v2.subnet_pool:SetSubnetPool

0 commit comments

Comments
 (0)