5 COMPOSE_FILE_NAME=docker-compose.yml
6 NETOPEER_CONTAINER_NAME=netopeer
7 SIMULATOR_CONTAINER_NAME=pnf-simulator
10 SIMULATOR_BASE=http://localhost:$SIMULATOR_PORT/simulator/
11 SIMULATOR_START_URL=$SIMULATOR_BASE/start
12 SIMULATOR_STOP_URL=$SIMULATOR_BASE/stop
13 SIMULATOR_STATUS_URL=$SIMULATOR_BASE/status
15 RUNNING_COMPOSE_CONFIG=$COMPOSE_FILE_NAME
23 compose $2 $3 $4 $5 $6 $7 $8;;
24 #IPGW, #IPSUBNET, #I, #IPVES, #IPPNFSIM, #IPFTP, #IPSFTP,
28 start $COMPOSE_FILE_NAME;;
47 function get_pnfsim_ip() {
49 export IPPNFSIM=$(cat ./config/config.yml | grep ippnfsim | awk -F'[ ]' '{print $2}')
50 echo "PNF-Sim IP: " $IPPNFSIM
52 export SIMULATOR_BASE=http://$IPPNFSIM:$SIMULATOR_PORT/simulator/
53 export SIMULATOR_START_URL=$SIMULATOR_BASE/start
54 export SIMULATOR_STOP_URL=$SIMULATOR_BASE/stop
55 export SIMULATOR_STATUS_URL=$SIMULATOR_BASE/status
59 #creating custom docker-compose based on IP arguments
60 #creting config.json by injecting the same IP
70 #will insert $I to distinguish containers, networks properly
71 #docker compose cannot substitute these, as they are keys, not values.
72 envsubst < docker-compose-template.yml > docker-compose-temporary.yml
73 #variable substitution
74 docker-compose -f docker-compose-temporary.yml config > docker-compose.yml
75 rm docker-compose-temporary.yml
77 ./ROP_file_creator.sh $I &
81 write_config $IPVES $IPFTPS $IPSFTP $IPPNFSIM
85 function build_image(){
86 if [ -f pom.xml ]; then
87 mvn clean package docker:build -Dcheckstyle.skip -DskipTests
89 echo "pom.xml file not found"
94 function set_vsftpd_file_owner() {
95 sudo chown root ./config/vsftpd_ssl.conf
99 function write_config(){
100 #building a YML file for usage in Java
101 echo "vesip: $1" > config/config.yml
102 echo "ipftps: $2" >> config/config.yml
103 echo "ipsftp: $3" >> config/config.yml
104 echo "ippnfsim: $4" >> config/config.yml
110 if [[ $(running_containers) ]]; then
111 echo "Simulator containers are already up"
113 echo "Starting simulator containers using netconf model specified in config/netconf.env"
114 set_vsftpd_file_owner
116 docker-compose -f $1 up -d
117 RUNNING_COMPOSE_CONFIG=$1
121 function running_containers(){
122 docker-compose -f $COMPOSE_FILE_NAME ps -q
127 kill $(ps -a | grep "[.]/ROP_file_creator.sh $1" | awk '{print $1}')
129 if [[ $(running_containers) ]]; then
130 docker-compose -f $RUNNING_COMPOSE_CONFIG down
131 docker-compose -f $RUNNING_COMPOSE_CONFIG rm
133 echo "Simulator containers are already down"
137 function trigger_simulator(){
141 $(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)
145 function run_simulator(){
149 $(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)
153 function stop_simulator(){
157 $(curl -s -X POST $SIMULATOR_STOP_URL)
161 function get_status(){
163 if [[ $(running_containers) ]]; then
166 echo "Simulator containers are down"
170 function print_status(){
173 $(docker-compose -f $RUNNING_COMPOSE_CONFIG ps)
176 $(curl -s -X GET $SIMULATOR_STATUS_URL)
180 function print_help(){
183 build - locally builds simulator image from existing code
184 start - starts simulator and netopeer2 containers using remote simulator image and specified model name
185 compose - customize the docker-compose and configuration based on arguments
186 trigger-simulator - start monitoring the ROP files and report periodically
187 run-simulator - starts sending PNF registration messages with parameters specified in config.json
188 stop-simulator - stop sending PNF registration messages
189 stop - stops both containers
190 status - prints simulator status
191 clear-logs - deletes log folder
194 - Setup the instance of this simulator by:
195 - ./simulator.sh compose IPGW IPSUBNET I IPVES IPPNFSIM IPFTPS IPSFTP
196 where Gw and subnet will be used for docker network
197 where I is the integer suffix to differentiate instances
198 where IPVES is the address of the VES collector
199 where IPPNFSIM, IPFTPS, IPSFTP are the addresses for containers
200 e.g. ./simulator.sh compose 10.11.0.65 10.11.0.64 3 10.11.0.2 10.11.0.66 10.11.0.67 10.11.0.68
202 - Setup environment with "./simulator.sh start". It will download required docker images from the internet and run them on docker machine
203 - To start the simulation use "./simulator.sh run-simulator", which will start sending PNF registration messages with parameters specified in config.json {TODO, might not be needed}
205 To stop simulation use "./simulator.sh stop-simulator" command. To check simulator's status use "./simulator.sh status".
206 If you want to change message parameters simply edit config.json, then start the simulation with "./simulator.sh run-simulator" again
207 Logs are written to logs/pnf-simulator.log.
209 If you change the source code you have to rebuild image with "./simulator.sh build" and run "./simulator.sh start" again
213 function archive_logs(){
216 echo "Moving log file to archive"
217 DIR_PATH=logs/archive/simulator[$(timestamp)]
219 if [ -f logs/pnfsimulator.log ]; then
220 mv logs/pnfsimulator.log $DIR_PATH
223 if [ -f logs/*.xml ]; then
224 mv logs/*.xml $DIR_PATH
232 function clear_logs(){
234 if [[ $(running_containers) ]]; then
235 echo "Cannot delete logs when simulator is running"
241 function timestamp(){