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

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

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

File size: 5.5 KB
Line 
1from sqlalchemy import *
2from sqlalchemy import orm
3from sqlalchemy.orm import create_session, relation
4
5from sqlalchemy.ext.sessioncontext import SessionContext
6from sqlalchemy.ext.assignmapper import assign_mapper
7
8from invirt.database import record
9from invirt.database.owner import Owner
10
11__all__ = ['meta',
12           'session',
13           'clear_cache',
14           'machine_table',
15           'machine_access_table',
16           'nic_table',
17           'disk_table',
18           'types_table',
19           'cdroms_table',
20           'mirrors_table',
21           'autoinstalls_table',
22           'owners_table',
23           'Machine',
24           'MachineAccess',
25           'NIC',
26           'Disk',
27           'Type',
28           'CDROM',
29           'Mirror',
30           'Autoinstall',
31           'Owner',
32           'or_',
33           ]
34
35meta = ThreadLocalMetaData()
36session = orm.scoped_session(orm.sessionmaker(transactional=False, autoflush=False))
37
38machine_table = Table('machines', meta,
39       Column('machine_id', Integer, primary_key=True, nullable=False),
40       Column('name', String, nullable=False),
41       Column('description', String, nullable=False),
42       Column('memory', Integer, nullable=False),
43       Column('owner', String, nullable=False),
44       Column('contact', String, nullable=False),
45       Column('uuid', String, nullable=False),
46       Column('administrator', String, nullable=True, default=None),
47       Column('type_id', String, ForeignKey('types.type_id'), nullable=False),
48       Column('autorestart', Boolean, nullable=False, default=False),
49       Column('cpus', Integer, nullable=False, default=1),
50       Column('adminable', Boolean, nullable=False, default=False))
51
52nic_table = Table('nics', meta,
53       Column('machine_id', Integer, ForeignKey('machines.machine_id'), nullable=True),
54       Column('mac_addr', String, nullable=False, primary_key=True),
55       Column('ip', String, nullable=False, unique=True),
56       Column('hostname', String, nullable=True),
57       Column('reusable', Boolean, nullable=False, default=True))
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),
68       Column('hvm', Boolean, nullable=False),
69       Column('apic', Boolean, nullable=False),
70       Column('acpi', Boolean, nullable=False),
71       Column('pae', Boolean, nullable=False))
72
73mirrors_table = Table('mirrors', meta,
74       Column('mirror_id', String, primary_key=True, nullable=False),
75       Column('uri_prefix', String, nullable=False))
76
77cdroms_table = Table('cdroms', meta,
78       Column('cdrom_id', String, primary_key=True, nullable=False),
79       Column('description', String, nullable=False),
80       Column('mirror_id', String, ForeignKey('mirrors.mirror_id')),
81       Column('uri_suffix', String))
82
83autoinstalls_table = Table('autoinstalls', meta,
84       Column('autoinstall_id', String, primary_key=True, nullable=False),
85       Column('description', String, nullable=False),
86       Column('type_id', String, ForeignKey('types.type_id'), nullable=False),
87       Column('distribution', String, nullable=False),
88       Column('mirror', String, nullable=False),
89       Column('arch', String, nullable=False))
90
91owners_table = Table('owners', meta,
92       Column('owner_id', String, primary_key=True, nullable=False),
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))
99
100machine_access_table = Table('machine_access', meta,
101       Column('machine_id', Integer, ForeignKey('machines.machine_id', ondelete='CASCADE'), nullable=False, index=True),
102       Column('user', String, nullable=False, index=True),
103       PrimaryKeyConstraint('machine_id', 'user'))
104
105class Machine(record.Record):
106    _identity_field = 'name'
107
108class MachineAccess(record.Record):
109    pass
110
111class NIC(record.Record):
112    pass
113
114class Disk(record.Record):
115    pass
116
117class Type(record.Record):
118    _identity_field = 'type_id'
119
120class Mirror(record.Record):
121    _identity_field = 'mirror_id'
122
123class CDROM(record.Record):
124    _identity_field = 'cdrom_id'
125
126class Autoinstall(record.Record):
127    _identity_field = 'autoinstall_id'
128
129session.mapper(Machine, machine_table,
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")});
134session.mapper(MachineAccess, machine_access_table)
135session.mapper(NIC, nic_table)
136session.mapper(Disk, disk_table)
137session.mapper(Type, types_table)
138session.mapper(Mirror, mirrors_table)
139session.mapper(CDROM, cdroms_table,
140               properties={'mirror': relation(Mirror, backref="cdroms")})
141session.mapper(Autoinstall, autoinstalls_table)
142session.mapper(Owner, owners_table)
143
144def clear_cache():
145    """Clear sqlalchemy's cache
146    """
147
148    session.clear()
Note: See TracBrowser for help on using the repository browser.