| ... | ... |
@@ -85,19 +85,21 @@ Example (Qpid): |
| 85 | 85 |
|
| 86 | 86 |
# Swift |
| 87 | 87 |
|
| 88 |
-Swift is not installed by default, you can enable easily by adding this to your `localrc`: |
|
| 88 |
+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. |
|
| 89 | 89 |
|
| 90 |
- enable_service swift |
|
| 90 |
+If you would like to disable Swift you can add this to your `localrc` : |
|
| 91 |
+ |
|
| 92 |
+ disable_service s-proxy s-object s-container s-account |
|
| 91 | 93 |
|
| 92 | 94 |
If you want a minimal Swift install with only Swift and Keystone you can have this instead in your `localrc`: |
| 93 | 95 |
|
| 94 | 96 |
disable_all_services |
| 95 |
- enable_service key mysql swift |
|
| 97 |
+ enable_service key mysql s-proxy s-object s-container s-account |
|
| 98 |
+ |
|
| 99 |
+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). |
|
| 96 | 100 |
|
| 97 |
-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. |
|
| 101 |
+# Swift S3 |
|
| 98 | 102 |
|
| 99 | 103 |
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`. |
| 100 | 104 |
|
| 101 | 105 |
Only Swift proxy server is launched in the screen session all other services are started in background and managed by `swift-init` tool. |
| 102 |
- |
|
| 103 |
-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`. |
| ... | ... |
@@ -136,7 +136,7 @@ fi |
| 136 | 136 |
# Swift client |
| 137 | 137 |
# ------------ |
| 138 | 138 |
|
| 139 |
-if [[ "$ENABLED_SERVICES" =~ "swift" ]]; then |
|
| 139 |
+if [[ "$ENABLED_SERVICES" =~ "swift" || "$ENABLED_SERVICES" =~ "s-proxy" ]]; then |
|
| 140 | 140 |
if [[ "$SKIP_EXERCISES" =~ "swift" ]] ; then |
| 141 | 141 |
STATUS_SWIFT="Skipped" |
| 142 | 142 |
else |
| ... | ... |
@@ -144,7 +144,8 @@ fi |
| 144 | 144 |
# Swift client |
| 145 | 145 |
# ------------ |
| 146 | 146 |
|
| 147 |
-if [[ "$ENABLED_SERVICES" =~ "swift" ]]; then |
|
| 147 |
+ |
|
| 148 |
+if [[ "$ENABLED_SERVICES" =~ "swift" || "$ENABLED_SERVICES" =~ "s-proxy" ]]; then |
|
| 148 | 149 |
if [[ "$SKIP_EXERCISES" =~ "swift" ]] ; then |
| 149 | 150 |
STATUS_SWIFT="Skipped" |
| 150 | 151 |
else |
| ... | ... |
@@ -52,7 +52,7 @@ RESELLER_ROLE=$(get_id keystone role-create --name=ResellerAdmin) |
| 52 | 52 |
# Services |
| 53 | 53 |
# -------- |
| 54 | 54 |
|
| 55 |
-if [[ "$ENABLED_SERVICES" =~ "n-api" ]] && [[ "$ENABLED_SERVICES" =~ "swift" ]]; then |
|
| 55 |
+if [[ "$ENABLED_SERVICES" =~ "n-api" ]] && [[ "$ENABLED_SERVICES" =~ "s-proxy" || "$ENABLED_SERVICES" =~ "swift" ]]; then |
|
| 56 | 56 |
NOVA_USER=$(keystone user-list | awk "/ nova / { print \$2 }")
|
| 57 | 57 |
# Nova needs ResellerAdmin role to download images when accessing |
| 58 | 58 |
# swift through the s3 api. |
| ... | ... |
@@ -123,7 +123,8 @@ if [[ "$ENABLED_SERVICES" =~ "g-api" ]]; then |
| 123 | 123 |
fi |
| 124 | 124 |
|
| 125 | 125 |
# Swift |
| 126 |
-if [[ "$ENABLED_SERVICES" =~ "swift" ]]; then |
|
| 126 |
+ |
|
| 127 |
+if [[ "$ENABLED_SERVICES" =~ "swift" || "$ENABLED_SERVICES" =~ "s-proxy" ]]; then |
|
| 127 | 128 |
SWIFT_USER=$(get_id keystone user-create \ |
| 128 | 129 |
--name=swift \ |
| 129 | 130 |
--pass="$SERVICE_PASSWORD" \ |
| ... | ... |
@@ -190,7 +191,7 @@ if [[ "$ENABLED_SERVICES" =~ "n-api" ]]; then |
| 190 | 190 |
fi |
| 191 | 191 |
|
| 192 | 192 |
# S3 |
| 193 |
-if [[ "$ENABLED_SERVICES" =~ "n-obj" || "$ENABLED_SERVICES" =~ "swift" ]]; then |
|
| 193 |
+if [[ "$ENABLED_SERVICES" =~ "n-obj" || "$ENABLED_SERVICES" =~ "swift3" ]]; then |
|
| 194 | 194 |
if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then |
| 195 | 195 |
S3_SERVICE=$(get_id keystone service-create \ |
| 196 | 196 |
--name=s3 \ |
| ... | ... |
@@ -212,6 +212,10 @@ function get_packages() {
|
| 212 | 212 |
if [[ ! $file_to_parse =~ ceilometer ]]; then |
| 213 | 213 |
file_to_parse="${file_to_parse} ceilometer"
|
| 214 | 214 |
fi |
| 215 |
+ elif [[ $service == s-* ]]; then |
|
| 216 |
+ if [[ ! $file_to_parse =~ swift ]]; then |
|
| 217 |
+ file_to_parse="${file_to_parse} swift"
|
|
| 218 |
+ fi |
|
| 215 | 219 |
elif [[ $service == n-* ]]; then |
| 216 | 220 |
if [[ ! $file_to_parse =~ nova ]]; then |
| 217 | 221 |
file_to_parse="${file_to_parse} nova"
|
| ... | ... |
@@ -649,6 +653,9 @@ function iniadd() {
|
| 649 | 649 |
# **ceilometer** returns true if any service enabled start with **ceilometer** |
| 650 | 650 |
# **glance** returns true if any service enabled start with **g-** |
| 651 | 651 |
# **quantum** returns true if any service enabled start with **q-** |
| 652 |
+# **swift** returns true if any service enabled start with **s-** |
|
| 653 |
+# For backward compatibility if we have **swift** in ENABLED_SERVICES all the |
|
| 654 |
+# **s-** services will be enabled. This will be deprecated in the future. |
|
| 652 | 655 |
# |
| 653 | 656 |
# Uses global ``ENABLED_SERVICES`` |
| 654 | 657 |
# is_service_enabled service [service ...] |
| ... | ... |
@@ -661,6 +668,8 @@ function is_service_enabled() {
|
| 661 | 661 |
[[ ${service} == "ceilometer" && ${ENABLED_SERVICES} =~ "ceilometer-" ]] && return 0
|
| 662 | 662 |
[[ ${service} == "glance" && ${ENABLED_SERVICES} =~ "g-" ]] && return 0
|
| 663 | 663 |
[[ ${service} == "quantum" && ${ENABLED_SERVICES} =~ "q-" ]] && return 0
|
| 664 |
+ [[ ${service} == "swift" && ${ENABLED_SERVICES} =~ "s-" ]] && return 0
|
|
| 665 |
+ [[ ${service} == s-* && ${ENABLED_SERVICES} =~ "swift" ]] && return 0
|
|
| 664 | 666 |
done |
| 665 | 667 |
return 1 |
| 666 | 668 |
} |
| ... | ... |
@@ -148,7 +148,7 @@ function configure_keystone() {
|
| 148 | 148 |
cp -p $FILES/default_catalog.templates $KEYSTONE_CATALOG |
| 149 | 149 |
|
| 150 | 150 |
# Add swift endpoints to service catalog if swift is enabled |
| 151 |
- if is_service_enabled swift; then |
|
| 151 |
+ if is_service_enabled s-proxy; then |
|
| 152 | 152 |
echo "catalog.RegionOne.object_store.publicURL = http://%SERVICE_HOST%:8080/v1/AUTH_\$(tenant_id)s" >> $KEYSTONE_CATALOG |
| 153 | 153 |
echo "catalog.RegionOne.object_store.adminURL = http://%SERVICE_HOST%:8080/" >> $KEYSTONE_CATALOG |
| 154 | 154 |
echo "catalog.RegionOne.object_store.internalURL = http://%SERVICE_HOST%:8080/v1/AUTH_\$(tenant_id)s" >> $KEYSTONE_CATALOG |
| ... | ... |
@@ -56,17 +56,18 @@ SWIFT_LOOPBACK_DISK_SIZE=${SWIFT_LOOPBACK_DISK_SIZE:-1000000}
|
| 56 | 56 |
SWIFT_PARTITION_POWER_SIZE=${SWIFT_PARTITION_POWER_SIZE:-9}
|
| 57 | 57 |
|
| 58 | 58 |
# Set ``SWIFT_REPLICAS`` to configure how many replicas are to be |
| 59 |
-# configured for your Swift cluster. By default the three replicas would need a |
|
| 60 |
-# bit of IO and Memory on a VM you may want to lower that to 1 if you want to do |
|
| 61 |
-# only some quick testing. |
|
| 62 |
-SWIFT_REPLICAS=${SWIFT_REPLICAS:-3}
|
|
| 59 |
+# configured for your Swift cluster. By default we are configuring |
|
| 60 |
+# only one replica since this is way less CPU and memory intensive. If |
|
| 61 |
+# you are planning to test swift replication you may want to set this |
|
| 62 |
+# up to 3. |
|
| 63 |
+SWIFT_REPLICAS=${SWIFT_REPLICAS:-1}
|
|
| 63 | 64 |
SWIFT_REPLICAS_SEQ=$(seq ${SWIFT_REPLICAS})
|
| 64 | 65 |
|
| 65 | 66 |
# Set ``OBJECT_PORT_BASE``, ``CONTAINER_PORT_BASE``, ``ACCOUNT_PORT_BASE`` |
| 66 | 67 |
# Port bases used in port number calclution for the service "nodes" |
| 67 | 68 |
# The specified port number will be used, the additinal ports calculated by |
| 68 | 69 |
# base_port + node_num * 10 |
| 69 |
-OBJECT_PORT_BASE=6010 |
|
| 70 |
+OBJECT_PORT_BASE=6013 |
|
| 70 | 71 |
CONTAINER_PORT_BASE=6011 |
| 71 | 72 |
ACCOUNT_PORT_BASE=6012 |
| 72 | 73 |
|
| ... | ... |
@@ -362,19 +363,34 @@ function start_swift() {
|
| 362 | 362 |
sudo systemctl start xinetd.service |
| 363 | 363 |
fi |
| 364 | 364 |
|
| 365 |
- # First spawn all the swift services then kill the |
|
| 366 |
- # proxy service so we can run it in foreground in screen. |
|
| 367 |
- # ``swift-init ... {stop|restart}`` exits with '1' if no servers are running,
|
|
| 368 |
- # ignore it just in case |
|
| 365 |
+ # By default with only one replica we are launching the proxy, |
|
| 366 |
+ # container, account and object server in screen in foreground and |
|
| 367 |
+ # other services in background. If we have SWIFT_REPLICAS set to something |
|
| 368 |
+ # greater than one we first spawn all the swift services then kill the proxy |
|
| 369 |
+ # service so we can run it in foreground in screen. ``swift-init ... |
|
| 370 |
+ # {stop|restart}`` exits with '1' if no servers are running, ignore it just
|
|
| 371 |
+ # in case |
|
| 369 | 372 |
swift-init --run-dir=${SWIFT_DATA_DIR}/run all restart || true
|
| 370 |
- swift-init --run-dir=${SWIFT_DATA_DIR}/run proxy stop || true
|
|
| 371 |
- screen_it swift "cd $SWIFT_DIR && $SWIFT_DIR/bin/swift-proxy-server ${SWIFT_CONFIG_DIR}/proxy-server.conf -v"
|
|
| 373 |
+ if [[ ${SWIFT_REPLICAS} == 1 ]];then
|
|
| 374 |
+ todo="object container account" |
|
| 375 |
+ fi |
|
| 376 |
+ for type in proxy ${todo};do
|
|
| 377 |
+ swift-init --run-dir=${SWIFT_DATA_DIR}/run ${type} stop || true
|
|
| 378 |
+ done |
|
| 379 |
+ screen_it s-proxy "cd $SWIFT_DIR && $SWIFT_DIR/bin/swift-proxy-server ${SWIFT_CONFIG_DIR}/proxy-server.conf -v"
|
|
| 380 |
+ if [[ ${SWIFT_REPLICAS} == 1 ]];then
|
|
| 381 |
+ for type in object container account;do |
|
| 382 |
+ screen_it s-${type} "cd $SWIFT_DIR && $SWIFT_DIR/bin/swift-${type}-server ${SWIFT_CONFIG_DIR}/${type}-server/1.conf -v"
|
|
| 383 |
+ done |
|
| 384 |
+ fi |
|
| 372 | 385 |
} |
| 373 | 386 |
|
| 374 | 387 |
# stop_swift() - Stop running processes (non-screen) |
| 375 | 388 |
function stop_swift() {
|
| 376 | 389 |
# screen normally killed by unstack.sh |
| 377 |
- swift-init --run-dir=${SWIFT_DATA_DIR}/run all stop || true
|
|
| 390 |
+ if type -p swift-init >/dev/null;then |
|
| 391 |
+ swift-init --run-dir=${SWIFT_DATA_DIR}/run all stop || true
|
|
| 392 |
+ fi |
|
| 378 | 393 |
} |
| 379 | 394 |
|
| 380 | 395 |
# Restore xtrace |
| ... | ... |
@@ -407,7 +407,7 @@ if is_service_enabled rabbit; then |
| 407 | 407 |
read_password RABBIT_PASSWORD "ENTER A PASSWORD TO USE FOR RABBIT." |
| 408 | 408 |
fi |
| 409 | 409 |
|
| 410 |
-if is_service_enabled swift; then |
|
| 410 |
+if is_service_enabled s-proxy; then |
|
| 411 | 411 |
# If we are using swift3, we can default the s3 port to swift instead |
| 412 | 412 |
# of nova-objectstore |
| 413 | 413 |
if is_service_enabled swift3;then |
| ... | ... |
@@ -644,12 +644,12 @@ install_novaclient |
| 644 | 644 |
git_clone $OPENSTACKCLIENT_REPO $OPENSTACKCLIENT_DIR $OPENSTACKCLIENT_BRANCH |
| 645 | 645 |
|
| 646 | 646 |
# glance, swift middleware and nova api needs keystone middleware |
| 647 |
-if is_service_enabled key g-api n-api swift; then |
|
| 647 |
+if is_service_enabled key g-api n-api s-proxy; then |
|
| 648 | 648 |
# unified auth system (manages accounts/tokens) |
| 649 | 649 |
install_keystone |
| 650 | 650 |
fi |
| 651 | 651 |
|
| 652 |
-if is_service_enabled swift; then |
|
| 652 |
+if is_service_enabled s-proxy; then |
|
| 653 | 653 |
install_swiftclient |
| 654 | 654 |
install_swift |
| 655 | 655 |
if is_service_enabled swift3; then |
| ... | ... |
@@ -706,10 +706,10 @@ echo_summary "Configuring OpenStack projects" |
| 706 | 706 |
configure_keystoneclient |
| 707 | 707 |
configure_novaclient |
| 708 | 708 |
setup_develop $OPENSTACKCLIENT_DIR |
| 709 |
-if is_service_enabled key g-api n-api swift; then |
|
| 709 |
+if is_service_enabled key g-api n-api s-proxy; then |
|
| 710 | 710 |
configure_keystone |
| 711 | 711 |
fi |
| 712 |
-if is_service_enabled swift; then |
|
| 712 |
+if is_service_enabled s-proxy; then |
|
| 713 | 713 |
configure_swift |
| 714 | 714 |
configure_swiftclient |
| 715 | 715 |
if is_service_enabled swift3; then |
| ... | ... |
@@ -893,7 +893,7 @@ if is_service_enabled g-reg; then |
| 893 | 893 |
init_glance |
| 894 | 894 |
|
| 895 | 895 |
# Store the images in swift if enabled. |
| 896 |
- if is_service_enabled swift; then |
|
| 896 |
+ if is_service_enabled s-proxy; then |
|
| 897 | 897 |
iniset $GLANCE_API_CONF DEFAULT default_store swift |
| 898 | 898 |
iniset $GLANCE_API_CONF DEFAULT swift_store_auth_address $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0/ |
| 899 | 899 |
iniset $GLANCE_API_CONF DEFAULT swift_store_user $SERVICE_TENANT_NAME:glance |
| ... | ... |
@@ -952,7 +952,7 @@ fi |
| 952 | 952 |
# Storage Service |
| 953 | 953 |
# --------------- |
| 954 | 954 |
|
| 955 |
-if is_service_enabled swift; then |
|
| 955 |
+if is_service_enabled s-proxy; then |
|
| 956 | 956 |
echo_summary "Configuring Swift" |
| 957 | 957 |
init_swift |
| 958 | 958 |
fi |
| ... | ... |
@@ -1098,7 +1098,7 @@ fi |
| 1098 | 1098 |
# Only run the services specified in ``ENABLED_SERVICES`` |
| 1099 | 1099 |
|
| 1100 | 1100 |
# Launch Swift Services |
| 1101 |
-if is_service_enabled swift; then |
|
| 1101 |
+if is_service_enabled s-proxy; then |
|
| 1102 | 1102 |
echo_summary "Starting Swift" |
| 1103 | 1103 |
start_swift |
| 1104 | 1104 |
fi |
| ... | ... |
@@ -21,7 +21,7 @@ fi |
| 21 | 21 |
# ``disable_service`` functions in ``localrc``. |
| 22 | 22 |
# For example, to enable Swift add this to ``localrc``: |
| 23 | 23 |
# enable_service swift |
| 24 |
-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 |
|
| 24 |
+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 |
|
| 25 | 25 |
|
| 26 | 26 |
# Set the default Nova APIs to enable |
| 27 | 27 |
NOVA_ENABLED_APIS=ec2,osapi_compute,metadata |