Merge from trunk
[plcapi.git] / trunk / 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)
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):
40         auth = self.test_site.anyuser_auth (role)
41         liste_hosts=[]
42         #for l in liste_nodes_spec :
43         #    liste_hosts.append(l['hostname'])
44         try:
45             for slicespec in TestConfig.slices_specs :
46                 print '========>Creating slice at :'+self.timset+' : ',slicespec
47                 slice_id=self.test_plc.server.AddSlice(auth,slicespec['slice_spec'])
48                 for sliceuser in slicespec['slice_users']:
49                     self.test_plc.server.AddPersonToSlice(auth, sliceuser['email'], slice_id)##affecting person to the slice
50                 for slicenode in slicespec['slice_nodes']:
51                     liste_hosts.append(slicenode['hostname'])
52                 self.test_plc.server.AddSliceToNodes(auth, slice_id, liste_hosts)##add slice to the spec nodes
53             print 'fin creation slices'
54         except Exception, e:
55             print str(e)
56             sys.exit(1)
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     def create_boot_cd(self,node_spec,path):
80         try:
81             os.system('mkdir  -p  %s/VirtualFile-%s  &&  cp  %s/My-Virtual-Machine-model/*  %s/VirtualFile-%s'
82                       %(path, node_spec['hostname'], path, path, node_spec['hostname']))
83             link1=self.test_plc.server.GetBootMedium(self.test_plc.auth_root(),
84                                                      node_spec['hostname'], 'node-iso', '')
85             if (link1 == ''):
86                 raise Exception, 'boot.iso not found'
87             file1=open(path+'/VirtualFile-'+node_spec['hostname']+'/boot_file.iso','w')
88             file1.write(base64.b64decode(link1))
89             file1.close()
90             print '========> boot cd created for :',self.node_spec['hostname']
91             self.conffile('boot_file.iso',self.node_spec['hostname'], path) #create 2 conf file for the vmware based
92         except Exception, e:
93             print str(e)
94             sys.exit(1)