- merge from PlanetLab Europe
[plcapi.git] / plctest / TestNode.py
1 import os
2 import sys
3 import time
4 import base64
5 import TestConfig
6 import xmlrpclib
7
8 class TestNode:
9
10     def __init__ (self,test_plc,test_site,node_spec):
11         self.test_plc=test_plc
12         self.test_site=test_site
13         self.node_spec=node_spec
14         self.timset=time.strftime("%H:%M:%S", time.localtime())
15     def create_node (self,role):
16         auth = self.test_site.anyuser_auth (role+"_spec")
17         filter={'boot_state':'rins'}
18         try:
19             if (role=='pi' and self.node_spec['owned']=='pi'):
20                 self.node_id = self.test_plc.server.AddNode(auth,
21                                                             self.test_site.site_spec['site_fields']['login_base'],
22                                                             self.node_spec)
23                 self.test_plc.server.AddNodeNetwork(auth,self.node_id,
24                                                     self.node_spec['network'])
25                 self.test_plc.server.UpdateNode(auth, self.node_id, filter)
26                 return self.node_id
27             
28             elif (role=='tech' and self.node_spec['owned']=='tech'):
29                 self.node_id = self.test_plc.server.AddNode(auth,
30                                                             self.test_site.site_spec['site_fields']['login_base'],
31                                                             self.node_spec)
32                 self.test_plc.server.AddNodeNetwork(auth,self.node_id,
33                                                     self.node_spec['network'])
34                 self.test_plc.server.UpdateNode(auth, self.node_id, filter)
35                 return self.node_id
36         except Exception, e:
37                 print str(e)
38
39     def create_slice(self, role, liste_nodes_spec):
40         print '========>Creating slice at :'+self.timset+' : ',TestConfig.slice_spec
41         auth = self.test_site.anyuser_auth (role+"_spec")
42         liste_hosts=[]
43         for l in liste_nodes_spec :
44             liste_hosts.append(l['hostname'])
45         try:
46             slice_id=self.test_plc.server.AddSlice(auth, TestConfig.slice_spec)
47             self.test_plc.server.AddSliceToNodes(auth, slice_id, liste_hosts)
48             self.test_plc.server.AddPersonToSlice(auth, self.test_site.site_spec['pi_spec']['email'], slice_id)
49             self.test_plc.server.AddPersonToSlice(auth, self.test_site.site_spec['tech_spec']['email'], slice_id)
50             self.test_plc.server.AddPersonToSlice(auth, self.test_site.site_spec['tech_user_spec']['email'], slice_id)
51             print 'fin creation slices'
52         except Exception, e:
53             print str(e)
54             sys.exit(1)
55
56
57         
58     def conffile(self,image,hostname,path):
59         try:
60             file=path+'/VirtualFile-'+hostname+'/My_Virtual_Machine.vmx'
61             f2=open(file,'w')
62             
63             f1=open(path+'/My-Virtual-Machine-model/My_Virtual_Machine.vmx','r')
64             while 1:
65                 txt = f1.readline()
66                 if txt=='':
67                     f1.close()
68                     f2.close()
69                     break
70                 if txt[0]!='*' :
71                     f2.write(txt)
72                 else :
73                     f2.write('ide1:1.fileName = '+'"'+image+'"' '\n')
74           
75             
76         except Exception, e:
77             print str(e)
78
79
80
81     def create_boot_cd(self,node_spec,path):
82         try:
83             os.system('mkdir  -p  %s/VirtualFile-%s  &&  cp  %s/My-Virtual-Machine-model/*  %s/VirtualFile-%s'%(path, node_spec['hostname'], path, path, node_spec['hostname']))
84             
85             link1=self.test_plc.server.GetBootMedium(self.test_plc.auth_root(),
86                                                      node_spec['hostname'], 'node-iso', '')
87             if (link1 == ''):
88                 raise Exception, 'boot.iso not found'
89             
90             file1=open(path+'/VirtualFile-'+node_spec['hostname']+'/boot_file.iso','w')
91             file1.write(base64.b64decode(link1))
92             
93             
94             file1.close()
95             print '========> boot cd created for :',self.node_spec['hostname']
96             self.conffile('boot_file.iso',self.node_spec['hostname'], path) #create 2 conf file for the vmware based
97
98         except Exception, e:
99             print str(e)
100             sys.exit(1)