source: trunk/packages/invirt-database/python/database/models.py @ 2211

Last change on this file since 2211 was 2211, checked in by quentin, 15 years ago

Add "reusable" column for nics, to avoid reusing addresses that are special in some way.

File size: 5.5 KB
RevLine 
[13]1from sqlalchemy import *
[991]2from sqlalchemy import orm
[946]3from sqlalchemy.orm import create_session, relation
[13]4
[18]5from sqlalchemy.ext.sessioncontext import SessionContext
6from sqlalchemy.ext.assignmapper import assign_mapper
7
[2200]8from invirt.database import record
9from invirt.database.owner import Owner
[2135]10
[77]11__all__ = ['meta',
[991]12           'session',
[296]13           'clear_cache',
[77]14           'machine_table',
[243]15           'machine_access_table',
[77]16           'nic_table',
17           'disk_table',
18           'types_table',
[108]19           'cdroms_table',
[1361]20           'mirrors_table',
[443]21           'autoinstalls_table',
[2132]22           'owners_table',
[77]23           'Machine',
[243]24           'MachineAccess',
[77]25           'NIC',
26           'Disk',
[108]27           'Type',
[443]28           'CDROM',
[1361]29           'Mirror',
[443]30           'Autoinstall',
[2132]31           'Owner',
[874]32           'or_',
[443]33           ]
[77]34
[946]35meta = ThreadLocalMetaData()
[1014]36session = orm.scoped_session(orm.sessionmaker(transactional=False, autoflush=False))
[13]37
38machine_table = Table('machines', meta,
39       Column('machine_id', Integer, primary_key=True, nullable=False),
40       Column('name', String, nullable=False),
[609]41       Column('description', String, nullable=False),
[13]42       Column('memory', Integer, nullable=False),
43       Column('owner', String, nullable=False),
44       Column('contact', String, nullable=False),
45       Column('uuid', String, nullable=False),
[1708]46       Column('administrator', String, nullable=True, default=None),
[13]47       Column('type_id', String, ForeignKey('types.type_id'), nullable=False),
48       Column('autorestart', Boolean, nullable=False, default=False),
[874]49       Column('cpus', Integer, nullable=False, default=1),
50       Column('adminable', Boolean, nullable=False, default=False))
[13]51
52nic_table = Table('nics', meta,
53       Column('machine_id', Integer, ForeignKey('machines.machine_id'), nullable=True),
[106]54       Column('mac_addr', String, nullable=False, primary_key=True),
[107]55       Column('ip', String, nullable=False, unique=True),
[2211]56       Column('hostname', String, nullable=True),
57       Column('reusable', Boolean, nullable=False, default=True))
[13]58
59disk_table = Table('disks', meta,
60       Column('machine_id', Integer, ForeignKey('machines.machine_id'), nullable=False),
61       Column('guest_device_name', String, nullable=False),
62       Column('size', Integer, nullable=False),
63       PrimaryKeyConstraint('machine_id', 'guest_device_name'))
64
65types_table = Table('types', meta,
66       Column('type_id', String, primary_key=True, nullable=False),
67       Column('description', String, nullable=False),
[64]68       Column('hvm', Boolean, nullable=False),
[13]69       Column('apic', Boolean, nullable=False),
70       Column('acpi', Boolean, nullable=False),
71       Column('pae', Boolean, nullable=False))
72
[1247]73mirrors_table = Table('mirrors', meta,
74       Column('mirror_id', String, primary_key=True, nullable=False),
75       Column('uri_prefix', String, nullable=False))
76
[108]77cdroms_table = Table('cdroms', meta,
78       Column('cdrom_id', String, primary_key=True, nullable=False),
[1247]79       Column('description', String, nullable=False),
[1250]80       Column('mirror_id', String, ForeignKey('mirrors.mirror_id')),
[1247]81       Column('uri_suffix', String))
[18]82
[443]83autoinstalls_table = Table('autoinstalls', meta,
84       Column('autoinstall_id', String, primary_key=True, nullable=False),
85       Column('description', String, nullable=False),
[630]86       Column('type_id', String, ForeignKey('types.type_id'), nullable=False),
87       Column('distribution', String, nullable=False),
[1694]88       Column('mirror', String, nullable=False),
89       Column('arch', String, nullable=False))
[443]90
[2132]91owners_table = Table('owners', meta,
92       Column('owner_id', String, primary_key=True, nullable=False),
[2150]93       Column('ram_quota_total', Integer, nullable=True, default=None),
94       Column('ram_quota_single', Integer, nullable=True, default=None),
95       Column('disk_quota_total', Integer, nullable=True, default=None),
96       Column('disk_quota_single', Integer, nullable=True, default=None),
97       Column('vms_quota_total', Integer, nullable=True, default=None),
98       Column('vms_quota_active', Integer, nullable=True, default=None))
[2132]99
[238]100machine_access_table = Table('machine_access', meta,
[1174]101       Column('machine_id', Integer, ForeignKey('machines.machine_id', ondelete='CASCADE'), nullable=False, index=True),
[238]102       Column('user', String, nullable=False, index=True),
[1174]103       PrimaryKeyConstraint('machine_id', 'user'))
[108]104
[2200]105class Machine(record.Record):
[2187]106    _identity_field = 'name'
[18]107
[2200]108class MachineAccess(record.Record):
[2187]109    pass
[238]110
[2200]111class NIC(record.Record):
[2187]112    pass
[18]113
[2200]114class Disk(record.Record):
[2187]115    pass
[18]116
[2200]117class Type(record.Record):
[2187]118    _identity_field = 'type_id'
[18]119
[2200]120class Mirror(record.Record):
[2187]121    _identity_field = 'mirror_id'
[1247]122
[2200]123class CDROM(record.Record):
[2187]124    _identity_field = 'cdrom_id'
[18]125
[2200]126class Autoinstall(record.Record):
[2187]127    _identity_field = 'autoinstall_id'
[443]128
[991]129session.mapper(Machine, machine_table,
[1714]130              properties={'nics': relation(NIC, backref="machine"),
131                          'disks': relation(Disk, backref="machine"),
132                          'type': relation(Type),
133                          'acl': relation(MachineAccess, backref="machine", passive_deletes=True, cascade="all, delete-orphan")});
[991]134session.mapper(MachineAccess, machine_access_table)
135session.mapper(NIC, nic_table)
136session.mapper(Disk, disk_table)
137session.mapper(Type, types_table)
[1247]138session.mapper(Mirror, mirrors_table)
[1363]139session.mapper(CDROM, cdroms_table,
140               properties={'mirror': relation(Mirror, backref="cdroms")})
[991]141session.mapper(Autoinstall, autoinstalls_table)
[2132]142session.mapper(Owner, owners_table)
[287]143
144def clear_cache():
[1136]145    """Clear sqlalchemy's cache
146    """
[287]147
[1136]148    session.clear()
Note: See TracBrowser for help on using the repository browser.