root / logic / utils.py @ 8d97deff
History | View | Annotate | Download (1.4 kB)
1 | 8d97deff | Vassilios Karakoidas | #
|
---|---|---|---|
2 | 8d97deff | Vassilios Karakoidas | # Utility functions
|
3 | 8d97deff | Vassilios Karakoidas | #
|
4 | 8d97deff | Vassilios Karakoidas | # Various functions
|
5 | 8d97deff | Vassilios Karakoidas | #
|
6 | 8d97deff | Vassilios Karakoidas | # Copyright 2010 Greek Research and Technology Network
|
7 | 8d97deff | Vassilios Karakoidas | #
|
8 | 8d97deff | Vassilios Karakoidas | |
9 | 8d97deff | Vassilios Karakoidas | from db.models import VirtualMachine |
10 | 8d97deff | Vassilios Karakoidas | |
11 | 8d97deff | Vassilios Karakoidas | from logic import credits |
12 | 8d97deff | Vassilios Karakoidas | |
13 | 8d97deff | Vassilios Karakoidas | import synnefo.settings as settings |
14 | 8d97deff | Vassilios Karakoidas | |
15 | 8d97deff | Vassilios Karakoidas | def id_from_instance_name(name): |
16 | 8d97deff | Vassilios Karakoidas | """Returns VirtualMachine's Django id, given a ganeti machine name.
|
17 | 8d97deff | Vassilios Karakoidas |
|
18 | 8d97deff | Vassilios Karakoidas | Strips the ganeti prefix atm. Needs a better name!
|
19 | 8d97deff | Vassilios Karakoidas |
|
20 | 8d97deff | Vassilios Karakoidas | """
|
21 | 8d97deff | Vassilios Karakoidas | if not str(name).startswith(settings.BACKEND_PREFIX_ID): |
22 | 8d97deff | Vassilios Karakoidas | raise VirtualMachine.InvalidBackendIdError(str(name)) |
23 | 8d97deff | Vassilios Karakoidas | ns = str(name).lstrip(settings.BACKEND_PREFIX_ID)
|
24 | 8d97deff | Vassilios Karakoidas | if not ns.isdigit(): |
25 | 8d97deff | Vassilios Karakoidas | raise VirtualMachine.InvalidBackendIdError(str(name)) |
26 | 8d97deff | Vassilios Karakoidas | |
27 | 8d97deff | Vassilios Karakoidas | return int(ns) |
28 | 8d97deff | Vassilios Karakoidas | |
29 | 8d97deff | Vassilios Karakoidas | |
30 | 8d97deff | Vassilios Karakoidas | def get_rsapi_state(vm): |
31 | 8d97deff | Vassilios Karakoidas | """Returns the RSAPI state for a virtual machine"""
|
32 | 8d97deff | Vassilios Karakoidas | try:
|
33 | 8d97deff | Vassilios Karakoidas | r = VirtualMachine.RSAPI_STATE_FROM_OPER_STATE[vm._operstate] |
34 | 8d97deff | Vassilios Karakoidas | except KeyError: |
35 | 8d97deff | Vassilios Karakoidas | return "UNKNOWN" |
36 | 8d97deff | Vassilios Karakoidas | # A machine is in REBOOT if an OP_INSTANCE_REBOOT request is in progress
|
37 | 8d97deff | Vassilios Karakoidas | if r == 'ACTIVE' and vm._backendopcode == 'OP_INSTANCE_REBOOT' and \ |
38 | 8d97deff | Vassilios Karakoidas | vm._backendjobstatus in ('queued', 'waiting', 'running'): |
39 | 8d97deff | Vassilios Karakoidas | return "REBOOT" |
40 | 8d97deff | Vassilios Karakoidas | return r
|
41 | 8d97deff | Vassilios Karakoidas | |
42 | 8d97deff | Vassilios Karakoidas | def update_state(self, new_operstate): |
43 | 8d97deff | Vassilios Karakoidas | """Wrapper around updates of the _operstate field
|
44 | 8d97deff | Vassilios Karakoidas |
|
45 | 8d97deff | Vassilios Karakoidas | Currently calls the charge() method when necessary.
|
46 | 8d97deff | Vassilios Karakoidas |
|
47 | 8d97deff | Vassilios Karakoidas | """
|
48 | 8d97deff | Vassilios Karakoidas | |
49 | 8d97deff | Vassilios Karakoidas | # Call charge() unconditionally before any change of
|
50 | 8d97deff | Vassilios Karakoidas | # internal state.
|
51 | 8d97deff | Vassilios Karakoidas | credits.charge(self)
|
52 | 8d97deff | Vassilios Karakoidas | self._operstate = new_operstate |