Ejemplo n.º 1
0
    def handle(self, *args, **options):
        type_ = options['type']

        if type_:
            pool_tables = [pool_table_from_type(type_)]
        else:
            pool_tables = [pool_table_from_type(x) for x in POOL_CHOICES]

        for pool_table in pool_tables:
            self.stdout.write("-" * 80 + '\n')
            pl = pool_table.__name__.replace("Table", "")
            self.stdout.write(pl + '\n')
            self.stdout.write("-" * 80 + '\n')
            keys = ["id", "size", "base", "offset", "available", "reserved"]
            for key in keys:
                self.stdout.write(("%s" % key).rjust(12))
            self.stdout.write("\n")
            for pool_table_row in pool_table.objects.all():
                pool = pool_table_row.pool

                kv = {
                    'id': pool_table_row.id,
                    'offset': pool_table_row.offset,
                    'base': pool_table_row.base,
                    'size': pool_table_row.size,
                    'available': pool.count_available(),
                    'reserved': pool.count_reserved(),
                }

                for key in keys:
                    self.stdout.write(("%s" % kv[key]).rjust(12))
                self.stdout.write("\n")
Ejemplo n.º 2
0
    def handle(self, *args, **options):
        type_ = options["type"]

        if type_:
            pool_tables = [pool_table_from_type(type_)]
        else:
            pool_tables = [pool_table_from_type(x) for x in POOL_CHOICES]

        for pool_table in pool_tables:
            self.stdout.write("-" * 80 + "\n")
            pl = pool_table.__name__.replace("Table", "")
            self.stdout.write(pl + "\n")
            self.stdout.write("-" * 80 + "\n")
            keys = ["id", "size", "base", "offset", "available", "reserved"]
            for key in keys:
                self.stdout.write(("%s" % key).rjust(12))
            self.stdout.write("\n")
            for pool_table_row in pool_table.objects.all():
                pool = pool_table_row.pool

                kv = {
                    "id": pool_table_row.id,
                    "offset": pool_table_row.offset,
                    "base": pool_table_row.base,
                    "size": pool_table_row.size,
                    "available": pool.count_available(),
                    "reserved": pool.count_reserved(),
                }

                for key in keys:
                    self.stdout.write(("%s" % kv[key]).rjust(12))
                self.stdout.write("\n")
Ejemplo n.º 3
0
    def handle(self, *args, **options):
        type_ = options['type']
        size = options['size']
        offset = options['offset']
        base = options['base']

        if not type_:
            raise CommandError("Type of pool is mandatory")
        if not size:
            raise CommandError("Size of pool is mandatory")

        try:
            size = int(size)
        except ValueError:
            raise CommandError("Invalid size")

        if type_ == "mac-prefix":
            if base is None:
                base = "aa:00:0"
            try:
                validate_mac(base + "0:00:00:00")
            except:
                raise CommandError("Invalid base. %s is not a"
                                   " valid MAC prefix." % base)

        pool_table = pool_table_from_type(type_)

        if pool_table.objects.exists():
            raise CommandError("Pool of type %s already exists" % type_)

        pool_table.objects.create(available_map="",
                                  reserved_map="",
                                  size=size,
                                  base=base,
                                  offset=offset)
Ejemplo n.º 4
0
    def handle(self, *args, **options):
        type_ = options['type']

        if not type_:
            raise CommandError("Type of pool is mandatory")

        pool_table = pool_table_from_type(type_)

        try:
            pool_id = int(args[0])
            pool_row = pool_table.objects.get(id=pool_id)
        except (ValueError, pool_table.DoesNotExist):
            raise CommandError("Invalid pool ID")

        pool = pool_row.pool

        kv = {
            'id': pool_row.id,
            'offset': pool_row.offset,
            'base': pool_row.base,
            'size': pool_row.size,
            'available': pool.count_available(),
            'reserved': pool.count_reserved(),
        }

        for key, val in sorted(kv.items()):
            line = '%s: %s\n' % (key.rjust(16), val)
            self.stdout.write(line.encode('utf8'))

        step = (type_ == 'bridge') and 64 or 80
        print_map('Pool', pool.to_map(), step, self.stdout)
        print_map('Reserved', bitarray_to_map(pool.reserved[:pool_row.size]),
                  step, self.stdout)
