aboutsummaryrefslogtreecommitdiffstats
path: root/pnf-sim-lightweight/simulator.sh
diff options
context:
space:
mode:
authorLasse Kaihlavirta <l.kaihlavirt@partner.samsung.com>2020-12-16 09:15:09 +0000
committerGerrit Code Review <gerrit@onap.org>2020-12-16 09:15:09 +0000
commitab27141d3585af25de56f00cb763f08d734299e0 (patch)
tree01bfef6f105fa23d651a5c3cdedfc14435964771 /pnf-sim-lightweight/simulator.sh
parent4c7c4eb6b8f43e3dd27a0581de62cb93148f649e (diff)
parentb761beb3ea2bafd786473775b5ba0afcb3fa2fd3 (diff)
Merge "Move Masspnf simulator code from Integration repository to it's own"
Diffstat (limited to 'pnf-sim-lightweight/simulator.sh')
-rwxr-xr-xpnf-sim-lightweight/simulator.sh262
1 files changed, 262 insertions, 0 deletions
diff --git a/pnf-sim-lightweight/simulator.sh b/pnf-sim-lightweight/simulator.sh
new file mode 100755
index 0000000..69bfc86
--- /dev/null
+++ b/pnf-sim-lightweight/simulator.sh
@@ -0,0 +1,262 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+COMPOSE_FILE_NAME=docker-compose.yml
+NETOPEER_CONTAINER_NAME=netopeer
+SIMULATOR_CONTAINER_NAME=pnf-simulator
+SIMULATOR_PORT=5000
+
+SIMULATOR_BASE=http://localhost:$SIMULATOR_PORT/simulator/
+SIMULATOR_START_URL=$SIMULATOR_BASE/start
+SIMULATOR_STOP_URL=$SIMULATOR_BASE/stop
+SIMULATOR_STATUS_URL=$SIMULATOR_BASE/status
+
+RUNNING_COMPOSE_CONFIG=$COMPOSE_FILE_NAME
+
+function main(){
+
+ COMMAND=${1:-"help"}
+
+ case $COMMAND in
+ "compose")
+ compose $2 $3 $4 $5 $6 $7 $8 $9 "${10}" "${11}" "${12}" "${13}" "${14}" ;;
+ #IPGW, #IPSUBNET, #I, #URLVES, #IPPNFSIM, #IPFILESERVER, #TYPEFILESERVER, #PORTSFTP, #PORTFTPS, #IPFTPS, #IPSFTP, #FTPS_PASV_MIN, #FTPS_PAST_MAX
+ "build")
+ build_image;;
+ "start")
+ start $COMPOSE_FILE_NAME;;
+ "stop")
+ if [[ -z ${2+x} ]]
+ then
+ echo "Error: action 'stop' requires the instance identifier"
+ exit 1
+ fi
+ stop $2;;
+ "trigger-simulator")
+ trigger_simulator;;
+ "stop-simulator")
+ stop_simulator;;
+ "status")
+ get_status;;
+ "clear-logs")
+ clear_logs;;
+ *)
+ print_help;;
+ esac
+}
+
+
+function get_pnfsim_ip() {
+
+ export IPPNFSIM=$(cat ./config/config.yml | grep ippnfsim | awk -F'[ ]' '{print $2}')
+ echo "PNF-Sim IP: " $IPPNFSIM
+
+ export SIMULATOR_BASE=http://$IPPNFSIM:$SIMULATOR_PORT/simulator/
+ export SIMULATOR_START_URL=$SIMULATOR_BASE/start
+ export SIMULATOR_STOP_URL=$SIMULATOR_BASE/stop
+ export SIMULATOR_STATUS_URL=$SIMULATOR_BASE/status
+}
+
+function compose(){
+ #creating custom docker-compose based on IP arguments
+ #creting config.yml by injecting the same IP
+
+ export IPGW=$1
+ export IPSUBNET=$2
+ export I=$3
+ export URLVES=$4
+ export IPPNFSIM=$5
+ export IPFILESERVER=$6
+ export TYPEFILESERVER=$7
+ export PORTSFTP=$8
+ export PORTFTPS=$9
+ export IPFTPS=${10}
+ export IPSFTP=${11}
+ export FTPS_PASV_MIN=${12}
+ export FTPS_PASV_MAX=${13}
+ LOCALTIME=$(ls -l /etc/localtime)
+ export TIMEZONE=${LOCALTIME//*zoneinfo\/}
+
+ #will insert $I to distinguish containers, networks properly
+ #docker compose cannot substitute these, as they are keys, not values.
+ envsubst < docker-compose-template.yml > docker-compose-temporary.yml
+ #variable substitution
+ docker-compose -f docker-compose-temporary.yml config > docker-compose.yml
+ rm docker-compose-temporary.yml
+
+ ./ROP_file_creator.sh $I &
+
+ write_config $URLVES $IPFILESERVER $TYPEFILESERVER $PORTSFTP $PORTFTPS $IPPNFSIM
+
+ pushd config
+ envsubst < vsftpd_ssl-TEMPLATE.conf > vsftpd_ssl.conf
+ popd
+}
+
+function build_image(){
+ if [ -f pom.xml ]; then
+ mvn clean package docker:build -Dcheckstyle.skip
+ else
+ echo "pom.xml file not found"
+ exit 1
+ fi
+}
+
+function set_vsftpd_file_owner() {
+ # This is to avoid "500 OOPS: cannot open config file"
+ # on vsftpd daemon start
+ sudo chown root ./config/vsftpd_ssl.conf
+}
+
+
+function write_config(){
+ #building a YML file for usage in Java
+ echo "urlves: $1" > config/config.yml
+ echo "urlsftp: sftp://onap:pano@$2:$4" >> config/config.yml
+ echo "urlftps: ftps://onap:pano@$2:$5" >> config/config.yml
+ echo "ippnfsim: $6" >> config/config.yml
+ echo "typefileserver: $3" >> config/config.yml
+}
+
+function start(){
+ get_pnfsim_ip
+ if [[ $(running_containers) ]]; then
+ echo "Simulator containers are already up"
+ else
+ echo "Starting simulator containers using netconf model specified in config/netconf.env"
+ set_vsftpd_file_owner
+ archive_logs
+ docker-compose -f $1 up -d
+ fi
+}
+
+function running_containers(){
+ docker-compose -f $COMPOSE_FILE_NAME ps -q
+}
+
+function stop(){
+ get_pnfsim_ip
+
+ set +e # override global script setting
+ declare -a pids_to_kill
+ # get ROP_file_creator.sh instance pid
+ pids_to_kill[0]=$(pgrep -f "ROP_file_creator.sh ${1}$")
+ if [[ ! -z ${pids_to_kill[0]} ]];
+ then
+ # get ROP_file_creator.sh childs pids
+ pids_to_kill=(${pids_to_kill[@]} $(pgrep -P ${pids_to_kill[0]}))
+ kill ${pids_to_kill[@]}
+ else
+ echo "ROP_file_creator.sh already not running"
+ fi
+
+ if [[ $(running_containers) ]]; then
+ docker-compose -f $RUNNING_COMPOSE_CONFIG down
+ docker-compose -f $RUNNING_COMPOSE_CONFIG rm
+ else
+ echo "Simulator containers are already down"
+ fi
+}
+
+function trigger_simulator(){
+ get_pnfsim_ip
+ cat << EndOfMessage
+Simulator response:
+$(curl -s -X POST -H "Content-Type: application/json" -H "X-ONAP-RequestID: 123" -H "X-InvocationID: 456" -d @config/config.json $SIMULATOR_START_URL)
+EndOfMessage
+}
+
+function stop_simulator(){
+ get_pnfsim_ip
+ cat << EndOfMessage
+Simulator response:
+$(curl -s -X POST $SIMULATOR_STOP_URL)
+EndOfMessage
+}
+
+function get_status(){
+ if [[ $(running_containers) ]]; then
+ print_status
+ else
+ echo "Simulator containers are down"
+ fi
+}
+
+function print_status(){
+ get_pnfsim_ip
+ cat << EndOfMessage
+$(docker-compose -f $RUNNING_COMPOSE_CONFIG ps)
+
+Simulator response:
+$(curl -s -X GET $SIMULATOR_STATUS_URL)
+EndOfMessage
+}
+
+function print_help(){
+cat << EndOfMessage
+Available options:
+build - locally builds simulator image from existing code
+start - starts simulator and netopeer2 containers using remote simulator image and specified model name
+compose - customize the docker-compose and configuration based on arguments
+trigger-simulator - starts sending PNF registration messages with parameters specified in config.json
+stop-simulator - stop sending PNF registration messages
+stop - stops both containers
+status - prints simulator status
+clear-logs - deletes log folder
+
+Starting simulation:
+- Setup the instance of this simulator by:
+ - ./simulator.sh compose IPGW IPSUBNET I URLVES IPPNFSIM IPFILESERVER TYPEFILESERVER PORTSFTP PORTFTPS IPFTPS IPSFTP
+ where IPGW and IPSUBNET will be used for docker network
+ where I is the integer suffix to differentiate instances
+ where URLVES is the URL of the VES collector
+ where IPPNFSIM, IPFILESERVER, IPFTPS, IPSFTP are the IP addresses for containers
+ where TYPEFILESERVER is the type of fileserver, i.e., FTPS or SFTP
+ where PORTSFTP, PORTFTPS are the SFTP and FTPS ports
+ e.g. ./simulator.sh compose 10.11.0.65 10.11.0.64 3 http://10.11.0.69:10000/eventListener/v7 10.11.0.2 10.11.0.66 ftps 2001 2002 10.11.0.67 10.11.0.68
+
+- Setup environment with "./simulator.sh start". It will download required docker images from the internet and run them on docker machine
+- To start the simulation use "./simulator.sh trigger-simulator", which will start sending PNF registration messages with parameters specified in config.json
+
+To stop simulation use "./simulator.sh stop-simulator" command. To check simulator's status use "./simulator.sh status".
+If you want to change message parameters simply edit config.json, then trigger the simulation with "./simulator.sh trigger-simulator" again
+Logs are written to logs/pnf-simulator.log.
+
+If you change the source code you have to rebuild image with "./simulator.sh build" and run "./simulator.sh start" again
+EndOfMessage
+}
+
+function archive_logs(){
+
+ if [ -d logs ]; then
+ echo "Moving log file to archive"
+ DIR_PATH=logs/archive/simulator[$(timestamp)]
+ mkdir -p $DIR_PATH
+ if [ -f logs/pnfsimulator.log ]; then
+ mv logs/pnfsimulator.log $DIR_PATH
+ fi
+
+ if [ -f logs/*.xml ]; then
+ mv logs/*.xml $DIR_PATH
+ fi
+
+ else
+ mkdir logs
+ fi
+}
+
+function clear_logs(){
+
+ if [[ $(running_containers) ]]; then
+ echo "Cannot delete logs when simulator is running"
+ else
+ rm -rf logs
+ fi
+}
+
+function timestamp(){
+ date "+%Y-%m-%d_%T"
+}
+
+main $@