set_or_update(): Sync with nova-cloud-controller.

This commit is contained in:
Adam Gandelman 2012-06-12 12:09:17 -07:00
parent e2c53a155d
commit 49458ff9aa

View File

@ -14,17 +14,37 @@ PPA=$(config-get nova-release)
VIRT_TYPE=$(config-get virt-type) VIRT_TYPE=$(config-get virt-type)
function set_or_update { function set_or_update {
# set or update a key=value config option in nova.conf # Set a config option in nova.conf or api-paste.ini, depending
KEY=$1 # Defaults to updating nova.conf
VALUE=$2 local KEY=$1
[[ -z $KEY ]] && exit 1 local VALUE=$2
[[ -z $VALUE ]] && exit 1 local CONF_FILE=$3
cat $NOVA_CONF | grep "\-\-$KEY=$VALUE" >/dev/null \ local pattern=""
&& juju-log "nova-compute: $KEY=$VALUE already set" exit 0 [[ -z $KEY ]] && juju-log "set_or_update: value $VALUE missing KEY" && exit 1
if cat $NOVA_CONF | grep "\-\-$KEY=" >/dev/null ; then [[ -z $VALUE ]] && juju-log "set_or_update: key $KEY missing VALUE" && exit 1
sed -i "s|\(--$KEY=\).*|\1$VALUE|" $NOVA_CONF [[ -z "$CONF_FILE" ]] && CONF_FILE=$NOVA_CONF
case "$CONF_FILE" in
"$NOVA_CONF") match="^$KEY="
pattern="$KEY="
out=$pattern
;;
"$API_CONF") match="^$KEY = "
pattern="$match"
out="$KEY = "
;;
*) juju-log "ERROR: set_or_update: Invalid CONF_FILE ($CONF_FILE)"
esac
cat $CONF_FILE | grep "$match$VALUE" >/dev/null &&
juju-log "nova-cloud-controller: $KEY=$VALUE already in set in $CONF_FILE" \
&& return 0
if cat $CONF_FILE | grep "$match" >/dev/null ; then
juju-log "nova-cloud-controller: Updating $CONF_FILE, $KEY=$VALUE"
sed -i "s|\($pattern\).*|\1$VALUE|" $CONF_FILE
else else
echo "--$KEY=$VALUE" >>$NOVA_CONF juju-log "nova-cloud-controller: Setting new option $KEY=$VALUE in $CONF_FILE"
echo "$out$VALUE" >>$CONF_FILE
fi fi
} }