Statistics
| Branch: | Tag: | Revision:

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