components/openstack/cinder/patches/07-launchpad-1460156.patch
branchs11u3-sru
changeset 6035 c9748fcc32de
parent 4223 d3541a291d5e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/patches/07-launchpad-1460156.patch	Fri May 20 17:42:29 2016 -0400
@@ -0,0 +1,74 @@
+This patch is to work-around the fact that Python 2.7.9 and beyond have
+implemented PEP 476 which enabled certificate verification by default
+and ZFSSAs may not be deployed with a valid, CA-signed certificate.
+
+commit 814cbb8a937e2a01f2c8814dd032c0f12baa6fd4
+Author: Diem Tran <[email protected]>
+Date:   Wed Jul 1 21:12:48 2015 +0000
+
+    Fix PEP476 & format message of Oracle ZFSSA drivers
+    
+    * Handles the PEP 476 by opting out certificate verification.
+    * Fix debug format messages in restclient.py
+    
+    Change-Id: Iaf9e546f0aed6b57fe9c2bf43aa2ce003a05ddf8
+    Closes-Bug: #1460156
+
+--- cinder-2015.1.2/cinder/volume/drivers/zfssa/restclient.py.~1~	2015-10-13 09:27:35.000000000 -0700
++++ cinder-2015.1.2/cinder/volume/drivers/zfssa/restclient.py	2016-01-31 00:56:12.410126083 -0800
+@@ -1,4 +1,4 @@
+-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
++# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ #
+ #    Licensed under the Apache License, Version 2.0 (the "License"); you may
+ #    not use this file except in compliance with the License. You may obtain
+@@ -17,6 +17,7 @@ ZFS Storage Appliance REST API Client Pr
+ 
+ import httplib
+ import json
++import ssl
+ import StringIO
+ import time
+ import urllib2
+@@ -268,14 +269,27 @@ class RestClientURL(object):
+         retry = 0
+         response = None
+ 
+-        LOG.debug('Request: %s %s' % (request, zfssaurl))
++        LOG.debug('Request: %(request)s %(url)s',
++                  {'request': request, 'url': zfssaurl})
+         LOG.debug('Out headers: %s' % out_hdrs)
+         if body and body != '':
+             LOG.debug('Body: %s' % body)
+ 
++        context = None
++        if hasattr(ssl, '_create_unverified_context'):
++            context = ssl._create_unverified_context()
++        else:
++            context = None
++
+         while retry < maxreqretries:
+             try:
+-                response = urllib2.urlopen(req, timeout=self.timeout)
++                if context:
++                    response = urllib2.urlopen(req,
++                                               timeout=self.timeout,
++                                               context=context)
++                else:
++                    response = urllib2.urlopen(req,
++                                               timeout=self.timeout)
+             except urllib2.HTTPError as err:
+                 if err.code == httplib.NOT_FOUND:
+                     LOG.debug('REST Not Found: %s' % err.code)
+@@ -315,8 +329,9 @@ class RestClientURL(object):
+ 
+             break
+ 
+-        if response and response.getcode() == httplib.SERVICE_UNAVAILABLE and \
+-           retry >= maxreqretries:
++        if (response and
++            (response.getcode() == httplib.SERVICE_UNAVAILABLE and
++                retry >= maxreqretries)):
+             raise RestClientError(response.getcode(), name="ERR_HTTPError",
+                                   message="REST Not Available: Disabled")
+