Merge "Neutron pass-through"

This commit is contained in:
Jenkins 2017-08-02 14:05:08 +00:00 committed by Gerrit Code Review
commit a914a13d56
7 changed files with 60 additions and 12 deletions

View File

@ -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
}

View File

@ -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'),
]

View File

@ -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")

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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