3 from multiprocessing import Process
4 from multiprocessing import Queue
9 import functest.utils.functest_logger as ft_logger
10 from pexpect import pxssh
15 """Defines all the def function of SFC."""
18 """Initialization of variables."""
19 self.logger = ft_logger.Logger("sfc_fun").getLogger()
24 self.keystone_hostname = 'keystone_ip'
25 self.neutron_hostname = 'neutron_ip'
26 self.nova_hostname = 'nova_ip'
27 self.glance_hostname = 'glance_ip'
28 self.onos_hostname = 'onos_ip'
29 # Network variables #######
30 self.netname = "test_nw"
31 self.admin_state_up = True
34 # #########################
35 # SubNet variables#########
37 self.cidr = "20.20.20.0/24"
38 self.subnetname = "test_nw_subnets"
39 # ###############################
48 self.security_groups = []
49 self.port_security_enabled = False
50 # ###############################
51 # VM creation variable
52 self.container_format = "bare"
53 self.disk_format = "qcow2"
54 self.imagename = "TestSfcVm"
55 self.createImage = "/home/root1/devstack/files/images/\
56 firewall_block_image.img"
59 self.imageRef = "test"
65 self.routername = "router1"
67 # #####################################
69 self.port_pair_ingress = 0
70 self.port_pair_egress = 0
71 self.port_pair_name = "PP"
72 self.port_pair_id = []
73 # ####################################
75 self.port_group_name = "PG"
77 # ####################################
79 self.source_ip_prefix = "20.20.20.0/24"
80 self.destination_ip_prefix = "20.20.20.0/24"
81 self.logical_source_port = 0
83 self.ethertype = "IPv4"
84 # #####################################
85 self.flow_class_if = 0
86 # #####################################
87 # Port Chain variables
90 # #####################################
91 # Port Chain variables
93 # #####################################
95 self.vm_public_ip = []
96 self.vm_public_id = []
104 """Get the keystone token value from Openstack ."""
105 url = 'http://' + self.keystone_hostname + \
106 ':5000/' + self.osver + '/tokens'
107 data = '{"auth": {"tenantName": "admin", "passwordCredentials":\
108 { "username": "admin", "password": "console"}}}'
109 headers = {"Accept": "application/json"}
110 response = requests.post(url, headers=headers, data=data)
111 if (response.status_code == 200):
112 json1_data = json.loads(response.content)
113 self.logger.debug(response.status_code)
114 self.logger.debug(response.content)
115 self.logger.debug(json1_data)
116 self.token_id = json1_data['access']['token']['id']
117 self.tenant_id = json1_data['access']['token']['tenant']['id']
118 return(response.status_code)
120 return(response.status_code)
122 def createNetworks(self):
123 """Creation of networks."""
125 if self.netname != '':
126 Dicdata['name'] = self.netname
127 if self.admin_state_up != '':
128 Dicdata['admin_state_up'] = self.admin_state_up
129 Dicdata = {'network': Dicdata}
130 data = json.dumps(Dicdata, indent=4)
131 url = 'http://' + self.neutron_hostname + \
132 ':9696/' + self.osver + '/networks'
133 headers = {"Accept": "application/json",
134 "X-Auth-Token": self.token_id}
135 response = requests.post(url, headers=headers, data=data)
136 if (response.status_code == 201):
137 self.logger.debug(response.status_code)
138 self.logger.debug(response.content)
140 json1_data = json.loads(response.content)
141 self.logger.debug(json1_data)
142 self.net_id = json1_data['network']['id']
143 return(response.status_code)
145 return(response.status_code)
147 def createSubnets(self):
148 """Creation of SubNets."""
151 Dicdata['network_id'] = self.net_id
152 if self.ip_version != '':
153 Dicdata['ip_version'] = self.ip_version
155 Dicdata['cidr'] = self.cidr
156 if self.subnetname != '':
157 Dicdata['name'] = self.subnetname
159 Dicdata = {'subnet': Dicdata}
160 data = json.dumps(Dicdata, indent=4)
161 url = 'http://' + self.neutron_hostname + \
162 ':9696/' + self.osver + '/subnets'
163 headers = {"Accept": "application/json",
164 "X-Auth-Token": self.token_id}
165 response = requests.post(url, headers=headers, data=data)
167 if (response.status_code == 201):
168 self.logger.debug(response.status_code)
169 self.logger.debug(response.content)
170 json1_data = json.loads(response.content)
171 self.logger.debug(json1_data)
172 self.subnetId = json1_data['subnet']['id']
173 return(response.status_code)
175 return(response.status_code)
177 def createPorts(self):
178 """Creation of Ports."""
179 for x in range(self.i, self.numTerms):
181 if self.net_id != '':
182 Dicdata['network_id'] = self.net_id
184 Dicdata['name'] = "port" + str(x)
185 if self.admin_state_up != '':
186 Dicdata['admin_state_up'] = self.admin_state_up
187 if self.security_groups != '':
188 Dicdata['security_groups'] = self.security_groups
189 # if self.port_security_enabled != '':
190 # Dicdata['port_security_enabled'] = self.port_security_enabled
192 Dicdata = {'port': Dicdata}
193 data = json.dumps(Dicdata, indent=4)
194 url = 'http://' + self.neutron_hostname + \
195 ':9696/' + self.osver + '/ports'
196 headers = {"Accept": "application/json",
197 "X-Auth-Token": self.token_id}
198 response = requests.post(url, headers=headers, data=data)
200 if (response.status_code == 201):
201 self.logger.debug(response.status_code)
202 self.logger.debug(response.content)
204 json1_data = json.loads(response.content)
205 self.logger.debug(json1_data)
206 self.port_num.append(json1_data['port']['id'])
207 self.port_ip.append(json1_data['port']['fixed_ips'][0]
210 return(response.status_code)
211 return(response.status_code)
214 """Creation of Instance, using firewall image."""
215 url = 'http://' + self.glance_hostname + \
216 ':9292/v2/images?name=TestSfcVm'
217 headers = {"Accept": "application/json", "Content-Type": "application/\
218 octet-stream", "X-Auth-Token": self.token_id}
219 response = requests.get(url, headers=headers)
220 if (response.status_code == 200):
221 self.logger.debug(response.status_code)
222 self.logger.debug(response.content)
223 self.logger.info("\tFireWall Image is available")
224 json1_data = json.loads(response.content)
225 self.logger.debug(json1_data)
226 self.image_id = json1_data['images'][0]['id']
228 return(response.status_code)
230 url = 'http://' + self.nova_hostname + \
231 ':8774/v2.1/' + self.tenant_id + '/flavors?name=m1.tiny'
232 headers = {"Accept": "application/json", "Content-Type":
233 "application/json", "X-Auth-Token": self.token_id}
234 response = requests.get(url, headers=headers)
236 if (response.status_code == 200):
237 self.logger.debug(response.status_code)
238 self.logger.debug(response.content)
239 self.logger.info("\tFlavor is available")
240 json1_data = json.loads(response.content)
241 self.logger.debug(json1_data)
242 self.flavorRef = json1_data['flavors'][0]['id']
244 return(response.status_code)
246 for y in range(0, 3):
249 org_nw_port.append({'port': self.port_num[y]})
250 if self.vm_name != '':
251 Dicdata['name'] = "vm" + str(y)
252 if self.imageRef != '':
253 Dicdata['imageRef'] = self.image_id
254 if self.flavorRef != '':
255 Dicdata['flavorRef'] = self.flavorRef
256 if self.max_count != '':
257 Dicdata['max_count'] = self.max_count
258 if self.min_count != '':
259 Dicdata['min_count'] = self.min_count
260 if self.org_nw_port != '':
261 Dicdata['networks'] = org_nw_port
262 Dicdata = {'server': Dicdata}
263 data = json.dumps(Dicdata, indent=4)
265 url = ('http://' + self.nova_hostname + ':8774/v2.1/' +
266 self.tenant_id + '/servers')
267 headers = {"Accept": "application/json", "Content-Type":
268 "application/json", "X-Auth-Token": self.token_id}
269 response = requests.post(url, headers=headers, data=data)
270 if (response.status_code == 202):
271 self.logger.debug(response.status_code)
272 self.logger.debug(response.content)
273 self.logger.info("\tCreation of VM is successfull")
275 json1_data = json.loads(response.content)
276 self.logger.debug(json1_data)
277 self.vm_id = json1_data['server']['id']
278 self.vm.append(json1_data['server']['id'])
280 return(response.status_code)
282 return(response.status_code)
284 def checkVmState(self):
285 """Checking the Status of the Instance."""
287 for y in range(0, 3):
289 self.nova_hostname + \
290 ':8774/v2.1/servers/detail?name=vm' + str(y)
291 headers = {"Accept": "application/json", "X-Auth-Token":
293 response = requests.get(url, headers=headers)
294 if (response.status_code == 200):
295 self.logger.debug(response.status_code)
296 self.logger.debug(response.content)
297 json1_data = json.loads(response.content)
298 self.logger.debug(json1_data)
299 self.vm_active = json1_data['servers'][0]['status']
300 if (self.vm_active == "ACTIVE"):
301 print ("\t\t\t\t\t\tVM" + str(y) + " is Active : " +
304 print ("\t\t\t\t\t\tVM" + str(y) + " is NOT Active : " +
307 return(response.status_code)
308 return(response.status_code)
311 def createPortPair(self):
312 """Creation of Port Pair."""
313 for p in range(1, 2):
315 if self.port_pair_ingress != '':
316 Dicdata['ingress'] = self.port_num[p]
317 if self.port_pair_egress != '':
319 Dicdata['egress'] = self.port_num[egress]
320 if self.port_pair_name != '':
321 Dicdata['name'] = "PP" + str(p)
323 Dicdata = {'port_pair': Dicdata}
324 data = json.dumps(Dicdata, indent=4)
326 url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
328 headers = {"Accept": "application/json", "X-Auth-Token":
330 response = requests.post(url, headers=headers, data=data)
331 if (response.status_code == 201):
332 print ("\t\t\t\tCreation of Port Pair PP" + str(p) +
335 return(response.status_code)
337 return(response.status_code)
339 def getPortPair(self):
340 """Query the Portpair id value."""
341 for p in range(0, 1):
342 url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
343 '/sfc/port_pairs?name=PP1'
344 headers = {"Accept": "application/json", "X-Auth-Token":
346 response = requests.get(url, headers=headers)
348 if (response.status_code == 200):
349 self.logger.debug(response.status_code)
350 self.logger.debug(response.content)
351 json1_data = json.loads(response.content)
352 self.logger.debug(json1_data)
353 self.port_pair_id.append(json1_data['port_pairs'][0]['id'])
355 return(response.status_code)
356 return(response.status_code)
358 def createPortGroup(self):
359 """Creation of PortGroup."""
360 for p in range(0, 1):
363 port_pair_list.append(self.port_pair_id[p])
364 if self.port_group_name != '':
365 Dicdata['name'] = "PG" + str(p)
366 if self.port_pair_id != '':
367 Dicdata['port_pairs'] = port_pair_list
369 Dicdata = {'port_pair_group': Dicdata}
370 data = json.dumps(Dicdata, indent=4)
371 url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
372 '/sfc/port_pair_groups'
373 headers = {"Accept": "application/json", "X-Auth-Token":
375 response = requests.post(url, headers=headers, data=data)
376 if (response.status_code == 201):
377 print ("\t\t\t\tCreation of Port Group PG" + str(p) +
380 return(response.status_code)
382 return(response.status_code)
384 def getPortGroup(self):
385 """Query the PortGroup id."""
386 for p in range(0, 1):
387 url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
388 '/sfc/port_pair_groups?name=PG' + str(p)
389 headers = {"Accept": "application/json", "X-Auth-Token":
391 response = requests.get(url, headers=headers)
393 if (response.status_code == 200):
394 self.logger.debug(response.status_code)
395 self.logger.debug(response.content)
396 json1_data = json.loads(response.content)
397 self.port_grp_id.append(json1_data['port_pair_groups']
400 return(response.status_code)
401 return(response.status_code)
403 def createFlowClassifier(self):
404 """Creation of Flow Classifier."""
406 if self.source_ip_prefix != '':
407 Dicdata['source_ip_prefix'] = self.source_ip_prefix
408 if self.destination_ip_prefix != '':
409 Dicdata['destination_ip_prefix'] = self.destination_ip_prefix
410 if self.logical_source_port != '':
411 Dicdata['logical_source_port'] = self.port_num[0]
412 if self.fcname != '':
413 Dicdata['name'] = "FC1"
414 if self.ethertype != '':
415 Dicdata['ethertype'] = self.ethertype
417 Dicdata = {'flow_classifier': Dicdata}
418 data = json.dumps(Dicdata, indent=4)
419 url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
420 '/sfc/flow_classifiers'
421 headers = {"Accept": "application/json",
422 "X-Auth-Token": self.token_id}
423 response = requests.post(url, headers=headers, data=data)
424 if (response.status_code == 201):
425 json1_data = json.loads(response.content)
426 self.flow_class_if = json1_data['flow_classifier']['id']
427 self.logger.info("\tCreation of Flow Classifier is successful")
428 return(response.status_code)
430 return(response.status_code)
432 def createPortChain(self):
433 """Creation of PortChain."""
436 flow_class_list.append(self.flow_class_if)
437 port_pair_groups_list = []
438 port_pair_groups_list.append(self.port_grp_id[0])
440 if flow_class_list != '':
441 Dicdata['flow_classifiers'] = flow_class_list
442 if self.pcname != '':
443 Dicdata['name'] = "PC1"
444 if port_pair_groups_list != '':
445 Dicdata['port_pair_groups'] = port_pair_groups_list
447 Dicdata = {'port_chain': Dicdata}
448 data = json.dumps(Dicdata, indent=4)
449 url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
451 headers = {"Accept": "application/json",
452 "Content-Type": "application/json",
453 "X-Auth-Token": self.token_id}
454 response = requests.post(url, headers=headers, data=data)
455 if (response.status_code == 201):
456 self.logger.info("\tCreation of PORT CHAIN is successful")
457 json1_data = json.loads(response.content)
458 self.PC_id = json1_data['port_chain']['id']
459 return(response.status_code)
461 return(response.status_code)
463 def checkFlowAdded(self):
464 """Check whether the Flows are downloaded successfully."""
466 response = requests.get('http://' + self.onos_hostname +
467 ':8181/onos/v1/flows',
468 auth=("karaf", "karaf"))
469 if (response.status_code == 200):
470 self.logger.info("\tFlow is successfully Queries")
471 json1_data = json.loads(response.content)
472 self.flowadd = json1_data['flows'][0]['state']
474 if (self.flowadd == "ADDED"):
475 self.logger.info("\tFlow is successfully added to OVS")
476 return(response.status_code)
480 return(response.status_code)
481 ####################################################################
483 def createRouter(self):
484 """Creation of Router."""
486 if self.routername != '':
487 Dicdata['name'] = "router1"
488 if self.admin_state_up != '':
489 Dicdata['admin_state_up'] = self.admin_state_up
491 Dicdata = {'router': Dicdata}
492 data = json.dumps(Dicdata, indent=4)
493 url = 'http://' + self.neutron_hostname + ':9696/' + \
494 self.osver + '/routers.json'
495 headers = {"Accept": "application/json",
496 "X-Auth-Token": self.token_id}
497 response = requests.post(url, headers=headers, data=data)
498 if (response.status_code == 201):
499 self.logger.debug(response.status_code)
500 self.logger.debug(response.content)
501 self.logger.info("\tCreation of Router is successfull")
502 json1_data = json.loads(response.content)
503 self.logger.debug(json1_data)
504 self.router_id = json1_data['router']['id']
505 return(response.status_code)
507 return(response.status_code)
509 def attachInterface(self):
510 """Attachment of instance ports to the Router."""
511 url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
512 '/networks?name=admin_floating_net'
513 headers = {"Accept": "application/json",
514 "X-Auth-Token": self.token_id}
515 response = requests.get(url, headers=headers)
516 if (response.status_code == 200):
517 self.logger.debug(response.status_code)
518 self.logger.debug(response.content)
519 json1_data = json.loads(response.content)
520 self.logger.debug(json1_data)
521 self.net_name = json1_data['networks'][0]['name']
522 if (self.net_name == "admin_floating_net"):
523 self.pub_net_id = json1_data['networks'][0]['id']
525 return(response.status_code)
526 ############################################################
528 self.logger.info("\tAttachment of Instance interface to Router")
530 if self.subnetId != '':
531 Dicdata['subnet_id'] = self.subnetId
533 data = json.dumps(Dicdata, indent=4)
534 url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
535 '/routers/' + self.router_id + '/add_router_interface'
536 headers = {"Accept": "application/json",
537 "X-Auth-Token": self.token_id}
538 response = requests.put(url, headers=headers, data=data)
539 if (response.status_code == 200):
540 self.logger.debug(response.status_code)
541 self.logger.debug(response.content)
542 self.logger.info("\tInterface attached successfull")
544 return(response.status_code)
545 ############################################################
546 self.logger.info("\tAttachment of Gateway to Router")
549 if self.pub_net_id != 0:
550 Dicdata1['network_id'] = self.pub_net_id
552 Dicdata1 = {'external_gateway_info': Dicdata1}
553 Dicdata1 = {'router': Dicdata1}
554 data = json.dumps(Dicdata1, indent=4)
555 url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
556 '/routers/' + self.router_id
557 headers = {"Accept": "application/json",
558 "X-Auth-Token": self.token_id}
559 response = requests.put(url, headers=headers, data=data)
560 if (response.status_code == 200):
561 self.logger.debug(response.status_code)
562 self.logger.debug(response.content)
563 self.logger.info("\tGateway Interface attached successfull")
564 return(response.status_code)
566 return(response.status_code)
568 def addFloatingIp(self):
569 """Attachment of Floating Ip to the Router."""
570 for ip_num in range(0, 2):
572 Dicdata['pool'] = "admin_floating_net"
574 data = json.dumps(Dicdata, indent=4)
575 url = 'http://' + self.nova_hostname + ':8774/v2.1/os-floating-ips'
576 headers = {"Accept": "application/json",
577 "X-Auth-Token": self.token_id}
578 response = requests.post(url, headers=headers, data=data)
579 if (response.status_code == 200):
580 self.logger.debug(response.status_code)
581 self.logger.debug(response.content)
582 self.logger.info("\tFloating ip created successfully")
583 json1_data = json.loads(response.content)
584 self.logger.debug(json1_data)
585 self.vm_public_ip.append(json1_data['floating_ip']['ip'])
586 self.vm_public_id.append(json1_data['floating_ip']['id'])
588 self.logger.error("\tFloating ip NOT created successfully")
591 if self.address != '':
592 Dicdata1['address'] = self.vm_public_ip[ip_num]
594 Dicdata1 = {'addFloatingIp': Dicdata1}
595 data = json.dumps(Dicdata1, indent=4)
596 url = 'http://' + self.nova_hostname + ':8774/v2.1/servers/' + \
597 self.vm[ip_num] + '/action'
598 headers = {"Accept": "application/json",
599 "X-Auth-Token": self.token_id}
600 response = requests.post(url, headers=headers, data=data)
601 if(response.status_code == 202):
602 self.logger.debug(response.status_code)
603 self.logger.debug(response.content)
604 self.logger.info("\tPublic Ip successfully added to VM")
606 return(response.status_code)
607 return(response.status_code)
610 """Login to the VM to check NSH packets are received."""
616 hostname = self.vm_public_ip[0]
618 password = "cubswin:)"
619 s.login(hostname, username, password)
620 s.sendline("ping -c 5 " + str(self.port_ip[2]))
621 s.prompt() # match the prompt
623 ping_re = re.search("transmitted.*received", s.before).group()
624 x = re.split('\s+', ping_re)
626 self.logger.info("\tPing is Successfull")
628 self.logger.info("\tPing is NOT Successfull")
632 hostname = self.vm_public_ip[1]
634 password = "cubswin:)"
635 s.login(hostname, username, password)
636 s.sendline('sudo ./firewall')
638 output_pack = s.before
640 if(output_pack.find("nshc") != -1):
641 self.logger.info("\tThe packet has reached VM2 Instance")
644 self.logger.info("\tPacket not received in Instance")
647 def ping(ip, timeout=300):
650 self.logger.debug("Pinging %s. Waiting for response..." % ip)
651 response = os.system("ping -c 1 " + ip + " >/dev/null 2>&1")
653 self.logger.info("Ping " + ip + " detected!")
657 self.logger.info("Ping " + ip + " timeout reached.")
661 result0 = ping(self.vm_public_ip[0])
662 result1 = ping(self.vm_public_ip[1])
663 if result0 == 0 and result1 == 0:
666 p1 = Process(target=vm1, args=(queue1, ))
668 p2 = Process(target=vm0)
671 return (queue1.get())
673 print("Thread didnt run")
675 """##################################################################"""
676 """ ######################## Stats Functions ################# #####"""
678 def portChainDeviceMap(self):
679 """Check the PC Device Stats in the ONOS."""
680 response = requests.get('http://' + self.onos_hostname +
681 ':8181/onos/vtn/portChainDeviceMap/' +
682 self.PC_id, auth=("karaf", "karaf"))
683 if (response.status_code == 200):
684 self.logger.info("\tPortChainDeviceMap is successfully Queries")
685 return(response.status_code)
687 return(response.status_code)
689 def portChainSfMap(self):
690 """Check the PC SF Map Stats in the ONOS."""
691 response = requests.get('http://' + self.onos_hostname +
692 ':8181/onos/vtn/portChainSfMap/' +
693 self.PC_id, auth=("karaf", "karaf"))
694 if (response.status_code == 200):
695 self.logger.info("\tportChainSfMap is successfully Queries")
696 return(response.status_code)
698 return(response.status_code)
700 """###################################################################"""
702 def deletePortChain(self):
703 """Deletion of PortChain."""
704 url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
705 '/sfc/port_chains/' + self.PC_id
706 headers = {"Accept": "application/json", "Content-Type":
707 "application/json", "X-Auth-Token": self.token_id}
708 response = requests.delete(url, headers=headers)
709 if (response.status_code == 200):
710 self.logger.debug(response.status_code)
711 self.logger.debug(response.content)
712 return(response.status_code)
714 return(response.status_code)
716 def deleteFlowClassifier(self):
717 """Deletion of Flow Classifier."""
718 url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
719 '/sfc/flow_classifiers/' + self.flow_class_if
720 headers = {"Accept": "application/json",
721 "X-Auth-Token": self.token_id}
722 response = requests.delete(url, headers=headers)
723 if (response.status_code == 200):
724 self.logger.debug(response.status_code)
725 self.logger.debug(response.content)
726 return(response.status_code)
728 return(response.status_code)
730 def deletePortGroup(self):
731 """Deletion of PortGroup."""
732 for p in range(0, 1):
733 url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
734 '/sfc/port_pair_groups/' + self.port_grp_id[p]
735 headers = {"Accept": "application/json", "X-Auth-Token":
737 response = requests.delete(url, headers=headers)
738 if (response.status_code == 204):
739 self.logger.debug(response.status_code)
740 self.logger.debug(response.content)
741 print ("\n\t\tPort " + self.port_grp_id[p] + "Deleted")
743 return(response.status_code)
744 return(response.status_code)
746 def deletePortPair(self):
747 """Deletion of Portpair."""
748 for p in range(1, 2):
749 url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
750 '/sfc/port_pairs/' + self.port_pair_id[0]
751 headers = {"Accept": "application/json",
752 "X-Auth-Token": self.token_id}
753 response = requests.delete(url, headers=headers)
754 if (response.status_code == 204):
755 self.logger.debug(response.status_code)
756 self.logger.debug(response.content)
758 return(response.status_code)
759 return(response.status_code)
763 print ("\n\t\tDeleting the VMs")
764 for y in range(0, 3):
765 url = 'http://' + self.nova_hostname + \
766 ':8774/v2.1/servers/' + self.vm[y]
767 headers = {"Accept": "application/json",
768 "X-Auth-Token": self.token_id}
769 response = requests.delete(url, headers=headers)
770 if (response.status_code == 204):
771 self.logger.debug(response.status_code)
772 self.logger.debug(response.content)
773 print ("\n\t\tVM" + str(y) + " is Deleted : ")
776 return(response.status_code)
777 print ("\n\t\tDeletion of Ports")
778 for x in range(self.i, self.numTerms):
779 url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
780 '/ports/' + self.port_num[x]
781 headers = {"Accept": "application/json", "X-Auth-Token":
783 response = requests.delete(url, headers=headers)
785 if (response.status_code == 204):
786 self.logger.debug(response.status_code)
787 self.logger.debug(response.content)
788 print ("\n\t\tPort" + str(x) + " Deleted")
790 return(response.status_code)
791 print ("\n\t\tDeleting Router")
794 Dicdata['external_gateway_info'] = {}
795 Dicdata = {'router': Dicdata}
796 data = json.dumps(Dicdata, indent=4)
797 url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
798 '/routers/' + self.router_id
799 headers = {"Accept": "application/json",
800 "X-Auth-Token": self.token_id}
801 response = requests.put(url, headers=headers, data=data)
802 if (response.status_code == 200):
803 self.logger.debug(response.status_code)
804 self.logger.debug(response.content)
806 if self.subnetId != '':
807 Dicdata1['subnet_id'] = self.subnetId
808 data = json.dumps(Dicdata1, indent=4)
809 url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
810 '/routers/' + self.router_id + \
811 '/remove_router_interface.json'
812 headers = {"Accept": "application/json",
813 "X-Auth-Token": self.token_id}
814 response = requests.put(url, headers=headers, data=data)
815 if (response.status_code == 200):
816 url = ('http://' + self.neutron_hostname + ':9696/' +
817 self.osver + '/routers/' + self.router_id)
818 headers = {"Accept": "application/json", "X-Auth-Token":
820 response = requests.delete(url, headers=headers)
821 if (response.status_code == 204):
822 self.logger.debug(response.status_code)
823 self.logger.debug(response.content)
824 print ("\n\t\tDeletion of Router is successfull")
826 return(response.status_code)
828 return(response.status_code)
830 return(response.status_code)
832 print ("\n\t\tDeletion of Network")
833 url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
834 '/networks/' + self.net_id
835 headers = {"Accept": "application/json",
836 "X-Auth-Token": self.token_id}
837 response = requests.delete(url, headers=headers)
838 if (response.status_code == 204):
839 self.logger.debug(response.status_code)
840 self.logger.debug(response.content)
841 print ("\n\t\tNetwork deleted Successfully")
843 return(response.status_code)
845 print ("\n\t\tDeletion of Floating ip")
846 for ip_num in range(0, 2):
847 url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
848 '/floatingips/' + self.vm_public_id[ip_num]
849 headers = {"Accept": "application/json", "X-Auth-Token":
851 response = requests.delete(url, headers=headers)
852 if (response.status_code == 204):
853 self.logger.debug(response.status_code)
854 self.logger.debug(response.content)
856 return(response.status_code)
857 return(response.status_code)