You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by an...@apache.org on 2018/12/13 11:26:35 UTC

[26/45] libcloud git commit: Started ssl import and offload

Started ssl import and offload


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

Branch: refs/heads/trunk
Commit: 9319bbbc334c62f26dfb57f9ae96466c7c134a82
Parents: 99b7bda
Author: mitch <mi...@itaas.dimensiondata.com>
Authored: Fri Nov 16 15:15:49 2018 -0500
Committer: mitch <mi...@itaas.dimensiondata.com>
Committed: Fri Nov 16 15:15:49 2018 -0500

----------------------------------------------------------------------
 libcloud/common/base.py                         |  1 -
 libcloud/loadbalancer/drivers/nttcis.py         | 26 ++++++++++++++++++++
 .../fixtures/nttcis/ssl_import_fail.xml         |  6 +++++
 .../fixtures/nttcis/ssl_import_success.xml      |  7 ++++++
 tests/lib_create_test.py                        |  9 +++++++
 tests/lib_list_test.py                          |  7 ++++--
 6 files changed, 53 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/9319bbbc/libcloud/common/base.py
----------------------------------------------------------------------
diff --git a/libcloud/common/base.py b/libcloud/common/base.py
index 17ca286..bcfa249 100644
--- a/libcloud/common/base.py
+++ b/libcloud/common/base.py
@@ -232,7 +232,6 @@ class XmlResponse(Response):
                                          body=self.body,
                                          driver=self.connection.driver)
         return body
-
     parse_error = parse_body
 
 

http://git-wip-us.apache.org/repos/asf/libcloud/blob/9319bbbc/libcloud/loadbalancer/drivers/nttcis.py
----------------------------------------------------------------------
diff --git a/libcloud/loadbalancer/drivers/nttcis.py b/libcloud/loadbalancer/drivers/nttcis.py
index 1348c65..ee1bd53 100644
--- a/libcloud/loadbalancer/drivers/nttcis.py
+++ b/libcloud/loadbalancer/drivers/nttcis.py
@@ -12,6 +12,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
+import OpenSSL.crypto
 
 from libcloud.utils.py3 import ET
 from libcloud.common.nttcis import NttCisConnection
@@ -757,6 +758,28 @@ class NttCisLBDriver(Driver):
             status=State.RUNNING
         )
 
