diff --git a/gbpclient/gbp/v2_0/network.py b/gbpclient/gbp/v2_0/network.py index f5db5f6..4fd8bb5 100644 --- a/gbpclient/gbp/v2_0/network.py +++ b/gbpclient/gbp/v2_0/network.py @@ -88,6 +88,9 @@ def _get_attrs_network_extension(client_manager, parsed_args): if parsed_args.apic_external_cidrs: attrs['apic:external_cidrs' ] = parsed_args.apic_external_cidrs.split(",") + if 'apic_no_external_cidrs' in parsed_args and \ + parsed_args.apic_no_external_cidrs: + attrs['apic:external_cidrs'] = [] return attrs @@ -423,10 +426,20 @@ class SetNetworkExtension(hooks.CommandHook): help=_("APIC external CIDRS for external network\n" "For external type networks only\n" "Data is passed as comma separated valid ip subnets\n" + "Need to pass the --external argument wth this field\n" "Default value is ['0.0.0.0/0']\n" "Syntax Example: 10.10.10.0/24 " "or 10.10.10.0/24,20.20.20.0/24 ") ) + parser.add_argument( + '--apic-no-external-cidrs', + dest='apic_no_external_cidrs', + action='store_true', + help=_("Reset APIC external CIDRS for external network\n" + "For external type networks only\n" + "Need to pass the --external argument wth this field\n" + "Resets the apic:external_cidrs field to 0.0.0.0/0 ") + ) return parser def get_epilog(self): diff --git a/gbpclient/tests/unit/test_network.py b/gbpclient/tests/unit/test_network.py index 67f2568..3e53631 100644 --- a/gbpclient/tests/unit/test_network.py +++ b/gbpclient/tests/unit/test_network.py @@ -34,6 +34,7 @@ class TestNetworkCreate(test_network.TestNetwork, test_cli20.CLITestV20Base): def test_create_default_options(self): arglist = [ self._network.name, + "--external", ] verifylist = [ ('name', self._network.name), @@ -62,6 +63,7 @@ class TestNetworkCreate(test_network.TestNetwork, test_cli20.CLITestV20Base): self.network.create_network.assert_called_once_with(**{ 'admin_state_up': True, 'name': self._network.name, + 'router:external': True, }) def test_create_all_options(self): @@ -264,3 +266,41 @@ class TestNetworkSet(test_network.TestNetwork, test_cli20.CLITestV20Base): self.network.update_network.assert_called_once_with( self._network, **attrs) self.assertIsNone(result) + + def test_set_apic_no_external_cidrs(self): + arglist = [ + self._network.name, + "--external", + "--apic-no-external-cidrs", + ] + verifylist = [ + ('network', self._network.name), + ('external', True), + ('apic_nested_domain_name', None), + ('apic_nested_domain_type', None), + ('apic_external_cidrs', None), + ('apic_no_external_cidrs', True), + ('apic_bgp_enable', None), + ('apic_bgp_asn', None), + ('apic_bgp_type', None), + ('apic_nested_domain_infra_vlan', None), + ('apic_nested_domain_allowed_vlans', None), + ('apic_nested_domain_service_vlan', None), + ('apic_nested_domain_node_network_vlan', None), + ('apic_extra_provided_contracts', None), + ('apic_extra_consumed_contracts', None), + ('apic_policy_enforcement_pref', None), + ] + set_ext = network_ext.SetNetworkExtension(self.app) + parsed_args = self.check_parser_ext( + self.cmd, arglist, verifylist, set_ext) + result = self.cmd.take_action(parsed_args) + + attrs = { + 'router:external': True, + 'apic:external_cidrs': [], + } + + self.network.update_network.assert_called_once_with( + self._network, **attrs) + self.assertIsNone(result)