Exemplo n.º 1
0
def backups(request, hostname):
    """
    List of server backups stored on this node.
    """
    context = collect_view_data(request, 'node_list')
    context['node'] = node = get_node(request, hostname)
    context['nodes'] = (node, )
    context['node_online'] = node.is_online()
    context['submenu_auto'] = ''
    context['lastbkp'] = []
    context['can_edit'] = True
    context['bkp_node'] = True
    context['last_bkpid'] = request.GET.get('last_bkpid', None)

    # This could change the current DC
    _backup_list_context(request, node, context)

    context['bkpform_update'] = UpdateBackupForm(None, prefix='snap_update')
    context['bkpform_restore'] = RestoreBackupForm(
        get_vms(request, sr=(), prefetch_tags=False))
    context['update_mod_source'] = reverse('node_backup_form',
                                           node.hostname,
                                           query_string=context['qs'])

    return render(request, 'gui/node/backups.html', context)
Exemplo n.º 2
0
def backup(request, hostname):
    """
    Backup list and backup definitions.
    """
    dc_settings = request.dc.settings
    context = collect_view_data(request, 'vm_list')
    context['vm'] = vm = get_vm(request, hostname, sr=('dc', 'owner', 'template', 'slavevm'))
    context['vms'] = vms = get_vms(request)
    context['vms_tags'] = get_vms_tags(vms)
    context['can_edit'] = request.user.is_admin(request)
    context['bkpdefs'] = bkpdefs = get_vm_bkpdefs(vm)
    context['lastbkp'] = []
    context.update(get_vm_backups(request, vm))  # Add paginator

    if context['can_edit']:
        context['bkpform_create'] = CreateBackupForm(vm, bkpdefs, prefix='snap_create')
        context['bkpform_restore'] = RestoreBackupForm(vms)
        context['bkpform_update'] = UpdateBackupForm(vm, prefix='snap_update')
        context['bkpdeform_update'] = UpdateBackupDefineForm(request, vm)
        bkpdef_initial = {
            'zpool': dc_settings.VMS_STORAGE_DEFAULT,
            'type': BackupDefine.DATASET,
            'disk_id': 1,
            'active': True,
            'compression': dc_settings.VMS_VM_BACKUP_COMPRESSION_DEFAULT
        }
        context['bkpdeform_create'] = CreateBackupDefineForm(request, vm, prefix='bkpdef_create',
                                                             initial=bkpdef_initial)

    view_vm_backup.send(sender='gui.vm.views.backup', request=request, context=context)
    return render(request, 'gui/vm/backup.html', context)
Exemplo n.º 3
0
def snapshot(request, hostname):
    """
    Snapshot list and snapshot definitions.
    """
    context = collect_view_data(request, 'vm_list')
    context['vm'] = vm = get_vm(request, hostname, sr=('dc', 'owner', 'template', 'slavevm'))
    context['vms'] = vms = get_vms(request)
    context['vms_tags'] = get_vms_tags(vms)
    context['can_edit'] = request.user.is_admin(request)
    context['can_image'] = request.user.is_staff or request.user.has_permission(request, ImageAdminPermission.name)
    context['cannot_snapshot'] = not (request.user.is_admin(request) or vm.is_installed())
    context['snapform_create'] = CreateSnapshotForm(vm, prefix='snap_create', initial={'disk_id': 1})
    context['snapform_update'] = UpdateSnapshotForm(vm, prefix='snap_update')
    context['lastsnap'] = []
    context['snapdefs'] = get_vm_snapdefs(vm)
    context.update(get_vm_snapshots(request, vm))  # Add snapshots and count attributes + paginator

    if context['can_edit']:
        context['snapdeform_update'] = UpdateSnapshotDefineForm(request, vm)
        context['snapdeform_create'] = CreateSnapshotDefineForm(request, vm, prefix='snapdef_create',
                                                                initial={'disk_id': 1, 'active': True})

    if context['can_image']:
        context['imgform'] = SnapshotImageForm(vm, request, None, prefix='img', initial={'owner': request.user.username,
                                                                                         'access': Image.PRIVATE,
                                                                                         'version': '1.0'})

    view_vm_snapshot.send(sender='gui.vm.views.snapshot', request=request, context=context)
    return render(request, 'gui/vm/snapshot.html', context)
