예제 #1
0
    def setUp(self):
        user = create_test_user(permissions=['dcim.view_inventoryitem'])
        self.client = Client()
        self.client.force_login(user)

        site = Site(name='Site 1', slug='site-1')
        site.save()

        manufacturer = Manufacturer(name='Manufacturer 1',
                                    slug='manufacturer-1')
        manufacturer.save()

        devicetype = DeviceType(model='Device Type 1',
                                manufacturer=manufacturer)
        devicetype.save()

        devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
        devicerole.save()

        device = Device(name='Device 1',
                        site=site,
                        device_type=devicetype,
                        device_role=devicerole)
        device.save()

        InventoryItem.objects.bulk_create([
            InventoryItem(device=device, name='Inventory Item 1'),
            InventoryItem(device=device, name='Inventory Item 2'),
            InventoryItem(device=device, name='Inventory Item 3'),
        ])
    def run(self, data, commit):

        # Create the new site
        site = Site(name=data['site_name'],
                    slug=slugify(data['site_name']),
                    status=SiteStatusChoices.STATUS_PLANNED)
        site.save()
        self.log_success(f"Created new site: {site}")

        # Create access switches
        switch_role = DeviceRole.objects.get(name='Access Switch')
        for i in range(1, data['switch_count'] + 1):
            switch = Device(device_type=data['switch_model'],
                            name=f'{site.slug}-switch{i}',
                            site=site,
                            status=DeviceStatusChoices.STATUS_PLANNED,
                            device_role=switch_role)
            switch.save()
            self.log_success(f"Created new switch: {switch}")

        # Generate a CSV table of new devices
        output = ['name,make,model']
        for switch in Device.objects.filter(site=site):
            attrs = [
                switch.name, switch.device_type.manufacturer.name,
                switch.device_type.model
            ]
            output.append(','.join(attrs))

        return '\n'.join(output)
예제 #3
0
    def setUp(self):
        user = create_test_user(permissions=['secrets.view_secret'])
        self.client = Client()
        self.client.force_login(user)

        site = Site(name='Site 1', slug='site-1')
        site.save()

        manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
        manufacturer.save()

        devicetype = DeviceType(manufacturer=manufacturer, model='Device Type 1')
        devicetype.save()

        devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
        devicerole.save()

        device = Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
        device.save()

        secretrole = SecretRole(name='Secret Role 1', slug='secret-role-1')
        secretrole.save()

        Secret.objects.bulk_create([
            Secret(device=device, role=secretrole, name='Secret 1', ciphertext=b'1234567890'),
            Secret(device=device, role=secretrole, name='Secret 2', ciphertext=b'1234567890'),
            Secret(device=device, role=secretrole, name='Secret 3', ciphertext=b'1234567890'),
        ])
예제 #4
0
파일: test_views.py 프로젝트: wuwx/netbox
    def setUp(self):

        self.client = Client()

        site = Site(name='Site 1', slug='site-1')
        site.save()

        manufacturer = Manufacturer(name='Manufacturer 1',
                                    slug='manufacturer-1')
        manufacturer.save()

        devicetype = DeviceType(model='Device Type 1',
                                manufacturer=manufacturer)
        devicetype.save()

        devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
        devicerole.save()

        device = Device(name='Device 1',
                        site=site,
                        device_type=devicetype,
                        device_role=devicerole)
        device.save()

        InventoryItem.objects.bulk_create([
            InventoryItem(device=device, name='Inventory Item 1'),
            InventoryItem(device=device, name='Inventory Item 2'),
            InventoryItem(device=device, name='Inventory Item 3'),
        ])
