#!/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)
        OLDCONFDIR="/etc/cloud/agent"
        NEWCONFDIR="/etc/cloudstack/agent"
        CONFFILES="agent.properties log4j.xml log4j-cloud.xml"

        # 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

        # Running cloudstack-agent-upgrade to update bridge name for upgrade from CloudStack 4.0.x (and before) to CloudStack 4.1 (and later)
        /usr/bin/cloudstack-agent-upgrade
        if [ ! -d "/etc/libvirt/hooks" ] ; then
            mkdir /etc/libvirt/hooks
        fi
        cp -a /usr/share/cloudstack-agent/lib/libvirtqemuhook /etc/libvirt/hooks/qemu
        ;;
esac

#DEBHELPER#
