diff --git a/README.md b/README.md index 483d1b0bc3..a738554d3f 100644 --- a/README.md +++ b/README.md @@ -85,19 +85,21 @@ Example (Qpid): # Swift -Swift is not installed by default, you can enable easily by adding this to your `localrc`: +Swift is enabled by default configured with only one replica to avoid being IO/memory intensive on a small vm. When running with only one replica the account, container and object services will run directly in screen. The others services like replicator, updaters or auditor runs in background. - enable_service swift +If you would like to disable Swift you can add this to your `localrc` : + + disable_service s-proxy s-object s-container s-account If you want a minimal Swift install with only Swift and Keystone you can have this instead in your `localrc`: disable_all_services - enable_service key mysql swift + enable_service key mysql s-proxy s-object s-container s-account -If you use Swift with Keystone, Swift will authenticate against it. You will need to make sure to use the Keystone URL to auth against. +If you only want to do some testing of a real normal swift cluster with multiple replicas you can do so by customizing the variable `SWIFT_REPLICAS` in your `localrc` (usually to 3). + +# Swift S3 If you are enabling `swift3` in `ENABLED_SERVICES` devstack will install the swift3 middleware emulation. Swift will be configured to act as a S3 endpoint for Keystone so effectively replacing the `nova-objectstore`. Only Swift proxy server is launched in the screen session all other services are started in background and managed by `swift-init` tool. - -By default Swift will configure 3 replicas (and one spare) which could be IO intensive on a small vm, if you only want to do some quick testing of the API you can choose to only have one replica by customizing the variable `SWIFT_REPLICAS` in your `localrc`. diff --git a/exercises/client-args.sh b/exercises/client-args.sh index 894da74263..1e92500701 100755 --- a/exercises/client-args.sh +++ b/exercises/client-args.sh @@ -136,7 +136,7 @@ fi # Swift client # ------------ -if [[ "$ENABLED_SERVICES" =~ "swift" ]]; then +if [[ "$ENABLED_SERVICES" =~ "swift" || "$ENABLED_SERVICES" =~ "s-proxy" ]]; then if [[ "$SKIP_EXERCISES" =~ "swift" ]] ; then STATUS_SWIFT="Skipped" else diff --git a/exercises/client-env.sh b/exercises/client-env.sh index c84e84e55b..dd8e56e22f 100755 --- a/exercises/client-env.sh +++ b/exercises/client-env.sh @@ -144,7 +144,8 @@ fi # Swift client # ------------ -if [[ "$ENABLED_SERVICES" =~ "swift" ]]; then + +if [[ "$ENABLED_SERVICES" =~ "swift" || "$ENABLED_SERVICES" =~ "s-proxy" ]]; then if [[ "$SKIP_EXERCISES" =~ "swift" ]] ; then STATUS_SWIFT="Skipped" else diff --git a/exercises/swift.sh b/exercises/swift.sh index 46ac2c5c06..c4ec3e9095 100755 --- a/exercises/swift.sh +++ b/exercises/swift.sh @@ -35,7 +35,7 @@ source $TOP_DIR/exerciserc # If swift is not enabled we exit with exitcode 55 which mean # exercise is skipped. -is_service_enabled swift || exit 55 +is_service_enabled s-proxy || exit 55 # Container name CONTAINER=ex-swift diff --git a/files/keystone_data.sh b/files/keystone_data.sh index a6fab09926..72b5b1e9c8 100755 --- a/files/keystone_data.sh +++ b/files/keystone_data.sh @@ -52,7 +52,7 @@ RESELLER_ROLE=$(get_id keystone role-create --name=ResellerAdmin) # Services # -------- -if [[ "$ENABLED_SERVICES" =~ "n-api" ]] && [[ "$ENABLED_SERVICES" =~ "swift" ]]; then +if [[ "$ENABLED_SERVICES" =~ "n-api" ]] && [[ "$ENABLED_SERVICES" =~ "s-proxy" || "$ENABLED_SERVICES" =~ "swift" ]]; then NOVA_USER=$(keystone user-list | awk "/ nova / { print \$2 }") # Nova needs ResellerAdmin role to download images when accessing # swift through the s3 api. @@ -123,7 +123,8 @@ if [[ "$ENABLED_SERVICES" =~ "g-api" ]]; then fi # Swift -if [[ "$ENABLED_SERVICES" =~ "swift" ]]; then + +if [[ "$ENABLED_SERVICES" =~ "swift" || "$ENABLED_SERVICES" =~ "s-proxy" ]]; then SWIFT_USER=$(get_id keystone user-create \ --name=swift \ --pass="$SERVICE_PASSWORD" \ @@ -190,7 +191,7 @@ if [[ "$ENABLED_SERVICES" =~ "n-api" ]]; then fi # S3 -if [[ "$ENABLED_SERVICES" =~ "n-obj" || "$ENABLED_SERVICES" =~ "swift" ]]; then +if [[ "$ENABLED_SERVICES" =~ "n-obj" || "$ENABLED_SERVICES" =~ "swift3" ]]; then if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then S3_SERVICE=$(get_id keystone service-create \ --name=s3 \ diff --git a/functions b/functions index f5afc3f834..220da9d3af 100644 --- a/functions +++ b/functions @@ -212,6 +212,10 @@ function get_packages() { if [[ ! $file_to_parse =~ ceilometer ]]; then file_to_parse="${file_to_parse} ceilometer" fi + elif [[ $service == s-* ]]; then + if [[ ! $file_to_parse =~ swift ]]; then + file_to_parse="${file_to_parse} swift" + fi elif [[ $service == n-* ]]; then if [[ ! $file_to_parse =~ nova ]]; then file_to_parse="${file_to_parse} nova" @@ -649,6 +653,9 @@ function iniadd() { # **ceilometer** returns true if any service enabled start with **ceilometer** # **glance** returns true if any service enabled start with **g-** # **quantum** returns true if any service enabled start with **q-** +# **swift** returns true if any service enabled start with **s-** +# For backward compatibility if we have **swift** in ENABLED_SERVICES all the +# **s-** services will be enabled. This will be deprecated in the future. # # Uses global ``ENABLED_SERVICES`` # is_service_enabled service [service ...] @@ -661,6 +668,8 @@ function is_service_enabled() { [[ ${service} == "ceilometer" && ${ENABLED_SERVICES} =~ "ceilometer-" ]] && return 0 [[ ${service} == "glance" && ${ENABLED_SERVICES} =~ "g-" ]] && return 0 [[ ${service} == "quantum" && ${ENABLED_SERVICES} =~ "q-" ]] && return 0 + [[ ${service} == "swift" && ${ENABLED_SERVICES} =~ "s-" ]] && return 0 + [[ ${service} == s-* && ${ENABLED_SERVICES} =~ "swift" ]] && return 0 done return 1 } diff --git a/lib/keystone b/lib/keystone index 26c0277dc0..17e0866fec 100644 --- a/lib/keystone +++ b/lib/keystone @@ -148,7 +148,7 @@ function configure_keystone() { cp -p $FILES/default_catalog.templates $KEYSTONE_CATALOG # Add swift endpoints to service catalog if swift is enabled - if is_service_enabled swift; then + if is_service_enabled s-proxy; then echo "catalog.RegionOne.object_store.publicURL = http://%SERVICE_HOST%:8080/v1/AUTH_\$(tenant_id)s" >> $KEYSTONE_CATALOG echo "catalog.RegionOne.object_store.adminURL = http://%SERVICE_HOST%:8080/" >> $KEYSTONE_CATALOG echo "catalog.RegionOne.object_store.internalURL = http://%SERVICE_HOST%:8080/v1/AUTH_\$(tenant_id)s" >> $KEYSTONE_CATALOG diff --git a/lib/swift b/lib/swift index 2f772fb64c..5c4ceabb4a 100644 --- a/lib/swift +++ b/lib/swift @@ -56,17 +56,18 @@ SWIFT_LOOPBACK_DISK_SIZE=${SWIFT_LOOPBACK_DISK_SIZE:-1000000} SWIFT_PARTITION_POWER_SIZE=${SWIFT_PARTITION_POWER_SIZE:-9} # Set ``SWIFT_REPLICAS`` to configure how many replicas are to be -# configured for your Swift cluster. By default the three replicas would need a -# bit of IO and Memory on a VM you may want to lower that to 1 if you want to do -# only some quick testing. -SWIFT_REPLICAS=${SWIFT_REPLICAS:-3} +# configured for your Swift cluster. By default we are configuring +# only one replica since this is way less CPU and memory intensive. If +# you are planning to test swift replication you may want to set this +# up to 3. +SWIFT_REPLICAS=${SWIFT_REPLICAS:-1} SWIFT_REPLICAS_SEQ=$(seq ${SWIFT_REPLICAS}) # Set ``OBJECT_PORT_BASE``, ``CONTAINER_PORT_BASE``, ``ACCOUNT_PORT_BASE`` # Port bases used in port number calclution for the service "nodes" # The specified port number will be used, the additinal ports calculated by # base_port + node_num * 10 -OBJECT_PORT_BASE=6010 +OBJECT_PORT_BASE=6013 CONTAINER_PORT_BASE=6011 ACCOUNT_PORT_BASE=6012 @@ -362,19 +363,34 @@ function start_swift() { sudo systemctl start xinetd.service fi - # First spawn all the swift services then kill the - # proxy service so we can run it in foreground in screen. - # ``swift-init ... {stop|restart}`` exits with '1' if no servers are running, - # ignore it just in case + # By default with only one replica we are launching the proxy, + # container, account and object server in screen in foreground and + # other services in background. If we have SWIFT_REPLICAS set to something + # greater than one we first spawn all the swift services then kill the proxy + # service so we can run it in foreground in screen. ``swift-init ... + # {stop|restart}`` exits with '1' if no servers are running, ignore it just + # in case swift-init --run-dir=${SWIFT_DATA_DIR}/run all restart || true - swift-init --run-dir=${SWIFT_DATA_DIR}/run proxy stop || true - screen_it swift "cd $SWIFT_DIR && $SWIFT_DIR/bin/swift-proxy-server ${SWIFT_CONFIG_DIR}/proxy-server.conf -v" + if [[ ${SWIFT_REPLICAS} == 1 ]];then + todo="object container account" + fi + for type in proxy ${todo};do + swift-init --run-dir=${SWIFT_DATA_DIR}/run ${type} stop || true + done + screen_it s-proxy "cd $SWIFT_DIR && $SWIFT_DIR/bin/swift-proxy-server ${SWIFT_CONFIG_DIR}/proxy-server.conf -v" + if [[ ${SWIFT_REPLICAS} == 1 ]];then + for type in object container account;do + screen_it s-${type} "cd $SWIFT_DIR && $SWIFT_DIR/bin/swift-${type}-server ${SWIFT_CONFIG_DIR}/${type}-server/1.conf -v" + done + fi } # stop_swift() - Stop running processes (non-screen) function stop_swift() { # screen normally killed by unstack.sh - swift-init --run-dir=${SWIFT_DATA_DIR}/run all stop || true + if type -p swift-init >/dev/null;then + swift-init --run-dir=${SWIFT_DATA_DIR}/run all stop || true + fi } # Restore xtrace diff --git a/stack.sh b/stack.sh index 238c9e1d6b..7b4b3b778c 100755 --- a/stack.sh +++ b/stack.sh @@ -407,7 +407,7 @@ if is_service_enabled rabbit; then read_password RABBIT_PASSWORD "ENTER A PASSWORD TO USE FOR RABBIT." fi -if is_service_enabled swift; then +if is_service_enabled s-proxy; then # If we are using swift3, we can default the s3 port to swift instead # of nova-objectstore if is_service_enabled swift3;then @@ -644,12 +644,12 @@ install_novaclient git_clone $OPENSTACKCLIENT_REPO $OPENSTACKCLIENT_DIR $OPENSTACKCLIENT_BRANCH # glance, swift middleware and nova api needs keystone middleware -if is_service_enabled key g-api n-api swift; then +if is_service_enabled key g-api n-api s-proxy; then # unified auth system (manages accounts/tokens) install_keystone fi -if is_service_enabled swift; then +if is_service_enabled s-proxy; then install_swiftclient install_swift if is_service_enabled swift3; then @@ -706,10 +706,10 @@ echo_summary "Configuring OpenStack projects" configure_keystoneclient configure_novaclient setup_develop $OPENSTACKCLIENT_DIR -if is_service_enabled key g-api n-api swift; then +if is_service_enabled key g-api n-api s-proxy; then configure_keystone fi -if is_service_enabled swift; then +if is_service_enabled s-proxy; then configure_swift configure_swiftclient if is_service_enabled swift3; then @@ -893,7 +893,7 @@ if is_service_enabled g-reg; then init_glance # Store the images in swift if enabled. - if is_service_enabled swift; then + if is_service_enabled s-proxy; then iniset $GLANCE_API_CONF DEFAULT default_store swift iniset $GLANCE_API_CONF DEFAULT swift_store_auth_address $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0/ iniset $GLANCE_API_CONF DEFAULT swift_store_user $SERVICE_TENANT_NAME:glance @@ -952,7 +952,7 @@ fi # Storage Service # --------------- -if is_service_enabled swift; then +if is_service_enabled s-proxy; then echo_summary "Configuring Swift" init_swift fi @@ -1098,7 +1098,7 @@ fi # Only run the services specified in ``ENABLED_SERVICES`` # Launch Swift Services -if is_service_enabled swift; then +if is_service_enabled s-proxy; then echo_summary "Starting Swift" start_swift fi diff --git a/stackrc b/stackrc index d418a0ec5a..6b1550473a 100644 --- a/stackrc +++ b/stackrc @@ -21,7 +21,7 @@ fi # ``disable_service`` functions in ``localrc``. # For example, to enable Swift add this to ``localrc``: # enable_service swift -ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-cpu,n-net,n-cond,cinder,c-sch,c-api,c-vol,n-sch,n-novnc,n-xvnc,n-cauth,horizon,rabbit,tempest,mysql +ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-cpu,n-net,n-cond,cinder,c-sch,c-api,c-vol,n-sch,n-novnc,n-xvnc,n-cauth,s-proxy,s-account,s-object,s-container,horizon,rabbit,tempest,mysql # Set the default Nova APIs to enable NOVA_ENABLED_APIS=ec2,osapi_compute,metadata diff --git a/unstack.sh b/unstack.sh index a086d5c620..3ac29857f8 100755 --- a/unstack.sh +++ b/unstack.sh @@ -63,7 +63,7 @@ if [[ -n "$SCREEN" ]]; then fi # Swift runs daemons -if is_service_enabled swift; then +if is_service_enabled s-proxy; then stop_swift cleanup_swift fi