Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / helpdesk / templatetags / helpdesk_tags.py @ 730fb3b0

History | View | Annotate | Download (2.7 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 730fb3b0 Christos Stavrakakis
6 c3564ce9 Kostas Papadimitriou
@register.filter(name="vm_public_ip")
7 c3564ce9 Kostas Papadimitriou
def vm_public_ip(vm):
8 c3564ce9 Kostas Papadimitriou
    """
9 c3564ce9 Kostas Papadimitriou
    Identify if vm is connected to ``public`` network and return the ipv4
10 c3564ce9 Kostas Papadimitriou
    address
11 c3564ce9 Kostas Papadimitriou
    """
12 c3564ce9 Kostas Papadimitriou
    try:
13 67fd80f5 Kostas Papadimitriou
        return vm.nics.filter(network__public=True)[0].ipv4
14 c3564ce9 Kostas Papadimitriou
    except IndexError:
15 c3564ce9 Kostas Papadimitriou
        return "No public ip"
16 c3564ce9 Kostas Papadimitriou
17 c3564ce9 Kostas Papadimitriou
18 67fd80f5 Kostas Papadimitriou
VM_STATE_CSS_MAP = {
19 c3564ce9 Kostas Papadimitriou
        'BUILD': 'warning',
20 6c45fa84 Kostas Papadimitriou
        'PENDING': 'warning',
21 c3564ce9 Kostas Papadimitriou
        'ERROR': 'important',
22 c3564ce9 Kostas Papadimitriou
        'STOPPED': 'notice',
23 c3564ce9 Kostas Papadimitriou
        'STARTED': 'success',
24 6c45fa84 Kostas Papadimitriou
        'ACTIVE': 'success',
25 c3564ce9 Kostas Papadimitriou
        'DESTROYED': 'inverse'
26 c3564ce9 Kostas Papadimitriou
}
27 730fb3b0 Christos Stavrakakis
28 730fb3b0 Christos Stavrakakis
29 730fb3b0 Christos Stavrakakis
@register.filter(name="object_status_badge", is_safe=True)
30 6c45fa84 Kostas Papadimitriou
def object_status_badge(vm_or_net):
31 c3564ce9 Kostas Papadimitriou
    """
32 c3564ce9 Kostas Papadimitriou
    Return a span badge styled based on the vm current status
33 c3564ce9 Kostas Papadimitriou
    """
34 6c45fa84 Kostas Papadimitriou
    state = vm_or_net.operstate if hasattr(vm_or_net, 'operstate') else \
35 6c45fa84 Kostas Papadimitriou
        vm_or_net.state
36 6c45fa84 Kostas Papadimitriou
    state_cls = VM_STATE_CSS_MAP.get(state, 'notice')
37 c3564ce9 Kostas Papadimitriou
    badge_cls = "badge badge-%s" % state_cls
38 c3564ce9 Kostas Papadimitriou
39 c3564ce9 Kostas Papadimitriou
    deleted_badge = ""
40 6c45fa84 Kostas Papadimitriou
    if vm_or_net.deleted:
41 c3564ce9 Kostas Papadimitriou
        deleted_badge = '<span class="badge badge-important">Deleted</span>'
42 6c45fa84 Kostas Papadimitriou
    return '%s\n<span class="%s">%s</span>' % (deleted_badge, badge_cls, state)
43 c3564ce9 Kostas Papadimitriou
44 67fd80f5 Kostas Papadimitriou
45 730fb3b0 Christos Stavrakakis
@register.filter(name="network_deleted_badge", is_safe=True)
46 67fd80f5 Kostas Papadimitriou
def network_deleted_badge(network):
47 67fd80f5 Kostas Papadimitriou
    """
48 67fd80f5 Kostas Papadimitriou
    Return a span badge styled based on the vm current status
49 67fd80f5 Kostas Papadimitriou
    """
50 67fd80f5 Kostas Papadimitriou
    deleted_badge = ""
51 605d23bf Kostas Papadimitriou
    if network.deleted:
52 67fd80f5 Kostas Papadimitriou
        deleted_badge = '<span class="badge badge-important">Deleted</span>'
53 67fd80f5 Kostas Papadimitriou
    return deleted_badge
54 67fd80f5 Kostas Papadimitriou
55 e620ca07 Olga Brani
56 730fb3b0 Christos Stavrakakis
@register.filter(name="get_os", is_safe=True)
57 e620ca07 Olga Brani
def get_os(vm):
58 e620ca07 Olga Brani
    try:
59 e620ca07 Olga Brani
        return vm.metadata.filter(meta_key="OS").get().meta_value
60 e620ca07 Olga Brani
    except:
61 e620ca07 Olga Brani
        return "unknown"
62 605d23bf Kostas Papadimitriou
63 e620ca07 Olga Brani
64 730fb3b0 Christos Stavrakakis
@register.filter(name="network_vms", is_safe=True)
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 7f841ad2 Olga Brani
75 7f841ad2 Olga Brani
@register.filter(name="network_nics")
76 6c45fa84 Kostas Papadimitriou
def network_nics(network, account, show_deleted=False):
77 7f841ad2 Olga Brani
    vms = []
78 6c45fa84 Kostas Papadimitriou
    nics = network.nics.filter(machine__userid=account)
79 6c45fa84 Kostas Papadimitriou
    if not show_deleted:
80 6c45fa84 Kostas Papadimitriou
        nics = nics.filter(machine__deleted=False).distinct()
81 6c45fa84 Kostas Papadimitriou
    return nics
82 605d23bf Kostas Papadimitriou
83 730fb3b0 Christos Stavrakakis
84 730fb3b0 Christos Stavrakakis
@register.filter(name="backend_info", is_safe=True)
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