Exemplo n.º 4
0
def _generic_add_context(request):
    """
    Collect generic context for add vm view.

    Partial add VM view, was separated to smaller functions due to code reuse in Enterprise Edition apps (payments).
    """
    context = collect_view_data(request, 'vm_add', mb_addon=SIZE_FIELD_MB_ADDON)
    context['vms'] = vms = get_vms(request)
    context['vms_tags'] = get_vms_tags(vms)

    return context
Exemplo n.º 5
0
def my_list(request):
    """
    Page with list of all servers that were created by user.
    """
    context = collect_view_data(request, 'vm_list')
    context['vms'] = vms = get_vms(request)
    context['vms_tags'] = get_vms_tags(vms)
    context['can_edit'] = request.user.is_admin(request)
    context['vms_node_online'] = not Vm.objects.filter(node__isnull=False).exclude(node__status=Node.ONLINE).exists()
    context['stop_timeout_period'] = request.dc.settings.VMS_VM_STOP_TIMEOUT_DEFAULT

    return render(request, 'gui/vm/list.html', context)
Exemplo n.º 6
0
def console(request, hostname):
    """
    Page with remote VNC console of the server.
    """
    context = collect_view_data(request, 'vm_list')
    context['vm'] = get_vm(request, hostname)
    context['vms'] = vms = get_vms(request)
    context['vms_tags'] = get_vms_tags(vms)
    context['can_edit'] = request.user.is_admin(request)

    view_vm_console.send(sender='gui.vm.views.console', request=request, context=context)
    return render(request, 'gui/vm/console.html', context)
Exemplo n.º 7
0
def details(request, hostname):
    """
    Page with details of server.
    """
    dc_settings = request.dc.settings
    context = collect_view_data(request,
                                'vm_list',
                                mb_addon=SIZE_FIELD_MB_ADDON)
    context['vm'] = vm = get_vm(request,
                                hostname,
                                sr=('dc', 'owner', 'node', 'template',
                                    'slavevm'))
    context['vms'] = vms = get_vms(request)
    context['vms_tags'] = get_vms_tags(vms)
    context['vm_disks'] = vm_disks = get_vm_define_disk(request, vm)
    context['vm_nics'] = vm_nics = get_vm_define_nic(request, vm)
    context['ptrform'] = PTRForm(prefix='ptr')
    context['iso_rescuecd'] = dc_settings.VMS_ISO_RESCUECD
    context['mon_sla_enabled'] = (settings.MON_ZABBIX_ENABLED
                                  and DefaultDc().settings.MON_ZABBIX_ENABLED
                                  and dc_settings.MON_ZABBIX_VM_SLA)
    context['can_edit'] = request.user.is_admin(request)

    if vm.slave_vms:
        context['slave_vm'] = vm.slave_vm.select_related(
            'master_vm', 'vm', 'vm__node').exclude(name='').first()
    else:
        context['slave_vm'] = None

    if vm.is_kvm():
        context['iso_images'] = get_iso_images(request, vm.ostype)

    if vm.ostype == Vm.WINDOWS:
        context[
            'stop_timeout_period'] = dc_settings.VMS_VM_STOP_WIN_TIMEOUT_DEFAULT
    else:
        context[
            'stop_timeout_period'] = dc_settings.VMS_VM_STOP_TIMEOUT_DEFAULT

    if context['can_edit']:
        context['settingsform'] = AdminServerSettingsForm(request,
                                                          vm,
                                                          prefix='opt')

        initial_disk = {
            'disk_id': len(vm_disks) + 1,
            'zpool': vm.zpool,
            'model': dc_settings.VMS_DISK_MODEL_DEFAULT,
            'compression': dc_settings.VMS_DISK_COMPRESSION_DEFAULT,
            'image': dc_settings.VMS_DISK_IMAGE_DEFAULT,
        }
        if initial_disk['disk_id'] == 1:
            initial_disk['boot'] = True

        initial_nic = {
            'nic_id': len(vm_nics) + 1,
            'model': dc_settings.VMS_NIC_MODEL_DEFAULT,
            'net': dc_settings.VMS_NET_DEFAULT,
        }

        if initial_nic['nic_id'] == 1:
            initial_nic['dns'] = True
            initial_nic['primary'] = True

        if initial_nic['nic_id'] == dc_settings.VMS_NIC_MONITORING_DEFAULT:
            initial_nic['monitoring'] = True

        if vm.template:
            initial_disk.update(
                vm.template.get_vm_define_disk(initial_disk['disk_id']))
            initial_nic.update(
                vm.template.get_vm_define_nic(initial_nic['nic_id']))

        context['disk_settingsform'] = AdminServerDiskSettingsForm(
            request, vm, prefix='opt-disk', initial=initial_disk)
        context['nic_settingsform'] = AdminServerNicSettingsForm(
            request, vm, prefix='opt-nic', initial=initial_nic)

    else:
        context['settingsform'] = ServerSettingsForm(request, vm, prefix='opt')
        context['disk_settingsform'] = ServerDiskSettingsForm(
            request, vm, prefix='opt-disk')
        context['nic_settingsform'] = ServerNicSettingsForm(request,
                                                            vm,
                                                            prefix='opt-nic')

    view_vm_details.send(sender='gui.vm.views.details',
                         request=request,
                         context=context)
    return render(request, 'gui/vm/details.html', context)
