From 3ffe7ce7363cd188af241215dfaabdc44acd5bbc Mon Sep 17 00:00:00 2001 From: Andrey Pavlov Date: Sat, 4 Apr 2015 14:17:35 +0300 Subject: [PATCH] change s3 endpoint from nova to ec2-api for devstack fix register_image function - code can access outer variable but "set operation" will create a new name in the current scope, which cover the outer one. Change-Id: Ica2750fbf05e0d3c68ed199996afd8c6e7662229 --- devstack/plugin.sh | 78 +++++++++++++++++++++++++-------------------- ec2api/api/image.py | 18 +++++------ 2 files changed, 52 insertions(+), 44 deletions(-) diff --git a/devstack/plugin.sh b/devstack/plugin.sh index 411121b1..1b732f2f 100755 --- a/devstack/plugin.sh +++ b/devstack/plugin.sh @@ -27,10 +27,7 @@ EC2API_CONF_FILE=${EC2API_CONF_DIR}/ec2api.conf EC2API_DEBUG=${EC2API_DEBUG:-True} EC2API_STATE_PATH=${EC2API_STATE_PATH:=$DATA_DIR/ec2api} -EC2API_SERVICE_HOST=${EC2API_SERVICE_HOST:-$SERVICE_HOST} EC2API_SERVICE_PORT=${EC2API_SERVICE_PORT:-8788} -EC2API_SERVICE_PROTOCOL=${EC2API_SERVICE_PROTOCOL:-$SERVICE_PROTOCOL} -EC2API_S3_SERVICE_HOST=${EC2API_S3_SERVICE_HOST:-$EC2API_SERVICE_HOST} EC2API_S3_SERVICE_PORT=${EC2API_S3_SERVICE_PORT:-3334} EC2API_RABBIT_VHOST=${EC2API_RABBIT_VHOST:-''} @@ -47,6 +44,45 @@ else fi +function recreate_endpoint { + local endpoint=$1 + local description=$2 + local port=$3 + + if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then + + # Remove nova's ec2 service/endpoint + local endpoint_id=$(openstack endpoint list \ + --column "ID" \ + --column "Region" \ + --column "Service Name" \ + | grep " $REGION_NAME " \ + | grep " $endpoint " | get_field 1) + if [[ -n "$endpoint_id" ]]; then + openstack endpoint delete $endpoint_id + fi + local service_id=$(openstack service list \ + -c "ID" -c "Name" \ + | grep " $endpoint " | get_field 1) + if [[ -n "$service_id" ]]; then + openstack service delete $service_id + fi + + local service_id=$(openstack service create \ + $endpoint \ + --name "$endpoint" \ + --description="$description" \ + -f value -c id) + openstack endpoint create \ + $service_id \ + --region "$REGION_NAME" \ + --publicurl "$SERVICE_PROTOCOL://$SERVICE_HOST:$port/" \ + --adminurl "$SERVICE_PROTOCOL://$SERVICE_HOST:$port/" \ + --internalurl "$SERVICE_PROTOCOL://$SERVICE_HOST:$port/" + fi +} + + # create_ec2api_accounts() - Set up common required ec2api accounts # # Tenant User Roles @@ -72,36 +108,9 @@ function create_ec2api_accounts() { --project $SERVICE_TENANT \ --user $EC2API_USER - if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then - - # Remove nova's ec2 service/endpoint - local endpoint_id=$(openstack endpoint list \ - --column "ID" \ - --column "Region" \ - --column "Service Name" \ - | grep " $REGION_NAME " \ - | grep " ec2 " | get_field 1) - if [[ -n "$endpoint_id" ]]; then - openstack endpoint delete $endpoint_id - fi - local service_id=$(openstack service list \ - -c "ID" -c "Name" \ - | grep " ec2 " | get_field 1) - if [[ -n "$service_id" ]]; then - openstack service delete $service_id - fi - - EC2API_SERVICE=$(openstack service create \ - ec2 \ - --type "ec2" \ - --description="EC2 Compatibility Layer" \ - -f value -c id) - openstack endpoint create \ - $EC2API_SERVICE \ - --region "$REGION_NAME" \ - --publicurl "$EC2API_SERVICE_PROTOCOL://$EC2API_SERVICE_HOST:$EC2API_SERVICE_PORT/" \ - --adminurl "$EC2API_SERVICE_PROTOCOL://$EC2API_SERVICE_HOST:$EC2API_SERVICE_PORT/" \ - --internalurl "$EC2API_SERVICE_PROTOCOL://$EC2API_SERVICE_HOST:$EC2API_SERVICE_PORT/" + recreate_endpoint "ec2" "EC2 Compatibility Layer" $EC2API_SERVICE_PORT + if ! is_service_enabled swift3; then + recreate_endpoint "s3" "S3" $EC2API_S3_SERVICE_PORT fi } @@ -189,11 +198,10 @@ function configure_ec2api { if is_service_enabled swift3; then iniset $EC2API_CONF_FILE DEFAULT s3_port "$S3_SERVICE_PORT" - iniset $EC2API_CONF_FILE DEFAULT s3_host "$SERVICE_HOST" else iniset $EC2API_CONF_FILE DEFAULT s3_port "$EC2API_S3_SERVICE_PORT" - iniset $EC2API_CONF_FILE DEFAULT s3_host "$EC2API_S3_SERVICE_HOST" fi + iniset $EC2API_CONF_FILE DEFAULT s3_host "$SERVICE_HOST" configure_ec2api_rpc_backend diff --git a/ec2api/api/image.py b/ec2api/api/image.py index 2758d08f..7a514729 100644 --- a/ec2api/api/image.py +++ b/ec2api/api/image.py @@ -689,9 +689,7 @@ def _s3_parse_manifest(context, manifest): if mappings: properties['mappings'] = mappings - image_format = 'ami' - - def set_dependent_image_id(image_key, kind): + def set_dependent_image_id(image_key): try: image_key_path = ('machine_configuration/%(image_key)s' % {'image_key': image_key}) @@ -699,13 +697,15 @@ def _s3_parse_manifest(context, manifest): except Exception: return if image_id == 'true': - image_format = kind - else: - os_image = ec2utils.get_os_image(context, image_id) - properties[image_key] = os_image.id + return True + os_image = ec2utils.get_os_image(context, image_id) + properties[image_key] = os_image.id - set_dependent_image_id('kernel_id', 'aki') - set_dependent_image_id('ramdisk_id', 'ari') + image_format = 'ami' + if set_dependent_image_id('kernel_id'): + image_format = 'aki' + if set_dependent_image_id('ramdisk_id'): + image_format = 'ari' metadata = {'disk_format': image_format, 'container_format': image_format,