#!/bin/bash ##### Parameters ##### delay=60 # Delay before starting simulation (let CPU energy going down on the server) nbSensors=30 nbSensorsFactor=3 requestPerSensor=10 # Theorical simulation time is $requestPerSensor/$sensorsRequestPerSec sensorsRequestPerSec=10 # Number of request per seconds ###################### logFile="./simLogs.txt" log () { echo -e "\033[0;34m$@\033[0m" } if [ "$1" = "subscribe" ] && [ $# -eq 1 ] then # Subscribe log "Subscribing..." oarsub -l slash_22=1+{"virtual!='NO'"}/nodes=2 'sleep "10d"' elif [ "$1" = "deploy" ] && [ $# -eq 1 ] then # Get machine mac address serverSubnet=$(g5k-subnets -im|sed "1q;d") clientSubnet=$(g5k-subnets -im|sed "2q;d") serverMac=$(echo "$serverSubnet"|sed "s/^.*\t//g") clientMac=$(echo "$clientSubnet"|sed "s/^.*\t//g") serverIp=$(echo "$serverSubnet"|sed "s/\t.*$//g") clientIp=$(echo "$clientSubnet"|sed "s/\t.*$//g") serverNode="" clientNode="" # Run vms log "Run vms..." isServer=1 finished=0 for node in $(cat $OAR_NODE_FILE|uniq) do # Init vm images log "Create $node vm image" oarsh $node cp -n /grid5000/virt-images/debian9-x64-base.qcow2 /tmp/ oarsh $node qemu-img create -f qcow2 -o backing_file=/tmp/debian9-x64-base.qcow2 /tmp/img.qcow2 sleep 1 # Wait for fun log "Create $node cloud-init image" oarsh $node cp /grid5000/virt-images/cloud-init-example.sh /tmp/ oarsh $node "cd /tmp && export cloud_init_key=\$(cat ~/.ssh/id_rsa.pub) && ./cloud-init-example.sh" #oarsh $node "cd /tmp && sed -i \"s/public-keys/ssh_authorized_keys/g\" cloud-init-data/meta-data" oarsh $node "cd /tmp && genisoimage -output cloud-init-data.iso -volid cidata -joliet -rock cloud-init-data/user-data cloud-init-data/meta-data" [ $isServer -eq 1 ] && { curMac=$serverMac; isServer=0; serverNode=$node; } || { curMac=$clientMac; finished=1; clientNode=$node; } log "Launch vm $node" oarsh $node kvm -m 2048 -hda /tmp/img.qcow2 -netdev bridge,id=br0 -device virtio-net-pci,netdev=br0,id=nic1,mac=$curMac -cdrom /tmp/cloud-init-data.iso -display none -daemonize & [ $finished -eq 1 ] && break done log "Installing mysql on $serverIp" onNode="ssh -q root@$serverIp" # One apt-get update seems to be not enought to get mysql-server $onNode "apt-get update && apt-get update" $onNode apt-get -y install mysql-server # Enable mysql connection from outside $onNode sed -i "s/bind-address/#bind-address/g" /etc/mysql/mariadb.conf.d/50-server.cnf $onNode systemctl restart mysql rsync -avh setup-mysql.sql root@$serverIp:/tmp/ # Then execute it $onNode "mysql < /tmp/setup-mysql.sql" # Switch to client onNode="ssh -q root@$clientIp" $onNode "apt-get update && apt-get update" $onNode apt-get -y install mysql-server rsync -avh clients.py root@$clientIp:/tmp/ ##### Start Simulation ##### log "Simulation will start in ${delay}s" sleep $delay echo "Simulation start at " $(date "+%s") >> $logFile $onNode python /tmp/clients.py $serverIp $nbSensors $nbSensorsFactor $requestPerSensor $sensorsRequestPerSec echo "Simulation end at " $(date "+%s") >> $logFile ##### End Simulation ##### log "Network Settings:" log " - Server $serverIp $serverMac" log " - Client $clientIp $clientMac" elif [ "$1" = "kill" ] && [ $# -eq 1 ] then isServer=1 finished=0 for node in $(cat $OAR_NODE_FILE|uniq) do [ $isServer -eq 1 ] && { curMac=$serverMac; isServer=0; serverNode=$node; } || { curMac=$clientMac; finished=1; clientNode=$node; } log "Killing vm on node $node" oarsh $node pkill -9 qemu & [ $finished -eq 1 ] && break done elif [ "$1" = "inspect" ] && [ $# -eq 2 ] then mysql --host="$2" -u user --password="mysql" experiment -e "SELECT * FROM temperature;" elif [ "$1" = "flush" ] && [ $# -eq 2 ] then mysql --host="$2" -u user --password="mysql" experiment -e "TRUNCATE TABLE temperature;" else echo "Usage:" echo " - $0 subscribe" echo " - $0 deploy" fi