Exemplo n.º 8
0
def monitoring(request, hostname, graph_type='cpu'):
    """
    Page with monitoring graphs.
    """
    context = collect_view_data(request, 'vm_list')
    context['vm'] = vm = get_vm(request, hostname)
    context['vms'] = vms = get_vms(request)
    context['vms_tags'] = get_vms_tags(vms)
    context['can_edit'] = request.user.is_admin(request)

    if vm.is_notcreated():
        zabbix_sync_enabled = vm.zabbix_sync
    else:
        zabbix_sync_enabled = vm.is_zabbix_sync_active()

    if not zabbix_sync_enabled:
        return render(request, 'gui/vm/monitoring_disabled.html', context)

    from api.mon.vm.graphs import GRAPH_ITEMS

    context['graph_items'] = GRAPH_ITEMS
    context['obj_lifetime'] = vm.lifetime
    context['obj_operational'] = vm.status in vm.STATUS_OPERATIONAL

    if graph_type == 'memory':
        graphs = (
            Graph('mem-usage'),
            Graph('swap-usage'),
        )
    elif graph_type == 'network':
        context['vm_nics'] = nics = range(1, len(vm.json_get_nics()) + 1)
        graphs = list(
            chain(*[(Graph('net-bandwidth', nic_id=i),
                     Graph('net-packets', nic_id=i)) for i in nics]))
    elif graph_type == 'disk':
        if vm.is_kvm():
            prefix = 'disk'
        else:
            prefix = 'fs'

        context['desc_throughput'] = GRAPH_ITEMS.get(prefix +
                                                     '-throughput').get('desc')
        context['desc_io'] = GRAPH_ITEMS.get(prefix + '-io').get('desc')
        context['graph_prefix'] = prefix
        context['vm_disks'] = disks = range(1, len(vm.json_get_disks()) + 1)
        graphs = list(
            chain(*[(Graph(prefix + '-throughput', disk_id=i),
                     Graph(prefix + '-io', disk_id=i)) for i in disks]))
    elif graph_type == 'vm-disk':
        graphs = (
            Graph('vm-disk-logical-throughput'),
            Graph('vm-disk-logical-io'),
            Graph('vm-disk-physical-throughput'),
            Graph('vm-disk-physical-io'),
            Graph('vm-disk-io-operations'),
        )
    else:
        graph_type = 'cpu'
        graphs = (
            Graph('cpu-usage'),
            Graph('cpu-waittime'),
            Graph('cpu-load'),
        )

    context['graphs'] = graphs
    context['graph_type'] = graph_type

    view_vm_monitoring.send(sender='gui.vm.views.monitoring',
                            request=request,
                            context=context)
    return render(request, 'gui/vm/monitoring_%s.html' % graph_type, context)
