Merge "Add support for multi-region deployments"
This commit is contained in:
commit
e42d8c6599
@ -27,6 +27,7 @@ class TestBaseStackUtils(tests.TestCase):
|
||||
|
||||
self.service_type = 'fake_service'
|
||||
self.url = 'http://%s-net.com'
|
||||
self.url_region_two = 'http://%s-net-two.com'
|
||||
|
||||
def test_url_for_good_v3(self):
|
||||
# TODO(n.s.):Can't find v3 endpoint example. Fix it later.
|
||||
@ -76,3 +77,33 @@ class TestBaseStackUtils(tests.TestCase):
|
||||
|
||||
self.assertRaises(exceptions.EndpointsNotFound, self.base.url_for,
|
||||
service_catalog, self.service_type)
|
||||
|
||||
def test_url_for_good_v2_region(self):
|
||||
service_catalog = (
|
||||
[{"endpoints": [{"adminURL": self.url % 'admin',
|
||||
"region": "RegionOne",
|
||||
"internalURL": self.url % 'internal',
|
||||
"publicURL": self.url % 'public'},
|
||||
{"adminURL": self.url_region_two % 'admin',
|
||||
"region": "RegionTwo",
|
||||
"internalURL": self.url_region_two % 'internal',
|
||||
"publicURL": self.url_region_two % 'public'}],
|
||||
"type": "fake_service",
|
||||
"name": "foo"}])
|
||||
|
||||
url = self.base.url_for(service_catalog, self.service_type,
|
||||
os_region_name='RegionTwo')
|
||||
self.assertEqual(url, self.url_region_two % 'public')
|
||||
|
||||
def test_url_for_no_endpoint_in_region(self):
|
||||
service_catalog = (
|
||||
[{"endpoints": [{"adminURL": self.url % 'admin',
|
||||
"region": "RegionOne",
|
||||
"internalURL": self.url % 'internal',
|
||||
"publicURL": self.url % 'public'}],
|
||||
"type": "fake_service",
|
||||
"name": "foo"}])
|
||||
|
||||
self.assertRaises(exceptions.EndpointsNotFound, self.base.url_for,
|
||||
service_catalog, self.service_type,
|
||||
os_region_name='RegionTwo')
|
||||
|
@ -17,7 +17,8 @@ from blazar.manager import exceptions
|
||||
|
||||
|
||||
def url_for(service_catalog, service_type, admin=False,
|
||||
endpoint_interface=None):
|
||||
endpoint_interface=None,
|
||||
os_region_name=None):
|
||||
"""Description
|
||||
|
||||
Gets url of the service to communicate through.
|
||||
@ -40,6 +41,13 @@ def url_for(service_catalog, service_type, admin=False,
|
||||
except KeyError:
|
||||
raise exceptions.EndpointsNotFound(
|
||||
"No endpoints for %s" % service['type'])
|
||||
if os_region_name:
|
||||
endpoints = [e for e in endpoints if e['region'] == os_region_name]
|
||||
if not endpoints:
|
||||
raise exceptions.EndpointsNotFound("No endpoints for %s in "
|
||||
"region %s" %
|
||||
(service['type'],
|
||||
os_region_name))
|
||||
try:
|
||||
# if Keystone API v3 endpoints returned
|
||||
endpoint = [e for e in endpoints
|
||||
|
@ -28,7 +28,17 @@ from blazar.utils.openstack import base
|
||||
opts = [
|
||||
cfg.StrOpt('identity_service',
|
||||
default='identity',
|
||||
help='Identity service to use.')
|
||||
help='Identity service to use.'),
|
||||
cfg.StrOpt('os_region_name',
|
||||
default=None,
|
||||
help="""
|
||||
Region name of this node. This is used when picking the URL in the service
|
||||
catalog.
|
||||
|
||||
Possible values:
|
||||
|
||||
* Any string representing region name
|
||||
""")
|
||||
]
|
||||
|
||||
keystone_opts = [
|
||||
@ -94,12 +104,14 @@ class BlazarKeystoneClient(object):
|
||||
kwargs.setdefault('tenant_name', ctx.project_name)
|
||||
if not kwargs.get('auth_url'):
|
||||
kwargs['auth_url'] = base.url_for(
|
||||
ctx.service_catalog, CONF.identity_service)
|
||||
ctx.service_catalog, CONF.identity_service,
|
||||
os_region_name=CONF.os_region_name)
|
||||
if not kwargs.get('trust_id'):
|
||||
try:
|
||||
kwargs.setdefault('endpoint', base.url_for(
|
||||
ctx.service_catalog, CONF.identity_service,
|
||||
endpoint_interface='admin'))
|
||||
endpoint_interface='admin',
|
||||
os_region_name=CONF.os_region_name))
|
||||
except AttributeError:
|
||||
raise manager_exceptions.NoManagementUrl()
|
||||
if not kwargs.get('password'):
|
||||
|
@ -120,8 +120,10 @@ class BlazarNovaClient(object):
|
||||
auth_token = auth_token or ctx.auth_token
|
||||
endpoint_override = endpoint_override or \
|
||||
base.url_for(ctx.service_catalog,
|
||||
CONF.nova.compute_service)
|
||||
auth_url = base.url_for(ctx.service_catalog, CONF.identity_service)
|
||||
CONF.nova.compute_service,
|
||||
os_region_name=CONF.os_region_name)
|
||||
auth_url = base.url_for(ctx.service_catalog, CONF.identity_service,
|
||||
os_region_name=CONF.os_region_name)
|
||||
|
||||
if auth_url is None:
|
||||
auth_url = "%s://%s:%s/v3" % (CONF.os_auth_protocol,
|
||||
|
@ -44,12 +44,14 @@ function configure_blazar {
|
||||
touch $BLAZAR_CONF_FILE
|
||||
|
||||
iniset $BLAZAR_CONF_FILE DEFAULT os_auth_version v3
|
||||
iniset $BLAZAR_CONF_FILE DEFAULT os_auth_host $KEYSTONE_AUTH_HOST
|
||||
iniset $BLAZAR_CONF_FILE DEFAULT os_auth_port 80
|
||||
iniset $BLAZAR_CONF_FILE DEFAULT os_auth_prefix identity
|
||||
iniset $BLAZAR_CONF_FILE DEFAULT os_admin_password $SERVICE_PASSWORD
|
||||
iniset $BLAZAR_CONF_FILE DEFAULT os_admin_username blazar
|
||||
iniset $BLAZAR_CONF_FILE DEFAULT os_admin_project_name $SERVICE_TENANT_NAME
|
||||
iniset $BLAZAR_CONF_FILE DEFAULT identity_service $BLAZAR_IDENTITY_SERVICE_NAME
|
||||
iniset $BLAZAR_CONF_FILE DEFAULT os_region_name $REGION_NAME
|
||||
|
||||
# Keystone authtoken
|
||||
_blazar_setup_keystone $BLAZAR_CONF_FILE keystone_authtoken
|
||||
@ -127,7 +129,7 @@ function create_blazar_cache_dir {
|
||||
|
||||
# create_blazar_aggregate_freepool() - Create a Nova aggregate to use as freepool (for host reservation)
|
||||
function create_blazar_aggregate_freepool {
|
||||
openstack aggregate create $BLAZAR_FREEPOOL_NAME
|
||||
openstack --os-region $REGION_NAME aggregate create $BLAZAR_FREEPOOL_NAME
|
||||
}
|
||||
|
||||
# create_blazar_accounts() - Set up common required Blazar accounts
|
||||
|
@ -121,6 +121,7 @@ Then edit */etc/blazar/blazar.conf* using the following example:
|
||||
os_admin_password=<password>
|
||||
os_admin_project_name=<project_name>
|
||||
identity_service=<identity_service_name>
|
||||
os_region_name=<region_name>
|
||||
|
||||
[manager]
|
||||
plugins=physical.host.plugin,virtual.instance.plugin
|
||||
|
Loading…
x
Reference in New Issue
Block a user