Skip to content
  • P
    Projects
  • G
    Groups
  • S
    Snippets
  • Help

RECIRCLE / portal

  • This project
    • Loading...
  • Sign in
Go to a project
  • Project
  • Repository
  • Issues 11
  • Merge Requests 0
  • Pipelines
  • Wiki
  • Snippets
  • Members
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
New models

New models

Last edited by Chif Gergő Apr 24, 2019
Page history

Instance

https://git.ik.bme.hu/circle/cloud/tree/master/circle/vm/models

Instance fields in CIRCLE:

class BaseResourceConfigModel(Model):

    """Abstract base for models with base resource configuration parameters.
    """
    num_cores = IntegerField(verbose_name=_('number of cores'),
                             help_text=_('Number of virtual CPU cores '
                                         'available to the virtual machine.'),
                             validators=[MinValueValidator(0)])
    ram_size = IntegerField(verbose_name=_('RAM size'),
                            help_text=_('Mebibytes of memory.'),
                            validators=[MinValueValidator(0)])
    max_ram_size = IntegerField(verbose_name=_('maximal RAM size'),
                                help_text=_('Upper memory size limit '
                                            'for balloning.'),
                                validators=[MinValueValidator(0)])
    arch = CharField(max_length=10, verbose_name=_('architecture'),
                     choices=ARCHITECTURES)
    priority = IntegerField(verbose_name=_('priority'),
                            help_text=_('CPU priority.'),
                            validators=[MinValueValidator(0)])
class VirtualMachineDescModel(BaseResourceConfigModel):

    """Abstract base for virtual machine describing models.
    """
    access_method = CharField(max_length=10, choices=ACCESS_METHODS,
                              verbose_name=_('access method'),
                              help_text=_('Primary remote access method.'))
    boot_menu = BooleanField(verbose_name=_('boot menu'), default=False,
                             help_text=_(
                                 'Show boot device selection menu on boot.'))
    lease = ForeignKey(Lease, help_text=_("Preferred expiration periods."),
                       verbose_name=_("Lease"))
    raw_data = TextField(verbose_name=_('raw_data'), blank=True, help_text=_(
        'Additional libvirt domain parameters in XML format.'))
    req_traits = ManyToManyField(Trait, blank=True,
                                 help_text=_("A set of traits required for a "
                                             "node to declare to be suitable "
                                             "for hosting the VM."),
                                 verbose_name=_("required traits"))
    system = TextField(verbose_name=_('operating system'),
                       help_text=(_('Name of operating system in format like '
                                    '"Ubuntu 12.04 LTS Desktop amd64".')))
    tags = TaggableManager(blank=True, verbose_name=_("tags"))
    has_agent = BooleanField(verbose_name=_('has agent'), default=True,
                             help_text=_(
                                 'If the machine has agent installed, and '
                                 'the manager should wait for its start.'))
class Instance(AclBase, VirtualMachineDescModel, StatusModel, OperatedMixin,
               TimeStampedModel):

    """Virtual machine instance.
    """
    ACL_LEVELS = (
        ('user', _('user')),          # see all details
        ('operator', _('operator')),  # console, networking, change state
        ('owner', _('owner')),        # superuser, can delete, delegate perms
    )
    STATUS = Choices(
        ('NOSTATE', _('no state')),
        ('RUNNING', _('running')),
        ('STOPPED', _('stopped')),
        ('SUSPENDED', _('suspended')),
        ('ERROR', _('error')),
        ('PENDING', _('pending')),
        ('DESTROYED', _('destroyed')),
    )
    name = CharField(blank=True, max_length=100, verbose_name=_('name'),
                     help_text=_("Human readable name of instance."))
    description = TextField(blank=True, verbose_name=_('description'))
    template = ForeignKey(InstanceTemplate, blank=True, null=True,
                          related_name='instance_set', on_delete=SET_NULL,
                          help_text=_("Template the instance derives from."),
                          verbose_name=_('template'))
    pw = CharField(help_text=_("Original password of the instance."),
                   max_length=20, verbose_name=_('password'))
    time_of_suspend = DateTimeField(blank=True, default=None, null=True,
                                    verbose_name=_('time of suspend'),
                                    help_text=_("Proposed time of automatic "
                                                "suspension."))
    time_of_delete = DateTimeField(blank=True, default=None, null=True,
                                   verbose_name=_('time of delete'),
                                   help_text=_("Proposed time of automatic "
                                               "deletion."))
    node = ForeignKey(Node, blank=True, null=True,
                      related_name='instance_set',
                      help_text=_("Current hypervisor of this instance."),
                      verbose_name=_('host node'))
    disks = ManyToManyField('storage.Disk', related_name='instance_set',
                            help_text=_("Set of mounted disks."),
                            verbose_name=_('disks'))
    vnc_port = IntegerField(blank=True, default=None, null=True,
                            help_text=_("TCP port where VNC console listens."),
                            unique=True, verbose_name=_('vnc_port'))
    is_base = BooleanField(default=False)
    owner = ForeignKey(User)
    destroyed_at = DateTimeField(blank=True, null=True,
                                 help_text=_("The virtual machine's time of "
                                             "destruction."))
    objects = Manager()
    active = QueryManager(destroyed_at=None)

Resource related OpS

  • arch (choices) - CPU architecture
  • num_cores (int) - Number of virtual CPU cores available to the virtual machine.
  • priority (int) - CPU priority.
  • ram_size (int) - MBs of memory.
  • max_ram_size (int) - Upper memory size limit for balloning.

