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 |