-
Notifications
You must be signed in to change notification settings - Fork 370
/
models.py
219 lines (165 loc) · 5.45 KB
/
models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
from django.db import models
from django.utils.functional import cached_property
from django.utils.translation import gettext_lazy as _
from libvirt import VIR_DOMAIN_XML_SECURE
from computes.models import Compute
from vrtManager.instance import wvmInstance
class Flavor(models.Model):
label = models.CharField(_('label'), max_length=12, unique=True)
memory = models.IntegerField(_('memory'))
vcpu = models.IntegerField(_('vcpu'))
disk = models.IntegerField(_('disk'))
def __str__(self):
return self.label
class InstanceManager(models.Manager):
def get_queryset(self):
return super().get_queryset().select_related('compute')
class Instance(models.Model):
compute = models.ForeignKey(Compute, on_delete=models.CASCADE)
name = models.CharField(_('name'), max_length=120, db_index=True)
uuid = models.CharField(_('uuid'), max_length=36, db_index=True)
is_template = models.BooleanField(_('is template'), default=False)
created = models.DateTimeField(_('created'), auto_now_add=True)
objects = InstanceManager()
def __str__(self):
return f'{self.compute}/{self.name}'
@cached_property
def proxy(self):
return wvmInstance(
self.compute.hostname,
self.compute.login,
self.compute.password,
self.compute.type,
self.name,
)
@cached_property
def media(self):
return self.proxy.get_media_devices()
@cached_property
def media_iso(self):
return sorted(self.proxy.get_iso_media())
@cached_property
def disks(self):
return self.proxy.get_disk_devices()
@cached_property
def status(self):
return self.proxy.get_status()
@cached_property
def autostart(self):
return self.proxy.get_autostart()
@cached_property
def bootmenu(self):
return self.proxy.get_bootmenu()
@cached_property
def boot_order(self):
return self.proxy.get_bootorder()
@cached_property
def arch(self):
return self.proxy.get_arch()
@cached_property
def machine(self):
return self.proxy.get_machine_type()
@cached_property
def firmware(self):
return self.proxy.get_loader()
@cached_property
def nvram(self):
return self.proxy.get_nvram()
@cached_property
def vcpu(self):
return self.proxy.get_vcpu()
@cached_property
def vcpu_range(self):
return self.proxy.get_max_cpus()
@cached_property
def cur_vcpu(self):
return self.proxy.get_cur_vcpu()
@cached_property
def vcpus(self):
return self.proxy.get_vcpus()
@cached_property
def get_uuid(self):
return self.proxy.get_uuid()
@cached_property
def memory(self):
return self.proxy.get_memory()
@cached_property
def cur_memory(self):
return self.proxy.get_cur_memory()
@cached_property
def title(self):
return self.proxy.get_title()
@cached_property
def description(self):
return self.proxy.get_description()
@cached_property
def networks(self):
return self.proxy.get_net_devices()
@cached_property
def qos(self):
return self.proxy.get_all_qos()
@cached_property
def telnet_port(self):
return self.proxy.get_telnet_port()
@cached_property
def console_type(self):
return self.proxy.get_console_type()
@cached_property
def console_port(self):
return self.proxy.get_console_port()
@cached_property
def console_keymap(self):
return self.proxy.get_console_keymap()
@cached_property
def console_listen_address(self):
return self.proxy.get_console_listen_addr()
@cached_property
def guest_agent(self):
return False if self.proxy.get_guest_agent() is None else True
@cached_property
def guest_agent_ready(self):
return self.proxy.is_agent_ready()
@cached_property
def video_model(self):
return self.proxy.get_video_model()
@cached_property
def video_models(self):
return self.proxy.get_video_models(self.arch, self.machine)
@cached_property
def snapshots(self):
return sorted(self.proxy.get_snapshot(), reverse=True, key=lambda k: k['date'])
@cached_property
def inst_xml(self):
return self.proxy._XMLDesc(VIR_DOMAIN_XML_SECURE)
@cached_property
def has_managed_save_image(self):
return self.proxy.get_managed_save_image()
@cached_property
def console_passwd(self):
return self.proxy.get_console_passwd()
@cached_property
def cache_modes(self):
return sorted(self.proxy.get_cache_modes().items())
@cached_property
def io_modes(self):
return sorted(self.proxy.get_io_modes().items())
@cached_property
def discard_modes(self):
return sorted(self.proxy.get_discard_modes().items())
@cached_property
def detect_zeroes_modes(self):
return sorted(self.proxy.get_detect_zeroes_modes().items())
@cached_property
def formats(self):
return self.proxy.get_image_formats()
class PermissionSet(models.Model):
"""
Dummy model for holding set of permissions we need to be automatically added by Django
"""
class Meta:
default_permissions = ()
permissions = [
('clone_instances', 'Can clone instances'),
('passwordless_console', _('Can access console without password')),
]
managed = False