Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / helpdesk / templatetags / helpdesk_tags.py @ 449c2d82

History | View | Annotate | Download (2.8 kB)

1 c3564ce9 Kostas Papadimitriou
from django import template
2 c3564ce9 Kostas Papadimitriou
3 c3564ce9 Kostas Papadimitriou
register = template.Library()
4 c3564ce9 Kostas Papadimitriou
5 c3564ce9 Kostas Papadimitriou
@register.filter(name="vm_public_ip")
6 c3564ce9 Kostas Papadimitriou
def vm_public_ip(vm):
7 c3564ce9 Kostas Papadimitriou
    """
8 c3564ce9 Kostas Papadimitriou
    Identify if vm is connected to ``public`` network and return the ipv4
9 c3564ce9 Kostas Papadimitriou
    address
10 c3564ce9 Kostas Papadimitriou
    """
11 c3564ce9 Kostas Papadimitriou
    try:
12 67fd80f5 Kostas Papadimitriou
        return vm.nics.filter(network__public=True)[0].ipv4
13 c3564ce9 Kostas Papadimitriou
    except IndexError:
14 c3564ce9 Kostas Papadimitriou
        return "No public ip"
15 c3564ce9 Kostas Papadimitriou
16 c3564ce9 Kostas Papadimitriou
17 67fd80f5 Kostas Papadimitriou
VM_STATE_CSS_MAP = {
18 c3564ce9 Kostas Papadimitriou
        'BUILD': 'warning',
19 6c45fa84 Kostas Papadimitriou
        'PENDING': 'warning',
20 c3564ce9 Kostas Papadimitriou
        'ERROR': 'important',
21 c3564ce9 Kostas Papadimitriou
        'STOPPED': 'notice',
22 c3564ce9 Kostas Papadimitriou
        'STARTED': 'success',
23 6c45fa84 Kostas Papadimitriou
        'ACTIVE': 'success',
24 c3564ce9 Kostas Papadimitriou
        'DESTROYED': 'inverse'
25 c3564ce9 Kostas Papadimitriou
}
26 6c45fa84 Kostas Papadimitriou
@register.filter(name="object_status_badge")
27 6c45fa84 Kostas Papadimitriou
def object_status_badge(vm_or_net):
28 c3564ce9 Kostas Papadimitriou
    """
29 c3564ce9 Kostas Papadimitriou
    Return a span badge styled based on the vm current status
30 c3564ce9 Kostas Papadimitriou
    """
31 6c45fa84 Kostas Papadimitriou
    state = vm_or_net.operstate if hasattr(vm_or_net, 'operstate') else \
32 6c45fa84 Kostas Papadimitriou
        vm_or_net.state
33 6c45fa84 Kostas Papadimitriou
    state_cls = VM_STATE_CSS_MAP.get(state, 'notice')
34 c3564ce9 Kostas Papadimitriou
    badge_cls = "badge badge-%s" % state_cls
35 c3564ce9 Kostas Papadimitriou
36 c3564ce9 Kostas Papadimitriou
    deleted_badge = ""
37 6c45fa84 Kostas Papadimitriou
    if vm_or_net.deleted:
38 c3564ce9 Kostas Papadimitriou
        deleted_badge = '<span class="badge badge-important">Deleted</span>'
39 6c45fa84 Kostas Papadimitriou
    return '%s\n<span class="%s">%s</span>' % (deleted_badge, badge_cls, state)
40 c3564ce9 Kostas Papadimitriou
41 6c45fa84 Kostas Papadimitriou
object_status_badge.is_safe = True
42 67fd80f5 Kostas Papadimitriou
43 67fd80f5 Kostas Papadimitriou
@register.filter(name="network_deleted_badge")
44 67fd80f5 Kostas Papadimitriou
def network_deleted_badge(network):
45 67fd80f5 Kostas Papadimitriou
    """
46 67fd80f5 Kostas Papadimitriou
    Return a span badge styled based on the vm current status
47 67fd80f5 Kostas Papadimitriou
    """