예제 #5
0
    def setUp(self):

        self.client = Client()

        site = Site(name='Site 1', slug='site-1')
        site.save()

        manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
        manufacturer.save()

        devicetype = DeviceType(manufacturer=manufacturer, model='Device Type 1')
        devicetype.save()

        devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
        devicerole.save()

        device = Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
        device.save()

        secretrole = SecretRole(name='Secret Role 1', slug='secret-role-1')
        secretrole.save()

        Secret.objects.bulk_create([
            Secret(device=device, role=secretrole, name='Secret 1', ciphertext=b'1234567890'),
            Secret(device=device, role=secretrole, name='Secret 2', ciphertext=b'1234567890'),
            Secret(device=device, role=secretrole, name='Secret 3', ciphertext=b'1234567890'),
        ])
예제 #6
0
파일: test_views.py 프로젝트: wuwx/netbox
    def setUp(self):

        self.client = Client()

        site = Site(name='Site 1', slug='site-1')
        site.save()

        manufacturer = Manufacturer(name='Manufacturer 1',
                                    slug='manufacturer-1')
        manufacturer.save()

        devicetype = DeviceType(model='Device Type 1',
                                manufacturer=manufacturer)
        devicetype.save()

        devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
        devicerole.save()

        device1 = Device(name='Device 1',
                         site=site,
                         device_type=devicetype,
                         device_role=devicerole)
        device1.save()
        device2 = Device(name='Device 2',
                         site=site,
                         device_type=devicetype,
                         device_role=devicerole)
        device2.save()

        iface1 = Interface(device=device1,
                           name='Interface 1',
                           form_factor=IFACE_FF_1GE_FIXED)
        iface1.save()
        iface2 = Interface(device=device1,
                           name='Interface 2',
                           form_factor=IFACE_FF_1GE_FIXED)
        iface2.save()
        iface3 = Interface(device=device1,
                           name='Interface 3',
                           form_factor=IFACE_FF_1GE_FIXED)
        iface3.save()
        iface4 = Interface(device=device2,
                           name='Interface 1',
                           form_factor=IFACE_FF_1GE_FIXED)
        iface4.save()
        iface5 = Interface(device=device2,
                           name='Interface 2',
                           form_factor=IFACE_FF_1GE_FIXED)
        iface5.save()
        iface6 = Interface(device=device2,
                           name='Interface 3',
                           form_factor=IFACE_FF_1GE_FIXED)
        iface6.save()

        Cable(termination_a=iface1, termination_b=iface4,
              type=CABLE_TYPE_CAT6).save()
        Cable(termination_a=iface2, termination_b=iface5,
              type=CABLE_TYPE_CAT6).save()
        Cable(termination_a=iface3, termination_b=iface6,
              type=CABLE_TYPE_CAT6).save()
예제 #7
0
    def setUp(self):
        user = create_test_user(permissions=[
            'secrets.view_secret',
            'secrets.add_secret',
        ])

        # Set up a master key
        userkey = UserKey(user=user, public_key=PUBLIC_KEY)
        userkey.save()
        master_key = userkey.get_master_key(PRIVATE_KEY)
        self.session_key = SessionKey(userkey=userkey)
        self.session_key.save(master_key)

        self.client = Client()
        self.client.force_login(user)

        site = Site(name='Site 1', slug='site-1')
        site.save()

        manufacturer = Manufacturer(name='Manufacturer 1',
                                    slug='manufacturer-1')
        manufacturer.save()

        devicetype = DeviceType(manufacturer=manufacturer,
                                model='Device Type 1')
        devicetype.save()

        devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
        devicerole.save()

        device = Device(name='Device 1',
                        site=site,
                        device_type=devicetype,
                        device_role=devicerole)
        device.save()

        secretrole = SecretRole(name='Secret Role 1', slug='secret-role-1')
        secretrole.save()

        Secret.objects.bulk_create([
            Secret(device=device,
                   role=secretrole,
                   name='Secret 1',
                   ciphertext=b'1234567890'),
            Secret(device=device,
                   role=secretrole,
                   name='Secret 2',
                   ciphertext=b'1234567890'),
            Secret(device=device,
                   role=secretrole,
                   name='Secret 3',
                   ciphertext=b'1234567890'),
        ])
