Skip to content

Commit

Permalink
Enable swift by default.
Browse files Browse the repository at this point in the history
- Set by default SWIFT_REPLICAS to 1 since this is the most common use
  case when using it in devstack.
- If we have swift_replicas to 1 launch the object container account and
  proxy servers in foreground in screen.
- Allow any s- services if we have just 'swift' in service enabled
  instead of having to specify all s- services to enable swift. This will be
  removed in the future.
- Set object server starting at 6013 instead of 6010 to not conflict
  with remote ssh x11 forwarding.

Change-Id: I890b6953b70283bfa0927fff0cf5e92f3c08455b
  • Loading branch information
Chmouel Boudjnah committed Mar 6, 2013
1 parent 0d71d1e commit 0c3a558
Show file tree
Hide file tree
Showing 11 changed files with 64 additions and 35 deletions.
14 changes: 8 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 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).

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.
# 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`.
2 changes: 1 addition & 1 deletion exercises/client-args.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion exercises/client-env.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion exercises/swift.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 4 additions & 3 deletions files/keystone_data.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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" \
Expand Down Expand Up @@ -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 \
Expand Down
9 changes: 9 additions & 0 deletions functions
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,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"
Expand Down Expand Up @@ -566,6 +570,9 @@ $option = $value
# **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 ...]
Expand All @@ -578,6 +585,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
}
Expand Down
2 changes: 1 addition & 1 deletion lib/keystone
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,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
Expand Down
40 changes: 28 additions & 12 deletions lib/swift
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -359,19 +360,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
Expand Down
16 changes: 8 additions & 8 deletions stack.sh
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,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
Expand Down Expand Up @@ -662,12 +662,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
Expand Down Expand Up @@ -724,10 +724,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
Expand Down Expand Up @@ -911,7 +911,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
Expand Down Expand Up @@ -970,7 +970,7 @@ fi
# Storage Service
# ---------------

if is_service_enabled swift; then
if is_service_enabled s-proxy; then
echo_summary "Configuring Swift"
init_swift
fi
Expand Down Expand Up @@ -1117,7 +1117,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
Expand Down
2 changes: 1 addition & 1 deletion stackrc
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion unstack.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 0c3a558

Please sign in to comment.