Example #1
0
  def clean( self, *args, **kwargs ):
    super().clean( *args, **kwargs )
    errors = {}

    if self.dependency is None and self.structure is None:
      errors[ 'structure' ] = 'Either structure or dependency is required'

    if self.structure is None and self.script_structure is None:
      if self.create_script_name is not None:
        errors[ 'create_script_name' ] = 'structure or script_sctructure are required for scripts'

      if self.destroy_script_name is not None:
        errors[ 'destroy_script_name' ] = 'structure or script_sctructure are required for scripts'

    if self.create_script_name is not None and not name_regex.match( self.create_script_name ):
      errors[ 'create_script_name' ] = '"{0}" is invalid'.format( self.create_script_name )

    if self.destroy_script_name is not None and not name_regex.match( self.destroy_script_name ):
      errors[ 'destroy_script_name' ] = '"{0}" is invalid'.format( self.destroy_script_name )

    if self.destroy_script_name is not None and self.destroy_script_name == self.create_script_name:
      errors[ 'destroy_script_name' ] = 'destroy and create script must be different'

    if errors:
      raise ValidationError( errors )
Example #2
0
    def clean(self, *args, **kwargs):
        super().clean(*args, **kwargs)
        errors = {}
        if not name_regex.match(self.interface_name):
            errors['interface_name'] = '"{0}" is invalid'.format(
                self.interface_name[0:50])

        try:
            if self.pointer is not None:
                if self.address_block is not None:
                    errors['address_block'] = 'Conflicts with Pointer'
                    errors['pointer'] = 'Conflicts with Address_block'
                if self.offset is not None:
                    errors['offset'] = 'Conflicts with Pointer'
                    errors['pointer'] = 'Conflicts with Offset'
        except ObjectDoesNotExist:
            pass

        if not self.sub_interface:
            self.sub_interface = None
        else:
            if self.sub_interface < 0:
                errors['sub_interface'] = 'Must be a positive value'

        if self.vlan > 4096 or self.vlan < 0:
            errors['vlan'] = 'must be between 0 and 4096'

        if self.is_primary:
            if self.networked.address_set.filter(is_primary=True).count() > 0:
                errors['is_primary'] = 'Networked allready has a primary ip'

        if errors:
            raise ValidationError(errors)
Example #3
0
    def clean(self, *args, **kwargs):
        super().clean(*args, **kwargs)
        errors = {}
        if not name_regex.match(self.name):
            errors['name'] = '"{0}" is invalid'.format(self.name[0:50])

        if errors:
            raise ValidationError(errors)
Example #4
0
    def clean(self, *args, **kwargs):
        super().clean(*args, **kwargs)
        errors = {}

        if self.name and not name_regex.match(self.name):
            errors['name'] = 'Invalid'

        if errors:
            raise ValidationError(errors)
Example #5
0
  def clean( self, *args, **kwargs ):
    super().clean( *args, **kwargs )
    errors = {}

    if not name_regex.match( self.locator ):
      errors[ 'locator' ] = 'Invalid'

    if self.blueprint_id is not None and self.type not in self.blueprint.foundation_type_list:
        errors[ 'name' ] = 'Blueprint "{0}" does not list this type ({1})'.format( self.blueprint, self.type )

    if errors:
      raise ValidationError( errors )
Example #6
0
  def clean( self, *args, **kwargs ):
    super().clean( *args, **kwargs )
    errors = {}

    if not name_regex.match( self.name ):
      errors[ 'name' ] = 'BluePrint name "{0}" is invalid'.format( self.name )

    results = parser.lint( self.script )
    if results is not None:
      errors[ 'script' ] = 'Script is invalid: {0}'.format( results )

    if errors:
      raise ValidationError( errors )
Example #7
0
  def clean( self, *args, **kwargs ):
    super().clean( *args, **kwargs )
    errors = {}
    if not name_regex.match( self.name ):  # if this regex changes, make sure to update tcalc parser in archetect
      errors[ 'name' ] = 'BluePrint Script name "{0}" is invalid'.format( self.name )

    if self.config_values is not None:
      for name in self.config_values:
        if not config_name_regex.match( name ):
          errors[ 'config_values' ] = 'config item name "{0}" is invalid'.format( name )
          break

    if errors:
      raise ValidationError( errors )
Example #8
0
    def clean(self, *args, **kwargs):
        super().clean(*args, **kwargs)
        errors = {}

        if not name_regex.match(self.name):
            errors['name'] = 'name "{0}" is invalid'.format(self.name)

        for name in self.config_values:
            if not config_name_regex.match(name):
                errors[
                    'config_values'] = 'config item name "{0}" is invalid'.format(
                        name)
                break

        if errors:
            raise ValidationError(errors)
