def migrateVM(request): print "Inside the migrate VM API" env_ip = request.GET.get('env_ip') print env_ip cursor = connections['default'].cursor() sql = "SELECT * FROM vnf_env where env_ip='" + str(env_ip) + "'" print 'sql:' + sql cursor.execute(sql) results = namedtuplefetchall(cursor) for row in results: env_ip = str(row.env_ip) user = str(row.user) tenant = str(row.tenant) password = str(row.password) #ip = properties.openstack_IP #user = properties.openstack_user #tenant = properties.openstack_tenant #password = properties.openstack_password auth_token = generalfunctions.funcCreateAuthToken(env_ip, user, tenant, password) print auth_token server_id = request.GET.get('server_id') print 'server_id'+str(server_id) # List all Tenants headers = {'Content-type': 'application/json', 'Accept': 'application/json', 'X-Auth-Token': auth_token} response = requests.get('http://' + env_ip + ':35357/v2.0/tenants', headers=headers) tenant_response = response.json() tenant_details = tenant_response["tenants"] tenant_id = '' for tenant in tenant_details: if tenant["name"] == 'demo': tenant_id = tenant["id"] host = request.GET.get('host') print 'host'+str(host) headers = {'Content-type': 'application/json', 'Accept': 'application/json', 'X-Auth-Token': auth_token} #host = 'Compute1' payload = { "os-migrateLive": { "host": host, "block_migration": True, "disk_over_commit": False} } response = requests.post('http://'+ env_ip +':8774/v2.1/'+ tenant_id + '/servers/' + server_id + '/action' ,data=json.dumps(payload),headers=headers) status = response.status_code print status #response = response.json() if status ==202: print 'Live Migration Success...' return JsonResponse({"status":"success"}) else: print 'Live Migration Failure... Status Code:'+status return JsonResponse({"status":"failure"})
def CreateGlanceImage(request): uploadFromFile = request.POST.get('uploadFromFile') print uploadFromFile ip = properties.openstack_IP user = properties.openstack_user tenant = properties.openstack_tenant password = properties.openstack_password auth_token = generalfunctions.funcCreateAuthToken(ip, user, tenant, password) print "auth token:" + auth_token if uploadFromFile == 'true': name = request.POST.get('name') imageFormat = request.POST.get('imageFormat') containerFormat = request.POST.get('containerFormat') print name path = handle_uploaded_file_image(request.FILES['imageFile']) headers = {'Content-type': 'application/json', 'Accept': 'application/json', 'X-Auth-Token': auth_token} data = {'name': str(name), 'visibility':'public', 'disk_format': imageFormat, 'container_format': containerFormat} print data print 'http://' + ip + ':9292/v2/images' response = requests.post('http://' + ip + ':9292/v2/images', data=json.dumps(data), headers=headers) print response.status_code print response print '****************************************************************' response=response.json() image_file = response["file"] # upload Image Data headers = {'Content-type': 'application/octet-stream', 'X-Auth-Token': auth_token} data = open(path, 'rb').read() response = requests.put('http://' + ip + ':9292' + image_file, data=data, headers=headers) print response.status_code print response if response.status_code == 204: messages.error(request, 'Image created successfully') return HttpResponseRedirect('/Images/') else: messages.error(request, 'Some problem occurred when creating the image') return HttpResponseRedirect('/Images/') else: imageUrl = request.POST.get('imageUrl') imageFormat = request.POST.get('imageFormat') containerFormat = request.POST.get('containerFormat') print imageUrl name = request.POST.get('name') print name headers = {'Content-type': 'application/json', 'Accept': 'application/json', 'X-Auth-Token': auth_token, 'x-glance-api-copy-from':imageUrl, 'x-image-meta-name': name, 'x-image-meta-disk_format':imageFormat, 'x-image-meta-container_format':containerFormat} response = requests.post('http://' + ip + ':9292/v1/images', headers=headers) print response.status_code print response.json() if response.status_code == 201: messages.error(request, 'Image created successfully') return HttpResponseRedirect('/Images/') else: messages.error(request, 'Some problem occurred when creating the image') return HttpResponseRedirect('/Images/')
def listInstances(request): print "Inside the listInstances API" env_ip = request.GET.get('env_ip') print env_ip cursor = connections['default'].cursor() sql = "SELECT * FROM vnf_env where env_ip='" + str(env_ip)+"'" print 'sql:' + sql cursor.execute(sql) results = namedtuplefetchall(cursor) for row in results: env_ip = str(row.env_ip) user = str(row.user) tenant = str(row.tenant) password = str(row.password) #ip = properties.openstack_IP #user = properties.openstack_user #tenant = properties.openstack_tenant #password = properties.openstack_password auth_token = generalfunctions.funcCreateAuthToken(env_ip, user, tenant, password) print auth_token # List all Tenants headers = {'Content-type': 'application/json','Accept':'application/json','X-Auth-Token': auth_token} response = requests.get('http://'+ env_ip +':35357/v2.0/tenants' , headers=headers) tenant_response = response.json() tenant_details = tenant_response["tenants"] print str(tenant_details) tenant_id = '' for tenant in tenant_details: if tenant["name"] == 'demo': tenant_id = tenant["id"] # List all stack #headers = {'Content-type': 'application/json','Accept':'application/json','X-Auth-Token': auth_token} #response = requests.get('http://'+ ip +':8004/v1/' + tenant_id + '/stacks' , headers=headers) #stack_response = response.json() #print stack_response # List all servers headers = {'Content-type': 'application/json','Accept':'application/json','X-Auth-Token': auth_token} response = requests.get('http://'+ env_ip +':8774/v2/' + tenant_id + '/servers' , headers=headers) server_response = response.json() print server_response return JsonResponse(server_response)
def ListGlanceImages(request): ip = properties.openstack_IP user = properties.openstack_user tenant = properties.openstack_tenant password = properties.openstack_password auth_token = generalfunctions.funcCreateAuthToken(ip, user, tenant, password) print "auth token:" + auth_token headers = {'Content-type': 'application/json', 'Accept': 'application/json', 'X-Auth-Token': auth_token} response = requests.get('http://' + ip + ':9292/v2/images', headers=headers) return JsonResponse(response.json())
def TerminateVNF(request): id = request.GET.get('id') ip = properties.openstack_IP user = properties.openstack_user tenant = properties.openstack_tenant password = properties.openstack_password auth_token = generalfunctions.funcCreateAuthToken(ip, user, tenant, password) print "auth token:" + auth_token headers = {'Content-type': 'application/json', 'Accept': 'application/json', 'X-Auth-Token': auth_token} response = requests.delete('http://' + ip + ':8888/v1.0/vnfs/'+str(id), headers=headers) print response.status_code if response.status_code == 204: return JsonResponse({"status": "success", "content": "VNF terminated successfully"}) else: return JsonResponse({"status": "failed", "content": "Problem occurred when terminating the VNF"})
def GetHost(request): server_id = request.GET.get('server_id') env_ip = request.GET.get('env_ip') cursor = connections['default'].cursor() sql = "SELECT * FROM vnf_env where env_ip='"+env_ip+"'" print 'sql:' + sql cursor.execute(sql) results = namedtuplefetchall(cursor) for row in results: env_ip = str(row.env_ip) user = str(row.user) tenant = str(row.tenant) password = str(row.password) auth_token = generalfunctions.funcCreateAuthToken(env_ip, user, tenant, password) print "auth token:" + auth_token # List all Tenants headers = {'Content-type': 'application/json', 'Accept': 'application/json', 'X-Auth-Token': auth_token} response = requests.get('http://' + env_ip + ':35357/v2.0/tenants', headers=headers) tenant_response = response.json() tenant_details = tenant_response["tenants"] print str(tenant_details) tenant_id = '' for tenant in tenant_details: if tenant["name"] == 'demo': tenant_id = tenant["id"] headers = {'Content-type': 'application/json', 'Accept': 'application/json', 'X-Auth-Token': auth_token} url = 'http://' + env_ip + ':8774/v2/' + tenant_id + '/servers/' + server_id print url response = requests.get(url, headers=headers) response = response.json() print response host = response["server"]["OS-EXT-SRV-ATTR:host"] print 'host' + str(host) return JsonResponse({"host": host})
def DeployVnfdTemplate(request): # Creation of VNF Image using template ID vnfd_template_id = request.GET.get('vnfCatalogId') vnfd_name = request.GET.get('vndfname') ip = properties.openstack_IP user = properties.openstack_user tenant = properties.openstack_tenant password = properties.openstack_password auth_token = generalfunctions.funcCreateAuthToken(ip, user, tenant, password) print "auth token:" + auth_token headers = {'Content-type': 'application/json', 'Accept': 'application/json', 'X-Auth-Token': auth_token} vnf_image_payload = { "auth": { "tenantName": "admin", "passwordCredentials": { "username": "******", "password": "******" } }, "vnf": { "vnfd_id": vnfd_template_id, "name": vnfd_name } } response = requests.post('http://' + ip + ':8888/v1.0/vnfs', data=json.dumps(vnf_image_payload), headers=headers) vnf_image_response = response.json() print "List create VNF response:" + str(vnf_image_response) print response.status_code print response if response.status_code == 201: return JsonResponse({"status":"success"}) else: return JsonResponse({"status": "failed"})
def CreateVnfdTemplate(request): jsonrequest = json.loads(request.body) vnfdname = jsonrequest["vndfname"] vnfdcontent = jsonrequest["vnfdcontent"] print vnfdname print vnfdcontent yaml_string = ''; for line in vnfdcontent.splitlines(): print line line = line.rstrip('\n') yaml_string = yaml_string + line + '\\r\\n'; # data = f.read().replace('\n','') print 'YAML_String:' + yaml_string ip = properties.openstack_IP user = properties.openstack_user tenant = properties.openstack_tenant password = properties.openstack_password auth_token = generalfunctions.funcCreateAuthToken(ip, user, tenant, password) print "auth token:" + auth_token ###Creation the VNFD template headers = {'Content-type': 'application/json', 'Accept': 'application/json', 'X-Auth-Token': auth_token} payload = { "auth": { "tenantName": "admin", "passwordCredentials": { "username": "******", "password": "******" } }, "vnfd": { "service_types": [ { "service_type": "vnfd" } ], "mgmt_driver": "noop", "infra_driver": "heat", "attributes": { "vnfd": vnfdcontent }, "name": vnfdname } } print '*********************************************************' print json.dumps(payload) print '*********************************************************' print payload response = requests.post('http://' + ip + ':8888/v1.0/vnfds', data=json.dumps(payload), headers=headers) if response.status_code == 201: vnfd_create_response = response.json() vnfd_template_id = vnfd_create_response["vnfd"]["id"] print "vnfd_template_id:" + str(vnfd_template_id) print "vnfd_create_response:" + str(vnfd_create_response) return JsonResponse({"status": "success", 'content': "VNF catalog created successfully"}) else: return JsonResponse({"status": "failed", 'content': "Problem occurred when creating VNF catalog"})