add functions to manipulate ENABLED_SERVICES
Editing ENABLED_SERVICES directly can get tricky when
the user wants to disable something. This patch includes
two new functions for adding or removing services
safely, and a third (for completeness) to clear the
settings entirely before adding a minimal set of
services.
It also moves the logic for dealing with "negated"
services into a function so it can be tested and
applied by the new functions for manipulating
ENABLED_SERVICES.
Change-Id: I88f205f3666b86e6f0b6a94e0ec32a26c4bc6873
Signed-off-by: Doug Hellmann <doug.hellmann@dreamhost.com>
diff --git a/functions b/functions
index 8cf7c74..a22d8b7 100644
--- a/functions
+++ b/functions
@@ -1,3 +1,4 @@
+# -*- mode: Shell-script -*-
# functions - Common functions used by DevStack components
#
# ENABLED_SERVICES is used by is_service_enabled()
@@ -349,6 +350,76 @@
return 1
}
+# remove extra commas from the input string (ENABLED_SERVICES)
+function _cleanup_service_list () {
+ echo "$1" | sed -e '
+ s/,,/,/g;
+ s/^,//;
+ s/,$//
+ '
+}
+
+# enable_service() adds the services passed as argument to the
+# **ENABLED_SERVICES** list, if they are not already present.
+#
+# For example:
+#
+# enable_service n-vol
+#
+# This function does not know about the special cases
+# for nova, glance, and quantum built into is_service_enabled().
+function enable_service() {
+ local tmpsvcs="${ENABLED_SERVICES}"
+ for service in $@; do
+ if ! is_service_enabled $service; then
+ tmpsvcs+=",$service"
+ fi
+ done
+ ENABLED_SERVICES=$(_cleanup_service_list "$tmpsvcs")
+ disable_negated_services
+}
+
+# disable_service() removes the services passed as argument to the
+# **ENABLED_SERVICES** list, if they are present.
+#
+# For example:
+#
+# disable_service n-vol
+#
+# This function does not know about the special cases
+# for nova, glance, and quantum built into is_service_enabled().
+function disable_service() {
+ local tmpsvcs=",${ENABLED_SERVICES},"
+ local service
+ for service in $@; do
+ if is_service_enabled $service; then
+ tmpsvcs=${tmpsvcs//,$service,/,}
+ fi
+ done
+ ENABLED_SERVICES=$(_cleanup_service_list "$tmpsvcs")
+}
+
+# disable_all_services() removes all current services
+# from **ENABLED_SERVICES** to reset the configuration
+# before a minimal installation
+function disable_all_services() {
+ ENABLED_SERVICES=""
+}
+
+# We are looking for services with a - at the beginning to force
+# excluding those services. For example if you want to install all the default
+# services but not nova-volume (n-vol) you can have this set in your localrc :
+# ENABLED_SERVICES+=",-n-vol"
+function disable_negated_services() {
+ local tmpsvcs="${ENABLED_SERVICES}"
+ local service
+ for service in ${tmpsvcs//,/ }; do
+ if [[ ${service} == -* ]]; then
+ tmpsvcs=$(echo ${tmpsvcs}|sed -r "s/(,)?(-)?${service#-}(,)?/,/g")
+ fi
+ done
+ ENABLED_SERVICES=$(_cleanup_service_list "$tmpsvcs")
+}
# Distro-agnostic package installer
# install_package package [package ...]