Make SmartConnect respect custom SSLContexts during version check
Also modify test fixtures to not expect an extra slash in uri from SmartConnect
This commit is contained in:
@@ -29,6 +29,7 @@ import re
|
|||||||
import ssl
|
import ssl
|
||||||
from xml.etree import ElementTree
|
from xml.etree import ElementTree
|
||||||
from xml.parsers.expat import ExpatError
|
from xml.parsers.expat import ExpatError
|
||||||
|
from six.moves import http_client
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
from requests.auth import HTTPBasicAuth
|
from requests.auth import HTTPBasicAuth
|
||||||
@@ -512,25 +513,35 @@ class SmartConnection(object):
|
|||||||
Disconnect(self.si)
|
Disconnect(self.si)
|
||||||
self.si = None
|
self.si = None
|
||||||
|
|
||||||
def __GetElementTreeFromUrl(url, sslContext):
|
def __GetElementTree(protocol, server, port, path, sslContext):
|
||||||
"""
|
"""
|
||||||
Private method that returns a root from ElementTree for the XML document referenced by
|
Private method that returns a root from ElementTree for a remote XML document.
|
||||||
the url.
|
|
||||||
|
|
||||||
@param url: URL
|
@param protocol: What protocol to use for the connection (e.g. https or http).
|
||||||
@type url: string
|
@type protocol: string
|
||||||
|
@param server: Which server to connect to.
|
||||||
|
@type server: string
|
||||||
|
@param port: Port
|
||||||
|
@type port: int
|
||||||
|
@param path: Path
|
||||||
|
@type path: string
|
||||||
@param sslContext: SSL Context describing the various SSL options. It is only
|
@param sslContext: SSL Context describing the various SSL options. It is only
|
||||||
supported in Python 2.7.9 or higher.
|
supported in Python 2.7.9 or higher.
|
||||||
@type sslContext: SSL.Context
|
@type sslContext: SSL.Context
|
||||||
"""
|
"""
|
||||||
|
|
||||||
try:
|
if protocol == "https":
|
||||||
if sslContext is not None and sslContext.verify_mode == ssl.CERT_NONE:
|
kwargs = {"context": sslContext} if sslContext else {}
|
||||||
sock = requests.get(url, verify=False)
|
conn = http_client.HTTPSConnection(server, port=port, **kwargs)
|
||||||
|
elif protocol == "http":
|
||||||
|
conn = http_client.HTTPConnection(server, port=port)
|
||||||
else:
|
else:
|
||||||
sock = requests.get(url)
|
raise Exception("Protocol " + protocol + " not supported.")
|
||||||
if sock.status_code == 200:
|
conn.request("GET", path)
|
||||||
tree = ElementTree.fromstring(sock.content)
|
response = conn.getresponse()
|
||||||
|
if response.status == 200:
|
||||||
|
try:
|
||||||
|
tree = ElementTree.fromstring(response.read())
|
||||||
return tree
|
return tree
|
||||||
except ExpatError:
|
except ExpatError:
|
||||||
pass
|
pass
|
||||||
@@ -559,13 +570,13 @@ def __GetServiceVersionDescription(protocol, server, port, path, sslContext):
|
|||||||
@type sslContext: SSL.Context
|
@type sslContext: SSL.Context
|
||||||
"""
|
"""
|
||||||
|
|
||||||
url = "%s://%s:%s/%s/vimServiceVersions.xml" % (protocol, server, port, path)
|
tree = __GetElementTree(protocol, server, port,
|
||||||
tree = __GetElementTreeFromUrl(url, sslContext)
|
path + "/vimServiceVersions.xml", sslContext)
|
||||||
if tree is not None:
|
if tree is not None:
|
||||||
return tree
|
return tree
|
||||||
|
|
||||||
url = "%s://%s:%s/%s/vimService.wsdl" % (protocol, server, port, path)
|
tree = __GetElementTree(protocol, server, port,
|
||||||
tree = __GetElementTreeFromUrl(url, sslContext)
|
path + "/vimService.wsdl", sslContext)
|
||||||
return tree
|
return tree
|
||||||
|
|
||||||
|
|
||||||
|
2
tests/fixtures/basic_container_view.yaml
vendored
2
tests/fixtures/basic_container_view.yaml
vendored
@@ -7,7 +7,7 @@ interactions:
|
|||||||
Connection: [keep-alive]
|
Connection: [keep-alive]
|
||||||
User-Agent: [python-requests/2.7.0 CPython/2.7.10 Darwin/15.0.0]
|
User-Agent: [python-requests/2.7.0 CPython/2.7.10 Darwin/15.0.0]
|
||||||
method: GET
|
method: GET
|
||||||
uri: https://vcsa//sdk/vimServiceVersions.xml
|
uri: https://vcsa/sdk/vimServiceVersions.xml
|
||||||
response:
|
response:
|
||||||
body: {string: !!python/unicode '<?xml version="1.0" encoding="UTF-8" ?><namespaces
|
body: {string: !!python/unicode '<?xml version="1.0" encoding="UTF-8" ?><namespaces
|
||||||
version="1.0"><namespace><name>urn:vim25</name><version>6.0</version><priorVersions><version>5.5</version><version>5.1</version><version>5.0</version><version>4.1</version><version>4.0</version><version>2.5u2server</version><version>2.5u2</version><version>2.5</version></priorVersions></namespace><namespace><name>urn:vim2</name><version>2.0</version></namespace></namespaces>
|
version="1.0"><namespace><name>urn:vim25</name><version>6.0</version><priorVersions><version>5.5</version><version>5.1</version><version>5.0</version><version>4.1</version><version>4.0</version><version>2.5u2server</version><version>2.5u2</version><version>2.5</version></priorVersions></namespace><namespace><name>urn:vim2</name><version>2.0</version></namespace></namespaces>
|
||||||
|
2
tests/fixtures/iso8601_set_datetime.yaml
vendored
2
tests/fixtures/iso8601_set_datetime.yaml
vendored
@@ -6,7 +6,7 @@ interactions:
|
|||||||
Accept-Encoding: ['gzip, deflate']
|
Accept-Encoding: ['gzip, deflate']
|
||||||
User-Agent: [python-requests/2.3.0 CPython/3.4.1 Darwin/13.3.0]
|
User-Agent: [python-requests/2.3.0 CPython/3.4.1 Darwin/13.3.0]
|
||||||
method: GET
|
method: GET
|
||||||
uri: https://vcsa:443//sdk/vimServiceVersions.xml
|
uri: https://vcsa:443/sdk/vimServiceVersions.xml
|
||||||
response:
|
response:
|
||||||
body: {string: "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!--\n Copyright
|
body: {string: "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!--\n Copyright
|
||||||
2008-2012 VMware, Inc. All rights reserved.\n-->\n<namespaces version=\"1.0\">\n
|
2008-2012 VMware, Inc. All rights reserved.\n-->\n<namespaces version=\"1.0\">\n
|
||||||
|
2
tests/fixtures/root_folder_parent.yaml
vendored
2
tests/fixtures/root_folder_parent.yaml
vendored
@@ -7,7 +7,7 @@ interactions:
|
|||||||
Connection: [keep-alive]
|
Connection: [keep-alive]
|
||||||
User-Agent: [python-requests/2.7.0 CPython/2.7.10 Darwin/15.0.0]
|
User-Agent: [python-requests/2.7.0 CPython/2.7.10 Darwin/15.0.0]
|
||||||
method: GET
|
method: GET
|
||||||
uri: https://vcsa//sdk/vimServiceVersions.xml
|
uri: https://vcsa/sdk/vimServiceVersions.xml
|
||||||
response:
|
response:
|
||||||
body: {string: !!python/unicode '<?xml version="1.0" encoding="UTF-8" ?><namespaces
|
body: {string: !!python/unicode '<?xml version="1.0" encoding="UTF-8" ?><namespaces
|
||||||
version="1.0"><namespace><name>urn:vim25</name><version>6.0</version><priorVersions><version>5.5</version><version>5.1</version><version>5.0</version><version>4.1</version><version>4.0</version><version>2.5u2server</version><version>2.5u2</version><version>2.5</version></priorVersions></namespace><namespace><name>urn:vim2</name><version>2.0</version></namespace></namespaces>
|
version="1.0"><namespace><name>urn:vim25</name><version>6.0</version><priorVersions><version>5.5</version><version>5.1</version><version>5.0</version><version>4.1</version><version>4.0</version><version>2.5u2server</version><version>2.5u2</version><version>2.5</version></priorVersions></namespace><namespace><name>urn:vim2</name><version>2.0</version></namespace></namespaces>
|
||||||
|
2
tests/fixtures/smart_connection.yaml
vendored
2
tests/fixtures/smart_connection.yaml
vendored
@@ -7,7 +7,7 @@ interactions:
|
|||||||
Connection: [keep-alive]
|
Connection: [keep-alive]
|
||||||
User-Agent: [python-requests/2.7.0 CPython/2.7.10 Darwin/15.0.0]
|
User-Agent: [python-requests/2.7.0 CPython/2.7.10 Darwin/15.0.0]
|
||||||
method: GET
|
method: GET
|
||||||
uri: https://vcsa//sdk/vimServiceVersions.xml
|
uri: https://vcsa/sdk/vimServiceVersions.xml
|
||||||
response:
|
response:
|
||||||
body: {string: !!python/unicode '<?xml version="1.0" encoding="UTF-8" ?><namespaces
|
body: {string: !!python/unicode '<?xml version="1.0" encoding="UTF-8" ?><namespaces
|
||||||
version="1.0"><namespace><name>urn:vim25</name><version>6.0</version><priorVersions><version>5.5</version><version>5.1</version><version>5.0</version><version>4.1</version><version>4.0</version><version>2.5u2server</version><version>2.5u2</version><version>2.5</version></priorVersions></namespace><namespace><name>urn:vim2</name><version>2.0</version></namespace></namespaces>
|
version="1.0"><namespace><name>urn:vim25</name><version>6.0</version><priorVersions><version>5.5</version><version>5.1</version><version>5.0</version><version>4.1</version><version>4.0</version><version>2.5u2server</version><version>2.5u2</version><version>2.5</version></priorVersions></namespace><namespace><name>urn:vim2</name><version>2.0</version></namespace></namespaces>
|
||||||
|
2
tests/fixtures/test_vm_config_iso8601.yaml
vendored
2
tests/fixtures/test_vm_config_iso8601.yaml
vendored
@@ -6,7 +6,7 @@ interactions:
|
|||||||
Accept-Encoding: ['gzip, deflate']
|
Accept-Encoding: ['gzip, deflate']
|
||||||
User-Agent: [python-requests/2.3.0 CPython/3.4.1 Darwin/13.3.0]
|
User-Agent: [python-requests/2.3.0 CPython/3.4.1 Darwin/13.3.0]
|
||||||
method: GET
|
method: GET
|
||||||
uri: https://vcsa:443//sdk/vimServiceVersions.xml
|
uri: https://vcsa:443/sdk/vimServiceVersions.xml
|
||||||
response:
|
response:
|
||||||
body: {string: "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!--\n Copyright
|
body: {string: "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!--\n Copyright
|
||||||
2008-2012 VMware, Inc. All rights reserved.\n-->\n<namespaces version=\"1.0\">\n
|
2008-2012 VMware, Inc. All rights reserved.\n-->\n<namespaces version=\"1.0\">\n
|
||||||
|
2
tests/fixtures/vm_nic_data.yaml
vendored
2
tests/fixtures/vm_nic_data.yaml
vendored
@@ -6,7 +6,7 @@ interactions:
|
|||||||
Accept-Encoding: ['gzip, deflate']
|
Accept-Encoding: ['gzip, deflate']
|
||||||
User-Agent: [python-requests/2.3.0 CPython/3.4.1 Darwin/13.3.0]
|
User-Agent: [python-requests/2.3.0 CPython/3.4.1 Darwin/13.3.0]
|
||||||
method: GET
|
method: GET
|
||||||
uri: https://vcsa:443//sdk/vimServiceVersions.xml
|
uri: https://vcsa:443/sdk/vimServiceVersions.xml
|
||||||
response:
|
response:
|
||||||
body: {string: "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!--\n Copyright
|
body: {string: "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!--\n Copyright
|
||||||
2008-2012 VMware, Inc. All rights reserved.\n-->\n<namespaces version=\"1.0\">\n
|
2008-2012 VMware, Inc. All rights reserved.\n-->\n<namespaces version=\"1.0\">\n
|
||||||
|
Reference in New Issue
Block a user