summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-09-23 12:24:16 +0000
committerGerrit Code Review <review@openstack.org>2016-09-23 12:24:16 +0000
commit40cc493b78ebb5c131d993ebda96a912975f79e7 (patch)
tree3c49203aff8576bf348c557d9a2c14036434a16f
parent6a733bf3121eb62761883c73704e19d912edc58c (diff)
parent7f12b745ce509218f1ea38bb313d433688bcbf6f (diff)
downloadpython-openstackclient-40cc493b78ebb5c131d993ebda96a912975f79e7.tar.gz
Merge "Overwrite/Clear support for subnets"
-rw-r--r--doc/source/command-objects/subnet.rst15
-rw-r--r--openstackclient/network/v2/subnet.py30
-rw-r--r--openstackclient/tests/unit/network/v2/test_subnet.py33
-rw-r--r--releasenotes/notes/overwrite-options-for-subnet-76476127dcf321ad.yaml6
4 files changed, 79 insertions, 5 deletions
diff --git a/doc/source/command-objects/subnet.rst b/doc/source/command-objects/subnet.rst
index 64130ee1..00401dda 100644
--- a/doc/source/command-objects/subnet.rst
+++ b/doc/source/command-objects/subnet.rst
@@ -232,10 +232,12 @@ Set subnet properties
os subnet set
[--allocation-pool start=<ip-address>,end=<ip-address>]
+ [--no-allocation-pool]
[--dhcp | --no-dhcp]
[--dns-nameserver <dns-nameserver>]
[--gateway <gateway-ip>]
[--host-route destination=<subnet>,gateway=<ip-address>]
+ [--no-host-route]
[--service-type <service-type>]
[--name <new-name>]
[--description <description>]
@@ -247,6 +249,12 @@ Set subnet properties
``start=192.168.199.2,end=192.168.199.254``
(repeat option to add multiple IP addresses)
+.. option:: --no-allocation-pool
+
+ Clear associated allocation pools from this subnet.
+ Specify both --allocation-pool and --no-allocation-pool
+ to overwrite the current allocation pool information.
+
.. option:: --dhcp
Enable DHCP
@@ -272,7 +280,12 @@ Set subnet properties
``destination=10.10.0.0/16,gateway=192.168.71.254``
destination: destination subnet (in CIDR notation)
gateway: nexthop IP address
- (repeat option to add multiple routes)
+
+.. option:: --no-host-route
+
+ Clear associated host routes from this subnet.
+ Specify both --host-route and --no-host-route
+ to overwrite the current host route information.
.. option:: --service-type <service-type>
diff --git a/openstackclient/network/v2/subnet.py b/openstackclient/network/v2/subnet.py
index 76453487..2021d9f0 100644
--- a/openstackclient/network/v2/subnet.py
+++ b/openstackclient/network/v2/subnet.py
@@ -57,7 +57,7 @@ _formatters = {
}
-def _get_common_parse_arguments(parser):
+def _get_common_parse_arguments(parser, is_create=True):
parser.add_argument(
'--allocation-pool',
metavar='start=<ip-address>,end=<ip-address>',
@@ -68,6 +68,14 @@ def _get_common_parse_arguments(parser):
"e.g.: start=192.168.199.2,end=192.168.199.254 "
"(repeat option to add multiple IP addresses)")
)
+ if not is_create:
+ parser.add_argument(
+ '--no-allocation-pool',
+ action='store_true',
+ help=_("Clear associated allocation-pools from the subnet. "
+ "Specify both --allocation-pool and --no-allocation-pool "
+ "to overwrite the current allocation pool information.")
+ )
parser.add_argument(
'--dns-nameserver',
metavar='<dns-nameserver>',
@@ -88,6 +96,14 @@ def _get_common_parse_arguments(parser):
"gateway: nexthop IP address "
"(repeat option to add multiple routes)")
)
+ if not is_create:
+ parser.add_argument(
+ '--no-host-route',
+ action='store_true',
+ help=_("Clear associated host-routes from the subnet. "
+ "Specify both --host-route and --no-host-route "
+ "to overwrite the current host route information.")
+ )
parser.add_argument(
'--service-type',
metavar='<service-type>',
@@ -508,7 +524,7 @@ class SetSubnet(command.Command):
metavar='<description>',
help=_("Set subnet description")
)
- _get_common_parse_arguments(parser)
+ _get_common_parse_arguments(parser, is_create=False)
return parser
def take_action(self, parsed_args):
@@ -519,9 +535,15 @@ class SetSubnet(command.Command):
if 'dns_nameservers' in attrs:
attrs['dns_nameservers'] += obj.dns_nameservers
if 'host_routes' in attrs:
- attrs['host_routes'] += obj.host_routes
+ if not parsed_args.no_host_route:
+ attrs['host_routes'] += obj.host_routes
+ elif parsed_args.no_host_route:
+ attrs['host_routes'] = ''
if 'allocation_pools' in attrs:
- attrs['allocation_pools'] += obj.allocation_pools
+ if not parsed_args.no_allocation_pool:
+ attrs['allocation_pools'] += obj.allocation_pools
+ elif parsed_args.no_allocation_pool:
+ attrs['allocation_pools'] = ''
if 'service_types' in attrs:
attrs['service_types'] += obj.service_types
client.update_subnet(obj, **attrs)
diff --git a/openstackclient/tests/unit/network/v2/test_subnet.py b/openstackclient/tests/unit/network/v2/test_subnet.py
index 58506391..9c468f39 100644
--- a/openstackclient/tests/unit/network/v2/test_subnet.py
+++ b/openstackclient/tests/unit/network/v2/test_subnet.py
@@ -938,6 +938,39 @@ class TestSetSubnet(TestSubnet):
self.network.update_subnet.assert_called_with(self._subnet, **attrs)
self.assertIsNone(result)
+ def test_overwrite_options(self):
+ _testsubnet = network_fakes.FakeSubnet.create_one_subnet(
+ {'host_routes': [{'destination': '10.20.20.0/24',
+ 'nexthop': '10.20.20.1'}],
+ 'allocation_pools': [{'start': '8.8.8.200',
+ 'end': '8.8.8.250'}], })
+ self.network.find_subnet = mock.Mock(return_value=_testsubnet)
+ arglist = [
+ '--host-route', 'destination=10.30.30.30/24,gateway=10.30.30.1',
+ '--no-host-route',
+ '--allocation-pool', 'start=8.8.8.100,end=8.8.8.150',
+ '--no-allocation-pool',
+ _testsubnet.name,
+ ]
+ verifylist = [
+ ('host_routes', [{
+ "destination": "10.30.30.30/24", "gateway": "10.30.30.1"}]),
+ ('allocation_pools', [{
+ 'start': '8.8.8.100', 'end': '8.8.8.150'}]),
+ ('no_host_route', True),
+ ('no_allocation_pool', True),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = self.cmd.take_action(parsed_args)
+ attrs = {
+ 'host_routes': [{
+ "destination": "10.30.30.30/24", "nexthop": "10.30.30.1"}],
+ 'allocation_pools': [{'start': '8.8.8.100', 'end': '8.8.8.150'}],
+ }
+ self.network.update_subnet.assert_called_once_with(
+ _testsubnet, **attrs)
+ self.assertIsNone(result)
+
class TestShowSubnet(TestSubnet):
# The subnets to be shown
diff --git a/releasenotes/notes/overwrite-options-for-subnet-76476127dcf321ad.yaml b/releasenotes/notes/overwrite-options-for-subnet-76476127dcf321ad.yaml
new file mode 100644
index 00000000..263cbdc9
--- /dev/null
+++ b/releasenotes/notes/overwrite-options-for-subnet-76476127dcf321ad.yaml
@@ -0,0 +1,6 @@
+---
+features:
+ - |
+ ``subnet set`` command now allows the user to clear and overwrite
+ allocation-pool or host-route of a subnet.
+ [ Blueprint `allow-overwrite-set-options <https://blueprints.launchpad.net/python-openstackclient/+spec/allow-overwrite-set-options>` _]