External properties

  • access_method (text) - Primary remote access method. DB
  • boot_menu (bool) - Show boot device selection menu on boot. -
  • lease (Lease) - Preferred expiration periods. DB
  • raw_data (text) - Additional libvirt domain parameters in XML format. -
  • req_traits (list of Traits) - A set of traits required for a node to declare to be suitable for hosting the VM. -
  • system (text) - Name of operating system in format like Ubuntu 12.04 LTS Desktop amd64. Gergő
  • tags - tags -
  • has_agent (bool) - If the machine has agent installed, and the manager should wait for its start. -

VM properties

  • name (text) - Human readable name of instance. DB
  • description (text) - Description DB
  • template (Template) - Template the instance derives from. DB
  • pw (text) - Original password of the instance. DB
  • time_of_suspend (DateTime) - Proposed time of automatic suspension. DB
  • time_of_delete (DateTime) - Proposed time of automatic deletion. DB
  • node (Node) - Current hypervisor of this instance. -
  • disks (list of Disks) - Set of mounted disks. DB + OPs
  • vnc_port (int) - TCP port where VNC console listens. Ops
  • is_base (bool) - Is this machine a base of a Template. -
  • owner (User) - owner DB
  • destroyed_at (DateTime) - The virtual machine's time of destruction. -
  • objects - Provides database query operations. -
  • active - ? -
  • interfaces - Network interfaces. OPS
  • addresses (ipv4, ipv6, MAC) - Addresses of the vm. OPS
  • status - The status of the vm. OPS
  • block_device_mapping - ? kell-e
  • launched_at - Launch time. OPS
  • terminated_at - Time of last terminate. OPS

Template

https://git.ik.bme.hu/circle/cloud/tree/master/circle/vm/models

class InstanceTemplate(AclBase, VirtualMachineDescModel, TimeStampedModel):

    """Virtual machine template.
    """
    ACL_LEVELS = (
        ('user', _('user')),          # see all details
        ('operator', _('operator')),
        ('owner', _('owner')),        # superuser, can delete, delegate perms
    )
    name = CharField(max_length=100, verbose_name=_('name'),
                     help_text=_('Human readable name of template.'))
    description = TextField(verbose_name=_('description'), blank=True)
    parent = ForeignKey('self', null=True, blank=True,
                        verbose_name=_('parent template'),
                        on_delete=SET_NULL,
                        help_text=_('Template which this one is derived of.'))
    disks = ManyToManyField('storage.Disk', verbose_name=_('disks'),
                            related_name='template_set',
                            help_text=_('Disks which are to be mounted.'))
    owner = ForeignKey(User)
  • name (CharField): Human readable name of template. DB
  • description (TextField): Description of the template. DB
  • parent (Template): Template which this one is derived of. Ops
  • disks (list of Disks): Disks which are to be mounted. Ops
  • owner (User): Owner. DB

Image

https://git.ik.bme.hu/circle/cloud/blob/master/circle/storage/models.py


class Disk(TimeStampedModel):

    """A virtual disk.
    """
    TYPES = [('qcow2-norm', 'qcow2 normal'), ('qcow2-snap', 'qcow2 snapshot'),
             ('iso', 'iso'), ('raw-ro', 'raw read-only'), ('raw-rw', 'raw')]
    BUS_TYPES = (('virtio', 'virtio'), ('ide', 'ide'), ('scsi', 'scsi'))
    name = CharField(blank=True, max_length=100, verbose_name=_("name"))
    filename = CharField(max_length=256, unique=True,
                         verbose_name=_("filename"))
    datastore = ForeignKey(DataStore, verbose_name=_("datastore"),
                           help_text=_("The datastore that holds the disk."))
    type = CharField(max_length=10, choices=TYPES)
    bus = CharField(max_length=10, choices=BUS_TYPES, null=True, blank=True,
                    default=None)
    size = FileSizeField(null=True, default=None)
    base = ForeignKey('self', blank=True, null=True,
                      related_name='derivatives')
    dev_num = CharField(default='a', max_length=1,
                        verbose_name=_("device number"))
    destroyed = DateTimeField(blank=True, default=None, null=True)

    is_ready = BooleanField(default=False)
  • name (CharField): Name of the disk. DB
  • filename (CharField): Filename. -
  • datastore (DataStore): The datastore that holds the disk. -
  • type (CharField): Type of the disk. Ops
  • bus (CharField): The bus type. -
  • size (FileSizeField): The size of the disk. Ops
  • base (Disk): Base disk. -
  • dev_num (CharField): Device number. -
  • destroyed (DateTimeField): When was the disk destroyed? -
  • is_ready (BooleanField): Is the disk ready? -

Storage

https://git.ik.bme.hu/circle/cloud/blob/master/circle/storage/models.py

class DataStore(Model):

    """Collection of virtual disks.
    """
    name = CharField(max_length=100, unique=True, verbose_name=_('name'))
    path = CharField(max_length=200, unique=True, verbose_name=_('path'))
    hostname = CharField(max_length=40, unique=True,
                         verbose_name=_('hostname'))
  • name (CharField): Name. DB
  • vm (Instance): the instance this storage is connected to + DB OPs
  • path (CharField): Path -
  • hostname (CharField): Hostname. -
  Clone repository
  • Developer guideline git
  • How to setup the development environment?
  • Git tips and tricks
  • Home
  • Installing requirements
  • New models
More Pages
×

New Wiki Page

Tip: You can specify the full path for the new file. We will automatically create any missing directories.