예제 #8
0
    def create_patch_panel(self, site, rack, name, ports):
        pp_name = "pp-%s-%s.1" % (site.slug, name)

        try:
            pp = Device.objects.get(name=pp_name)
            self.log_info("Patch panel %s already present, carrying on." % pp)
            return pp
        except Device.DoesNotExist:
            pass

        pp_type = DeviceType.objects.get(manufacturer__name='Telegärtner',
                                         model='Patchpanel')

        pp = Device(device_type=pp_type,
                    device_role=DeviceRole.objects.get(name='Patchpanel'),
                    site=site,
                    status=DeviceStatusChoices.STATUS_PLANNED,
                    name=pp_name,
                    rack=rack,
                    position=rack.u_height,
                    face=DeviceFaceChoices.FACE_FRONT)

        pp.save()
        self.log_success("Created patch panel {}".format(pp))

        # Create front and rear ports
        for n in range(1, int(ports) + 1):
            rear_port = RearPort(device=pp,
                                 name=str(n),
                                 type=PortTypeChoices.TYPE_8P8C,
                                 positions=1)
            rear_port.save()

            front_port = FrontPort(
                device=pp,
                name=str(n),
                type=PortTypeChoices.TYPE_8P8C,
                rear_port=rear_port,
                rear_port_position=1,
            )
            front_port.save()

        return pp
예제 #9
0
    def setUp(self):
        user = create_test_user(permissions=['ipam.view_service'])
        self.client = Client()
        self.client.force_login(user)

        site = Site(name='Site 1', slug='site-1')
        site.save()

        manufacturer = Manufacturer(name='Manufacturer 1',
                                    slug='manufacturer-1')
        manufacturer.save()

        devicetype = DeviceType(manufacturer=manufacturer,
                                model='Device Type 1')
        devicetype.save()

        devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
        devicerole.save()

        device = Device(name='Device 1',
                        site=site,
                        device_type=devicetype,
                        device_role=devicerole)
        device.save()

        Service.objects.bulk_create([
            Service(device=device,
                    name='Service 1',
                    protocol=IP_PROTOCOL_TCP,
                    port=101),
            Service(device=device,
                    name='Service 2',
                    protocol=IP_PROTOCOL_TCP,
                    port=102),
            Service(device=device,
                    name='Service 3',
                    protocol=IP_PROTOCOL_TCP,
                    port=103),
        ])
예제 #10
0
    def create_and_connect_surges(self, site, rack, pp, pole_setup):
        # surge_config will be of format <pole no>:<num surges>[ <pole no>:<num surges> [...]]
        # So first split by spaces to get a single pole config and then iterate of surge at this pole.
        # The RearPort of the 1st surge protector of the 1st pole will be connected to PP port 1 then
        # continuing upwards.
        surge_type = DeviceType.objects.get(manufacturer__name='Ubnt',
                                            model='Surge Protector')

        pp_port = 1
        for pole_config in pole_setup.split():
            pole_no, num_surges = pole_config.split(':')

            for n in range(1, int(num_surges) + 1):
                # Create surge
                surge_name = "sp-%s-mast%s-%s" % (site.slug.lower(), pole_no,
                                                  n)
                surge = Device(
                    device_type=surge_type,
                    device_role=DeviceRole.objects.get(name='Surge Protector'),
                    name=surge_name,
                    status=DeviceStatusChoices.STATUS_PLANNED,
                    site=site)

                surge.save()

                # Link RearPort of SP to next free panel port
                cable = Cable(termination_a=RearPort.objects.get(
                    device=pp, name=str(pp_port)),
                              termination_b=RearPort.objects.get(device=surge,
                                                                 name=str(1)),
                              status=CableStatusChoices.STATUS_PLANNED)

                cable.save()
                self.log_success(
                    "Created surge protector %s and linked it to patch panel port %s."
                    % (surge, pp_port))

                pp_port += 1
