summaryrefslogtreecommitdiff
path: root/g5k/init-nodes.sh
blob: 17335f6dd06b9f31d18c7e50dc1acca5964fea04 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/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