Neutron pass-through
Network federation preliminary work Depends-On: I9dcd30fe6669bdf570149ed317b16005c21f6291 Change-Id: Ic5e694259544c2c6ffe717d560fc18391f64a1a0
This commit is contained in:
parent
4e18ef34c9
commit
c23c48fe8e
|
@ -47,11 +47,15 @@ function configure_mixmatch {
|
|||
fi
|
||||
|
||||
iniset $MIXMATCH_CONF sp_default volume_endpoint $CINDER_URL
|
||||
iniset $MIXMATCH_CONF sp_default network_endpoint \
|
||||
"$NEUTRON_SERVICE_PROTOCOL://$NEUTRON_SERVICE_HOST:$NEUTRON_SERVICE_PORT"
|
||||
iniset $MIXMATCH_CONF sp_default enabled_services "image, volume, network"
|
||||
|
||||
run_process mixmatch "$MIXMATCH_DIR/run_proxy.sh"
|
||||
|
||||
# Nova
|
||||
iniset $NOVA_CONF glance api_servers "$MIXMATCH_SERVICE_PROTOCOL://$HOST_IP:$MIXMATCH_SERVICE_PORT/image"
|
||||
iniset $NOVA_CONF neutron url "$MIXMATCH_SERVICE_PROTOCOL://$HOST_IP:$MIXMATCH_SERVICE_PORT/network"
|
||||
|
||||
# Cinder
|
||||
iniset $CINDER_CONF DEFAULT glance_api_servers \
|
||||
|
@ -75,6 +79,7 @@ function register_mixmatch {
|
|||
openstack endpoint delete `get_endpoint_ids volume`
|
||||
openstack endpoint delete `get_endpoint_ids volumev2`
|
||||
openstack endpoint delete `get_endpoint_ids volumev3`
|
||||
openstack endpoint delete `get_endpoint_ids network`
|
||||
|
||||
get_or_create_endpoint \
|
||||
"image" \
|
||||
|
@ -103,5 +108,12 @@ function register_mixmatch {
|
|||
"http://$HOST_IP:5001/volume/v3/\$(project_id)s" \
|
||||
"http://$HOST_IP:5001/volume/v3/\$(project_id)s" \
|
||||
"http://$HOST_IP:5001/volume/v3/\$(project_id)s"
|
||||
|
||||
get_or_create_endpoint \
|
||||
"network" \
|
||||
"$REGION_NAME" \
|
||||
"http://$HOST_IP:5001/network" \
|
||||
"http://$HOST_IP:5001/network" \
|
||||
"http://$HOST_IP:5001/network"
|
||||
fi
|
||||
}
|
||||
|
|
|
@ -40,6 +40,10 @@ OPTS = [
|
|||
cfg.ListOpt('volume_api_versions',
|
||||
default=['v3.0', 'v2.0', 'v1.0'],
|
||||
help='List of supported volume api versions'),
|
||||
|
||||
cfg.ListOpt('network_api_versions',
|
||||
default=['v2.0'],
|
||||
help='List of supported network api versions'),
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -38,6 +38,10 @@ SP_OPTS = [
|
|||
default=None,
|
||||
help="Volume Endpoint for Service Provider"),
|
||||
|
||||
cfg.StrOpt('network_endpoint',
|
||||
default=None,
|
||||
help='Network Endpoint for Service Provider'),
|
||||
|
||||
cfg.ListOpt('enabled_services',
|
||||
default=['image', 'volume'],
|
||||
help="Services to enable for Service Provider")
|
||||
|
|
|
@ -46,7 +46,7 @@ def get_service(a):
|
|||
return 'image'
|
||||
else:
|
||||
service = a.pop(0)
|
||||
if service in ['image', 'volume']:
|
||||
if service in ['image', 'volume', 'network']:
|
||||
return service
|
||||
else:
|
||||
abort(404)
|
||||
|
@ -260,7 +260,7 @@ class RequestHandler(object):
|
|||
self.details['action'][0],
|
||||
self.details['service'],
|
||||
version=self.details['version'],
|
||||
params=request.args.to_dict(),
|
||||
params=dict(request.args),
|
||||
path=request.base_url,
|
||||
strip_details=self.strip_details),
|
||||
200,
|
||||
|
@ -305,7 +305,7 @@ class RequestHandler(object):
|
|||
This is because the id of the marker will only be present in one of
|
||||
the service providers.
|
||||
"""
|
||||
args = user_args.copy()
|
||||
args = dict(user_args)
|
||||
if CONF.aggregation:
|
||||
args.pop('limit', None)
|
||||
args.pop('marker', None)
|
||||
|
|
|
@ -18,6 +18,7 @@ import operator
|
|||
from six.moves.urllib import parse
|
||||
|
||||
from mixmatch import config
|
||||
from mixmatch import utils
|
||||
|
||||
from oslo_serialization import jsonutils
|
||||
|
||||
|
@ -39,6 +40,10 @@ def construct_url(service_provider, service_type,
|
|||
url = '%s/%s' % (url, version)
|
||||
if project_id:
|
||||
url = '%s/%s' % (url, project_id)
|
||||
elif service_type == 'network':
|
||||
url = conf.network_endpoint
|
||||
if version:
|
||||
url = '%s/%s' % (url, version)
|
||||
|
||||
if action:
|
||||
url = '%s/%s' % (url, os.path.join(*action))
|
||||
|
@ -50,12 +55,12 @@ def aggregate(responses, key, service_type, version=None,
|
|||
params=None, path=None, strip_details=True):
|
||||
"""Combine responses from several clusters into one response."""
|
||||
if params:
|
||||
limit = int(params.get('limit', 0))
|
||||
sort = params.get('sort', None)
|
||||
marker = params.get('marker', None)
|
||||
limit = int(utils.flatten(params.get('limit', 0)))
|
||||
sort = utils.flatten(params.get('sort', None))
|
||||
marker = utils.flatten(params.get('marker', None))
|
||||
|
||||
sort_key = params.get('sort_key', None)
|
||||
sort_dir = params.get('sort_dir', None)
|
||||
sort_key = utils.flatten(params.get('sort_key', None))
|
||||
sort_dir = utils.flatten(params.get('sort_dir', None))
|
||||
|
||||
if sort and not sort_key:
|
||||
sort_key, sort_dir = sort.split(':')
|
||||
|
@ -108,14 +113,14 @@ def aggregate(responses, key, service_type, version=None,
|
|||
# Inject the pagination URIs
|
||||
if start > 0:
|
||||
params.pop('marker', None)
|
||||
response['start'] = '%s?%s' % (path, parse.urlencode(params))
|
||||
response['start'] = '%s?%s' % (path, parse.urlencode(params, True))
|
||||
if end < last:
|
||||
params['marker'] = response[key][-1]['id']
|
||||
if service_type == 'image':
|
||||
response['next'] = '%s?%s' % (path, parse.urlencode(params))
|
||||
response['next'] = '%s?%s' % (path, parse.urlencode(params, True))
|
||||
elif service_type == 'volume':
|
||||
response['volumes_links'] = [
|
||||
{"href": '%s?%s' % (path, parse.urlencode(params)),
|
||||
{"href": '%s?%s' % (path, parse.urlencode(params, True)),
|
||||
"rel": "next"}
|
||||
]
|
||||
|
||||
|
@ -184,6 +189,22 @@ def list_api_versions(service_type, url):
|
|||
api_versions.append(info)
|
||||
return json.dumps({'versions': api_versions})
|
||||
|
||||
elif service_type == 'network':
|
||||
supported_versions = CONF.network_api_versions
|
||||
|
||||
for version in supported_versions:
|
||||
info = dict()
|
||||
if version == supported_versions[0]:
|
||||
info.update({'status': 'CURRENT'})
|
||||
else:
|
||||
info.update({'status': 'SUPPORTED'})
|
||||
|
||||
info.update({'id': version,
|
||||
'links': [{'href': '%s/%s/' % (url, version[:-2]),
|
||||
'rel': 'self'}]})
|
||||
api_versions.append(info)
|
||||
return json.dumps({'versions': api_versions})
|
||||
|
||||
else:
|
||||
raise ValueError
|
||||
|
||||
|
|
|
@ -37,5 +37,5 @@ fi
|
|||
sudo chown -R jenkins:stack $BASE/new/tempest
|
||||
sudo chown -R jenkins:stack /opt/stack/data/tempest
|
||||
|
||||
ostestr -r '(^tempest.api.compute|^tempest.api.image|^tempest.api.volume|^tempest.scenario)' \
|
||||
ostestr -r '(^tempest.api.compute|^tempest.api.image|^tempest.api.volume|^tempest.api.network|^tempest.scenario)' \
|
||||
--blacklist-file $BASE/new/mixmatch/mixmatch/tests/functional/tempest_blacklist.txt
|
||||
|
|
|
@ -76,3 +76,10 @@ def pop_if_uuid(a):
|
|||
return safe_pop(a)
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def flatten(item):
|
||||
"""Return the first element if list-like, otherwise the item itself"""
|
||||
if isinstance(item, list):
|
||||
return item[0]
|
||||
return item
|
||||
|
|
Loading…
Reference in New Issue