From 985e958dda3e843442f76199caf63fa8b93680cc Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Wed, 10 Feb 2016 07:25:24 -0500 Subject: [PATCH] remove keystone templated catalog This is just another code path for little benefit in devstack which is going to rot out. We should be opinionated here and only support the dynamic catalog. Change-Id: I4e5c7e86aefe72fc21c77d423033e9b169318fec --- doc/source/configuration.rst | 18 ---------- files/default_catalog.templates | 63 --------------------------------- lib/cinder | 27 +++++++------- lib/glance | 16 ++++----- lib/heat | 30 ++++++++-------- lib/keystone | 63 +++++++-------------------------- lib/neutron-legacy | 16 ++++----- lib/nova | 59 +++++++++++++++--------------- lib/swift | 18 ++++------ 9 files changed, 90 insertions(+), 220 deletions(-) delete mode 100644 files/default_catalog.templates diff --git a/doc/source/configuration.rst b/doc/source/configuration.rst index 6f45c1cbb4..e985bdceb0 100644 --- a/doc/source/configuration.rst +++ b/doc/source/configuration.rst @@ -379,24 +379,6 @@ that matches requirements. PIP_UPGRADE=True - -Service Catalog Backend ------------------------ - -By default DevStack uses Keystone's ``sql`` service catalog backend. -An alternate ``template`` backend is also available, however, it does -not support the ``service-*`` and ``endpoint-*`` commands of the -``keystone`` CLI. To do so requires the ``sql`` backend be enabled -with ``KEYSTONE_CATALOG_BACKEND``: - - :: - - KEYSTONE_CATALOG_BACKEND=template - -DevStack's default configuration in ``sql`` mode is set in -``lib/keystone`` - - Guest Images ------------ diff --git a/files/default_catalog.templates b/files/default_catalog.templates deleted file mode 100644 index 4aab4160c1..0000000000 --- a/files/default_catalog.templates +++ /dev/null @@ -1,63 +0,0 @@ -# config for TemplatedCatalog, using camelCase because I don't want to do -# translations for legacy compat -catalog.RegionOne.identity.publicURL = http://%SERVICE_HOST%:$(public_port)s/v2.0 -catalog.RegionOne.identity.adminURL = http://%SERVICE_HOST%:$(admin_port)s/v2.0 -catalog.RegionOne.identity.internalURL = http://%SERVICE_HOST%:$(public_port)s/v2.0 -catalog.RegionOne.identity.name = Identity Service - - -catalog.RegionOne.compute.publicURL = http://%SERVICE_HOST%:8774/v2/$(tenant_id)s -catalog.RegionOne.compute.adminURL = http://%SERVICE_HOST%:8774/v2/$(tenant_id)s -catalog.RegionOne.compute.internalURL = http://%SERVICE_HOST%:8774/v2/$(tenant_id)s -catalog.RegionOne.compute.name = Compute Service - - -catalog.RegionOne.computev21.publicURL = http://%SERVICE_HOST%:8774/v2.1/$(tenant_id)s -catalog.RegionOne.computev21.adminURL = http://%SERVICE_HOST%:8774/v2.1/$(tenant_id)s -catalog.RegionOne.computev21.internalURL = http://%SERVICE_HOST%:8774/v2.1/$(tenant_id)s -catalog.RegionOne.computev21.name = Compute Service V2.1 - - -catalog.RegionOne.volume.publicURL = http://%SERVICE_HOST%:8776/v1/$(tenant_id)s -catalog.RegionOne.volume.adminURL = http://%SERVICE_HOST%:8776/v1/$(tenant_id)s -catalog.RegionOne.volume.internalURL = http://%SERVICE_HOST%:8776/v1/$(tenant_id)s -catalog.RegionOne.volume.name = Volume Service - - -catalog.RegionOne.volumev2.publicURL = http://%SERVICE_HOST%:8776/v2/$(tenant_id)s -catalog.RegionOne.volumev2.adminURL = http://%SERVICE_HOST%:8776/v2/$(tenant_id)s -catalog.RegionOne.volumev2.internalURL = http://%SERVICE_HOST%:8776/v2/$(tenant_id)s -catalog.RegionOne.volumev2.name = Volume Service V2 - - -catalog.RegionOne.ec2.publicURL = http://%SERVICE_HOST%:8773/ -catalog.RegionOne.ec2.adminURL = http://%SERVICE_HOST%:8773/ -catalog.RegionOne.ec2.internalURL = http://%SERVICE_HOST%:8773/ -catalog.RegionOne.ec2.name = EC2 Service - - -catalog.RegionOne.s3.publicURL = http://%SERVICE_HOST%:%S3_SERVICE_PORT% -catalog.RegionOne.s3.adminURL = http://%SERVICE_HOST%:%S3_SERVICE_PORT% -catalog.RegionOne.s3.internalURL = http://%SERVICE_HOST%:%S3_SERVICE_PORT% -catalog.RegionOne.s3.name = S3 Service - - -catalog.RegionOne.image.publicURL = http://%SERVICE_HOST%:9292 -catalog.RegionOne.image.adminURL = http://%SERVICE_HOST%:9292 -catalog.RegionOne.image.internalURL = http://%SERVICE_HOST%:9292 -catalog.RegionOne.image.name = Image Service - -catalog.RegionOne.cloudformation.publicURL = http://%SERVICE_HOST%:8000/v1 -catalog.RegionOne.cloudformation.adminURL = http://%SERVICE_HOST%:8000/v1 -catalog.RegionOne.cloudformation.internalURL = http://%SERVICE_HOST%:8000/v1 -catalog.RegionOne.cloudformation.name = CloudFormation service - -catalog.RegionOne.orchestration.publicURL = http://%SERVICE_HOST%:8004/v1/$(tenant_id)s -catalog.RegionOne.orchestration.adminURL = http://%SERVICE_HOST%:8004/v1/$(tenant_id)s -catalog.RegionOne.orchestration.internalURL = http://%SERVICE_HOST%:8004/v1/$(tenant_id)s -catalog.RegionOne.orchestration.name = Orchestration Service - -catalog.RegionOne.metering.publicURL = http://%SERVICE_HOST%:8777/v1 -catalog.RegionOne.metering.adminURL = http://%SERVICE_HOST%:8777/v1 -catalog.RegionOne.metering.internalURL = http://%SERVICE_HOST%:8777/v1 -catalog.RegionOne.metering.name = Telemetry Service diff --git a/lib/cinder b/lib/cinder index 3aea05023f..e1e1f2a893 100644 --- a/lib/cinder +++ b/lib/cinder @@ -369,20 +369,21 @@ function create_cinder_accounts { create_service_user "cinder" - if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then + get_or_create_service "cinder" "volume" "Cinder Volume Service" + get_or_create_endpoint \ + "volume" \ + "$REGION_NAME" \ + "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v1/\$(tenant_id)s" \ + "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v1/\$(tenant_id)s" \ + "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v1/\$(tenant_id)s" - get_or_create_service "cinder" "volume" "Cinder Volume Service" - get_or_create_endpoint "volume" "$REGION_NAME" \ - "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v1/\$(tenant_id)s" \ - "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v1/\$(tenant_id)s" \ - "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v1/\$(tenant_id)s" - - get_or_create_service "cinderv2" "volumev2" "Cinder Volume Service V2" - get_or_create_endpoint "volumev2" "$REGION_NAME" \ - "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v2/\$(tenant_id)s" \ - "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v2/\$(tenant_id)s" \ - "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v2/\$(tenant_id)s" - fi + get_or_create_service "cinderv2" "volumev2" "Cinder Volume Service V2" + get_or_create_endpoint \ + "volumev2" \ + "$REGION_NAME" \ + "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v2/\$(tenant_id)s" \ + "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v2/\$(tenant_id)s" \ + "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v2/\$(tenant_id)s" fi } diff --git a/lib/glance b/lib/glance index fa93e6e658..c248611aef 100644 --- a/lib/glance +++ b/lib/glance @@ -244,15 +244,13 @@ function create_glance_accounts { get_or_add_user_project_role "ResellerAdmin" $glance_swift_user $SERVICE_TENANT_NAME fi - if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then - - get_or_create_service "glance" "image" "Glance Image Service" - get_or_create_endpoint "image" \ - "$REGION_NAME" \ - "$GLANCE_SERVICE_PROTOCOL://$GLANCE_HOSTPORT" \ - "$GLANCE_SERVICE_PROTOCOL://$GLANCE_HOSTPORT" \ - "$GLANCE_SERVICE_PROTOCOL://$GLANCE_HOSTPORT" - fi + get_or_create_service "glance" "image" "Glance Image Service" + get_or_create_endpoint \ + "image" \ + "$REGION_NAME" \ + "$GLANCE_SERVICE_PROTOCOL://$GLANCE_HOSTPORT" \ + "$GLANCE_SERVICE_PROTOCOL://$GLANCE_HOSTPORT" \ + "$GLANCE_SERVICE_PROTOCOL://$GLANCE_HOSTPORT" fi } diff --git a/lib/heat b/lib/heat index df44b7689c..1bb753d788 100644 --- a/lib/heat +++ b/lib/heat @@ -387,23 +387,21 @@ function create_heat_accounts { if [[ "$HEAT_STANDALONE" != "True" ]]; then create_service_user "heat" "admin" + get_or_create_service "heat" "orchestration" "Heat Orchestration Service" + get_or_create_endpoint \ + "orchestration" \ + "$REGION_NAME" \ + "$SERVICE_PROTOCOL://$HEAT_API_HOST:$HEAT_API_PORT/v1/\$(tenant_id)s" \ + "$SERVICE_PROTOCOL://$HEAT_API_HOST:$HEAT_API_PORT/v1/\$(tenant_id)s" \ + "$SERVICE_PROTOCOL://$HEAT_API_HOST:$HEAT_API_PORT/v1/\$(tenant_id)s" - if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then - - get_or_create_service "heat" "orchestration" "Heat Orchestration Service" - get_or_create_endpoint "orchestration" \ - "$REGION_NAME" \ - "$SERVICE_PROTOCOL://$HEAT_API_HOST:$HEAT_API_PORT/v1/\$(tenant_id)s" \ - "$SERVICE_PROTOCOL://$HEAT_API_HOST:$HEAT_API_PORT/v1/\$(tenant_id)s" \ - "$SERVICE_PROTOCOL://$HEAT_API_HOST:$HEAT_API_PORT/v1/\$(tenant_id)s" - - get_or_create_service "heat-cfn" "cloudformation" "Heat CloudFormation Service" - get_or_create_endpoint "cloudformation" \ - "$REGION_NAME" \ - "$SERVICE_PROTOCOL://$HEAT_API_CFN_HOST:$HEAT_API_CFN_PORT/v1" \ - "$SERVICE_PROTOCOL://$HEAT_API_CFN_HOST:$HEAT_API_CFN_PORT/v1" \ - "$SERVICE_PROTOCOL://$HEAT_API_CFN_HOST:$HEAT_API_CFN_PORT/v1" - fi + get_or_create_service "heat-cfn" "cloudformation" "Heat CloudFormation Service" + get_or_create_endpoint \ + "cloudformation" \ + "$REGION_NAME" \ + "$SERVICE_PROTOCOL://$HEAT_API_CFN_HOST:$HEAT_API_CFN_PORT/v1" \ + "$SERVICE_PROTOCOL://$HEAT_API_CFN_HOST:$HEAT_API_CFN_PORT/v1" \ + "$SERVICE_PROTOCOL://$HEAT_API_CFN_HOST:$HEAT_API_CFN_PORT/v1" # heat_stack_user role is for users created by Heat get_or_create_role "heat_stack_user" diff --git a/lib/keystone b/lib/keystone index 38a0acf4ea..3c67693d96 100644 --- a/lib/keystone +++ b/lib/keystone @@ -52,13 +52,12 @@ KEYSTONE_CONF_DIR=${KEYSTONE_CONF_DIR:-/etc/keystone} KEYSTONE_CONF=$KEYSTONE_CONF_DIR/keystone.conf KEYSTONE_PASTE_INI=${KEYSTONE_PASTE_INI:-$KEYSTONE_CONF_DIR/keystone-paste.ini} +# NOTE(sdague): remove in Newton +KEYSTONE_CATALOG_BACKEND="sql" + # Toggle for deploying Keystone under HTTPD + mod_wsgi KEYSTONE_USE_MOD_WSGI=${KEYSTONE_USE_MOD_WSGI:-${ENABLE_HTTPD_MOD_WSGI_SERVICES}} -# Select the Catalog backend driver -KEYSTONE_CATALOG_BACKEND=${KEYSTONE_CATALOG_BACKEND:-sql} -KEYSTONE_CATALOG=$KEYSTONE_CONF_DIR/default_catalog.templates - # Select the token persistence backend driver KEYSTONE_TOKEN_BACKEND=${KEYSTONE_TOKEN_BACKEND:-sql} @@ -254,39 +253,6 @@ function configure_keystone { iniset $KEYSTONE_CONF token driver "$KEYSTONE_TOKEN_BACKEND" - iniset $KEYSTONE_CONF catalog driver "$KEYSTONE_CATALOG_BACKEND" - if [[ "$KEYSTONE_CATALOG_BACKEND" = "sql" ]]; then - # Configure ``keystone.conf`` to use sql - inicomment $KEYSTONE_CONF catalog template_file - else - deprecated "Using templated service catalog in devstack is deprecated" - cp -p $FILES/default_catalog.templates $KEYSTONE_CATALOG - - # Add swift endpoints to service catalog if swift is enabled - if is_service_enabled s-proxy; then - echo "catalog.RegionOne.object_store.publicURL = http://%SERVICE_HOST%:$SWIFT_DEFAULT_BIND_PORT/v1/AUTH_\$(tenant_id)s" >> $KEYSTONE_CATALOG - echo "catalog.RegionOne.object_store.adminURL = http://%SERVICE_HOST%:$SWIFT_DEFAULT_BIND_PORT/" >> $KEYSTONE_CATALOG - echo "catalog.RegionOne.object_store.internalURL = http://%SERVICE_HOST%:$SWIFT_DEFAULT_BIND_PORT/v1/AUTH_\$(tenant_id)s" >> $KEYSTONE_CATALOG - echo "catalog.RegionOne.object_store.name = Swift Service" >> $KEYSTONE_CATALOG - fi - - # Add neutron endpoints to service catalog if neutron is enabled - if is_service_enabled neutron; then - echo "catalog.RegionOne.network.publicURL = http://%SERVICE_HOST%:$Q_PORT/" >> $KEYSTONE_CATALOG - echo "catalog.RegionOne.network.adminURL = http://%SERVICE_HOST%:$Q_PORT/" >> $KEYSTONE_CATALOG - echo "catalog.RegionOne.network.internalURL = http://%SERVICE_HOST%:$Q_PORT/" >> $KEYSTONE_CATALOG - echo "catalog.RegionOne.network.name = Neutron Service" >> $KEYSTONE_CATALOG - fi - - sed -e " - s,%SERVICE_HOST%,$SERVICE_HOST,g; - s,%S3_SERVICE_PORT%,$S3_SERVICE_PORT,g; - " -i $KEYSTONE_CATALOG - - # Configure ``keystone.conf`` to use templates - iniset $KEYSTONE_CONF catalog template_file "$KEYSTONE_CATALOG" - fi - # Set up logging if [ "$SYSLOG" != "False" ]; then iniset $KEYSTONE_CONF DEFAULT use_syslog "True" @@ -588,7 +554,6 @@ function stop_keystone { # - ``KEYSTONE_BIN_DIR`` # - ``ADMIN_PASSWORD`` # - ``IDENTITY_API_VERSION`` -# - ``KEYSTONE_CATALOG_BACKEND`` # - ``KEYSTONE_AUTH_URI`` # - ``REGION_NAME`` # - ``KEYSTONE_SERVICE_PROTOCOL`` @@ -616,19 +581,17 @@ function bootstrap_keystone { --os-identity-api-version 3 --os-auth-url $KEYSTONE_AUTH_URI \ --os-password $ADMIN_PASSWORD) - if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then + export OS_TOKEN=$token_id + export OS_URL=$KEYSTONE_AUTH_URI/v3 + export OS_IDENTITY_API_VERSION=3 - export OS_TOKEN=$token_id - export OS_URL=$KEYSTONE_AUTH_URI/v3 - export OS_IDENTITY_API_VERSION=3 - - get_or_create_service "keystone" "identity" "Keystone Identity Service" - get_or_create_endpoint "identity" \ - "$REGION_NAME" \ - "$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v$IDENTITY_API_VERSION" \ - "$KEYSTONE_AUTH_URI/v$IDENTITY_API_VERSION" \ - "$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v$IDENTITY_API_VERSION" - fi + get_or_create_service "keystone" "identity" "Keystone Identity Service" + get_or_create_endpoint \ + "identity" \ + "$REGION_NAME" \ + "$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v$IDENTITY_API_VERSION" \ + "$KEYSTONE_AUTH_URI/v$IDENTITY_API_VERSION" \ + "$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v$IDENTITY_API_VERSION" unset OS_TOKEN OS_URL OS_IDENTITY_API_VERSION } diff --git a/lib/neutron-legacy b/lib/neutron-legacy index 73a1bcd0a3..9acc2203af 100644 --- a/lib/neutron-legacy +++ b/lib/neutron-legacy @@ -525,15 +525,13 @@ function create_neutron_accounts { create_service_user "neutron" - if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then - - get_or_create_service "neutron" "network" "Neutron Service" - get_or_create_endpoint "network" \ - "$REGION_NAME" \ - "$Q_PROTOCOL://$SERVICE_HOST:$Q_PORT/" \ - "$Q_PROTOCOL://$SERVICE_HOST:$Q_PORT/" \ - "$Q_PROTOCOL://$SERVICE_HOST:$Q_PORT/" - fi + get_or_create_service "neutron" "network" "Neutron Service" + get_or_create_endpoint \ + "network" \ + "$REGION_NAME" \ + "$Q_PROTOCOL://$SERVICE_HOST:$Q_PORT/" \ + "$Q_PROTOCOL://$SERVICE_HOST:$Q_PORT/" \ + "$Q_PROTOCOL://$SERVICE_HOST:$Q_PORT/" fi } diff --git a/lib/nova b/lib/nova index dc425a19bd..17f64a7624 100644 --- a/lib/nova +++ b/lib/nova @@ -415,29 +415,28 @@ function create_nova_accounts { # this service user when notifying nova of changes and that requires the admin role. create_service_user "nova" "admin" - if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then - local nova_api_url - if [[ "$NOVA_USE_MOD_WSGI" == "False" ]]; then - nova_api_url="$NOVA_SERVICE_PROTOCOL://$NOVA_SERVICE_HOST:$NOVA_SERVICE_PORT" - else - nova_api_url="$NOVA_SERVICE_PROTOCOL://$NOVA_SERVICE_HOST/compute" - fi - - get_or_create_service "nova_legacy" "compute_legacy" \ - "Nova Compute Service (Legacy 2.0)" - get_or_create_endpoint "compute_legacy" \ - "$REGION_NAME" \ - "$nova_api_url/v2/\$(tenant_id)s" \ - "$nova_api_url/v2/\$(tenant_id)s" \ - "$nova_api_url/v2/\$(tenant_id)s" - - get_or_create_service "nova" "compute" "Nova Compute Service" - get_or_create_endpoint "compute" \ - "$REGION_NAME" \ - "$nova_api_url/v2.1/\$(tenant_id)s" \ - "$nova_api_url/v2.1/\$(tenant_id)s" \ - "$nova_api_url/v2.1/\$(tenant_id)s" + local nova_api_url + if [[ "$NOVA_USE_MOD_WSGI" == "False" ]]; then + nova_api_url="$NOVA_SERVICE_PROTOCOL://$NOVA_SERVICE_HOST:$NOVA_SERVICE_PORT" + else + nova_api_url="$NOVA_SERVICE_PROTOCOL://$NOVA_SERVICE_HOST/compute" fi + + get_or_create_service "nova_legacy" "compute_legacy" "Nova Compute Service (Legacy 2.0)" + get_or_create_endpoint \ + "compute_legacy" \ + "$REGION_NAME" \ + "$nova_api_url/v2/\$(tenant_id)s" \ + "$nova_api_url/v2/\$(tenant_id)s" \ + "$nova_api_url/v2/\$(tenant_id)s" + + get_or_create_service "nova" "compute" "Nova Compute Service" + get_or_create_endpoint \ + "compute" \ + "$REGION_NAME" \ + "$nova_api_url/v2.1/\$(tenant_id)s" \ + "$nova_api_url/v2.1/\$(tenant_id)s" \ + "$nova_api_url/v2.1/\$(tenant_id)s" fi if is_service_enabled n-api; then @@ -451,15 +450,13 @@ function create_nova_accounts { # S3 if is_service_enabled swift3; then - if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then - - get_or_create_service "s3" "s3" "S3" - get_or_create_endpoint "s3" \ - "$REGION_NAME" \ - "http://$SERVICE_HOST:$S3_SERVICE_PORT" \ - "http://$SERVICE_HOST:$S3_SERVICE_PORT" \ - "http://$SERVICE_HOST:$S3_SERVICE_PORT" - fi + get_or_create_service "s3" "s3" "S3" + get_or_create_endpoint \ + "s3" \ + "$REGION_NAME" \ + "http://$SERVICE_HOST:$S3_SERVICE_PORT" \ + "http://$SERVICE_HOST:$S3_SERVICE_PORT" \ + "http://$SERVICE_HOST:$S3_SERVICE_PORT" fi } diff --git a/lib/swift b/lib/swift index 9edeb0ab79..947d2abdc0 100644 --- a/lib/swift +++ b/lib/swift @@ -612,8 +612,6 @@ function create_swift_accounts { export swiftusertest3_password=testing3 export swiftusertest4_password=testing4 - KEYSTONE_CATALOG_BACKEND=${KEYSTONE_CATALOG_BACKEND:-sql} - local another_role another_role=$(get_or_create_role "anotherrole") @@ -621,15 +619,13 @@ function create_swift_accounts { # temp urls, which break when uploaded by a non-admin role create_service_user "swift" "admin" - if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then - - get_or_create_service "swift" "object-store" "Swift Service" - get_or_create_endpoint "object-store" \ - "$REGION_NAME" \ - "$SWIFT_SERVICE_PROTOCOL://$SERVICE_HOST:$SWIFT_DEFAULT_BIND_PORT/v1/AUTH_\$(tenant_id)s" \ - "$SWIFT_SERVICE_PROTOCOL://$SERVICE_HOST:$SWIFT_DEFAULT_BIND_PORT" \ - "$SWIFT_SERVICE_PROTOCOL://$SERVICE_HOST:$SWIFT_DEFAULT_BIND_PORT/v1/AUTH_\$(tenant_id)s" - fi + get_or_create_service "swift" "object-store" "Swift Service" + get_or_create_endpoint \ + "object-store" \ + "$REGION_NAME" \ + "$SWIFT_SERVICE_PROTOCOL://$SERVICE_HOST:$SWIFT_DEFAULT_BIND_PORT/v1/AUTH_\$(tenant_id)s" \ + "$SWIFT_SERVICE_PROTOCOL://$SERVICE_HOST:$SWIFT_DEFAULT_BIND_PORT" \ + "$SWIFT_SERVICE_PROTOCOL://$SERVICE_HOST:$SWIFT_DEFAULT_BIND_PORT/v1/AUTH_\$(tenant_id)s" local swift_tenant_test1 swift_tenant_test1=$(get_or_create_project swifttenanttest1 default)