Make sure we can get watch server url in uwsgi mode
We get the 'watch' server url by translating the 'cfn' server url if the 'watch' server url is not configurated, but in uwsgi mode, the code logic is incorrect, this patch changes the logic to make sure that we can get the watch server url in both modes. Change-Id: Iebf2480f97c11474412d74726eba9cf5c8ed2193 Closes-Bug: #1716815
This commit is contained in:
parent
e39e15a5df
commit
a8af89ec97
heat
@ -13,6 +13,7 @@
|
||||
|
||||
from oslo_config import cfg
|
||||
import six
|
||||
from six.moves import urllib
|
||||
|
||||
from heatclient import client as hc
|
||||
from heatclient import exc
|
||||
@ -91,12 +92,23 @@ class HeatClientPlugin(client_plugin.ClientPlugin):
|
||||
|
||||
def get_watch_server_url(self):
|
||||
cfn_url = self.get_heat_cfn_url()
|
||||
url_parts = cfn_url.split(':')
|
||||
port_and_version = url_parts[-1].split('/')
|
||||
port_and_version[0] = (
|
||||
six.text_type(cfg.CONF.heat_api_cloudwatch.bind_port))
|
||||
url_parts[-1] = '/'.join(port_and_version)
|
||||
return ':'.join(url_parts)
|
||||
parsed_url = urllib.parse.urlparse(cfn_url)
|
||||
separator = ':'
|
||||
(host, separator, port) = parsed_url.netloc.partition(separator)
|
||||
# The old url model, like http://localhost:port/v1
|
||||
if port:
|
||||
watch_api_port = (
|
||||
six.text_type(cfg.CONF.heat_api_cloudwatch.bind_port))
|
||||
replaced_netloc = ':'.join([host, str(watch_api_port)])
|
||||
parsed_url = parsed_url._replace(netloc=replaced_netloc)
|
||||
# The uwsgi url mode, like http://ip/heat-api-cfn/v1
|
||||
else:
|
||||
paths = parsed_url.path.split('/')
|
||||
paths[1] = 'heat-api-cloudwatch'
|
||||
replaced_paths = '/'.join(paths)
|
||||
parsed_url = parsed_url._replace(path=replaced_paths)
|
||||
|
||||
return urllib.parse.urlunparse(parsed_url)
|
||||
|
||||
def get_insecure_option(self):
|
||||
return self._get_client_option(CLIENT_NAME, 'insecure')
|
||||
|
@ -75,7 +75,7 @@ class ClientsTest(common.HeatTestCase):
|
||||
obj._get_client_option.return_value = result
|
||||
self.assertEqual(result, obj.get_heat_url())
|
||||
|
||||
def _client_cfn_url(self):
|
||||
def _client_cfn_url(self, use_uwsgi=False):
|
||||
con = mock.Mock()
|
||||
c = clients.Clients(con)
|
||||
con.clients = c
|
||||
@ -83,7 +83,10 @@ class ClientsTest(common.HeatTestCase):
|
||||
obj._get_client_option = mock.Mock()
|
||||
obj._get_client_option.return_value = None
|
||||
obj.url_for = mock.Mock(name="url_for")
|
||||
obj.url_for.return_value = "http://0.0.0.0:8000/v1/"
|
||||
if use_uwsgi:
|
||||
obj.url_for.return_value = "http://0.0.0.0/heat-api-cfn/v1/"
|
||||
else:
|
||||
obj.url_for.return_value = "http://0.0.0.0:8000/v1/"
|
||||
return obj
|
||||
|
||||
def test_clients_get_heat_cfn_url(self):
|
||||
@ -92,7 +95,13 @@ class ClientsTest(common.HeatTestCase):
|
||||
|
||||
def test_clients_get_watch_server_url(self):
|
||||
obj = self._client_cfn_url()
|
||||
self.assertEqual("http://0.0.0.0:8003/v1/", obj.get_watch_server_url())
|
||||
self.assertEqual("http://0.0.0.0:8003/v1/",
|
||||
obj.get_watch_server_url())
|
||||
|
||||
def test_clients_get_watch_server_url_use_uwsgi(self):
|
||||
obj = self._client_cfn_url(use_uwsgi=True)
|
||||
self.assertEqual("http://0.0.0.0/heat-api-cloudwatch/v1/",
|
||||
obj.get_watch_server_url())
|
||||
|
||||
def test_clients_get_heat_cfn_metadata_url(self):
|
||||
obj = self._client_cfn_url()
|
||||
|
@ -786,14 +786,14 @@ class ServersTest(common.HeatTestCase):
|
||||
|
||||
@mock.patch.object(heat_plugin.HeatClientPlugin, 'url_for')
|
||||
def test_server_create_software_config(self, fake_url):
|
||||
fake_url.return_value = 'the-cfn-url'
|
||||
fake_url.return_value = 'http://ip:port/v1'
|
||||
server = self._server_create_software_config()
|
||||
|
||||
self.assertEqual({
|
||||
'os-collect-config': {
|
||||
'cfn': {
|
||||
'access_key_id': '4567',
|
||||
'metadata_url': 'the-cfn-url/v1/',
|
||||
'metadata_url': 'http://ip:port/v1/',
|
||||
'path': 'WebServer.Metadata',
|
||||
'secret_access_key': '8901',
|
||||
'stack_name': 'software_config_s'
|
||||
@ -805,13 +805,13 @@ class ServersTest(common.HeatTestCase):
|
||||
|
||||
@mock.patch.object(heat_plugin.HeatClientPlugin, 'url_for')
|
||||
def test_resolve_attribute_os_collect_config(self, fake_url):
|
||||
fake_url.return_value = 'the-cfn-url'
|
||||
fake_url.return_value = 'http://ip/heat-api-cfn/v1'
|
||||
server = self._server_create_software_config()
|
||||
|
||||
self.assertEqual({
|
||||
'cfn': {
|
||||
'access_key_id': '4567',
|
||||
'metadata_url': 'the-cfn-url/v1/',
|
||||
'metadata_url': 'http://ip/heat-api-cfn/v1/',
|
||||
'path': 'WebServer.Metadata',
|
||||
'secret_access_key': '8901',
|
||||
'stack_name': 'software_config_s'
|
||||
@ -822,14 +822,14 @@ class ServersTest(common.HeatTestCase):
|
||||
@mock.patch.object(heat_plugin.HeatClientPlugin, 'url_for')
|
||||
def test_server_create_software_config_metadata(self, fake_url):
|
||||
md = {'os-collect-config': {'polling_interval': 10}}
|
||||
fake_url.return_value = 'the-cfn-url'
|
||||
fake_url.return_value = 'http://ip/heat-api-cfn/v1'
|
||||
server = self._server_create_software_config(md=md)
|
||||
|
||||
self.assertEqual({
|
||||
'os-collect-config': {
|
||||
'cfn': {
|
||||
'access_key_id': '4567',
|
||||
'metadata_url': 'the-cfn-url/v1/',
|
||||
'metadata_url': 'http://ip/heat-api-cfn/v1/',
|
||||
'path': 'WebServer.Metadata',
|
||||
'secret_access_key': '8901',
|
||||
'stack_name': 'software_config_s'
|
||||
@ -1650,7 +1650,7 @@ class ServersTest(common.HeatTestCase):
|
||||
|
||||
@mock.patch.object(heat_plugin.HeatClientPlugin, 'url_for')
|
||||
def test_server_update_metadata_software_config(self, fake_url):
|
||||
fake_url.return_value = 'the-cfn-url'
|
||||
fake_url.return_value = 'http://ip:port/v1'
|
||||
server, ud_tmpl = self._server_create_software_config(
|
||||
stack_name='update_meta_sc', ret_tmpl=True)
|
||||
|
||||
@ -1658,7 +1658,7 @@ class ServersTest(common.HeatTestCase):
|
||||
'os-collect-config': {
|
||||
'cfn': {
|
||||
'access_key_id': '4567',
|
||||
'metadata_url': 'the-cfn-url/v1/',
|
||||
'metadata_url': 'http://ip:port/v1/',
|
||||
'path': 'WebServer.Metadata',
|
||||
'secret_access_key': '8901',
|
||||
'stack_name': 'update_meta_sc'
|
||||
@ -1678,7 +1678,7 @@ class ServersTest(common.HeatTestCase):
|
||||
@mock.patch.object(heat_plugin.HeatClientPlugin, 'url_for')
|
||||
def test_server_update_metadata_software_config_merge(self, fake_url):
|
||||
md = {'os-collect-config': {'polling_interval': 10}}
|
||||
fake_url.return_value = 'the-cfn-url'
|
||||
fake_url.return_value = 'http://ip/heat-api-cfn/v1'
|
||||
server, ud_tmpl = self._server_create_software_config(
|
||||
stack_name='update_meta_sc', ret_tmpl=True,
|
||||
md=md)
|
||||
@ -1687,7 +1687,7 @@ class ServersTest(common.HeatTestCase):
|
||||
'os-collect-config': {
|
||||
'cfn': {
|
||||
'access_key_id': '4567',
|
||||
'metadata_url': 'the-cfn-url/v1/',
|
||||
'metadata_url': 'http://ip/heat-api-cfn/v1/',
|
||||
'path': 'WebServer.Metadata',
|
||||
'secret_access_key': '8901',
|
||||
'stack_name': 'update_meta_sc'
|
||||
@ -1708,7 +1708,7 @@ class ServersTest(common.HeatTestCase):
|
||||
@mock.patch.object(heat_plugin.HeatClientPlugin, 'url_for')
|
||||
def test_server_update_software_config_transport(self, fake_url):
|
||||
md = {'os-collect-config': {'polling_interval': 10}}
|
||||
fake_url.return_value = 'the-cfn-url'
|
||||
fake_url.return_value = 'http://ip/heat-api-cfn/v1'
|
||||
server = self._server_create_software_config(
|
||||
stack_name='update_meta_sc', md=md)
|
||||
|
||||
@ -1716,7 +1716,7 @@ class ServersTest(common.HeatTestCase):
|
||||
'os-collect-config': {
|
||||
'cfn': {
|
||||
'access_key_id': '4567',
|
||||
'metadata_url': 'the-cfn-url/v1/',
|
||||
'metadata_url': 'http://ip/heat-api-cfn/v1/',
|
||||
'path': 'WebServer.Metadata',
|
||||
'secret_access_key': '8901',
|
||||
'stack_name': 'update_meta_sc'
|
||||
|
Loading…
x
Reference in New Issue
Block a user