+    def import_ssl_cert(self, network_domain_id, name, crt_file, key_file,
+                        description=None):
+        c = OpenSSL.crypto.load_certificate(
+            OpenSSL.crypto.FILETYPE_PEM, open(crt_file).read())
+        cert = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, c).decode(encoding='utf-8')
+        k = OpenSSL.crypto.load_privatekey(
+            OpenSSL.crypto.FILETYPE_PEM, open(key_file).read())
+        key = OpenSSL.crypto.dump_privatekey(OpenSSL.crypto.FILETYPE_PEM, k).decode(encoding='utf-8')
+        cert_elem = ET.Element("importSslDomainCertificate", {"xmlns": TYPES_URN})
+        ET.SubElement(cert_elem, "networkDomainId").text = network_domain_id
+        ET.SubElement(cert_elem, "name").text = name
+        if description is not None:
+            ET.SubElement(cert_elem, "description").text = description
+        ET.SubElement(cert_elem, "key").text = key
+        ET.SubElement(cert_elem, "certificate").text = cert
+        result = self.connection.request_with_orgId_api_2(
+            'networkDomainVip/importSslDomainCertificate',
+            method='POST',
+            data=ET.tostring(cert_elem)).object
+        response_code = findtext(result, 'responseCode', TYPES_URN)
+        return response_code in ['IN_PROGRESS', 'OK']
+
     def ex_get_pools(self, ex_network_domain_id=None):
         """
         Get all of the pools inside the current geography or
@@ -1049,6 +1072,9 @@ class NttCisLBDriver(Driver):
             method='GET').object
         return self._to_irules(result)
 
+    def ex_list_ssl_domain_certs(self, params={}):
+        pass
+
     def _to_irules(self, object):
         irules = []
         matches = object.findall(

http://git-wip-us.apache.org/repos/asf/libcloud/blob/9319bbbc/libcloud/test/loadbalancer/fixtures/nttcis/ssl_import_fail.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/loadbalancer/fixtures/nttcis/ssl_import_fail.xml b/libcloud/test/loadbalancer/fixtures/nttcis/ssl_import_fail.xml
new file mode 100644
index 0000000..f7cc0e3
--- /dev/null
+++ b/libcloud/test/loadbalancer/fixtures/nttcis/ssl_import_fail.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<response xmlns="urn:didata.com:api:cloud:types" requestId="eu_20181116T181425004+0100_b6be08f0-30ae-4acd-8f25-1d7a5ce3f42a">
+    <operation>IMPORT_SSL_DOMAIN_CERTIFICATE</operation>
+    <responseCode>CONFIGURATION_NOT_SUPPORTED</responseCode>
+    <message>Data Center EU6 requires key length must be one of 512, 1024, 2048.</message>
+</response>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/libcloud/blob/9319bbbc/libcloud/test/loadbalancer/fixtures/nttcis/ssl_import_success.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/loadbalancer/fixtures/nttcis/ssl_import_success.xml b/libcloud/test/loadbalancer/fixtures/nttcis/ssl_import_success.xml
new file mode 100644
index 0000000..3797d36
--- /dev/null
+++ b/libcloud/test/loadbalancer/fixtures/nttcis/ssl_import_success.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<response xmlns="urn:didata.com:api:cloud:types" requestId="eu_20181116T205220817+0100_5bbea1ac-0643-4c92-a67d-7258706ec9bf">
+    <operation>IMPORT_SSL_DOMAIN_CERTIFICATE</operation>
+    <responseCode>OK</responseCode>
+    <message>SSL Domain Certificate has been imported.</message>
+    <info name="sslDomainCertificateId" value="4d2e9792-c986-4f2b-80c9-39e457eed8e8"/>
+</response>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/libcloud/blob/9319bbbc/tests/lib_create_test.py
----------------------------------------------------------------------
diff --git a/tests/lib_create_test.py b/tests/lib_create_test.py
index f2c8eeb..944cea0 100644
--- a/tests/lib_create_test.py
+++ b/tests/lib_create_test.py
@@ -291,3 +291,12 @@ def test_initiate_failover(drsdriver):
     cg_id = "3710c093-7dcc-4a21-bd07-af9f4d93b6b5"
     result = drsdriver.initiate_failover(cg_id)
     assert result is True
+
+
+def test_insert_ssl(lbdriver, compute_driver):
+    net_dom_name = "sdk_test_1"
+    net_dom = compute_driver.ex_list_network_domains(name=net_dom_name)[0]
+    cert = '/home/mraful/client/alice.crt'
+    key = '/home/mraful/client/alice.key'
+    result = lbdriver.import_ssl_cert(net_dom.id, "alice", cert, key, description="test cert")
+    assert result is True
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/libcloud/blob/9319bbbc/tests/lib_list_test.py
----------------------------------------------------------------------
diff --git a/tests/lib_list_test.py b/tests/lib_list_test.py
index c6395c4..bf572e3 100644
--- a/tests/lib_list_test.py
+++ b/tests/lib_list_test.py
@@ -200,7 +200,6 @@ def test_list_nat_rules(compute_driver):
 
 def test_list_balancers(lbdriver):
     balancers = lbdriver.list_balancers(ex_network_domain_id="6aafcf08-cb0b-432c-9c64-7371265db086")
-    print()
     for balancer in balancers:
         print(balancer.id, balancer.ip, balancer.name, balancer.port)
     assert isinstance(balancers, list)
@@ -424,4 +423,8 @@ def test_get_snapshots_by_min(drsdriver):
         cg_id,
         create_time_min="2018-11-07T00:00:00.000-05:00")
     for snap in snaps.snapshot:
-        print(snap)
\ No newline at end of file
+        print(snap)
+
+
+def test_list_domain_certs(compute_driver, lbdriver):
+    pass
\ No newline at end of file