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

        BR_NETFILTER_MODULE=br_netfilter
        MODULES_FILE=/etc/modules
        if /sbin/modinfo $BR_NETFILTER_MODULE >/dev/null 2>&1; then
            /sbin/modprobe $BR_NETFILTER_MODULE
            if ! grep $BR_NETFILTER_MODULE $MODULES_FILE >/dev/null 2>&1; then
                echo "$BR_NETFILTER_MODULE" >> $MODULES_FILE
            fi
        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#
