#!/bin/sh

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

set -e

if [ "$1" = configure ]; then
    if ! getent passwd cloud >/dev/null; then
        adduser --quiet --system --group --no-create-home --home /var/lib/cloudstack/management cloud
    else
        usermod -m -d /var/lib/cloudstack/management cloud || true
    fi

    rm -fr /var/cache/cloudstack/management/work/*

    for i in /var/cache/cloudstack/management \
        /var/log/cloudstack/management \
        /var/lib/cloudstack/management
    do
        chmod 0770 $i
        chgrp cloud $i
    done

    OLDCONFDIR="/etc/cloud/management"
    NEWCONFDIR="/etc/cloudstack/management"
    CONFFILES="db.properties key"

    # Copy old configuration so the admin doesn't have to do that
    # Only do so when we are installing for the first time
    if [ -z "$2" ]; then
        for FILE in $CONFFILES; do
            if [ -f "$OLDCONFDIR/${FILE}" ]; then
                cp -a $OLDCONFDIR/$FILE $NEWCONFDIR/$FILE
            fi
        done
    fi

    CONFDIR="/etc/cloudstack/management"
    DBPROPS="db.properties"

    chmod 0640 ${CONFDIR}/${DBPROPS}
    chgrp cloud ${CONFDIR}/${DBPROPS}
    chown -R cloud:cloud /var/log/cloudstack/management

    ln -sf ${CONFDIR}/log4j-cloud.xml ${CONFDIR}/log4j.xml

    # Add jdbc MySQL driver settings to db.properties if not present
    grep -s -q "db.cloud.driver=jdbc:mysql" ${CONFDIR}/${DBPROPS} || sed -i -e "\$adb.cloud.driver=jdbc:mysql" ${CONFDIR}/${DBPROPS}
    grep -s -q "db.usage.driver=jdbc:mysql" ${CONFDIR}/${DBPROPS} || sed -i -e "\$adb.usage.driver=jdbc:mysql" ${CONFDIR}/${DBPROPS}
    grep -s -q "db.simulator.driver=jdbc:mysql" ${CONFDIR}/${DBPROPS} || sed -i -e "\$adb.simulator.driver=jdbc:mysql" ${CONFDIR}/${DBPROPS}
fi

#DEBHELPER#
