#!/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 uefi.properties log4j.xml log4j-cloud.xml"

        mkdir -m 0755 -p /usr/share/cloudstack-agent/tmp

        # 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

        # Print help message
        if [ -f "/usr/share/cloudstack-common/scripts/installer/cloudstack-help-text" ];then
            acs_version=$(dpkg -l |grep cloudstack-agent |head -n1 |awk '{print $3}')
            sed -i "s,^ACS_VERSION=.*,ACS_VERSION=$acs_version,g" /usr/share/cloudstack-common/scripts/installer/cloudstack-help-text
            /usr/share/cloudstack-common/scripts/installer/cloudstack-help-text agent
        fi

        ;;
esac

#DEBHELPER#
