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 $9 "${10}" "${11}" "${12}" "${13}" "${14}" ;;
24 #IPGW, #IPSUBNET, #I, #URLVES, #IPPNFSIM, #IPFILESERVER, #TYPEFILESERVER, #PORTSFTP, #PORTFTPS, #IPFTPS, #IPSFTP, #FTPS_PASV_MIN, #FTPS_PAST_MAX
28 start $COMPOSE_FILE_NAME;;
32 echo "Error: action 'stop' requires the instance identifier"
52 function get_pnfsim_ip() {
54 export IPPNFSIM=$(cat ./config/config.yml | grep ippnfsim | awk -F'[ ]' '{print $2}')
55 echo "PNF-Sim IP: " $IPPNFSIM
57 export SIMULATOR_BASE=http://$IPPNFSIM:$SIMULATOR_PORT/simulator/
58 export SIMULATOR_START_URL=$SIMULATOR_BASE/start
59 export SIMULATOR_STOP_URL=$SIMULATOR_BASE/stop
60 export SIMULATOR_STATUS_URL=$SIMULATOR_BASE/status
64 #creating custom docker-compose based on IP arguments
65 #creting config.json by injecting the same IP
72 export IPFILESERVER=$6
73 export TYPEFILESERVER=$7
78 export FTPS_PASV_MIN=${12}
79 export FTPS_PASV_MAX=${13}
80 LOCALTIME=$(ls -l /etc/localtime)
81 export TIMEZONE=${LOCALTIME//*zoneinfo\/}
83 #will insert $I to distinguish containers, networks properly
84 #docker compose cannot substitute these, as they are keys, not values.
85 envsubst < docker-compose-template.yml > docker-compose-temporary.yml
86 #variable substitution
87 docker-compose -f docker-compose-temporary.yml config > docker-compose.yml
88 rm docker-compose-temporary.yml
90 ./ROP_file_creator.sh $I &
92 write_config $URLVES $IPFILESERVER $TYPEFILESERVER $PORTSFTP $PORTFTPS $IPPNFSIM
95 envsubst < vsftpd_ssl-TEMPLATE.conf > vsftpd_ssl.conf
102 function build_image(){
103 if [ -f pom.xml ]; then
104 mvn clean package docker:build -Dcheckstyle.skip
106 echo "pom.xml file not found"
111 function set_vsftpd_file_owner() {
112 sudo chown root ./config/vsftpd_ssl.conf
116 function write_config(){
117 #building a YML file for usage in Java
118 echo "urlves: $1" > config/config.yml
119 echo "urlsftp: sftp://onap:pano@$2:$4" >> config/config.yml
120 echo "urlftps: ftps://onap:pano@$2:$5" >> config/config.yml
121 echo "ippnfsim: $6" >> config/config.yml
122 echo "typefileserver: $3" >> config/config.yml
128 if [[ $(running_containers) ]]; then
129 echo "Simulator containers are already up"
131 echo "Starting simulator containers using netconf model specified in config/netconf.env"
132 set_vsftpd_file_owner
134 docker-compose -f $1 up -d
135 RUNNING_COMPOSE_CONFIG=$1
139 function running_containers(){
140 docker-compose -f $COMPOSE_FILE_NAME ps -q
145 kill $(ps -ef | grep "[.]/ROP_file_creator.sh $1" | head -n 1 | awk '{print $2}')
147 if [[ $(running_containers) ]]; then
148 docker-compose -f $RUNNING_COMPOSE_CONFIG down
149 docker-compose -f $RUNNING_COMPOSE_CONFIG rm
151 echo "Simulator containers are already down"
155 function trigger_simulator(){
159 $(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)
163 function run_simulator(){
167 $(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)
171 function stop_simulator(){
175 $(curl -s -X POST $SIMULATOR_STOP_URL)
179 function get_status(){
181 if [[ $(running_containers) ]]; then
184 echo "Simulator containers are down"
188 function print_status(){
191 $(docker-compose -f $RUNNING_COMPOSE_CONFIG ps)
194 $(curl -s -X GET $SIMULATOR_STATUS_URL)
198 function print_help(){
201 build - locally builds simulator image from existing code
202 start - starts simulator and netopeer2 containers using remote simulator image and specified model name
203 compose - customize the docker-compose and configuration based on arguments
204 trigger-simulator - start monitoring the ROP files and report periodically
205 run-simulator - starts sending PNF registration messages with parameters specified in config.json
206 stop-simulator - stop sending PNF registration messages
207 stop - stops both containers
208 status - prints simulator status
209 clear-logs - deletes log folder
212 - Setup the instance of this simulator by:
213 - ./simulator.sh compose IPGW IPSUBNET I URLVES IPPNFSIM IPFILESERVER TYPEFILESERVER PORTSFTP PORTFTPS IPFTPS IPSFTP
214 where IPGW and IPSUBNET will be used for docker network
215 where I is the integer suffix to differentiate instances
216 where URLVES is the URL of the VES collector
217 where IPPNFSIM, IPFILESERVER, IPFTPS, IPSFTP are the IP addresses for containers
218 where TYPEFILESERVER is the type of fileserver, i.e., FTPS or SFTP
219 where PORTSFTP, PORTFTPS are the SFTP and FTPS ports
220 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
222 - Setup environment with "./simulator.sh start". It will download required docker images from the internet and run them on docker machine
223 - 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}
225 To stop simulation use "./simulator.sh stop-simulator" command. To check simulator's status use "./simulator.sh status".
226 If you want to change message parameters simply edit config.json, then start the simulation with "./simulator.sh run-simulator" again
227 Logs are written to logs/pnf-simulator.log.
229 If you change the source code you have to rebuild image with "./simulator.sh build" and run "./simulator.sh start" again
233 function archive_logs(){
236 echo "Moving log file to archive"
237 DIR_PATH=logs/archive/simulator[$(timestamp)]
239 if [ -f logs/pnfsimulator.log ]; then
240 mv logs/pnfsimulator.log $DIR_PATH
243 if [ -f logs/*.xml ]; then
244 mv logs/*.xml $DIR_PATH
252 function clear_logs(){
254 if [[ $(running_containers) ]]; then
255 echo "Cannot delete logs when simulator is running"
261 function timestamp(){