Beispiel #1
0
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'
Beispiel #2
0
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'
Beispiel #3
0
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
    }
Beispiel #4
0
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
    }
Beispiel #5
0
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
    }
Beispiel #6
0
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')
Beispiel #7
0
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'
Beispiel #8
0
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
Beispiel #9
0
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' )