Collecting stats with enabled SSL fixed

In case of enabled SSL for cluster we should set 'https_proxy'
environment variable.
We can't validate SSL certificate due to:
 - https://bugs.launchpad.net/fuel/+bug/1491805
 - https://bugs.launchpad.net/fuel/+bug/1491811
As temporary workaround SSL verification disabled for stats fetchers.

Change-Id: If04d99d4293caab50f89fc51209a1e9ca071ab63
Closes-Bug: #1491015
This commit is contained in:
Alexander Kislitsky 2015-09-03 14:38:37 +03:00
parent 0dfcf73deb
commit 974db6c544
4 changed files with 39 additions and 25 deletions

View File

@ -53,7 +53,8 @@ class ClientProvider(object):
self._nova = nova_client.Client(
settings.OPENSTACK_API_VERSION["nova"],
*self.credentials,
service_type=consts.NOVA_SERVICE_TYPE.compute
service_type=consts.NOVA_SERVICE_TYPE.compute,
insecure=True
)
return self._nova
@ -63,7 +64,8 @@ class ClientProvider(object):
if self._cinder is None:
self._cinder = cinder_client.Client(
settings.OPENSTACK_API_VERSION["cinder"],
*self.credentials
*self.credentials,
insecure=True
)
return self._cinder
@ -100,9 +102,9 @@ class ClientProvider(object):
for version_data in discover.version_data():
version = version_data["version"][0]
if version <= 2:
return keystone_client_v2.Client(**auth_creds)
return keystone_client_v2.Client(insecure=True, **auth_creds)
elif version == 3:
return keystone_client_v3.Client(**auth_creds)
return keystone_client_v3.Client(insecure=True, **auth_creds)
raise Exception("Failed to discover keystone version "
"for auth_url {0}".format(

View File

@ -111,17 +111,18 @@ def set_proxy(proxy):
:param proxy: - proxy url
"""
proxy_old_value = None
if os.environ.get("http_proxy"):
proxy_old_value = os.environ["http_proxy"]
logger.warning("http_proxy variable is already set with "
"value: {0}. Change to {1}. Old value "
"will be restored after exit from script's "
"execution context"
.format(proxy_old_value, proxy))
os.environ["http_proxy"] = proxy
variable_values = {
'http_proxy': os.environ.get('http_proxy'),
'https_proxy': os.environ.get('https_proxy')
}
for variable_name, variable_value in variable_values.items():
if os.environ.get(variable_name):
logger.warning("{0} variable is already set with "
"value: {1}. Changing to {2}. Old value "
"will be restored after exit from script's "
"execution context"
.format(variable_name, variable_value, proxy))
os.environ[variable_name] = proxy
try:
yield
@ -129,12 +130,14 @@ def set_proxy(proxy):
logger.exception("Error while talking to proxy. Details: {0}"
.format(six.text_type(e)))
finally:
if proxy_old_value:
logger.info("Restoring old value for http_proxy")
os.environ["http_proxy"] = proxy_old_value
else:
logger.info("Deleting set http_proxy environment variable")
del os.environ["http_proxy"]
for variable_name, variable_value in variable_values.items():
if variable_value:
logger.info("Restoring old value for http_proxy")
os.environ[variable_name] = variable_value
else:
logger.info("Deleting set {0} environment variable"
.format(variable_name))
del os.environ[variable_name]
def dithered(medium, interval=(0.9, 1.1)):

View File

@ -64,7 +64,8 @@ class TestOpenStackClientProvider(BaseTestCase):
nova_client_mock.assert_called_once_with(
settings.OPENSTACK_API_VERSION["nova"],
*fake_credentials,
service_type=consts.NOVA_SERVICE_TYPE.compute
service_type=consts.NOVA_SERVICE_TYPE.compute,
insecure=True
)
with patch(cinder_client_path,
@ -76,7 +77,8 @@ class TestOpenStackClientProvider(BaseTestCase):
cinder_client_mock.assert_called_once_with(
settings.OPENSTACK_API_VERSION["cinder"],
*fake_credentials
*fake_credentials,
insecure=True
)
with patch.object(client_provider, "_get_keystone_client",
@ -129,7 +131,7 @@ class TestOpenStackClientProvider(BaseTestCase):
self.assertTrue(kc_client_inst is client_inst_mock)
client_class_mock.assert_called_with(**auth_creds)
client_class_mock.assert_called_with(insecure=True, **auth_creds)
check_returned(version_data_v2, kc_v2_mock, kc_v2_inst_mock)
check_returned(version_data_v3, kc_v3_mock, kc_v3_inst_mock)

View File

@ -28,12 +28,13 @@ class TestUtilsFunctions(BaseTestCase):
def check_proxy():
with utils.set_proxy(new_proxy):
self.assertEqual(os.environ.get("http_proxy"), new_proxy)
self.assertEqual(os.environ.get("https_proxy"), new_proxy)
def raise_inside_context():
with utils.set_proxy(new_proxy):
raise Exception("Just an error")
expected = {"http_proxy": "test"}
expected = {"http_proxy": "test_http", "https_proxy": "test_https"}
new_proxy = "fake_proxy"
# check that proxy old value is restored
@ -42,18 +43,24 @@ class TestUtilsFunctions(BaseTestCase):
check_proxy()
self.assertEqual(os.environ.get("http_proxy"),
expected["http_proxy"])
self.assertEqual(os.environ.get("https_proxy"),
expected["https_proxy"])
raise_inside_context()
self.assertEqual(os.environ.get("http_proxy"),
expected["http_proxy"])
self.assertEqual(os.environ.get("https_proxy"),
expected["https_proxy"])
# check that env variable is deleted
# after exit from context manager w/ and w/o exception
check_proxy()
self.assertNotIn("http_proxy", os.environ)
self.assertNotIn("https_proxy", os.environ)
raise_inside_context()
self.assertNotIn("http_proxy", os.environ)
self.assertNotIn("https_proxy", os.environ)
def test_get_attr_value(self):
attributes = {