예제 #11
0
    def setUp(self):

        self.client = Client()

        site = Site(name='Site 1', slug='site-1')
        site.save()

        manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
        manufacturer.save()

        devicetype = DeviceType(model='Device Type 1', manufacturer=manufacturer)
        devicetype.save()

        devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
        devicerole.save()

        device1 = Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
        device1.save()
        device2 = Device(name='Device 2', site=site, device_type=devicetype, device_role=devicerole)
        device2.save()

        iface1 = Interface(device=device1, name='Interface 1', form_factor=IFACE_FF_1GE_FIXED)
        iface1.save()
        iface2 = Interface(device=device1, name='Interface 2', form_factor=IFACE_FF_1GE_FIXED)
        iface2.save()
        iface3 = Interface(device=device1, name='Interface 3', form_factor=IFACE_FF_1GE_FIXED)
        iface3.save()
        iface4 = Interface(device=device2, name='Interface 1', form_factor=IFACE_FF_1GE_FIXED)
        iface4.save()
        iface5 = Interface(device=device2, name='Interface 2', form_factor=IFACE_FF_1GE_FIXED)
        iface5.save()
        iface6 = Interface(device=device2, name='Interface 3', form_factor=IFACE_FF_1GE_FIXED)
        iface6.save()

        Cable(termination_a=iface1, termination_b=iface4, type=CABLE_TYPE_CAT6).save()
        Cable(termination_a=iface2, termination_b=iface5, type=CABLE_TYPE_CAT6).save()
        Cable(termination_a=iface3, termination_b=iface6, type=CABLE_TYPE_CAT6).save()
예제 #12
0
    def setUp(self):

        self.client = Client()

        site = Site(name='Site 1', slug='site-1')
        site.save()

        manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
        manufacturer.save()

        devicetype = DeviceType(model='Device Type 1', manufacturer=manufacturer)
        devicetype.save()

        devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
        devicerole.save()

        device = Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
        device.save()

        InventoryItem.objects.bulk_create([
            InventoryItem(device=device, name='Inventory Item 1'),
            InventoryItem(device=device, name='Inventory Item 2'),
            InventoryItem(device=device, name='Inventory Item 3'),
        ])
