#!/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

case "$1" in
    configure)
        # We copy the db.properties file from the management server to the usage server
        # This used to be a symlink, but we don't do that anymore
        if [ -f "/etc/cloud/management/db.properties" ]; then
            cp -a /etc/cloud/management/db.properties /etc/cloudstack/usage/db.properties
        fi

        # Replacing db.properties with management server db.properties
        if [ -f "/etc/cloudstack/management/db.properties" ]; then
            rm -rf /etc/cloudstack/usage/db.properties
            ln -s /etc/cloudstack/management/db.properties /etc/cloudstack/usage/db.properties
        fi

        # We also retain the log4j configuration
        if [ -f "/etc/cloud/usage/log4j-cloud.xml" ]; then
            cp -a /etc/cloud/usage/log4j-cloud.xml /etc/cloudstack/usage/log4j-cloud.xml
        fi

        # Replacing key with management server key
        if [ -f "/etc/cloudstack/management/key" ]; then
            rm -rf /etc/cloudstack/usage/key
            ln -s /etc/cloudstack/management/key /etc/cloudstack/usage/key
        fi
        ;;
esac

#DEBHELPER#
