# Configure the Akamai backend

# Requirements:
# An active Akamai account / contract will be requied to use this DevStack
# plugin.

# Enable with:
# DESIGNATE_BACKEND_DRIVER=akamai

# Dependencies:
# ``functions`` file
# ``designate`` configuration

# install_designate_backend - install any external requirements
# configure_designate_backend - make configuration changes, including those to other services
# init_designate_backend - initialize databases, etc.
# start_designate_backend - start any external services
# stop_designate_backend - stop any external services
# cleanup_designate_backend - remove transient data and cache

# Save trace setting
DP_AKAMAI_XTRACE=$(set +o | grep xtrace)
set +o xtrace

# Defaults
# --------

DESIGNATE_AKAMAI_USERNAME=${DESIGNATE_AKAMAI_USERNAME:-username}
DESIGNATE_AKAMAI_PASSWORD=${DESIGNATE_AKAMAI_PASSWORD:-password}
DESIGNATE_AKAMAI_MASTERS=${DESIGNATE_AKAMAI_MASTERS:-"$DESIGNATE_SERVICE_HOST:$DESIGNATE_SERVICE_PORT_MDNS"}
DESIGNATE_AKAMAI_NAMESERVERS=${DESIGNATE_AKAMAI_NAMESERVERS:-""}
DESIGNATE_AKAMAI_ALSO_NOTIFIES=${DESIGNATE_AKAMAI_ALSO_NOTIFIES:-"193.108.155.34,23.73.134.141,80.67.64.148,23.73.134.237,23.73.133.141,23.73.133.237,80.67.64.10,72.246.0.10,72.247.45.157,72.246.192.168,193.108.152.143,60.254.128.45,72.247.45.110,72.247.45.65,72.247.45.25"}

# Pull in DESIGNATE_3RDPARTY_CREDS user/pass if set
if [ -n "$DESIGNATE_3RDPARTY_CREDS" ]; then
    DESIGNATE_AKAMAI_USERNAME=`echo $DESIGNATE_3RDPARTY_CREDS | cut -f1 -d:`
    DESIGNATE_AKAMAI_PASSWORD=`echo $DESIGNATE_3RDPARTY_CREDS | cut -f2- -d:`
fi

# Sanity Checks
# -------------
if [ -z "$DESIGNATE_AKAMAI_NAMESERVERS" ]; then
    die $LINENO "You must configure DESIGNATE_AKAMAI_NAMESERVERS"
fi

if [ "$DESIGNATE_SERVICE_PORT_MDNS" != "53" ]; then
    die $LINENO "Akamai requires DESIGNATE_SERVICE_PORT_MDNS is set to '53'"
fi

# Entry Points
# ------------

# install_designate_backend - install any external requirements
function install_designate_backend {
    :
}

# configure_designate_backend - make configuration changes, including those to other services
function configure_designate_backend {
    # Generate Designate pool.yaml file
    sudo tee $DESIGNATE_CONF_DIR/pools.yaml > /dev/null <<EOF
---
- name: default
  description: DevStack Akamai Pool
  attributes: {}

  targets:
    - type: akamai
      description: Akamai API

      options:
        username: $DESIGNATE_AKAMAI_USERNAME
        password: $DESIGNATE_AKAMAI_PASSWORD

      masters:
EOF

    # Create a Pool Master for each of the Akamai Masters
    IFS=',' read -a masters <<< "$DESIGNATE_AKAMAI_MASTERS"

    for master in "${masters[@]}"; do
        sudo tee -a $DESIGNATE_CONF_DIR/pools.yaml > /dev/null <<EOF
        - host: $master
          port: 53
EOF
    done

    # Create a Pool NS Record for each of the Akamai Nameservers
    IFS=',' read -a nameservers <<< "$DESIGNATE_AKAMAI_NAMESERVERS"

    sudo tee -a $DESIGNATE_CONF_DIR/pools.yaml > /dev/null <<EOF
  ns_records:
EOF

    for nameserver in "${nameservers[@]}"; do
        sudo tee -a $DESIGNATE_CONF_DIR/pools.yaml > /dev/null <<EOF
    - hostname: $nameserver
      priority: 1
EOF
    done

    # Create a Pool Nameserver for each of the Akamai Nameservers
    sudo tee -a $DESIGNATE_CONF_DIR/pools.yaml > /dev/null <<EOF
  nameservers:
EOF

    for nameserver in "${nameservers[@]}"; do
        sudo tee -a $DESIGNATE_CONF_DIR/pools.yaml > /dev/null <<EOF
    - host: `dig +short A $nameserver | head -n 1`
      port: 53
EOF
    done

    # Create a Pool Also Notifies for each of the Akamai Also Notifies
    IFS=',' read -a also_notifies <<< "$DESIGNATE_AKAMAI_ALSO_NOTIFIES"

    sudo tee -a $DESIGNATE_CONF_DIR/pools.yaml > /dev/null <<EOF
  also_notifies:
EOF

    for also_notify in "${also_notifies[@]}"; do
        sudo tee -a $DESIGNATE_CONF_DIR/pools.yaml > /dev/null <<EOF
    - host: $also_notify
      port: 53
EOF
    done
}

# init_designate_backend - initialize databases, etc.
function init_designate_backend {
    :
}

# start_designate_backend - start any external services
function start_designate_backend {
    :
}

# stop_designate_backend - stop any external services
function stop_designate_backend {
    :
}

# cleanup_designate_backend - remove transient data and cache
function cleanup_designate_backend {
    :
}

# Restore xtrace
$DP_AKAMAI_XTRACE
