blob: cf16e2400b606b40dd4c30bb36fa73f80815ee5a [file] [log] [blame]
#!/usr/bin/env bash
set -euo pipefail
COMPOSE_FILE_NAME=docker-compose.yml
DEV_COMPOSE_FILE_NAME=docker-compose.dev.yml
NETOPEER_CONTAINER_NAME=netopeer
SIMULATOR_CONTAINER_NAME=pnf-simulator
SIMULATOR_PORT=5000
SIMULATOR_START_URL=http://localhost:$SIMULATOR_PORT/simulator/start
SIMULATOR_STOP_URL=http://localhost:$SIMULATOR_PORT/simulator/stop
SIMULATOR_STATUS_URL=http://localhost:$SIMULATOR_PORT/simulator/status
RUNNING_COMPOSE_CONFIG=$COMPOSE_FILE_NAME
function main(){
COMMAND=${1:-"help"}
case $COMMAND in
"build")
build_image;;
"start")
start $COMPOSE_FILE_NAME;;
"start-dev")
start $DEV_COMPOSE_FILE_NAME;;
"start-debug")
start_netconf_server $DEV_COMPOSE_FILE_NAME;;
"stop")
stop;;
"run-simulator")
run_simulator;;
"stop-simulator")
stop_simulator;;
"status")
get_status;;
"clear-logs")
clear_logs;;
*)
print_help;;
esac
}
function build_image(){
if [ -f pom.xml ]; then
mvn clean package
else
echo "pom.xml file not found"
exit 1
fi
}
function start_netconf_server() {
docker-compose -f $1 up -d $NETOPEER_CONTAINER_NAME
echo
echo "NETCONF server container's logs:"
docker exec $NETOPEER_CONTAINER_NAME /bin/bash -c "sysrepoctl --install --yang=/netconf/\$NETCONF_MODEL.yang --owner=netconf:nogroup --permissions=777"
docker exec $NETOPEER_CONTAINER_NAME /bin/bash -c "sysrepocfg --import=/netconf/\$NETCONF_MODEL.data.xml --datastore=startup --format=xml --level=3 \$NETCONF_MODEL"
docker exec -d $NETOPEER_CONTAINER_NAME /bin/bash -c "/opt/dev/sysrepo/build/examples/application_example \$NETCONF_MODEL"
echo
}
function start(){
if [[ $(running_containers) ]]; then
echo "Simulator containers are already up"
else
echo "Starting simulator containers using netconf model specified in config/netconf.env"
archive_logs
start_netconf_server $1
docker-compose -f $1 up -d $SIMULATOR_CONTAINER_NAME
RUNNING_COMPOSE_CONFIG=$1
fi
}
function running_containers(){
docker-compose -f $COMPOSE_FILE_NAME ps -q && docker-compose -f $DEV_COMPOSE_FILE_NAME ps -q
}
function stop(){
if [[ $(running_containers) ]]; then
docker-compose -f $RUNNING_COMPOSE_CONFIG down
else
echo "Simulator containers are already down"
fi
}
function run_simulator(){
cat << EndOfMessage
Simulator response:
$(curl -s -X POST -H "Content-Type: application/json" -d @config/config.json $SIMULATOR_START_URL | json_pp)
EndOfMessage
}
function stop_simulator(){
cat << EndOfMessage
Simulator response:
$(curl -s -X POST $SIMULATOR_STOP_URL | json_pp)
EndOfMessage
}
function get_status(){
if [[ $(running_containers) ]]; then
print_status
else
echo "Simulator containers are down"
fi
}
function print_status(){
cat << EndOfMessage
$(docker-compose -f $RUNNING_COMPOSE_CONFIG ps)
Simulator response:
$(curl -s -X GET $SIMULATOR_STATUS_URL | json_pp)
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
start-dev - starts simulator and netopeer2 containers using remote simulator image
start-debug - starts only netopeer2 container
run-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 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 run-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 start the simulation with "./simulator.sh run-simulator" again
Logs are written to logs/pnf-simulator.log. After each "start/start-dev" old log files are moved to the archive
FOR DEVELOPERS
1. Build local simulator image using "./simulator.sh build"
2. Run containers with "./simulator.sh start-dev"
If you change the source code you have to rebuild image with "./simulator.sh build" and run "./simulator.sh start/start-dev" 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 $@