Ejemplo n.º 5
0
    def handle(self, *args, **options):
        type_ = options['type']
        size = options['size']
        offset = options['offset']
        base = options['base']

        if not type_:
            raise CommandError("Type of pool is mandatory")
        if not size:
            raise CommandError("Size of pool is mandatory")

        try:
            size = int(size)
        except ValueError:
            raise CommandError("Invalid size")

        if type_ == "mac-prefix":
            if base is None:
                base = "aa:00:0"
            try:
                validate_mac(base + "0:00:00:00")
            except:
                raise CommandError("Invalid base. %s is not a"
                                   " valid MAC prefix." % base)

        pool_table = pool_table_from_type(type_)

        if pool_table.objects.exists():
            raise CommandError("Pool of type %s already exists" % type_)

        pool_table.objects.create(available_map="",
                                  reserved_map="",
                                  size=size,
                                  base=base,
                                  offset=offset)
Ejemplo n.º 6
0
    def handle(self, *args, **options):
        type_ = options['type']

        if not type_:
            raise CommandError("Type of pool is mandatory")

        pool_table = pool_table_from_type(type_)

        try:
            pool_id = int(args[0])
            pool = pool_table.objects.get(id=pool_id)
        except (ValueError, pool_table.DoesNotExist):
            raise CommandError("Invalid pool ID")

        pool.delete()
Ejemplo n.º 7
0
    def handle(self, *args, **options):
        type_ = options['type']

        if not type_:
            raise CommandError("Type of pool is mandatory")

        pool_table = pool_table_from_type(type_)

        try:
            pool_id = int(args[0])
            pool = pool_table.objects.get(id=pool_id)
        except (ValueError, pool_table.DoesNotExist):
            raise CommandError("Invalid pool ID")

        pool.delete()
Ejemplo n.º 8
0
    def handle(self, *args, **options):
        type_ = options['type']
        offset = options['offset']
        base = options['base']
        add_reserved = options['add-reserved']
        remove_reserved = options['remove-reserved']
        size = options['size']

        if not type_:
            raise CommandError("Type of pool is mandatory")

        pool_table = pool_table_from_type(type_)

        try:
            pool_id = int(args[0])
            pool_row = pool_table.objects.get(id=pool_id)
        except (ValueError, pool_table.DoesNotExist):
            raise CommandError("Invalid pool ID")

        pool = pool_row.pool
        if add_reserved:
            reserved = add_reserved.split(',')
            for value in reserved:
                pool.reserve(value, external=True)
        if remove_reserved:
            released = remove_reserved.split(',')
            for value in released:
                pool.put(value, external=True)
        pool.save(db=False)

        if offset:
            pool_row.offset = offset
        if base:
            pool_row.base = base

        # Save now, to avoid conflict with resizing pool.save()
        pool_row.save()

        if size:
            try:
                size = int(size)
            except ValueError:
                raise CommandError("Invalid size")
            pool = pool_row.get_pool()
            self.resize_pool(pool, pool_row.size, size)
            pool.save()
Ejemplo n.º 9
0
    def handle(self, *args, **options):
        type_ = options['type']
        offset = options['offset']
        base = options['base']
        add_reserved = options['add-reserved']
        remove_reserved = options['remove-reserved']

        if not type_:
            raise CommandError("Type of pool is mandatory")

        pool_table = pool_table_from_type(type_)

        try:
            pool_id = int(args[0])
            pool_row = pool_table.objects.get(id=pool_id)
        except (ValueError, pool_table.DoesNotExist):
            raise CommandError("Invalid pool ID")

        pool = pool_row.pool
        if add_reserved:
            reserved = add_reserved.split(',')
            for value in reserved:
                pool.reserve(value, external=True)
        if remove_reserved:
            released = remove_reserved.split(',')
            for value in released:
                pool.put(value, external=True)
        pool.save(db=False)

        if offset:
            pool_row.offset = offset
        if base:
            pool_row.base = base

        # Save now, to avoid conflict with resizing pool.save()
        pool_row.save()

        if size:
            try:
                size = int(size)
            except ValueError:
                raise CommandError("Invalid size")
            pool = pool_row.get_pool()
            self.resize_pool(pool, pool_row.size, size)
            pool.save()