예제 #13
0
    def setUp(self):

        self.client = Client()

        site = Site(name='Site 1', slug='site-1')
        site.save()

        manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
        manufacturer.save()

        devicetype = DeviceType(manufacturer=manufacturer, model='Device Type 1')
        devicetype.save()

        devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
        devicerole.save()

        device = Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
        device.save()

        Service.objects.bulk_create([
            Service(device=device, name='Service 1', protocol=IP_PROTOCOL_TCP, port=101),
            Service(device=device, name='Service 2', protocol=IP_PROTOCOL_TCP, port=102),
            Service(device=device, name='Service 3', protocol=IP_PROTOCOL_TCP, port=103),
        ])
    def run(self, data, commit):
        # Create the device
        device = Device(name=data['business_name'],
                        device_role_id=self.DEVICE_ROLE_ID,
                        device_type_id=data["hardware_choice"],
                        platform_id=self.PLATFORM_ID,
                        site_id=self.SITE_ID)
        device.save()

        interfaces = Interface.objects.filter(device_id=device.id)
        enabled_interfaces = []
        mgmt_intf = interfaces.get(name="b107")
        enabled_interfaces.append(mgmt_intf)
        uplk_intf = interfaces.get(name="ether10")
        enabled_interfaces.append(uplk_intf)
        uplk_intf.mode = "tagged"
        uplk_intf.tagged_vlans.set([self.INET_VLAN, self.MGMT_VLAN])
        uplk_intf.description = "Uplink"
        uplk_intf.save()
        inet_intf = interfaces.get(name="ether1")
        enabled_interfaces.append(inet_intf)
        inet_intf.description = "Internet"
        inet_intf.mode = "access"
        inet_intf.untagged_vlan = self.INET_VLAN
        inet_intf.save()
        mgmt_intf.save()
        for intf in interfaces:
            intf.enabled = False
            intf.save()
        for intf in enabled_interfaces:
            intf.enabled = True
            intf.mtu = 1500
            intf.save()
        available_ip = Prefix.objects.get(
            vlan=self.MGMT_VLAN).get_first_available_ip()
        ip = IPAddress(
            address=available_ip,
            assigned_object_type=ContentType.objects.get_for_model(Interface),
            assigned_object_id=mgmt_intf.id)
        ip.save()
        device.primary_ip4_id = ip.id
        device.primary_ip_id = ip.id
        device.comments = data['comments']
        device.save()

        # ############
        if (not data["skip_zabbix"] and commit):

            # Post to Zabbix API to create host in mikrotik group and ICMP
            # template
            try:
                hostid = self.ZAPI.host.create(
                    host=data["business_name"],
                    interfaces=dict(type=2,
                                    main=1,
                                    useip=1,
                                    ip=available_ip.replace("/24", ""),
                                    port=161,
                                    dns="",
                                    details=dict(
                                        version="1",
                                        bulk="0",
                                        community=self.SNMP_COMMUNITY)),
                    groups=dict(groupid=15),
                    templates=dict(templateid=10186))
                self.log_info("zabbix configured successfully")
            except Exception as e:
                self.log_info("failed to configure zabbix {0}".format(e))

        if (not data["skip_uplink_port"] and commit):
            try:
                agg_switches = Device.objects.filter(
                    site=data["uplink_site"],
                    device_role_id=self.AGG_ROLE_ID,
                    status="active")
                selected_interface = ""
                for agg_switch in agg_switches:
                    interfaces = Interface.objects.filter(
                        device_id=agg_switch.id)
                    for interface in interfaces:
                        if (interface.connection_status is not True
                                and interface.enabled is True
                                and interface.description == ''
                                and interface.type == '1000base-x-sfp'):
                            selected_interface = interface
                            break
                    if selected_interface != "":
                        selected_interface.enabled = True
                        selected_interface.description = device.name
                        selected_interface.mode = "tagged"
                        selected_interface.tagged_vlans.set(
                            [self.INET_VLAN, self.MGMT_VLAN])
                        selected_interface.save()
                        cable = Cable(
                            termination_a=uplk_intf,
                            termination_b=selected_interface,
                        )
                        cable.save()
                        self.log_info(
                            "uplink switch chosen. Port {0} on {1}".format(
                                selected_interface.name, agg_switch.name))
                        break
                if selected_interface == "":
                    self.log_failure("No available aggregate port found. \
                        No aggregate port assigned.")

            except BaseException:
                self.log("failed to document uplink switch")

        self.log_success("Created {0}".format(device.name))
