#!/bin/bash

#
# Copyright 2015-present Open Networking Foundation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# -----------------------------------------------------------------------------
# Tool to manage ONOS component configurations using REST API.
# -----------------------------------------------------------------------------
usage() {
    echo "usage: onos-cfg [-P port] [-u user] [-p password] [-v] \\"
    echo "          node [list|post|delete] component [JSON file if posting or deleting]"
}

. $(dirname $0)/_rest-port
. $(dirname $0)/_find-node
. $(dirname $0)/_check-json

fail="--fail"
[ "$1" == "-v" ] && shift && fail=""

node=$(find_node $1)
cmd=${2:-list}
component=${3}
file=${4}

export URL=http://$node:$port/onos/v1/configuration/${component}
export curl="curl ${fail} -sSL --user $user:$password --noproxy ${node} "

if [ "$node" == "" -o "$component" == "" ]; then
     usage && exit 1
fi

case $cmd in
    list)
        ${curl} -X GET ${URL} && echo;;
    post|delete)
        checkJson "$file"
        $curl -X $cmd -H 'Content-Type:application/json' ${URL} -d@$file && echo;;
    *) usage && exit 1;;
esac






