#!/bin/bash

### Include ymclibnettools
. /usr/lib/lib-fliwi/ymc-networktools.bash

if [ $(ymc_is_chroot) -ne 0 ]; then
  echo "WARNING: $0 can not be run inside a chroot..."
  exit 0
fi

### The netmask for virtual-ips always is 255.255.255.255
netmask="255.255.255.255"

### Get own services
services=$(fliwi-get-my-services)

### Some vars
active_aliases=''
failed_ips=''


### Add virtual-ips to interface
for service in $services
do
  # Get the ip for the service
  vIPs=$(fliwi-get-vips-for-service $service)
  if [ $? -ne 0 ] || [ "$vIPs" == '' ]; then
    echo "WARNING: Could not get vIPs for service $service" 1>&2
    continue
  fi

  for ip in $vIPs
  do

    # Calculate the virtual-alias
    alias=$(ymc_calculate_virtual_alias $ip)
    if [ $? -ne 0 ] || \
       [ -z "$alias" ]; then
      echo "WARNING: Could not calculate virtual-alias out of ip $ip" 1>&2
      continue
    fi

    # Setup the virtual-ip
    if [ $(ymc_contains $alias $active_aliases) -eq 0 ]; then
      echo "INFO: Taking lo:$alias online with ip $ip" 1>&2
      ifconfig lo:$alias $ip netmask $netmask up 2>/dev/null
      if [ $? -ne 0 ]; then
        echo "WARNING: Failed to enable vIP for service $service with IP $ip - will try again later..." 1>&2
        failed_ips=$failed_ips' '$ip
      fi

      # Add the alias to the active ones
      active_aliases=$active_aliases' '$alias
    else
      echo "WARNING: Not taking lo:$alias online with ip $ip - DUPLICATE SERVICE" 1>&2
    fi
  done
done

### Get all currently configured virtual-aliases
configured_aliases=$(ymc_get_all_configured_virtual_aliases)

### Get all aliases, that might have been configured by older
### versions of fliwi-tools
legacy_configured_aliases=$(ymc_get_all_configured_virtual_ids)

for configured_alias in $configured_aliases $legacy_configured_aliases
do
  if [ $(ymc_contains $configured_alias $active_aliases) -eq 0 ]; then
    echo "INFO: Shutting down lo:$configured_alias" 1>&2
    ifconfig lo:$configured_alias down
  fi
done

### Now we have shutdown old virtual-ips, try to enabled the failed ones...
for failed_ip in $failed_ips
do
  # Calculate the virtual-alias
  alias=$(ymc_calculate_virtual_alias $failed_ip)
  if [ $? -ne 0 ] || \
     [ -z "$alias" ]; then
    echo "WARNING: Could not calculate virtual-alias out of ip $failed_ip" 1>&2
    continue
  fi
  echo "INFO: Taking previously failed lo:$alias online with ip $failed_ip" 1>&2
  ifconfig lo:$alias $failed_ip netmask $netmask up
  if [ $? -ne 0 ]; then
    echo "ERROR: Failed to enable previously failed vIP for service $service with IP $failed_ip" 1>&2
  fi
done

exit 0
