def listimage(server): #images list data.server_header(server,200) temp = [] print "!!!!!!!!!",data.im for keys in data.im: d={} d["id"]=keys d["name"]=data.im[keys][1] temp.append(d) m={} m["images"]=temp server.wfile.write(create.json_out(m)) pass
def query(server,attributes): data.server_header(server,attributes) try: vmid = int(attributes) #print "Details of virtual machine with id",vmid v_name = data.vmdetails[vmid][0] machine_id = data.vmdetails[vmid][2] mtype = data.vmdetails[vmid][3] #print "{vmid:",vmid,", name: ",v_name,"instance_type: ",machine_id,"pmid: ",mtype '''server.wfile.write('{ \n' ) server.wfile.write(' vmid : %d\n ' % int(vmid)) server.wfile.write(' name :%s \n' % str(v_name)) server.wfile.write(' instance_type: %d \n' % int(mtype)) server.wfile.write(' pmid:%d \n }' % int(machine_id)) ''' server.wfile.write(create.json_out({"vmid":vmid, "name":v_name, "instance_type": mtype, "pmid": machine_id})) except Exception,e: print str(e) server.wfile.write(create.json_out({"status":0}))
def destroy(server,attributes): data.server_header(server,attributes) try: vmid = int(attributes[0]) print "Trying to delete virtual machine with id",vmid v_name = data.vmdetails[vmid][0] machine_id = data.vmdetails[vmid][2] vmtype=data.vmdetails[vmid][3] remote_machine = data.pm[machine_id] remote_machine_add = remote_machine[0] path = 'remote+ssh://'+remote_machine_add+'/system' print "Remote ssh to virtual machine location",path conn = libvirt.open(path) try: r = conn.lookupByName(v_name) except: print "The said virtual machine does not exist on any physical machine." if r.isActive(): r.destroy() r.undefine() print "vm_type",vmtype print "heyaa",data.final_types[vmtype-1] #data.final_types[vmtype-1][2]=data.final_types[vmtype-1][2]*1024/100000; print "byee",data.final_types[vmtype-1] req=data.final_types[vmtype-1] print data.pm[machine_id] print "req",req data.pm[machine_id][1]+=req[1] data.pm[machine_id][2]+=req[2] data.pm[machine_id][3]+=req[3] print data.pm[machine_id] del data.vmdetails[vmid] print "Virtual machine deleted and domain undefined." server.wfile.write(create.json_out({"status":1})) except: server.wfile.write(create.json_out({"status":0}))
def checkurl(server,url,typefile): host_name = url if '?' in url: host_name, arguments = url.split('?') components = host_name.split('/') if 'attach' in components: #if 'detach' in components: if 'create' in components: final_argument_list = [] arg_split = arguments.split('&') if 'volume' in components: for i in xrange(0,2): final_argument_list.append((arg_split[i].split('='))[1]) print final_argument_list data.server_header(server,final_argument_list) global VOLUME_LIST args=final_argument_list volume_name = str(args[0]) volume_size = args[1] actual_size = str(int(float(volume_size)*(1024**3))) #os.system('sudo rbd create %s --size %s'%(str(volume_name),str(actual_size))) try: os.system('sudo rbd create ' + volume_name + ' --size ' + volume_size +' -k /etc/ceph/ceph.client.admin.keyring') #rbdInstance.create(ioctx,str(volume_name),actual_size) os.system('sudo modprobe rbd') os.system('sudo rbd map ' + volume_name + ' --pool rbd --name client.admin -k /etc/ceph/ceph.client.admin.keyring') #os.system('sudo mkfs.ext4 -m0 /dev/rbd/rbd/' + volume_name) #os.system('sudo rbd map %s --pool %s --name client.admin'%(str(volume_name),str(POOL_NAME))); global VOLUME_LIST volume_id=len(VOLUME_LIST) VOLUME_LIST[int(volume_id)]=volume_name print VOLUME_LIST server.wfile.write(json_out({"volumeid":volume_id+1})) except: server.wfile.write(json_out({"volumeid":'0'})) else: for i in xrange(0,3): final_argument_list.append((arg_split[i].split('='))[1]) print final_argument_list create.create(server,final_argument_list) #return jsonify(volumeid=volume_id) #else: # create.create(server,final_argument_list) if 'destroy' in components: final_argument_list = [] arg_split = arguments.split('=') if 'volume' in components: final_argument_list.append(arg_split[1]) global VOLUME_LIST args=final_argument_list volume_id = int(args[0])-1 if volume_id in VOLUME_LIST: volume_name=str(VOLUME_LIST[int(volume_id)]) else: print "here\n" try: os.system('sudo rbd unmap /dev/rbd/%s/%s'%(POOL_NAME,volume_name)) os.system("sudo rbd rm %s"%(volume_name)) server.wfile.write(json_out({"status":'1'})) except: server.wfile.write(json_out({"status":'0'})) #rbdInstance.remove(ioctx,volume_name) else: final_argument_list.append(arg_split[1]) delete.destroy(server,final_argument_list) pass if 'types' in components: data.server_header(server,200) try: f = typefile fopen = open(f) server.wfile.write(create.json_out(json.load(fopen))) except Exception,e: print str(e) server.wfile.write(create.json_out({"status":0})) if 'query' in components: if 'volume' in components: print 'volume' else: print "entered!!" final_argument_list = int(arguments.split('=')[1]) query(server,final_argument_list) if 'list' in components: listimage(server)
def checkurl(server,url,typefile): host_name = url if '?' in url: host_name, arguments = url.split('?') components = host_name.split('/') if 'attach' in components: global VOLUME_LIST final_argument_list = [] arg_split = arguments.split('=') final_argument_list.append(arg_split[1]) args=final_argument_list vid=int(args[0]) volid=int(args[1])-1 machid=data.vmdetails[vid][2] m_addr=data.pm[machid][0] path = 'remote+ssh://'+m_addr+'/system' vm_na=data.vmdetails[vid][0] if int(VOLUME_LIST[volid][2])==0: #that volume is not already attached to something try: connect = libvirt.open(path) dom=connect.lookupByName(vm_na) f=open("/etc/ceph/ceph.conf",'r') l=f.readlines() l1=f.split("\n") host=l1[2].split('=')[1] f.close() xml="<disk type='network' device='disk'> \ <source protocol='rbd' name='rbd/"+VOLUME_LIST[volid][0]+"'> \ <host name="+str(host)+" port='6789'/> \ </source> \ <target dev='hdb' bus='virtio'/> \ </disk>" dom.attachDevice(xml) server.wfile.write(json_out({"status":1})) VOLUME_LIST[volid][2]=1 VOLUME_LIST[volid][3]=int(vid) except: server.wfile.write(json_out({"status":0})) else: server.wfile.write(json_out({"Storage Already attached to some machine so! status":0})) if 'detach' in components: global VOLUME_LIST final_argument_list = [] arg_split = arguments.split('=') final_argument_list.append(arg_split[1]) args=final_argument_list #vid=int(args[0]) volid=int(args[0])-1 if volid in VOLUME_LIST: if VOLUME_LIST[volid][2]==1: vid=VOLUME_LIST[volid][3] machid=data.vmdetails[vid][2] m_addr=data.pm[machid][0] path = 'remote+ssh://'+m_addr+'/system' vm_na=data.vmdetails[volid][0] try: connect = libvirt.open(path) dom=connect.lookupByName(vm_na) f=open("/etc/ceph/ceph.conf",'r') l=f.readlines() l1=f.split("\n") host=l1[2].split('=')[1] f.close() xml="<disk type='network' device='disk'> \ <source protocol='rbd' name='rbd/"+VOLUME_LIST[volid][0]+"'> \ <host name="+str(host)+" port='6789'/> \ </source> \ <target dev='hdb' bus='virtio'/> \ </disk>" dom.detachDevice(xml) server.wfile.write(json_out({"status":1})) VOLUME_LIST[vid][2]=0 VOLUME_LIST[vid][3]=int(vid) except: server.wfile.write(json_out({"status":0})) else: server.wfile.write(json_out({"status":0})) else: server.wfile.write(json_out({"status":0})) if 'create' in components: final_argument_list = [] arg_split = arguments.split('&') if 'volume' in components: for i in xrange(0,2): final_argument_list.append((arg_split[i].split('='))[1]) print final_argument_list data.server_header(server,final_argument_list) global VOLUME_LIST args=final_argument_list volume_name = str(args[0]) volume_size = args[1] actual_size = str(int(float(volume_size)*(1024**3))) #as size was mentioned in GB's so conversion into bytes #os.system('sudo rbd create %s --size %s'%(str(volume_name),str(actual_size))) try: global MID rbdInstance.create(ioctx,volume_name,int(actual_size)) os.system('sudo rbd map %s --pool %s --name client.admin'%(volume_name,str(POOL_NAME))); #os.system('sudo rbd create ' + volume_name + ' --size ' + volume_size +' -k /etc/ceph/ceph.client.admin.keyring') #rbdInstance.create(ioctx,str(volume_name),actual_size) #os.system('sudo modprobe rbd') #os.system('sudo rbd map ' + volume_name + ' --pool rbd --name client.admin -k /etc/ceph/ceph.client.admin.keyring') #os.system('sudo mkfs.ext4 -m0 /dev/rbd/rbd/' + volume_name) #os.system('sudo rbd map %s --pool %s --name client.admin'%(str(volume_name),str(POOL_NAME))); global VOLUME_LIST MID=MID+1 volume_id=MID VOLUME_LIST[int(volume_id)]=[volume_name,volume_size,0,0] print "list is",VOLUME_LIST server.wfile.write(json_out({"volumeid":volume_id+1})) except: server.wfile.write(json_out({"volumeid":'0'})) else: for i in xrange(0,3): final_argument_list.append((arg_split[i].split('='))[1]) print final_argument_list create.create(server,final_argument_list) #return jsonify(volumeid=volume_id) #else: # create.create(server,final_argument_list) if 'destroy' in components: final_argument_list = [] arg_split = arguments.split('=') if 'volume' in components: final_argument_list.append(arg_split[1]) global VOLUME_LIST args=final_argument_list volume_id = int(args[0])-1 if volume_id in VOLUME_LIST: volume_name=str(VOLUME_LIST[int(volume_id)][0]) else: server.wfile.write(json_out({"status":'0'})) try: os.system('sudo rbd unmap /dev/rbd/%s/%s'%(POOL_NAME,volume_name)) rbdInstance.remove(ioctx,volume_name) #os.system("sudo rbd rm %s"%(volume_name)) server.wfile.write(json_out({"status":'1'})) del VOLUME_LIST[volume_id] except: server.wfile.write(json_out({"status":'0'})) #rbdInstance.remove(ioctx,volume_name) else: final_argument_list.append(arg_split[1]) delete.destroy(server,final_argument_list) pass if 'types' in components: data.server_header(server,200) try: f = typefile fopen = open(f) server.wfile.write(create.json_out(json.load(fopen))) except Exception,e: print str(e) server.wfile.write(create.json_out({"status":0}))
def create(server,arguments): data.server_header(server,arguments) if(1): vm_name = str(arguments[0]) # The name of VM vm_type = int(arguments[1]) # The Type(tid) of VM image_type = int(arguments[2]) # The ID of VM type_properties=[] type_properties = data.final_types[vm_type-1] ## from types file, requirements of Virtual Machine print "dfg" ,type_properties if "_64" in data.im[image_type][1]: r=64 else: r=32 m,useid = get_machine(type_properties,r) # Get the physical machine to host the VM if useid == 0: print "NO MACHINES AVAILABLE FOR THE TASK" return print "Machine id",useid,"selected" machine_addr = m[0] images_list = data.im[image_type] #dictionary location_user = images_list[0] filename = images_list[1] location_image = images_list[2] #Find the location of image print "HRRAY!!anfdjnfv",m[0]," ",m[0].split('@')[0] if not os.path.isfile('./'+filename): subprocess.call(["scp",':'.join([location_user,location_image]),"."]) try: subprocess.call(["scp","./"+filename,':'.join([machine_addr,"/home/"+m[0].split('@')[0]+'/Desktop'])]) except: print "cannot copy" path = 'remote+ssh://'+m[0]+'/system' print "Remote ssh to machine location ---- ",path try: conn = lbv.open(path) except: print "Could Not Open Connection\n" return system_info = conn.getCapabilities() #get PM capabilities node_info = conn.getInfo() print "HERE I AM",node_info[1],node_info[2] emulator_path = system_info.split("emulator>") emulator_path = emulator_path[1].split("<")[0] #location of xen/qemu emulator1 = system_info.split("<domain type=") emulator1 = emulator1[1].split(">")[0] #emulator present xen/qemu arch_type = system_info.split("<arch>") arch_type = arch_type[1].split("<")[0] data.type_p[useid] = [emulator_path ,emulator1, arch_type] #machine id as key--- stores physical machine arch details # print emulator_path ,emulator1, arch_type arch = data.type_p[useid] hyper_type = conn.getType().lower() print "Type of Connection --- ",hyper_type ## check whether Xen or Qemu print "again",type_properties print "final once",data.final_types #type_properties[2] = (type_properties[2]*test_number)/1024 print "last again",type_properties print "final again",data.final_types '''if not os.path.isfile('~/'+images_list[1]): # p = subprocess.Popen(["ssh",location_user]) print machine_addr,location_image #subprocess.call(["scp",':'.join([location_user,location_image]),'/var/lib/libvirt/images/']) subprocess.call(["scp",images_list[0]+':'+images_list[2],'']) #print "scp",':'.join([location_user,location_image]),':'.join([machine_addr,'/var/lib/libvirt/images/'+images_list[1][0]]) # p.kill() ''' #xml = create_xml(vm_name, type_properties,images_list[0],'/var/lib/libvirt/images/',hyper_type,image_type,arch) ## type_properties has tid,cpu,ram,disk xml = create_xml(vm_name, type_properties,images_list[0],"/home/"+m[0].split('@')[0]+'/Desktop/'+filename,hyper_type,image_type,arch) ## type_properties has tid,cpu,ram,disk # print xml connect_xml = conn.defineXML(xml) try: connect_xml.create() print "Task Done!" vmachine_id = data.getvmid(useid) #Get Virtual Machine unique ID -- useid is machineid! data.vmdetails[vmachine_id] = [vm_name, type_properties, useid,vm_type] #store VM vs Phy machine details.. print "vm ne kya liya",data.vmdetails[vmachine_id] # print "Here are details",fileHandling.machine_v_details,vmachine_id server.wfile.write(json_out({"vmid":vmachine_id})) data.pm[iterate][1] -= type_properties[3] data.pm[iterate][2] -= type_properties[2] data.pm[iterate][3] -= type_properties[1] except Exception,e: print str(e) server.wfile.write(json_out({"vmid":0}))
def checkurl(server, url, typefile): host_name = url if "?" in url: host_name, arguments = url.split("?") components = host_name.split("/") # if 'attach' in components: # if 'detach' in components: if "create" in components: final_argument_list = [] arg_split = arguments.split("&") if "volume" in components: for i in xrange(0, 2): final_argument_list.append((arg_split[i].split("="))[1]) print final_argument_list data.server_header(server, final_argument_list) global VOLUME_LIST args = final_argument_list volume_name = str(args[0]) volume_size = args[1] actual_size = str(int(float(volume_size) * (1024 ** 3))) # os.system('sudo rbd create %s --size %s'%(str(volume_name),str(actual_size))) try: global MID rbdInstance.create(ioctx, volume_name, int(volume_size)) os.system("sudo rbd map %s --pool %s --name client.admin" % (volume_name, str(POOL_NAME))) # os.system('sudo rbd create ' + volume_name + ' --size ' + volume_size +' -k /etc/ceph/ceph.client.admin.keyring') # rbdInstance.create(ioctx,str(volume_name),actual_size) # os.system('sudo modprobe rbd') # os.system('sudo rbd map ' + volume_name + ' --pool rbd --name client.admin -k /etc/ceph/ceph.client.admin.keyring') # os.system('sudo mkfs.ext4 -m0 /dev/rbd/rbd/' + volume_name) # os.system('sudo rbd map %s --pool %s --name client.admin'%(str(volume_name),str(POOL_NAME))); global VOLUME_LIST MID = MID + 1 volume_id = MID VOLUME_LIST[int(volume_id)] = [volume_name, volume_size, 0, 0] print "list is", VOLUME_LIST server.wfile.write(json_out({"volumeid": volume_id + 1})) except: server.wfile.write(json_out({"volumeid": "0"})) else: for i in xrange(0, 3): final_argument_list.append((arg_split[i].split("="))[1]) print final_argument_list create.create(server, final_argument_list) # return jsonify(volumeid=volume_id) # else: # create.create(server,final_argument_list) if "destroy" in components: final_argument_list = [] arg_split = arguments.split("=") if "volume" in components: final_argument_list.append(arg_split[1]) global VOLUME_LIST args = final_argument_list volume_id = int(args[0]) - 1 if volume_id in VOLUME_LIST: volume_name = str(VOLUME_LIST[int(volume_id)][0]) else: print "here\n" try: os.system("sudo rbd unmap /dev/rbd/%s/%s" % (POOL_NAME, volume_name)) rbdInstance.remove(ioctx, volume_name) # os.system("sudo rbd rm %s"%(volume_name)) server.wfile.write(json_out({"status": "1"})) del VOLUME_LIST[volume_id] except: server.wfile.write(json_out({"status": "0"})) # rbdInstance.remove(ioctx,volume_name) else: final_argument_list.append(arg_split[1]) delete.destroy(server, final_argument_list) pass if "types" in components: data.server_header(server, 200) try: f = typefile fopen = open(f) server.wfile.write(create.json_out(json.load(fopen))) except Exception, e: print str(e) server.wfile.write(create.json_out({"status": 0}))