#!/bin/bash
# Description: parse config file, get config info.
# Usage example:
# get_config common PRODUCTION
# get_node_ip mainregion
# get_node_ip subregion
# get_node_attribute mainregion 1.1.1.1 role
# get_node_attribute mainregion 1.1.1.1 svc
# get_node_attribute mainregion 1.1.1.1 user
# get_node_attribute mainregion 1.1.1.1 password
# get_ip_by_attrvalue mainregion role manager

function get_config() {
    local section=$1
    local options=$2
    local noblank=$3
    local opt=$(echo $options | tr '\t' ' ')
    awk -F '=' -v nobl=$noblank '
        {
            if(/^\['"$section"'\]/){
                a=1;
            }
        }
        {
            if(a==1 && $1~/^'"$opt"'/){
                if( nobl != "true" ){
                    gsub(/[[:blank:]]*/,"",$2);
                }
                printf("%s",$2);
                exit
            }
        }
    ' $CONFIG_FILE
}

function get_node_config() {
    local section=$1

    awk '
        {
            if(/^\['"$section"'\]/){
                a=1;
                next;
            }
        }
        {
            if(a==1 && $1 ~ /^\[/){
                exit;
            }
            if(a==1 && $0 !~ /^#/){
                print $0;
            }
        }
    ' $CONFIG_FILE
}

function get_node_ip() {
    local region=$1
    get_node_config $region | awk '{print $1}' | xargs
}

function get_node_attribute() {
    local region=$1
    local nodeip=$2
    local attr=$3
    get_node_config $region | awk '
            /^'"$nodeip"'/{
                for(i=1;i<=NF;i++){
                    if($i~/'"$attr"='.*/){
                        gsub(/'"$attr"='/,"",$i);
                        gsub(/[[:blank:]]*/,"",$i);
                        print $i
                    }
                }
            }'
}

function get_ip_by_attrvalue() {
    local region=$1
    local attr=$2
    local value=$3
    get_node_config $region | awk '
            {
                for(i=1;i<=NF;i++){
                    if($i~/'"$attr"='.*/ && $i ~ /.*'"$value"'.*/){
                        print $1
                    }
                }
            }' | xargs
}

