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')

Reply via email to