예제 #15
0
    def setup_swtich(self, site, rack, pp, panel_ports, vlan, site_no,
                     asset_tag):
        sw_name = "sw-%s-01.in.ffho.net" % site.slug

        try:
            sw = Device.objects.get(name=sw_name)
            self.log_info("Switch %s already present, carrying on." % sw_name)

            return sw
        except Device.DoesNotExist:
            pass

        sw_type = DeviceType.objects.get(manufacturer__name='Netonix',
                                         model='WS-12-250-AC')

        sw = Device(device_type=sw_type,
                    device_role=DeviceRole.objects.get(name='Switch'),
                    platform=Platform.objects.get(name='Netonix'),
                    name=sw_name,
                    asset_tag=asset_tag,
                    status=DeviceStatusChoices.STATUS_PLANNED,
                    site=site,
                    rack=rack,
                    position=rack.u_height - 2,
                    face=DeviceFaceChoices.FACE_FRONT)

        sw.save()
        self.log_success("Created switch %s" % sw)

        # Link switch ports for panel ports
        for n in range(1, int(panel_ports) + 1):
            cable = Cable(termination_a=Interface.objects.get(device=sw,
                                                              name=str(n)),
                          termination_b=FrontPort.objects.get(device=pp,
                                                              name=str(n)),
                          status=CableStatusChoices.STATUS_PLANNED)
            cable.save()

        # Disable interfaces which aren't connected
        unused_ifaces = [13, 14]
        if panel_ports < 10:
            unused_ifaces.extend(list(range(int(panel_ports + 1), 10)))
        unused_ifaces = [str(x) for x in sorted(unused_ifaces)]
        for n in unused_ifaces:
            iface = Interface.objects.get(device=sw, name=n)
            iface.enabled = False
            iface.save()

        self.log_success("Disabled switch unsued ports %s" %
                         ",".join(unused_ifaces))

        # Set up Mgmt port
        sw_mgmt_port = Interface.objects.get(device=sw, name="10")
        sw_mgmt_port.mode = InterfaceModeChoices.MODE_ACCESS
        sw_mgmt_port.untagged_vlan = vlan
        sw_mgmt_port.description = "Mgmt"
        sw_mgmt_port.save()

        self.log_success("Set mgmt interface 10 to untagged VLAN %s" % vlan)

        # Set po1 tagged-all and bundle ports 11 + 12 into it
        sw_po1 = Interface.objects.get(device=sw, name='po1')
        sw_po1.mode = InterfaceModeChoices.MODE_TAGGED_ALL
        sw_po1.save()

        for n in [11, 12]:
            sw_port = Interface.objects.get(device=sw, name=str(n))
            sw_port.lag = sw_po1
            sw_port.save()

        self.log_success("Linked first %s ports of %s to %s" %
                         (panel_ports, sw, pp))

        # Set up Mgmt vlan interface + IP
        sw_mgmt_iface = Interface(
            device=sw,
            name="vlan%d" % vlan.vid,
            type=InterfaceTypeChoices.TYPE_VIRTUAL,
        )
        sw_mgmt_iface.save()

        sw_mgmt_ip = IPAddress(address="172.30.%d.10/24" % site_no,
                               interface=sw_mgmt_iface)
        sw_mgmt_ip.save()

        sw.primary_ip4 = sw_mgmt_ip
        sw.save()

        self.log_success("Configured %s on interface %s of %s" %
                         (sw_mgmt_ip, sw_mgmt_iface, sw))

        return sw
    def run(self, data, commit):

        # Load the Snipe IT API token from file
        with open("/home/netbox/snipeit_token.json", "r") as f:
            token_data = json.load(f)
        token = token_data['token']

        # HTTP headers for each request to Snipe IT
        headers = {
            "authorization": f"Bearer {token}",
            "accept": "application/json"
        }

        # Get the location from Snipe IT that corresponds to the NetBox site
        r = requests.get(f"{BASE_PATH}/locations",
                         params={"name": data['site'].name},
                         headers=headers)
        snipe_data = r.json()
        if len(snipe_data['rows']) != 1:
            self.log_failure("Site not found in Snipe IT")
            return
        location = snipe_data['rows'][0]

        # Get Snipe IT assets (devices) assigned to the location
        r = requests.get(f"{BASE_PATH}/hardware",
                         params={"location_id": location['id']},
                         headers=headers)
        snipe_devices = r.json()['rows']

        # Create NetBox devices
        for snipe_device in snipe_devices:
            # Check if the device already exists by asset tag
            if not Device.objects.filter(
                    asset_tag=snipe_device['asset_tag']).exists():
                try:
                    # Verify device type exists that matches the Snipe IT manufacturer and model
                    device_type = DeviceType.objects.get(
                        manufacturer__name=snipe_device['manufacturer']
                        ['name'],
                        model=snipe_device['model']['name'])
                except ObjectDoesNotExist:
                    self.log_failure(
                        f"Matching device type for {snipe_device['model']['name']} not found"
                    )
                    return

                try:
                    # Verify device tyrolepe exists that matches the Snipe IT category
                    device_role = DeviceRole.objects.get(
                        name=snipe_device['category']['name'])
                except ObjectDoesNotExist:
                    self.log_failure(
                        f"Matching device role for {snipe_device['category']['name']} not found"
                    )
                    return

                # Create the actual NetBox device in the site with status 'Inventory'
                name = slugify(
                    f"{data['site'].slug}-{snipe_device['category']['name']}-{snipe_device['asset_tag']}"
                )
                device = Device(name=name.lower(),
                                site=data['site'],
                                asset_tag=snipe_device['asset_tag'],
                                serial=snipe_device['serial'],
                                device_type=device_type,
                                device_role=device_role,
                                status=DeviceStatusChoices.STATUS_INVENTORY)
                device.save()
                self.log_success(f"Created device {device.name}")
