Esempio n. 1
0
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
Esempio n. 2
0
    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)
Esempio n. 3
0
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()
Esempio n. 4
0
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
Esempio n. 5
0
 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
Esempio n. 6
0
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)
Esempio n. 7
0
 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
Esempio n. 8
0
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
Esempio n. 9
0
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
Esempio n. 10
0
 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()
Esempio n. 11
0
 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()
Esempio n. 12
0
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)