Add feature exchange nic vlans

Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/84045320
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/84045320
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/84045320

Branch: refs/heads/trunk
Commit: 8404532020b576651d3f915a157a707bd966d56c
Parents: 4189872
Author: Samuel Chong <samuelcho...@gmail.com>
Authored: Thu Nov 17 11:54:34 2016 +1100
Committer: Samuel Chong <samuelcho...@gmail.com>
Committed: Thu Nov 17 11:54:34 2016 +1100

----------------------------------------------------------------------
 libcloud/compute/drivers/dimensiondata.py       | 30 ++++++++++++++++++++
 .../2.4/exchange_nic_vlans_response.xml         |  8 ++++++
 .../test/compute/test_dimensiondata_v2_4.py     | 13 +++++++++
 3 files changed, 51 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/84045320/libcloud/compute/drivers/dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/dimensiondata.py 
b/libcloud/compute/drivers/dimensiondata.py
index 60056b4..6f0a197 100644
--- a/libcloud/compute/drivers/dimensiondata.py
+++ b/libcloud/compute/drivers/dimensiondata.py
@@ -3690,6 +3690,36 @@ class DimensionDataNodeDriver(NodeDriver):
         response_code = findtext(response, 'responseCode', TYPES_URN)
         return response_code in ['IN_PROGRESS', 'OK']
 
+    def ex_exchange_nic_vlans(self, nic_id_1, nic_id_2):
+        """
+        Exchange NIC Vlans
+
+        :param    nic_id_1:  Nic ID 1
+        :type     nic_id_1: :``str``
+
+        :param    nic_id_2:  Nic ID 2
+        :type     nic_id_2: :``str``
+
+        :rtype: ``bool``
+        """
+
+        exchange_elem = ET.Element(
+            'urn:exchangeNicVlans',
+            {
+                'xmlns:urn': TYPES_URN,
+            })
+
+        ET.SubElement(exchange_elem, 'urn:nicId1').text = nic_id_1
+        ET.SubElement(exchange_elem, 'urn:nicId2').text = nic_id_2
+
+        response = self.connection.request_with_orgId_api_2(
+            'server/exchangeNicVlans',
+            method='POST',
+            data=ET.tostring(exchange_elem)).object
+
+        response_code = findtext(response, 'responseCode', TYPES_URN)
+        return response_code in ['IN_PROGRESS', 'OK']
+
     def _format_csv(self, http_response):
         text = http_response.read()
         lines = str.splitlines(ensure_string(text))

http://git-wip-us.apache.org/repos/asf/libcloud/blob/84045320/libcloud/test/compute/fixtures/dimensiondata/2.4/exchange_nic_vlans_response.xml
----------------------------------------------------------------------
diff --git 
a/libcloud/test/compute/fixtures/dimensiondata/2.4/exchange_nic_vlans_response.xml
 
b/libcloud/test/compute/fixtures/dimensiondata/2.4/exchange_nic_vlans_response.xml
new file mode 100644
index 0000000..d0e8315
--- /dev/null
+++ 
b/libcloud/test/compute/fixtures/dimensiondata/2.4/exchange_nic_vlans_response.xml
@@ -0,0 +1,8 @@
+<urn:response 
requestId="na/2015-01-18T13:37:20/62f06368-c3fb-11e3-b29c-001517c4643e"
+xmlns:urn="urn:didata.com:api:cloud:types">
+    <urn:operation>EXCHANGE_NIC_VLANS</urn:operation>
+    <urn:responseCode>OK</urn:responseCode>
+    <urn:message>Request to exchange VLANs for Server with Id
+'1cec8cfb-69e7-4de9-8404-debf116f5242' has been accepted and is being
+processed.</urn:message>
+</urn:response>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/libcloud/blob/84045320/libcloud/test/compute/test_dimensiondata_v2_4.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_dimensiondata_v2_4.py 
b/libcloud/test/compute/test_dimensiondata_v2_4.py
index 7a2ba63..d835b5c 100644
--- a/libcloud/test/compute/test_dimensiondata_v2_4.py
+++ b/libcloud/test/compute/test_dimensiondata_v2_4.py
@@ -2039,6 +2039,12 @@ class DimensionData_v2_4_Tests(unittest.TestCase, 
TestCaseMixin):
             tagkey_name_value_dictionaries=tag_dictionaries)
         self.assertTrue(success)
 
+    def test_exchange_nic_vlans(self):
+        success = self.driver.ex_exchange_nic_vlans(
+                  nic_id_1='a4b4b42b-ccb5-416f-b052-ce7cb7fdff12',
+                  nic_id_2='b39d09b8-ea65-424a-8fa6-c6f5a98afc69')
+        self.assertTrue(success)
+
 class InvalidRequestError(Exception):
     def __init__(self, tag):
         super(InvalidRequestError, self).__init__("Invalid Request - %s" % tag)
@@ -3302,5 +3308,12 @@ class DimensionDataMockHttp(StorageMockHttp, MockHttp):
         )
         return httplib.OK, body, {}, httplib.responses[httplib.OK]
 
+    def _caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_exchangeNicVlans(
+        self, method, url, body, headers):
+        body = self.fixtures.load(
+            '2.4/exchange_nic_vlans_response.xml'
+        )
+        return httplib.OK, body, {}, httplib.responses[httplib.OK]
+
 if __name__ == '__main__':
     sys.exit(unittest.main())

Reply via email to