예제 #17
0
    def setup_bbr(self, site, rack, vlan, site_no, node_id, asset_tag, sw):
        bbr_name = "bbr-%s.in.ffho.net" % site.slug

        try:
            bbr = Device.objects.get(name=bbr_name)
            self.log_info("Backbone router %s already present, carrying on." %
                          bbr_name)

            return bbr
        except Device.DoesNotExist:
            pass

        bbr_type = DeviceType.objects.get(manufacturer__name='PCEngines',
                                          model='APU2c4-19"')

        bbr = Device(
            device_type=bbr_type,
            device_role=DeviceRole.objects.get(name='Backbone router'),
            platform=Platform.objects.get(name='Linux'),
            name=bbr_name,
            asset_tag=asset_tag,
            status=DeviceStatusChoices.STATUS_PLANNED,
            site=site,
            rack=rack,
            position=rack.u_height - 4,
            face=DeviceFaceChoices.FACE_FRONT,
        )

        bbr.save()
        self.log_success("Created backbone router %s" % bbr)

        # Set bond0 mode to tagged-all, bundle enp<n>s0 into it and connect enp<n>s0  to switchport 10 + n
        bbr_bond0 = Interface.objects.get(device=bbr, name="bond0")
        bbr_bond0.mode = InterfaceModeChoices.MODE_TAGGED_ALL
        bbr_bond0.save()

        # Link enp1s0 and enp2s0 to switch port 10 and 11 respectivly
        for n in [1, 2]:
            bbr_port = Interface.objects.get(device=bbr, name="enp%ds0" % n)
            sw_port = Interface.objects.get(device=sw, name=str(10 + n))
            cable = Cable(termination_a=sw_port,
                          termination_b=bbr_port,
                          status=CableStatusChoices.STATUS_PLANNED)
            cable.save()

            bbr_port.lag = bbr_bond0
            bbr_port.save()

        self.log_success("Linked %s to %s" % (bbr, sw))

        # Disable enp3s0
        enp3s0 = Interface.objects.get(device=bbr, name="enp3s0")
        enp3s0.enabled = False
        enp3s0.save()

        # Set up Mgmt vlan interface + IP
        bbr_mgmt_iface = Interface(
            device=bbr,
            name="vlan%d" % vlan.vid,
            type=InterfaceTypeChoices.TYPE_VIRTUAL,
        )
        bbr_mgmt_iface.save()

        bbr_mgmt_ip = IPAddress(address="172.30.%d.1/24" % site_no,
                                interface=bbr_mgmt_iface)
        bbr_mgmt_ip.save()

        self.log_success("Configured %s on interface %s of %s" %
                         (bbr_mgmt_ip, bbr_mgmt_iface, bbr))

        # Set up loopback IPs
        bbr_lo_iface = Interface.objects.get(device=bbr, name="lo")
        ipv4 = IPAddress(address="10.132.255.%s/32" % node_id,
                         interface=bbr_lo_iface)
        ipv4.save()

        ipv6 = IPAddress(address="2a03:2260:2342:ffff::%s/128" % node_id,
                         interface=bbr_lo_iface)
        ipv6.save()

        bbr.primary_ip4 = ipv4
        bbr.primary_ip6 = ipv6
        bbr.save()
        self.log_success("Configured %s + %s on lo interface of %s" %
                         (ipv4, ipv6, bbr))
