def test_reservedaddress(): s1 = Site( name='tsite1', description='test site1' ) s1.full_clean() s1.save() nwd = Networked( site=s1, hostname='test' ) nwd.full_clean() nwd.save() ab1 = AddressBlock( site=s1, subnet=StrToIp( '0.0.0.0' ), prefix=24 ) ab1.full_clean() ab1.save() ab2 = AddressBlock( site=s1, subnet=StrToIp( '1.0.0.0' ), prefix=31 ) ab2.full_clean() ab2.save() ra = ReservedAddress() with pytest.raises( ValidationError ): ra.full_clean() ra = ReservedAddress( reason='testing' ) with pytest.raises( ValidationError ): ra.full_clean() ra = ReservedAddress( address_block=ab1 ) with pytest.raises( ValidationError ): ra.full_clean() ra = ReservedAddress( address_block=ab1, offset=1 ) with pytest.raises( ValidationError ): ra.full_clean() ra = ReservedAddress( address_block=ab1, offset=1, reason='testing' ) ra.full_clean() ra.save() ba = BaseAddress( address_block=ab1, offset=1 ) with pytest.raises( ValidationError ): ba.full_clean() ba = BaseAddress( address_block=ab1, offset=2 ) ba.full_clean() ba.save() ra = ReservedAddress( address_block=ab1, offset=2, reason='testing' ) with pytest.raises( ValidationError ): ra.full_clean() ra = BaseAddress.objects.get( address_block=ab1, offset=1 ) assert ra.type == 'ReservedAddress' assert ra.ip_address == '0.0.0.1' ba = BaseAddress.objects.get( address_block=ab1, offset=1 ) assert ba.type == 'ReservedAddress' assert ba.ip_address == '0.0.0.1' ba = BaseAddress.objects.get( address_block=ab1, offset=2 ) assert ba.type == 'Unknown' assert ba.ip_address == '0.0.0.2'
def test_dynamicaddress(): s1 = Site( name='tsite1', description='test site1' ) s1.full_clean() s1.save() nwd = Networked( site=s1, hostname='test' ) nwd.full_clean() nwd.save() ab1 = AddressBlock( site=s1, subnet=StrToIp( '0.0.0.0' ), prefix=24 ) ab1.full_clean() ab1.save() ab2 = AddressBlock( site=s1, subnet=StrToIp( '1.0.0.0' ), prefix=31 ) ab2.full_clean() ab2.save() da = DynamicAddress() with pytest.raises( ValidationError ): da.full_clean() da = DynamicAddress( address_block=ab1 ) with pytest.raises( ValidationError ): da.full_clean() da = DynamicAddress( address_block=ab1, offset=1 ) # TODO: test with PXE set da.full_clean() da.save() ba = BaseAddress( address_block=ab1, offset=1 ) with pytest.raises( ValidationError ): ba.full_clean() ba = BaseAddress( address_block=ab1, offset=2 ) ba.full_clean() ba.save() da = DynamicAddress( address_block=ab1, offset=2 ) with pytest.raises( ValidationError ): da.full_clean() da = DynamicAddress.objects.get( address_block=ab1, offset=1 ) assert da.type == 'DynamicAddress' assert da.ip_address == '0.0.0.1' ba = BaseAddress.objects.get( address_block=ab1, offset=1 ) assert ba.type == 'DynamicAddress' assert ba.ip_address == '0.0.0.1' ba = BaseAddress.objects.get( address_block=ab1, offset=2 ) assert ba.type == 'Unknown' assert ba.ip_address == '0.0.0.2'
def test_reservedaddress(): s1 = Site(name='tsite1', description='test site1') s1.full_clean() s1.save() nwd = Networked(site=s1, hostname='test') nwd.full_clean() nwd.save() ab1 = AddressBlock(site=s1, subnet=StrToIp('0.0.0.0'), prefix=24, name='test1') ab1.full_clean() ab1.save() ab2 = AddressBlock(site=s1, subnet=StrToIp('1.0.0.0'), prefix=31, name='test2') ab2.full_clean() ab2.save() ra = ReservedAddress() with pytest.raises(ValidationError): ra.full_clean() ra = ReservedAddress(reason='testing') with pytest.raises(ValidationError): ra.full_clean() ra = ReservedAddress(address_block=ab1) with pytest.raises(ValidationError): ra.full_clean() ra = ReservedAddress(address_block=ab1, offset=1) with pytest.raises(ValidationError): ra.full_clean() ra = ReservedAddress(address_block=ab1, offset=1, reason='testing') ra.full_clean() ra.save() assert ra.as_dict == { 'address': '0.0.0.1', 'netmask': '255.255.255.0', 'prefix': 24, 'subnet': '0.0.0.0', 'gateway': None, 'auto': True, 'mtu': 1500 } ba = BaseAddress(address_block=ab1, offset=1) with pytest.raises(ValidationError): ba.full_clean() ba = BaseAddress(address_block=ab1, offset=2) ba.full_clean() ba.save() assert ba.as_dict == { 'address': '0.0.0.2', 'netmask': '255.255.255.0', 'prefix': 24, 'subnet': '0.0.0.0', 'gateway': None, 'auto': True, 'mtu': 1500 } ra = ReservedAddress(address_block=ab1, offset=2, reason='testing') with pytest.raises(ValidationError): ra.full_clean() ra = BaseAddress.objects.get(address_block=ab1, offset=1) assert ra.type == 'ReservedAddress' assert ra.ip_address == '0.0.0.1' assert ra.as_dict == { 'address': '0.0.0.1', 'netmask': '255.255.255.0', 'prefix': 24, 'subnet': '0.0.0.0', 'gateway': None, 'auto': True, 'mtu': 1500 } ba = BaseAddress.objects.get(address_block=ab1, offset=1) assert ba.type == 'ReservedAddress' assert ba.ip_address == '0.0.0.1' assert ba.as_dict == { 'address': '0.0.0.1', 'netmask': '255.255.255.0', 'prefix': 24, 'subnet': '0.0.0.0', 'gateway': None, 'auto': True, 'mtu': 1500 } ba = BaseAddress.objects.get(address_block=ab1, offset=2) assert ba.type == 'Unknown' assert ba.ip_address == '0.0.0.2' assert ba.as_dict == { 'address': '0.0.0.2', 'netmask': '255.255.255.0', 'prefix': 24, 'subnet': '0.0.0.0', 'gateway': None, 'auto': True, 'mtu': 1500 }
def test_address(): s1 = Site(name='tsite1', description='test site1') s1.full_clean() s1.save() nwd = Networked(site=s1, hostname='test') nwd.full_clean() nwd.save() ab1 = AddressBlock(site=s1, subnet=StrToIp('0.0.0.0'), prefix=24, name='test1') ab1.full_clean() ab1.save() ab2 = AddressBlock(site=s1, subnet=StrToIp('1.0.0.0'), prefix=31, name='test2') ab2.full_clean() ab2.save() ad = Address() with pytest.raises(ValidationError): ad.full_clean() ad1 = Address(networked=nwd, interface_name='tun0') ad1.full_clean() ad1.save() assert ad1.as_dict == { 'address': None, 'netmask': None, 'prefix': None, 'subnet': None, 'gateway': None, 'sub_interface': None, 'primary': False, 'auto': True, 'mtu': 1500 } ad1.address_block = ab2 ad1.offset = 5 ad1.save() assert ad1.as_dict == { 'address': '1.0.0.5', 'netmask': '255.255.255.254', 'prefix': 31, 'subnet': '1.0.0.0', 'gateway': None, 'sub_interface': None, 'primary': False, 'auto': True, 'mtu': 1500 } ad = Address(address_block=ab1) with pytest.raises(ValidationError): ad.full_clean() ad = Address(address_block=ab1, offset=1) with pytest.raises(ValidationError): ad.full_clean() ad = Address(address_block=ab1, offset=1, networked=nwd) with pytest.raises(ValidationError): ad.full_clean() ad = Address(address_block=ab1, offset=1, networked=nwd, interface_name='lo') ad.full_clean() ad.save() assert ad.as_dict == { 'address': '0.0.0.1', 'netmask': '255.255.255.0', 'prefix': 24, 'subnet': '0.0.0.0', 'gateway': None, 'sub_interface': None, 'primary': False, 'auto': True, 'mtu': 1500 } ad = Address(address_block=ab1, offset=1, pointer=ad1, networked=nwd, interface_name='vpn0') with pytest.raises(ValidationError): ad.full_clean() ad = Address(offset=1, pointer=ad1, networked=nwd, interface_name='vpn0') with pytest.raises(ValidationError): ad.full_clean() ad = Address(address_block=ab1, pointer=ad1, networked=nwd, interface_name='vpn0') with pytest.raises(ValidationError): ad.full_clean() ad = Address(address_block=ab1, pointer=ad1, networked=nwd, interface_name='vpn0') with pytest.raises(ValidationError): ad.full_clean() ad = Address(offset=1, pointer=ad1, networked=nwd, interface_name='vpn0') with pytest.raises(ValidationError): ad.full_clean() ad = Address(pointer=ad1, networked=nwd, interface_name='vpn0') ad.full_clean() ad.save() assert ad.as_dict == { 'address': '1.0.0.5', 'netmask': '255.255.255.254', 'prefix': 31, 'subnet': '1.0.0.0', 'gateway': None, 'sub_interface': None, 'primary': False, 'auto': True, 'mtu': 1500 } ba = BaseAddress(address_block=ab1, offset=1) with pytest.raises(ValidationError): ba.full_clean() ba = BaseAddress(address_block=ab1, offset=2) ba.full_clean() ba.save() assert ba.as_dict == { 'address': '0.0.0.2', 'netmask': '255.255.255.0', 'prefix': 24, 'subnet': '0.0.0.0', 'gateway': None, 'auto': True, 'mtu': 1500 } ad = Address(address_block=ab1, offset=2, networked=nwd, interface_name='eth0') with pytest.raises(ValidationError): ad.full_clean() ad = Address(address_block=ab1, offset=3, networked=nwd, interface_name='lo') ad.full_clean() ad = Address(address_block=ab2, offset=0, networked=nwd, interface_name='lo', sub_interface=0) ad.full_clean() ad = Address(address_block=ab2, offset=0, networked=nwd, interface_name='lo', sub_interface=123) ad.full_clean() ad = Address(address_block=ab2, offset=0, networked=nwd, interface_name='lo', sub_interface=-1) with pytest.raises(ValidationError): ad.full_clean() ad = Address(address_block=ab2, offset=0, networked=nwd, interface_name='lo', is_primary=True) ad.full_clean() ad.save() assert ad.as_dict == { 'address': '1.0.0.0', 'netmask': '255.255.255.254', 'prefix': 31, 'subnet': '1.0.0.0', 'gateway': None, 'sub_interface': None, 'primary': True, 'auto': True, 'mtu': 1500 } ad = Address(address_block=ab2, offset=1, networked=nwd, interface_name='lo', is_primary=True) with pytest.raises(ValidationError): ad.full_clean() ad = Address(address_block=ab2, offset=1, networked=nwd, interface_name='lo', is_primary=False) ad.full_clean() ad = Address.objects.get(address_block=ab1, offset=1) assert ad.type == 'Address' assert ad.ip_address == '0.0.0.1' assert ad.structure is None # TODO: make a networked with a structure and test that assert ad.interface is None # TODO: dido ^ assert ad.as_dict == { 'address': '0.0.0.1', 'netmask': '255.255.255.0', 'prefix': 24, 'subnet': '0.0.0.0', 'gateway': None, 'sub_interface': None, 'primary': False, 'auto': True, 'mtu': 1500 } ba = BaseAddress.objects.get(address_block=ab1, offset=1) assert ba.type == 'Address' assert ba.ip_address == '0.0.0.1' assert ba.as_dict == { 'address': '0.0.0.1', 'netmask': '255.255.255.0', 'prefix': 24, 'subnet': '0.0.0.0', 'gateway': None, 'auto': True, 'mtu': 1500 } ba = BaseAddress.objects.get(address_block=ab1, offset=2) assert ba.type == 'Unknown' assert ba.ip_address == '0.0.0.2' assert ba.as_dict == { 'address': '0.0.0.2', 'netmask': '255.255.255.0', 'prefix': 24, 'subnet': '0.0.0.0', 'gateway': None, 'auto': True, 'mtu': 1500 } ad = Address.objects.get(networked=nwd, interface_name='vpn0') assert ad.type == 'Address' assert ad.ip_address == '1.0.0.5' assert ad.as_dict == { 'address': '1.0.0.5', 'netmask': '255.255.255.254', 'prefix': 31, 'subnet': '1.0.0.0', 'gateway': None, 'sub_interface': None, 'primary': False, 'auto': True, 'mtu': 1500 } ba = BaseAddress.objects.get(pk=ad.baseaddress_ptr.pk) assert ba.type == 'Address' assert ba.ip_address is None assert ba.subclass.ip_address == '1.0.0.5' assert ba.as_dict == { 'address': None, 'netmask': None, 'prefix': None, 'subnet': None, 'gateway': None, 'auto': True, 'mtu': 1500 } assert ba.subclass.as_dict == { 'address': '1.0.0.5', 'netmask': '255.255.255.254', 'prefix': 31, 'subnet': '1.0.0.0', 'gateway': None, 'sub_interface': None, 'primary': False, 'auto': True, 'mtu': 1500 }
def test_baseaddress(): s1 = Site(name='tsite1', description='test site1') s1.full_clean() s1.save() ab1 = AddressBlock(site=s1, subnet=StrToIp('0.0.0.0'), prefix=24, name='test1') ab1.full_clean() ab1.save() ab2 = AddressBlock(site=s1, subnet=StrToIp('1.0.0.0'), prefix=31, name='test2') ab2.full_clean() ab2.save() ab3 = AddressBlock(site=s1, subnet=StrToIp('2.0.0.0'), prefix=24, gateway_offset=1, name='test3') ab3.full_clean() ab3.save() ba1 = BaseAddress() ba1.full_clean() ba1.save() assert ba1.as_dict == { 'address': None, 'netmask': None, 'prefix': None, 'subnet': None, 'gateway': None, 'auto': True, 'mtu': 1500 } ba = BaseAddress(address_block=ab1) with pytest.raises(ValidationError): ba.full_clean() ba = BaseAddress(offset=0) with pytest.raises(ValidationError): ba.full_clean() ba = BaseAddress(offset=1) with pytest.raises(ValidationError): ba.full_clean() ba = BaseAddress(address_block=ab1, offset=0) with pytest.raises(ValidationError): ba.full_clean() ba = BaseAddress(address_block=ab1, offset=1) ba.full_clean() ba.save() assert ba.as_dict == { 'address': '0.0.0.1', 'netmask': '255.255.255.0', 'prefix': 24, 'subnet': '0.0.0.0', 'gateway': None, 'auto': True, 'mtu': 1500 } ba = BaseAddress(address_block=ab1, offset=1) with pytest.raises(ValidationError): ba.full_clean() ba = BaseAddress(address_block=ab1, offset=254) ba.full_clean() assert ba.as_dict == { 'address': '0.0.0.254', 'netmask': '255.255.255.0', 'prefix': 24, 'subnet': '0.0.0.0', 'gateway': None, 'auto': True, 'mtu': 1500 } ba = BaseAddress(address_block=ab1, offset=255) with pytest.raises(ValidationError): ba.full_clean() ba = BaseAddress(address_block=ab2, offset=0) ba.full_clean() assert ba.as_dict == { 'address': '1.0.0.0', 'netmask': '255.255.255.254', 'prefix': 31, 'subnet': '1.0.0.0', 'gateway': None, 'auto': True, 'mtu': 1500 } ba = BaseAddress(address_block=ab2, offset=1) ba.full_clean() assert ba.as_dict == { 'address': '1.0.0.1', 'netmask': '255.255.255.254', 'prefix': 31, 'subnet': '1.0.0.0', 'gateway': None, 'auto': True, 'mtu': 1500 } ba = BaseAddress(address_block=ab2, offset=2) with pytest.raises(ValidationError): ba.full_clean() ba = BaseAddress(address_block=ab2, offset=-1) with pytest.raises(ValidationError): ba.full_clean() ba = BaseAddress(address_block=ab3, offset=0) with pytest.raises(ValidationError): ba.full_clean() ba = BaseAddress(address_block=ab3, offset=1) with pytest.raises(ValidationError): ba.full_clean() ba = BaseAddress(address_block=ab3, offset=2) ba.full_clean() assert ba.as_dict == { 'address': '2.0.0.2', 'netmask': '255.255.255.0', 'prefix': 24, 'subnet': '2.0.0.0', 'gateway': '2.0.0.1', 'auto': True, 'mtu': 1500 } ba = BaseAddress.objects.get(address_block=ab1, offset=1) assert ba.type == 'Unknown' assert ba.ip_address == '0.0.0.1' assert ba.as_dict == { 'address': '0.0.0.1', 'netmask': '255.255.255.0', 'prefix': 24, 'subnet': '0.0.0.0', 'gateway': None, 'auto': True, 'mtu': 1500 } ba = BaseAddress.objects.get(pk=ba1.pk) assert ba.type == 'Unknown' assert ba.ip_address is None assert ba.as_dict == { 'address': None, 'netmask': None, 'prefix': None, 'subnet': None, 'gateway': None, 'auto': True, 'mtu': 1500 }
def handler(request): match = url_regex.match(request.uri.lower()) if not match: return Response(400, data='Invalid config uri', content_type='text') (request_type, _, config_uuid, structure_id, foundation_locator, ip_address, _, _, _) = match.groups() target = None if config_uuid is not None: try: target = Structure.objects.get(config_uuid=config_uuid[2:]) except Structure.DoesNotExist: return Response(404, data='Config UUID Not Found', content_type='text') elif structure_id is not None: try: target = Structure.objects.get(pk=int(structure_id[2:])) except Structure.DoesNotExist: return Response(404, data='Structure Not Found', content_type='text') elif foundation_locator is not None: try: target = Foundation.objects.get(pk=foundation_locator[2:]).subclass except Foundation.DoesNotExist: return Response(404, data='Foundation Not Found', content_type='text') else: if ip_address is not None: address = BaseAddress.lookup(ip_address[2:]) else: address = BaseAddress.lookup(request.remote_addr) if address is None: return Response(404, data='Address Not Found', content_type='text') address = address.subclass if address.type == 'Address': target = address.networked.subclass else: target = address if target is None: return Response(500, data='Target is missing', content_type='text') data = None config = getConfig(target) if request_type in ('boot_script', 'pxe_template'): pxe = None if isinstance(target, Structure): pxe = target.provisioning_interface.pxe elif isinstance(target, Foundation): pxe = target.structure.provisioning_interface.pxe elif isinstance(target, DynamicAddress): pxe = target.pxe if pxe is None: return Response(200, data='', content_type='text') if request_type == 'boot_script': template = '#!ipxe\n\n' + pxe.boot_script elif request_type == 'pxe_template': template = pxe.template data = renderTemplate(template, config) return Response(200, data=data, content_type='text') elif request_type == 'config': _fromPythonMap( config ) # this does not go out CInP's converter, we need to make the python dict JSON encodable our selves return Response(200, data=mergeValues(config)) return Response(400, data='Invalid request type', content_type='text')
def test_address(): s1 = Site( name='tsite1', description='test site1' ) s1.full_clean() s1.save() nwd = Networked( site=s1, hostname='test' ) nwd.full_clean() nwd.save() ab1 = AddressBlock( site=s1, subnet=StrToIp( '0.0.0.0' ), prefix=24 ) ab1.full_clean() ab1.save() ab2 = AddressBlock( site=s1, subnet=StrToIp( '1.0.0.0' ), prefix=31 ) ab2.full_clean() ab2.save() ad = Address() with pytest.raises( ValidationError ): ad.full_clean() ad1 = Address( networked=nwd, interface_name='tun0' ) ad1.full_clean() ad1.save() ad1.address_block = ab2 ad1.offset = 5 ad1.save() ad = Address( address_block=ab1 ) with pytest.raises( ValidationError ): ad.full_clean() ad = Address( address_block=ab1, offset=1 ) with pytest.raises( ValidationError ): ad.full_clean() ad = Address( address_block=ab1, offset=1, networked=nwd ) with pytest.raises( ValidationError ): ad.full_clean() ad = Address( address_block=ab1, offset=1, networked=nwd, interface_name='lo' ) ad.full_clean() ad.save() ad = Address( address_block=ab1, offset=1, pointer=ad1, networked=nwd, interface_name='vpn0' ) with pytest.raises( ValidationError ): ad.full_clean() ad = Address( offset=1, pointer=ad1, networked=nwd, interface_name='vpn0' ) with pytest.raises( ValidationError ): ad.full_clean() ad = Address( address_block=ab1, pointer=ad1, networked=nwd, interface_name='vpn0' ) with pytest.raises( ValidationError ): ad.full_clean() ad = Address( address_block=ab1, pointer=ad1, networked=nwd, interface_name='vpn0' ) with pytest.raises( ValidationError ): ad.full_clean() ad = Address( offset=1, pointer=ad1, networked=nwd, interface_name='vpn0' ) with pytest.raises( ValidationError ): ad.full_clean() ad = Address( pointer=ad1, networked=nwd, interface_name='vpn0' ) ad.full_clean() ad.save() ba = BaseAddress( address_block=ab1, offset=1 ) with pytest.raises( ValidationError ): ba.full_clean() ba = BaseAddress( address_block=ab1, offset=2 ) ba.full_clean() ba.save() ad = Address( address_block=ab1, offset=2, networked=nwd, interface_name='eth0' ) with pytest.raises( ValidationError ): ad.full_clean() ad = Address( address_block=ab1, offset=3, networked=nwd, interface_name='lo' ) ad.full_clean() ad = Address( address_block=ab2, offset=0, networked=nwd, interface_name='lo', vlan=0 ) ad.full_clean() ad = Address( address_block=ab2, offset=0, networked=nwd, interface_name='lo', vlan=1 ) ad.full_clean() ad = Address( address_block=ab2, offset=0, networked=nwd, interface_name='lo', vlan=-1 ) with pytest.raises( ValidationError ): ad.full_clean() ad = Address( address_block=ab2, offset=0, networked=nwd, interface_name='lo', vlan=4097 ) with pytest.raises( ValidationError ): ad.full_clean() ad = Address( address_block=ab2, offset=0, networked=nwd, interface_name='lo', sub_interface=0 ) ad.full_clean() ad = Address( address_block=ab2, offset=0, networked=nwd, interface_name='lo', sub_interface=123 ) ad.full_clean() ad = Address( address_block=ab2, offset=0, networked=nwd, interface_name='lo', sub_interface=-1 ) with pytest.raises( ValidationError ): ad.full_clean() ad = Address( address_block=ab2, offset=0, networked=nwd, interface_name='lo', is_primary=True ) ad.full_clean() ad.save() ad = Address( address_block=ab2, offset=1, networked=nwd, interface_name='lo', is_primary=True ) with pytest.raises( ValidationError ): ad.full_clean() ad = Address( address_block=ab2, offset=1, networked=nwd, interface_name='lo', is_primary=False ) ad.full_clean() ad = Address.objects.get( address_block=ab1, offset=1 ) assert ad.type == 'Address' assert ad.ip_address == '0.0.0.1' assert ad.structure is None # TODO: make a networked with a structure and test that assert ad.interface is None # TODO: dido ^ ba = BaseAddress.objects.get( address_block=ab1, offset=1 ) assert ba.type == 'Address' assert ba.ip_address == '0.0.0.1' ba = BaseAddress.objects.get( address_block=ab1, offset=2 ) assert ba.type == 'Unknown' assert ba.ip_address == '0.0.0.2' ad = Address.objects.get( networked=nwd, interface_name='vpn0' ) assert ad.type == 'Address' assert ad.ip_address == '1.0.0.5' ba = BaseAddress.objects.get( pk=ad.baseaddress_ptr.pk ) assert ba.type == 'Address' assert ba.ip_address is None assert ba.subclass.ip_address == '1.0.0.5'
def test_baseaddress(): s1 = Site( name='tsite1', description='test site1' ) s1.full_clean() s1.save() ab1 = AddressBlock( site=s1, subnet=StrToIp( '0.0.0.0' ), prefix=24 ) ab1.full_clean() ab1.save() ab2 = AddressBlock( site=s1, subnet=StrToIp( '1.0.0.0' ), prefix=31 ) ab2.full_clean() ab2.save() ab3 = AddressBlock( site=s1, subnet=StrToIp( '2.0.0.0' ), prefix=24, gateway_offset=1 ) ab3.full_clean() ab3.save() ba1 = BaseAddress() ba1.full_clean() ba1.save() ba = BaseAddress( address_block=ab1 ) with pytest.raises( ValidationError ): ba.full_clean() ba = BaseAddress( offset=0 ) with pytest.raises( ValidationError ): ba.full_clean() ba = BaseAddress( offset=1 ) with pytest.raises( ValidationError ): ba.full_clean() ba = BaseAddress( address_block=ab1, offset=0 ) with pytest.raises( ValidationError ): ba.full_clean() ba = BaseAddress( address_block=ab1, offset=1 ) ba.full_clean() ba.save() ba = BaseAddress( address_block=ab1, offset=1 ) with pytest.raises( ValidationError ): ba.full_clean() ba = BaseAddress( address_block=ab1, offset=254 ) ba.full_clean() ba = BaseAddress( address_block=ab1, offset=255 ) with pytest.raises( ValidationError ): ba.full_clean() ba = BaseAddress( address_block=ab2, offset=0 ) ba.full_clean() ba = BaseAddress( address_block=ab2, offset=1 ) ba.full_clean() ba = BaseAddress( address_block=ab2, offset=2 ) with pytest.raises( ValidationError ): ba.full_clean() ba = BaseAddress( address_block=ab2, offset=-1 ) with pytest.raises( ValidationError ): ba.full_clean() ba = BaseAddress( address_block=ab3, offset=0 ) with pytest.raises( ValidationError ): ba.full_clean() ba = BaseAddress( address_block=ab3, offset=1 ) with pytest.raises( ValidationError ): ba.full_clean() ba = BaseAddress( address_block=ab3, offset=2 ) ba.full_clean() ba = BaseAddress.objects.get( address_block=ab1, offset=1 ) assert ba.type == 'Unknown' assert ba.ip_address == '0.0.0.1' ba = BaseAddress.objects.get( pk=ba1.pk ) assert ba.type == 'Unknown' assert ba.ip_address is None
def handler( request ): if not re.match( '^/config/[a-z_]+/([sf][0-9]+)?$', request.uri ): return Response( 400, data='Invalid config uri', content_type='text' ) ( _, _, request_type, target_id ) = request.uri.split( '/' ) target = None interface = None if len( target_id ) > 0: if target_id[0] == 's': try: target = Structure.objects.get( pk=int( target_id[ 1: ] ) ) except Structure.DoesNotExist: return Response( 404, data='Structure Not Found', content_type='text' ) elif target_id[0] == 'f': try: target = Foundation.objects.get( pk=int( target_id[ 1: ] ) ) except Foundation.DoesNotExist: return Response( 404, data='Foundation Not Found', content_type='text' ) else: return Response( 500, data='Target Confusion', content_type='text' ) interface = target.provisioning_interface else: print( 'Getting config goodies for "{0}"'.format( request.remote_addr ) ) address = BaseAddress.lookup( request.remote_addr ) if address is None: return Response( 404, data='Address Not Found', content_type='text' ) address = address.subclass if address.type != 'Address': return Response( 404, data='Address Not Valid', content_type='text' ) target = address.networked.subclass try: if isinstance( target, Structure ): interface = target.foundation.interfaces.get( name=address.interface_name ) else: interface = target.interfaces.get( name=address.interface_name ) except NetworkInterface.DoesNotExist: return Response( 404, data='Interface Not Found', content_type='text' ) if target is None or interface is None: return Response( 500, data='Target/Interface is missing', content_type='text' ) data = None config = getConfig( target ) if request_type in ( 'boot_script', 'pxe_template' ): pxe = interface.pxe if pxe is None: return Response( 200, data='', content_type='text' ) if request_type == 'boot_script': template = Template( '#!ipxe\n\n' + pxe.boot_script ) elif request_type == 'pxe_template': template = Template( pxe.template ) data = template.render( Context( config ) ) print( 'config_handler sending "{0}" to "{1}"\n ----------- '.format( request_type, request.remote_addr ) ) print( data ) print( ' ----------- ') return Response( 200, data=data, content_type='text' ) elif request_type == 'config': _fromPythonMap( config ) return Response( 200, data=json.dumps( config ) ) return Response( 400, data='Invalid request type', content_type='text' )