Example #9
0
    def clean(self, *args, **kwargs):
        super().clean(*args, **kwargs)
        errors = {}
        if not name_regex.match(self.interface_name):
            errors['interface_name'] = '"{0}" is invalid'.format(
                self.interface_name[0:50])

        try:
            if self.address_block and self.networked and self.address_block.site != self.networked.site:
                errors[
                    'address_block'] = 'Address is not in the same site as the Networked it belongs to'
        except ObjectDoesNotExist:
            pass  # something else should make sure address_block and networked are defined

        if errors:  # if either of the above happen, don't bother with the rest
            raise ValidationError(errors)

        try:
            if self.pointer is not None:
                if self.address_block is not None:
                    errors['address_block'] = 'Conflicts with Pointer'
                    errors['pointer'] = 'Conflicts with Address_block'
                if self.offset is not None:
                    errors['offset'] = 'Conflicts with Pointer'
                    errors['pointer'] = 'Conflicts with Offset'
        except ObjectDoesNotExist:
            pass

        if not self.sub_interface:
            self.sub_interface = None
        else:
            if self.sub_interface < 0:
                errors['sub_interface'] = 'Must be a positive value'

        if self.is_primary:
            if self.pk is not None:
                Aobjects = self.networked.address_set.filter(~Q(pk=self.pk))
            else:
                Aobjects = self.networked.address_set.all()

            if Aobjects.filter(is_primary=True).count() > 0:
                errors['is_primary'] = 'Networked allready has a primary ip'

        if errors:
            raise ValidationError(errors)
Example #10
0
  def clean( self, *args, **kwargs ):
    super().clean( *args, **kwargs )
    errors = {}

    if self.name and not name_regex.match( self.name ):
      errors[ 'name' ] = 'Invalid'

    if self.config_values is not None:
      for name in self.config_values:
        if not config_name_regex.match( name ):
          errors[ 'config_values' ] = 'config item name "{0}" is invalid'.format( name )
          break

        if name in ( 'domain_search', 'dns_servers', 'log_servers' ):
          if not isinstance( self.config_values[ name ], list ):
            errors[ 'config_values' ] = 'config item "{0}" must be a list'.format( name )
          break

    if errors:
      raise ValidationError( errors )
Example #11
0
    def clean(self, *args, **kwargs):
        super().clean(*args, **kwargs)
        errors = {}
        if not name_regex.match(self.name):
            errors['name'] = 'invalid'

        try:
            subnet_ip = StrToIp(self.subnet)
            ipv4 = IpIsV4(subnet_ip)
        except ValueError:
            ipv4 = None
            errors['subnet'] = 'Invalid Ip Address'

        if self.prefix is None or self.prefix < 1:
            errors['prefix'] = 'Min Prefix is 1'

        if errors:  # no point in continuing
            raise ValidationError(errors)

        if ipv4 is not None:
            if ipv4:
                if self.prefix > 32:
                    errors['prefix'] = 'Max Prefix for ipv4 is 32'
            else:
                if self.prefix > 128:
                    errors['prefix'] = 'Max Prefix for ipv6 is 128'

            if self.gateway_offset is not None:
                (low, high) = CIDRNetworkBounds(subnet_ip, self.prefix, False,
                                                True)
                if low == high:
                    errors[
                        'gateway_offset'] = 'Gateway not possible in single host subnet'

                if self.gateway_offset < low or self.gateway_offset > high:
                    errors[
                        'gateway_offset'] = 'Must be greater than {0} and less than {1}'.format(
                            low, high)

        if errors:  # no point in continuing
            raise ValidationError(errors)

        (subnet_ip, last_ip) = CIDRNetworkBounds(subnet_ip, self.prefix, True)
        self.subnet = IpToStr(subnet_ip)
        self._max_address = IpToStr(last_ip)

        if self.pk is not None:
            ABobjects = AddressBlock.objects.filter(~Q(pk=self.pk),
                                                    site=self.site)
        else:
            ABobjects = AddressBlock.objects.filter(site=self.site)
        block_count = ABobjects.filter(subnet__gte=self.subnet,
                                       _max_address__lte=self.subnet).count()
        block_count += ABobjects.filter(
            subnet__gte=self._max_address,
            _max_address__lte=self._max_address).count()
        block_count += ABobjects.filter(
            _max_address__gte=self.subnet,
            _max_address__lte=self._max_address).count()
        block_count += ABobjects.filter(subnet__gte=self.subnet,
                                        subnet__lte=self._max_address).count()
        if block_count > 0:
            errors[
                'subnet'] = 'This subnet/prefix overlaps with an existing Address Block in the same site'

        if errors:
            raise ValidationError(errors)