48 67fd80f5 Kostas Papadimitriou
    deleted_badge = ""
49 605d23bf Kostas Papadimitriou
    if network.deleted:
50 67fd80f5 Kostas Papadimitriou
        deleted_badge = '<span class="badge badge-important">Deleted</span>'
51 67fd80f5 Kostas Papadimitriou
    return deleted_badge
52 67fd80f5 Kostas Papadimitriou
53 67fd80f5 Kostas Papadimitriou
network_deleted_badge.is_safe = True
54 e620ca07 Olga Brani
55 e620ca07 Olga Brani
@register.filter(name="get_os")
56 e620ca07 Olga Brani
def get_os(vm):
57 e620ca07 Olga Brani
    try:
58 e620ca07 Olga Brani
        return vm.metadata.filter(meta_key="OS").get().meta_value
59 e620ca07 Olga Brani
    except:
60 e620ca07 Olga Brani
        return "unknown"
61 605d23bf Kostas Papadimitriou
62 e620ca07 Olga Brani
get_os.is_safe = True
63 e620ca07 Olga Brani
64 e620ca07 Olga Brani
@register.filter(name="network_vms")
65 6c45fa84 Kostas Papadimitriou
def network_vms(network, account, show_deleted=False):
66 e620ca07 Olga Brani
    vms = []
67 6c45fa84 Kostas Papadimitriou
    nics = network.nics.filter(machine__userid=account)
68 6c45fa84 Kostas Papadimitriou
    if not show_deleted:
69 6c45fa84 Kostas Papadimitriou
        nics = nics.filter(machine__deleted=False).distinct()
70 6c45fa84 Kostas Papadimitriou
    for nic in nics:
71 e620ca07 Olga Brani
        vms.append(nic.machine)
72 e620ca07 Olga Brani
    return vms
73 605d23bf Kostas Papadimitriou
74 e620ca07 Olga Brani
network_vms.is_safe = True
75 7f841ad2 Olga Brani
76 7f841ad2 Olga Brani
@register.filter(name="network_nics")
77 6c45fa84 Kostas Papadimitriou
def network_nics(network, account, show_deleted=False):
78 7f841ad2 Olga Brani
    vms = []
79 6c45fa84 Kostas Papadimitriou
    nics = network.nics.filter(machine__userid=account)
80 6c45fa84 Kostas Papadimitriou
    if not show_deleted:
81 6c45fa84 Kostas Papadimitriou
        nics = nics.filter(machine__deleted=False).distinct()
82 6c45fa84 Kostas Papadimitriou
    return nics
83 605d23bf Kostas Papadimitriou
84 8896e2aa Kostas Papadimitriou
@register.filter(name="backend_info")
85 8896e2aa Kostas Papadimitriou
def backend_info(vm):
86 8896e2aa Kostas Papadimitriou
    content = ""
87 8896e2aa Kostas Papadimitriou
    backend = vm.backend
88 8896e2aa Kostas Papadimitriou
    excluded = ['password_hash', 'hash', 'username']
89 cc5c8608 Kostas Papadimitriou
    if not vm.backend:
90 cc5c8608 Kostas Papadimitriou
        content = "No backend"
91 cc5c8608 Kostas Papadimitriou
        return content
92 cc5c8608 Kostas Papadimitriou
93 8896e2aa Kostas Papadimitriou
    for field in vm.backend._meta.fields:
94 8896e2aa Kostas Papadimitriou
        if field.name in excluded:
95 8896e2aa Kostas Papadimitriou
            continue
96 8896e2aa Kostas Papadimitriou
        content += '<dt>Backend ' + field.name + '</dt><dd>' + \
97 8896e2aa Kostas Papadimitriou
                   str(getattr(backend, field.name)) + '</dd>'
98 8896e2aa Kostas Papadimitriou
    return content
99 8896e2aa Kostas Papadimitriou
100 8896e2aa Kostas Papadimitriou
backend_info.is_safe = True