Exemplo n.º 9
0
 def __init__(self, request, *args, **kwargs):
     super(AddTicketForm, self).__init__(*args, **kwargs)
     self.fields['vm'].choices = [('', _('Select Server'))] + \
         list(get_vms(request, prefetch_tags=False).values_list('hostname', 'alias'))
Exemplo n.º 10
0
    def generate_datacenter(self, request, sample=False, hostnames=None):
        row = 3
        row_color = self.even_row

        if sample:
            vms = []
            for i in range(0, 3):
                vms.append(SampleVm(request, number=i + 1))
        else:
            vms = get_vms(request).filter(hostname__in=hostnames)

        for vm in vms:
            # Decide what color row should have
            if row_color == self.even_row:
                row_color = self.odd_row
            else:
                row_color = self.even_row

            nic_row = disk_row = row
            str_row = str(row)
            self.set_row_color(self.sheet_dc, str_row, self.get_header(), bgcolor=row_color)

            # Store datacenter into sheet
            self.sheet_dc[self.get_column_index('Hostname') + str_row] = vm.hostname
            self.sheet_dc[self.get_column_index('Alias') + str_row] = vm.alias
            self.sheet_dc[self.get_column_index('Tags') + str_row] = ','.join([t for t in vm.tags.names()])
            if vm.node:
                if request.user.is_admin(request) and vm.node.hostname:
                    self.sheet_dc[self.get_column_index('Node') + str_row] = vm.node_hostname
                else:
                    self.update_cell(self.sheet_dc, self.get_column_index('Node'), str_row, '',
                                     bgcolor=vm.node.color.replace('#', 'FF'))

            self.sheet_dc[self.get_column_index('OS Type') + str_row] = vm.get_ostype_display()
            self.sheet_dc[self.get_column_index('vCPU') + str_row] = vm.vcpus
            self.sheet_dc[self.get_column_index('RAM') + str_row] = self._convert_to_gb(vm.ram)

            if sample:
                vm_nics = vm.generate_nics()
            else:
                vm_nics = get_vm_define_nic(request, vm)

            for vm_nic in vm_nics:
                if row < nic_row:
                    self.set_row_color(self.sheet_dc, nic_row, self.get_header(), bgcolor=row_color)
                self.sheet_dc[self.get_column_index('Network') + str(nic_row)] = vm_nic['net']
                self.sheet_dc[self.get_column_index('IP') + str(nic_row)] = vm_nic['ip']
                nic_row += 1

            if sample:
                vm_disks = vm.generate_disks()
            else:
                vm_disks = get_vm_define_disk(request, vm)

            for vm_disk in vm_disks:
                if row < disk_row:
                    self.set_row_color(self.sheet_dc, disk_row, self.get_header(), bgcolor=row_color)

                self.sheet_dc[self.get_column_index('Storage') + str(disk_row)] = vm_disk['zpool']
                self.sheet_dc[self.get_column_index('HDD Size') + str(disk_row)] = self._convert_to_gb(vm_disk['size'])
                if vm_disk['image'] is not None:
                    self.sheet_dc[self.get_column_index('Image') + str(disk_row)] = vm_disk['image']
                disk_row += 1

            if disk_row > nic_row:
                row = disk_row
            else:
                row = nic_row