def create_routers(cloudconfig, lab_id, lab_slice, topo, create_sec_group_job_id): try: openstack = Openstack(cloudconfig.detail['openstackAuthURL'], cloudconfig.detail['openstackProject'], cloudconfig.detail['openstackUser'], cloudconfig.detail['openstackPassword']) sec_group_id = queue.fetch_job(create_sec_group_job_id).result routers = topo['routers'] for s in routers: links = _extract_links(s, topo) configurations, password = _extract_configurations( lab_id, lab_slice, s, topo) Router.insert(name=s['name'], status='deploying', x=s['x'], y=s['y'], gid=s['gid'], slice_id=lab_slice.id, image=s['image'], flavor=s['flavor'], links=links, configurations=configurations, password=password) # Actually deployment threads = [] for router in Router.fetchall(slice_id=lab_slice.id): t = CreateRouterThread(openstack, lab_id, router, lab_slice, sec_group_id) t.start() threads.append(t) for t in threads: t.join() except Exception as ex: error_type = 'Create routers error' error_msgs = [error_type + ': ' + str(ex)] lab = Lab.fetchone(id=lab_id) lab.update(status='deployfailed', error_msgs=lab.error_msgs + error_msgs) raise Exception( error_type ) # Raise exception to not execute the next job in the dependency link
def setUp(self): """Create a router and a Subscriber""" self.router = Router(name='myrouter', fingerprint='1234', exit=False) self.subscriber = Subscriber(email='*****@*****.**', router=self.router)
def insert_router_table(session, name, pc_id, hop_cost, neighbour): insert = Router(owned_by=name, destination_pc_id=pc_id, hop_cost=hop_cost, neighbour=neighbour) session.add(insert) session.commit()
def update_allowed_address_pairs(cloudconfig, lab_id, lab_slice, topo): try: openstack = Openstack(cloudconfig.detail['openstackAuthURL'], cloudconfig.detail['openstackProject'], cloudconfig.detail['openstackUser'], cloudconfig.detail['openstackPassword']) mac_regex = '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$' ip_cidr_regex = '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4]' \ '[0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-' \ 'f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-' \ '5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5' \ ']|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}((' \ '(:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0' \ '-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]' \ '{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0' \ '-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d' \ '|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1' \ ',4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d' \ '|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1' \ '\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(\/[0-9]{1,2})*$' for link in topo['links']: address_pairs = [] network = NetworkNode.fetchone(gid=link['network']['gid'], slice_id=lab_slice.id) if link['target']['type'].lower() == 'instance': device = Instance.fetchone(gid=link['target']['gid'], slice_id=lab_slice.id) elif link['target']['type'].lower() == 'router': device = Router.fetchone(gid=link['target']['gid'], slice_id=lab_slice.id) else: continue for raw_address_pair in link.get('allowedAddressPairs', []): mac_address, ip_address, _ = (raw_address_pair + ',,').split( ',', 2) if ip_address.strip() == '': ip_address = mac_address mac_address = '' if (mac_address == '' or re.match( mac_regex, mac_address.strip())) and re.match( ip_cidr_regex, ip_address.strip()): address_pair = {'ip_address': ip_address} if mac_address != '': address_pair['mac_address'] = mac_address address_pairs.append(address_pair) if address_pairs: openstack.update_allowed_address_pairs( network, device.cloud_attrs['id'], address_pairs) except Exception as ex: error_type = 'Update allowed address pairs error' error_msgs = [error_type + ': ' + str(ex)] lab = Lab.fetchone(id=lab_id) lab.update(status='deployfailed', error_msgs=lab.error_msgs + error_msgs) raise Exception( error_type ) # Raise exception to not execute the next job in the dependency link
def parse(self, nodeTree, versionTree, physical_interfaces=[]): self._clean(nodeTree) doc = ElementParser(nodeTree) router = Router() router.name = get_hostname(doc) version_doc = ElementParser(versionTree) router.version = version_doc.first("junos-version").text() router.model = version_doc.first("product-model").text() router.interfaces = InterfaceParser().parse(nodeTree, physical_interfaces) router.bgp_peerings = BgpPeeringParser().parse(nodeTree) return router
def router_generate(index: int, domain: str) -> None: hostname = 'core%d.%s' % (index, domain) ip = '10.0.0.%d' % index mac_address = faker.mac_address(), mgmt_group = 'AFINC' router_properties = { 'ip': ip, 'hostname': hostname, 'mac_address': mac_address, 'mgmt_group': mgmt_group } # noinspection PyTypeChecker router = Router.create_or_update(router_properties)[0] print('\t%s: Upserted' % router.hostname)
def parse(self, nodeTree, router_model=None, physical_interfaces=[]): self._clean(nodeTree) doc = ElementParser(nodeTree) router = Router() router.name = get_hostname(doc) router.version = doc.first("version").text() router.model = router_model router.interfaces = InterfaceParser().parse(nodeTree, physical_interfaces) router.bgp_peerings = BgpPeeringParser().parse(nodeTree) return router
def parse_router(data, chassis_data=None): router_data = data['tailf-ncs:device'] router = Router() name = hostname_clean(router_data['address']) router.name = name router.version = find('config.junos:configuration.version', router_data) if chassis_data: chassis = find('junos-rpc:output.chassis-inventory.chassis', chassis_data, default={}) if chassis: router.model = chassis['description'] router.hardware = parse_chassis(chassis) return router
def delete_routers(cloudconfig, lab_id, lab_slice): try: openstack = Openstack(cloudconfig.detail['openstackAuthURL'], cloudconfig.detail['openstackProject'], cloudconfig.detail['openstackUser'], cloudconfig.detail['openstackPassword']) routers = Router.fetchall(slice_id=lab_slice.id) threads = [] for router in routers: t = DeleteRouterThread(openstack, lab_id, router) t.start() threads.append(t) for t in threads: t.join() except Exception as ex: error_type = 'Delete routers error' error_msgs = [error_type + ': ' + str(ex)] lab = Lab.fetchone(id=lab_id) lab.update(status='destroyfailed', error_msgs=lab.error_msgs + error_msgs) raise Exception( error_type ) # Raise exception to not execute the next job in the dependency link
def setUp(self): """Set up the test database with a dummy router""" self.client = Client() r = Router(fingerprint = '1234', name = 'abc', exit=True) r.save()
parser.add_argument('routername') args = parser.parse_args() testdir = args.testdir poisoned = args.p routername = args.routername links = readlinks(testdir, routername) routerlist = readrouters(testdir) neighbor = [] for link,linkinfo in links.items(): neighbor.append([link,linkinfo.cost]) routerx = Router(routername, neighbor, poisoned) neighborset = [] broadcaster = setupserver(routerlist[routername].host,routerlist[routername].baseport) socketmap = [ routername ] for host,info in routerlist.items(): if host in links: neighborset.append(setupsock(routerlist[routername].host,routerlist[host].host,\ routerlist[routername].baseport+links[host].locallink,\ routerlist[host].baseport+links[host].remotelink)) socketmap.append(host) inputset = [ broadcaster ] inputset.extend(neighborset)