#!/bin/bash

# Note that these port numbers must match the configured values for the
# various servers in their configuration files.
declare -A port=(["account.builder"]=6012 ["container.builder"]=6011 \
    ["object.builder"]=6010)

print_usage() {
    echo "
        NAME
            gluster-swift-gen-builders - Registers GlusterFS volumes to be accessed by
            object storage.
        SYNOPSIS
            gluster-swift-gen-builders [-v] [-h] volumes...
        DESCRIPTION
            Register GlusterFS volumes to be accessed over OpenStack Swift object
            storage.
        OPTIONS
            -v or --verbose
              Verbose
            -h or --help
              Prints help screen
        EXAMPLES
            gluster-swift-gen-builders myvol1 myvol2
            -Creates new ring files with myvol1 and myvol2

            gluster-swift-gen-builders myvol2
            -Creates new ring files by removing myvol1
            "
}

builder_files="account.builder container.builder object.builder"

function create {
    swift-ring-builder $1 create 1 1 1 >> /tmp/out
}

function add {
    swift-ring-builder $1 add z$2-127.0.0.1:$3/$4_ 100.0
}

function rebalance {
    swift-ring-builder $1 rebalance
}

function build {
    swift-ring-builder $1
}

verbose=0
outdev="/dev/null"

if [ "$1" = "-v" ] || [ "$1" = "--verbose" ]; then
        verbose=1
        outdev="/dev/stdout"
        shift
fi

if [ "x$1" = "x" ]; then
    echo "Please specify the gluster volume name to use."
    print_usage
    exit 1
fi

if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
        print_usage
        exit 0
fi


cd /etc/swift

for builder_file in $builder_files
do
    create $builder_file

    zone=1
    for volname in $@
    do
        add $builder_file $zone ${port[$builder_file]} $volname >& $outdev
        zone=$(expr $zone + 1)
    done

    rebalance $builder_file >& $outdev
    build $builder_file >& $outdev

done

echo "Ring files are prepared in /etc/swift. Please restart object store services"
