#!/bin/bash

if [[ -z $OS_AUTH_URL ]]; then
  echo "This script must have proper environment variables exported. "
  echo "Please check if you have sourced senlinrc file or openrc file if "
  echo "you are using devstack."
  exit -1
fi

if [ $OS_USERNAME != 'admin' ]; then
  echo "This script has to be executed as an 'admin' user. "
  echo "Please set environment variable OS_USERNAME to 'admin'."
  exit -1
fi

if [ $# -ne 2 ]; then
  echo "Usage: `basename $0` <HOST_IP> <SERVICE_PASSWORD>"
  exit -1
fi

PORT=8778
HOST=$1 # Put your host IP here
SVC_PASSWD=$2
OS_REGION_NAME=${OS_REGION_NAME:-RegionOne}
OS_IDENTITY_API_VERSION=${OS_IDENTITY_API_VERSION:-3}
SERVICE_PROJECT=${OS_SERVICE_PROJECT:-service}
SERVICE_ROLE=${OS_SERVICE_ROLE:-service}

SERVICE_ID=$(openstack service show senlin -f value -cid 2>/dev/null)
if [[ -z $SERVICE_ID ]]; then
  SERVICE_ID=$(openstack service create \
    --name senlin \
    --description 'Senlin Clustering Service V1' \
    -f value -cid \
    clustering)
fi

if [[ -z $SERVICE_ID ]]; then
  exit
fi

if [ "$OS_IDENTITY_API_VERSION" = "3" ]; then
    openstack endpoint create senlin admin "http://$HOST:$PORT" \
      --region $OS_REGION_NAME
    openstack endpoint create senlin public "http://$HOST:$PORT" \
      --region $OS_REGION_NAME
    openstack endpoint create senlin internal "http://$HOST:$PORT" \
      --region $OS_REGION_NAME
else
    openstack endpoint create \
      --adminurl "http://$HOST:$PORT" \
      --publicurl "http://$HOST:$PORT" \
      --internalurl "http://$HOST:$PORT" \
      --region $OS_REGION_NAME \
      senlin
fi

# Check service project name.
# Devstack uses 'service' while some distributions use 'services'
PROJECT_ID=$(openstack project show service -f value -cid 2>/dev/null)
if [[ -z $PROJECT_ID ]]; then
    SERVICE_PROJECT=services
    SERVICE_ROLE=services
    openstack role create $SERVICE_ROLE
fi

openstack user create \
    --password "$SVC_PASSWD" \
    --project $SERVICE_PROJECT \
    --email senlin@localhost \
    senlin

openstack role add \
    admin \
    --user senlin \
    --project $SERVICE_PROJECT

  # make sure 'senlin' has service role on 'demo' project
openstack role add \
    $SERVICE_ROLE \
    --user senlin \
    --project demo
