fix to create a firewall rule with the specific source ip
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/f254354f Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/f254354f Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/f254354f Branch: refs/heads/trunk Commit: f254354f1bc2fc1d1dfa4249c15cbeb32a5b2a93 Parents: 6d9e820 Author: kumar Chockalingam <kumarapp...@gmail.com> Authored: Mon Feb 29 10:55:31 2016 +1100 Committer: kumar Chockalingam <kumarapp...@gmail.com> Committed: Mon Feb 29 10:55:31 2016 +1100 ---------------------------------------------------------------------- libcloud/compute/drivers/dimensiondata.py | 3 ++- ...4d8a_9cbc_8dabe5a7d0e4_network_firewallRule.xml | 17 ++++++++++++++++- libcloud/test/compute/test_dimensiondata.py | 11 ++++++++++- 3 files changed, 28 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/libcloud/blob/f254354f/libcloud/compute/drivers/dimensiondata.py ---------------------------------------------------------------------- diff --git a/libcloud/compute/drivers/dimensiondata.py b/libcloud/compute/drivers/dimensiondata.py index 651536e..3a38744 100644 --- a/libcloud/compute/drivers/dimensiondata.py +++ b/libcloud/compute/drivers/dimensiondata.py @@ -1135,7 +1135,8 @@ class DimensionDataNodeDriver(NodeDriver): source_ip.set('address', 'ANY') else: source_ip.set('address', rule.source.ip_address) - source_ip.set('prefixSize', str(rule.source.ip_prefix_size)) + if rule.source.ip_prefix_size is not None: + source_ip.set('prefixSize', str(rule.source.ip_prefix_size)) if rule.source.port_begin is not None: source_port = ET.SubElement(source, 'port') source_port.set('begin', rule.source.port_begin) http://git-wip-us.apache.org/repos/asf/libcloud/blob/f254354f/libcloud/test/compute/fixtures/dimensiondata/caas_2_1_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_firewallRule.xml ---------------------------------------------------------------------- diff --git a/libcloud/test/compute/fixtures/dimensiondata/caas_2_1_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_firewallRule.xml b/libcloud/test/compute/fixtures/dimensiondata/caas_2_1_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_firewallRule.xml index b09d963..fb5b6ed 100644 --- a/libcloud/test/compute/fixtures/dimensiondata/caas_2_1_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_firewallRule.xml +++ b/libcloud/test/compute/fixtures/dimensiondata/caas_2_1_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_firewallRule.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<firewallRules xmlns="urn:didata.com:api:cloud:types" pageNumber="1" pageCount="13" totalCount="13" pageSize="50"> +<firewallRules xmlns="urn:didata.com:api:cloud:types" pageNumber="1" pageCount="13" totalCount="13" pageSize="50"> <firewallRule id="756cba02-b0bc-48f4-aea5-9445870b6148" datacenterId="NA9" ruleType="DEFAULT_RULE"> <networkDomainId>b30c224c-c95b-4cd9-bb8b-bfdfb5486abf</networkDomainId> <name>CCDEFAULT.BlockOutboundMailIPv4</name> @@ -207,4 +207,19 @@ <enabled>true</enabled> <state>NORMAL</state> </firewallRule> + <firewallRule id="b976e0e6-4fb2-4f3e-a016-652e02d211b4" datacenterId="NA9" ruleType="CLIENT_RULE"> + <networkDomainId>b30c224c-c95b-4cd9-bb8b-bfdfb5486abf</networkDomainId> + <name>SpecificSourceIP</name> + <action>ACCEPT_DECISIVELY</action> + <ipVersion>IPV6</ipVersion> + <protocol>TCP</protocol> + <source> + <ip address="2607:f480:111:1336:6503:544c:74a6:3a28"/> + </source> + <destination> + <ip address="ANY"/> + </destination> + <enabled>true</enabled> + <state>NORMAL</state> + </firewallRule> </firewallRules> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/libcloud/blob/f254354f/libcloud/test/compute/test_dimensiondata.py ---------------------------------------------------------------------- diff --git a/libcloud/test/compute/test_dimensiondata.py b/libcloud/test/compute/test_dimensiondata.py index 3bb0210..dff3ba3 100644 --- a/libcloud/test/compute/test_dimensiondata.py +++ b/libcloud/test/compute/test_dimensiondata.py @@ -33,6 +33,7 @@ from libcloud.test.file_fixtures import ComputeFileFixtures from libcloud.test.secrets import DIMENSIONDATA_PARAMS + class DimensionDataTests(unittest.TestCase, TestCaseMixin): def setUp(self): @@ -448,9 +449,17 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin): def test_ex_create_firewall_rule(self): net = self.driver.ex_get_network_domain('8cdfd607-f429-4df6-9352-162cfc0891be') - rules = self.driver.ex_list_firewall_rules(net) + rules = self.driver.ex_list_firewall_rules(net) rule = self.driver.ex_create_firewall_rule(net, rules[0], 'FIRST') self.assertEqual(rule.id, 'd0a20f59-77b9-4f28-a63b-e58496b73a6c') + + def test_ex_create_firewall_rule_with_specific_source_ip(self): + net = self.driver.ex_get_network_domain('8cdfd607-f429-4df6-9352-162cfc0891be') + rules = self.driver.ex_list_firewall_rules(net) + specific_source_ip_rule = list(filter(lambda x: x.name == 'SpecificSourceIP', + rules))[0] + rule = self.driver.ex_create_firewall_rule(net, specific_source_ip_rule, 'FIRST') + self.assertEqual(rule.id, 'd0a20f59-77b9-4f28-a63b-e58496b73a6c') def test_ex_get_firewall_rule(self): net = self.driver.ex_get_network_domain('8cdfd607-f429-4df6-9352-162cfc0891be')