aboutsummaryrefslogtreecommitdiffstats
path: root/tools/development/bin/run-xnf-simulator.sh
blob: e4d8d94a9c9c4ce1cb3070264ceed2fb212575fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/usr/bin/env bash
# ============LICENSE_START=======================================================
# dcaegen2-collectors-veshv
# ================================================================================
# Copyright (C) 2018 NOKIA
# ================================================================================
# 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.
# ============LICENSE_END=========================================================

set -euo pipefail

usage() {
    echo "Start xnf-simulator container on given port and inside of given docker-network"
    echo "Usage: $0 [-h|--help] [-v|--verbose] [--ssl-disable] <xnf listen port> [<hv ves hostname> <hv ves port> <hv ves docker network>]"
    echo ""
    echo "Optional parameters:"
    echo "  - ssl-disable : Should xNF simulator be configured without using SSL/TLS connections"
    echo "Default values:"
    echo "  - hv ves hostname: ves-hv-collector"
    echo "  - hv ves port: 6061"
    exit 1
}

optspec=":vh-:" # catch v, h and -
while getopts "$optspec" arg; do
    case "${arg}" in
        -) # handle longopts
            case "${OPTARG}" in
                verbose)
                    VERBOSE=True ;;
                ssl-disable)
                    SSL_DISABLE=True ;;
                help)
                    usage ;;
                *)
                    echo "Unknown option --${OPTARG}" >&2
                    usage ;;
             esac ;;
        v)
            VERBOSE=True ;;
        h)
            usage ;;
        *)
            echo "Unknown option -${OPTARG}" >&2
            usage ;;
    esac
done
shift $((OPTIND-1))

[ $# -eq 0 ] && usage


LISTEN_PORT=$1
HV_VES_HOSTNAME=${2:-ves-hv-collector}
HV_VES_PORT=${3:-6061}
if [ $# -gt 3 ]; then
    HV_VES_NETWORK=${4}
fi

PORTS="${LISTEN_PORT}:${LISTEN_PORT}/tcp"
HV_VES_REPO_HOME=$(realpath $(dirname "$0"))/..

if [ -n "${SSL_DISABLE+x}" ]; then
    SSL_CONFIGURATION="--ssl-disable"
else
    SSL_CONFIGURATION="--key-store-password onaponap --trust-store-password onaponap"
fi

if [ -n "${VERBOSE+x}" ]; then
    echo "Starting xnf-simulator with "
    echo "  - ports configuration: ${PORTS}"
    echo "  - SSL configuration: ${SSL_CONFIGURATION}"
    echo "Container id:"
fi


XNF_CONTAINER_ID=$(docker run -d \
           -v ${HV_VES_REPO_HOME}/ssl/:/etc/ves-hv/ \
           --health-cmd='curl -s -f http://localhost:6063/health/ready || exit 1' \
           --health-interval=5s \
           --health-retries=3 \
           --health-start-period='10s' \
           -p ${PORTS} \
           onap/org.onap.dcaegen2.collectors.hv-ves.hv-collector-xnf-simulator \
                    --listen-port ${LISTEN_PORT} \
                    --health-check-api-port 6063 \
                    --ves-host ${HV_VES_HOSTNAME} \
                    --ves-port ${HV_VES_PORT} \
                    ${SSL_CONFIGURATION})

echo $XNF_CONTAINER_ID

if [ -n "${HV_VES_NETWORK+x}" ]; then
    if [ -n "${VERBOSE+x}" ]; then
        echo "Adding container to network: ${HV_VES_NETWORK}"
    fi
    docker network connect ${HV_VES_NETWORK} ${XNF_CONTAINER_ID}
fi
an> var m controller.Controller err := json.NewDecoder(r.Body).Decode(&m) switch { case err == io.EOF: http.Error(w, "Empty body", http.StatusBadRequest) return case err != nil: http.Error(w, err.Error(), http.StatusUnprocessableEntity) return } // Name is required. if m.Metadata.Name == "" { http.Error(w, "Missing name in POST request", http.StatusBadRequest) return } ret, err := h.client.CreateController(m, false) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusCreated) err = json.NewEncoder(w).Encode(ret) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } } // Put handles creation or update of the controller entry in the database func (h controllerHandler) putHandler(w http.ResponseWriter, r *http.Request) { var m controller.Controller vars := mux.Vars(r) name := vars["controller-name"] err := json.NewDecoder(r.Body).Decode(&m) switch { case err == io.EOF: http.Error(w, "Empty body", http.StatusBadRequest) return case err != nil: http.Error(w, err.Error(), http.StatusUnprocessableEntity) return } // Name is required. if m.Metadata.Name == "" { http.Error(w, "Missing name in POST request", http.StatusBadRequest) return } // name in URL should match name in body if m.Metadata.Name != name { http.Error(w, "Mismatched name in PUT request", http.StatusBadRequest) return } ret, err := h.client.CreateController(m, true) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusCreated) err = json.NewEncoder(w).Encode(ret) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } } // Get handles GET operations on a particular controller Name // Returns a controller func (h controllerHandler) getHandler(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) name := vars["controller-name"] var ret interface{} var err error // handle the get all controllers case if len(name) == 0 { ret, err = h.client.GetControllers() if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } } else { ret, err = h.client.GetController(name) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } } w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) err = json.NewEncoder(w).Encode(ret) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } } // Delete handles DELETE operations on a particular controller Name func (h controllerHandler) deleteHandler(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) name := vars["controller-name"] err := h.client.DeleteController(name) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.WriteHeader(http.StatusNoContent) }