#!/bin/bash

touch /tmp/patch_omi.log
LOG_PREFIX='patch_omi'
LOG_FILE='/tmp/patch_omi.log'
pkgName="omi-1.6.8-1.ssl_100.ulinux.x64.deb"
pkg="https://hdiconfigactions.blob.core.windows.net/patch-omi/$pkgName"

function log() {
  local prefix=${LOG_PREFIX}
  local log_level=${1:-INFO}
  local msg=${2:-"Empty Msg"}
  echo "$(date +"%M-%d-%Y %H:%M:%S.%N") [${prefix}]: ${log_level} ${msg}" | tee -a ${LOG_FILE}
  if [[ "${log_level}" == "INFO" ]]; then
    logger -t ${prefix} -p user.info "${log_level} ${msg}"
  elif [[ "${log_level}" == "WARN" ]]; then
    logger -t ${prefix} -p user.warn "${log_level} ${msg}"
  elif [[ "${log_level}" == "ERROR" ]]; then
    logger -t ${prefix} -p user.err "${log_level} ${msg}"
    logger -t ${prefix} -p user.err "${log_level} Finished omi patching script. Status: Error"
    exit 1
  fi
}

check_ubuntu_eq_1604() {
  version=$(lsb_release -sr)
  # HDI ships only with 16.04 or greater Ubuntu versions
  # Hence if not 16.04, then definitely greater than 16.04
  if [ "16.04" == "$version" ]
  then
    log INFO "Ubuntu version: 16.04. Patching."
  else
    log INFO "Ubuntu version: $version. Not patching OMI. Exiting.."
    log INFO "Finished omi patching script. Status: Successful"
    exit 0
  fi
}

log INFO "Starting to update omi"

#check if root user
if [[ $EUID -ne 0 ]]; then
  log ERROR "Script must be run as root user. Exiting.."
fi

check_ubuntu_eq_1604

#log existing omi version
existing_version=$(/opt/omi/bin/omiserver -v)
log INFO "OMI version existing: $existing_version"

log INFO "Downloading omi deb"

#download the omi deb
wget -q $pkg -O /tmp/$pkgName
return_code=$?
if [[ "$return_code" -ne "0" ]]; then
  log ERROR "Failed to download $pkg. Exiting.."
fi
log INFO "Download of $pkg successful"

#list the downloaded deb
ls_cmd=$(ls -l /tmp/$pkgName)
return_code=$?
if [[ "$return_code" -ne "0" ]]; then
  log ERROR "Failed to list the downloaded omi deb. Exiting.."
fi
log INFO "Listing download deb: $ls_cmd"

#install deb
log INFO "Installing omi deb"
eval sudo dpkg -i --force-confnew /tmp/$pkgName >> ${LOG_FILE}
return_code=$?
if [[ "$return_code" -ne "0" ]]; then
  log ERROR "dpkg install failed. Exiting.."
fi
log INFO "dpkg install successful"

#log updated omi version
updated_version=$(/opt/omi/bin/omiserver -v)
log INFO "OMI version updated: $updated_version"

#check updated version
# gets version like "1.6.8-1"
min_req_version="1.6.8-1"
latest_version=$(/opt/omi/bin/omiserver -v | cut -d ' ' -f 2 | grep -Po 'OMI-\K[^$]*')
if [[ "$latest_version" < "$min_req_version" ]]; then
    log ERROR "Updated OMI version: $latest_version < Required version: ${min_req_version}. Exiting.."
fi
log INFO "Updated OMI version: $latest_version >= Required version: $min_req_version"


#restart omi
log INFO "Restarting OMI"
sudo systemctl restart omid
return_code=$?
if [[ "$return_code" -ne "0" ]]; then
  log ERROR "Restarting OMI failed. Exiting.."
fi
log INFO "Restarting OMI successful"


log INFO "Finished omi patching script. Status: Successful"

#Done
