diff --git a/gbpclient/gbp/v2_0/network.py b/gbpclient/gbp/v2_0/network.py index 7cb7e7e..2a3c45c 100644 --- a/gbpclient/gbp/v2_0/network.py +++ b/gbpclient/gbp/v2_0/network.py @@ -88,6 +88,11 @@ def _get_attrs_network_extension(client_manager, parsed_args): if parsed_args.apic_policy_enforcement_pref: attrs['apic:policy_enforcement_pref' ] = parsed_args.apic_policy_enforcement_pref + if parsed_args.apic_no_nat_cidrs: + attrs['apic:no_nat_cidrs'] = parsed_args.apic_no_nat_cidrs.split(",") + if ('no_apic_no_nat_cidrs' in parsed_args and + parsed_args.no_apic_no_nat_cidrs): + attrs['apic:no_nat_cidrs'] = [] if parsed_args.external: if ('apic_nat_type' in parsed_args and parsed_args.apic_nat_type is not None): @@ -133,6 +138,7 @@ network_sdk.Network.apic_policy_enforcement_pref = resource.Body( 'apic:policy_enforcement_pref') network_sdk.Network.apic_nat_type = resource.Body('apic:nat_type') network_sdk.Network.apic_external_cidrs = resource.Body('apic:external_cidrs') +network_sdk.Network.apic_no_nat_cidrs = resource.Body('apic:no_nat_cidrs') class CreateNetworkExtension(hooks.CommandHook): @@ -299,6 +305,16 @@ class CreateNetworkExtension(hooks.CommandHook): "Syntax Example: 10.10.10.0/24 " "or 10.10.10.0/24,20.20.20.0/24 ") ) + parser.add_argument( + '--apic-no-nat-cidrs', + metavar="", + dest='apic_no_nat_cidrs', + help=_("APIC CIDRS for a network to config no NAT routing\n" + "Data is passed as comma separated valid ip subnets\n" + "Default value is []\n" + "Syntax Example: 10.10.10.0/24 " + "or 10.10.10.0/24,20.20.20.0/24 ") + ) return parser def get_epilog(self): @@ -447,6 +463,23 @@ class SetNetworkExtension(hooks.CommandHook): "Need to pass the --external argument wth this field\n" "Resets the apic:external_cidrs field to 0.0.0.0/0 ") ) + parser.add_argument( + '--apic-no-nat-cidrs', + metavar="", + dest='apic_no_nat_cidrs', + help=_("APIC CIDRS for a network to config no NAT routing\n" + "Data is passed as comma separated valid ip subnets\n" + "Default value is []\n" + "Syntax Example: 10.10.10.0/24 " + "or 10.10.10.0/24,20.20.20.0/24 ") + ) + parser.add_argument( + '--no-apic-no-nat-cidrs', + dest='no_apic_no_nat_cidrs', + action='store_true', + help=_("Reset APIC no NAT CIDRS for a network\n" + "Resets the apic:no_nat_cidrs field to []") + ) return parser def get_epilog(self): diff --git a/gbpclient/tests/unit/test_network.py b/gbpclient/tests/unit/test_network.py index a52d12c..803371d 100644 --- a/gbpclient/tests/unit/test_network.py +++ b/gbpclient/tests/unit/test_network.py @@ -54,6 +54,7 @@ class TestNetworkCreate(test_network.TestNetwork, test_cli20.CLITestV20Base): ('apic_extra_provided_contracts', None), ('apic_extra_consumed_contracts', None), ('apic_policy_enforcement_pref', None), + ('apic_no_nat_cidrs', None), ] create_ext = network_ext.CreateNetworkExtension(self.app) parsed_args = self.check_parser_ext( @@ -86,6 +87,7 @@ class TestNetworkCreate(test_network.TestNetwork, test_cli20.CLITestV20Base): "--apic-extra-provided-contracts", 'pcontest1', "--apic-extra-consumed-contracts", 'contest1', "--apic-policy-enforcement-pref", 'enforced', + "--apic-no-nat-cidrs", '10.10.10.0/24', ] verifylist = [ ('name', self._network.name), @@ -106,6 +108,7 @@ class TestNetworkCreate(test_network.TestNetwork, test_cli20.CLITestV20Base): ('apic_extra_provided_contracts', 'pcontest1'), ('apic_extra_consumed_contracts', 'contest1'), ('apic_policy_enforcement_pref', 'enforced'), + ('apic_no_nat_cidrs', '10.10.10.0/24'), ] create_ext = network_ext.CreateNetworkExtension(self.app) parsed_args = self.check_parser_ext( @@ -133,6 +136,7 @@ class TestNetworkCreate(test_network.TestNetwork, test_cli20.CLITestV20Base): 'apic:nested_domain_node_network_vlan': '4', 'apic:nested_domain_service_vlan': '3', 'apic:policy_enforcement_pref': 'enforced', + 'apic:no_nat_cidrs': ['10.10.10.0/24'], }) def test_create_empty_contracts(self): @@ -165,6 +169,7 @@ class TestNetworkCreate(test_network.TestNetwork, test_cli20.CLITestV20Base): "--apic-distinguished-names", 'ExternalNetwork=test1', "--apic-nat-type", "", "--apic-external-cidrs", '20.20.20.0/8', + "--apic-no-nat-cidrs", '10.10.10.0/24', ] verifylist = [ ('name', self._network.name), @@ -172,6 +177,7 @@ class TestNetworkCreate(test_network.TestNetwork, test_cli20.CLITestV20Base): ('apic_distinguished_names', [{'ExternalNetwork': 'test1'}]), ('apic_nat_type', ""), ('apic_external_cidrs', '20.20.20.0/8'), + ('apic_no_nat_cidrs', '10.10.10.0/24'), ] create_ext = network_ext.CreateNetworkExtension(self.app) parsed_args = self.check_parser_ext( @@ -185,6 +191,7 @@ class TestNetworkCreate(test_network.TestNetwork, test_cli20.CLITestV20Base): 'apic:distinguished_names': {"ExternalNetwork": "test1"}, 'apic:external_cidrs': ['20.20.20.0/8'], 'apic:nat_type': '', + 'apic:no_nat_cidrs': ['10.10.10.0/24'], }) @@ -219,6 +226,7 @@ class TestNetworkSet(test_network.TestNetwork, test_cli20.CLITestV20Base): ('apic_extra_provided_contracts', None), ('apic_extra_consumed_contracts', None), ('apic_policy_enforcement_pref', None), + ('apic_no_nat_cidrs', None), ] set_ext = network_ext.SetNetworkExtension(self.app) parsed_args = self.check_parser_ext( @@ -245,6 +253,7 @@ class TestNetworkSet(test_network.TestNetwork, test_cli20.CLITestV20Base): "--apic-extra-provided-contracts", 'pcontest1,pcontest11', "--apic-extra-consumed-contracts", 'contest1,contest11', "--apic-policy-enforcement-pref", 'enforced', + "--apic-no-nat-cidrs", '10.10.10.0/24', ] verifylist = [ ('network', self._network.name), @@ -262,6 +271,7 @@ class TestNetworkSet(test_network.TestNetwork, test_cli20.CLITestV20Base): ('apic_extra_provided_contracts', 'pcontest1,pcontest11'), ('apic_extra_consumed_contracts', 'contest1,contest11'), ('apic_policy_enforcement_pref', 'enforced'), + ('apic_no_nat_cidrs', '10.10.10.0/24'), ] set_ext = network_ext.SetNetworkExtension(self.app) parsed_args = self.check_parser_ext( @@ -284,6 +294,7 @@ class TestNetworkSet(test_network.TestNetwork, test_cli20.CLITestV20Base): 'apic:nested_domain_node_network_vlan': '5', 'apic:nested_domain_service_vlan': '4', 'apic:policy_enforcement_pref': 'enforced', + 'apic:no_nat_cidrs': ['10.10.10.0/24'], } self.network.update_network.assert_called_once_with( @@ -295,6 +306,7 @@ class TestNetworkSet(test_network.TestNetwork, test_cli20.CLITestV20Base): self._network.name, "--external", "--apic-no-external-cidrs", + "--no-apic-no-nat-cidrs", ] verifylist = [ ('network', self._network.name), @@ -313,6 +325,7 @@ class TestNetworkSet(test_network.TestNetwork, test_cli20.CLITestV20Base): ('apic_extra_provided_contracts', None), ('apic_extra_consumed_contracts', None), ('apic_policy_enforcement_pref', None), + ('no_apic_no_nat_cidrs', True), ] set_ext = network_ext.SetNetworkExtension(self.app) parsed_args = self.check_parser_ext( @@ -322,6 +335,7 @@ class TestNetworkSet(test_network.TestNetwork, test_cli20.CLITestV20Base): attrs = { 'router:external': True, 'apic:external_cidrs': [], + 'apic:no_nat_cidrs': [], } self.network.update_network.assert_called_once_with(