예제 #18
0
    def setUp(self):
        user = create_test_user(permissions=['dcim.view_cable'])
        self.client = Client()
        self.client.force_login(user)

        site = Site(name='Site 1', slug='site-1')
        site.save()

        manufacturer = Manufacturer(name='Manufacturer 1',
                                    slug='manufacturer-1')
        manufacturer.save()

        devicetype = DeviceType(model='Device Type 1',
                                manufacturer=manufacturer)
        devicetype.save()

        devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
        devicerole.save()

        device1 = Device(name='Device 1',
                         site=site,
                         device_type=devicetype,
                         device_role=devicerole)
        device1.save()
        device2 = Device(name='Device 2',
                         site=site,
                         device_type=devicetype,
                         device_role=devicerole)
        device2.save()

        iface1 = Interface(device=device1,
                           name='Interface 1',
                           type=IFACE_TYPE_1GE_FIXED)
        iface1.save()
        iface2 = Interface(device=device1,
                           name='Interface 2',
                           type=IFACE_TYPE_1GE_FIXED)
        iface2.save()
        iface3 = Interface(device=device1,
                           name='Interface 3',
                           type=IFACE_TYPE_1GE_FIXED)
        iface3.save()
        iface4 = Interface(device=device2,
                           name='Interface 1',
                           type=IFACE_TYPE_1GE_FIXED)
        iface4.save()
        iface5 = Interface(device=device2,
                           name='Interface 2',
                           type=IFACE_TYPE_1GE_FIXED)
        iface5.save()
        iface6 = Interface(device=device2,
                           name='Interface 3',
                           type=IFACE_TYPE_1GE_FIXED)
        iface6.save()

        Cable(termination_a=iface1, termination_b=iface4,
              type=CABLE_TYPE_CAT6).save()
        Cable(termination_a=iface2, termination_b=iface5,
              type=CABLE_TYPE_CAT6).save()
        Cable(termination_a=iface3, termination_b=iface6,
              type=CABLE_TYPE_CAT6).save()
예제 #19
0
    def run(self, data, commit):

        services_list = [
            {
                'id_s': 's2',
                'port': 22,
                'name': 'SSHv2',
                'protocol': 'tcp'
            },
            {
                'id_s': 's1',
                'port': 22,
                'name': 'SSHv1',
                'protocol': 'tcp'
            },
            {
                'id_s': 't',
                'port': 23,
                'name': 'Telnet',
                'protocol': 'tcp'
            },
            {
                'id_s': 'y',
                'port': 443,
                'name': 'YANG',
                'protocol': 'tcp'
            },
            {
                'id_s': 'r',
                'port': 443,
                'name': 'REST',
                'protocol': 'tcp'
            },
        ]

        dev_role = DeviceRole.objects.get(slug='access-switch')
        device_new = Device(
            name=data['dev_name'],
            device_type=data['dev_model'],
            site=data['site'],
            rack=data['rack'],
            position=data['position'],
            device_role=dev_role,
            serial=data['dev_serial'],
        )
        device_new.save()

        device_new.custom_field_data['fMonitoring'] = data['monitoring']
        device_new.custom_field_data['fBackup'] = data['backup']
        device_new.save()

        output = []
        for iServ in data['services']:
            output.append(iServ)
            print(output)
            res = [row for row in services_list if row['id_s'] == iServ]
            s1 = Service(
                device=device_new,
                name=res[0]['name'],
                ports=[res[0]['port']],
                protocol=res[0]['protocol'],
            )
            s1.save()

        dev_mgmt_int = Interface(
            device=device_new,
            name=data['mgmt_int_name'],
            type='virtual',
        )
        dev_mgmt_int.save()

        ipa_type = ContentType.objects.get(app_label='dcim', model='interface')
        ipa = IPAddress(
            address=data['mgmt_int_ip'],
            assigned_object_id=dev_mgmt_int.id,
            assigned_object_type=ipa_type,
        )
        ipa.save()

        device_new.primary_ip4 = ipa

        device_new.save()

        self.log_success(f"Created new Juniper device: {device_new}")
        return ''.join(output)