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 |