Example #1
0
def settings_form(request, hostname):
    """
    Ajax page for changing server settings.
    """
    if hostname is None:
        vm = None
    else:
        vm = get_vm(request, hostname)

    if request.user.is_admin(request):  # can_edit permission
        action = None
        form = AdminServerSettingsForm(request, vm, request.POST, prefix='opt')
    else:
        action = 'update'
        form = ServerSettingsForm(request, vm, request.POST, prefix='opt')

    # noinspection PyUnresolvedReferences
    if form.is_valid():
        # noinspection PyUnresolvedReferences
        status = form.save(action=action, args=(form.current_hostname, ))
        if status == 204:
            # Nothing changed
            return HttpResponse(None, status=status)
        elif status in (200, 201):
            # noinspection PyUnresolvedReferences
            if form.action == 'delete':
                return redirect('vm_list')
            else:
                return redirect('vm_details', hostname=form.saved_hostname)

    return render(request, 'gui/vm/settings_form.html', {
        'settingsform': form,
        'vm': vm,
        'mb_addon': SIZE_FIELD_MB_ADDON,
    })
Example #2
0
def _render_admin_add(request, context):
    """
    Render add vm view for admin (user with can_edit permission).

    Partial add VM view, was separated to smaller functions due to code reuse in Enterprise Edition apps (payments).
    """
    dc_settings = request.dc.settings

    initial = dc_settings.VMS_VM_JSON_DEFAULTS['internal_metadata'].copy()
    initial['node'] = request.GET.get('node', None)
    initial['domain'] = dc_settings.VMS_VM_DOMAIN_DEFAULT
    initial['monitored'] = dc_settings.MON_ZABBIX_ENABLED and dc_settings.MON_ZABBIX_VM_SYNC \
        and dc_settings.VMS_VM_MONITORED_DEFAULT
    initial['cpu_shares'] = dc_settings.VMS_VM_CPU_SHARES_DEFAULT
    initial['zfs_io_priority'] = dc_settings.VMS_VM_ZFS_IO_PRIORITY_DEFAULT
    initial['zpool'] = dc_settings.VMS_STORAGE_DEFAULT
    initial['ostype'] = dc_settings.VMS_VM_OSTYPE_DEFAULT
    initial[
        'snapshot_limit_manual'] = dc_settings.VMS_VM_SNAPSHOT_LIMIT_MANUAL_DEFAULT
    initial[
        'snapshot_size_limit'] = dc_settings.VMS_VM_SNAPSHOT_SIZE_LIMIT_DEFAULT
    initial['owner'] = request.user.username
    initial['mdata'] = dc_settings.VMS_VM_MDATA_DEFAULT
    context['settingsform'] = AdminServerSettingsForm(request,
                                                      None,
                                                      prefix='opt',
                                                      initial=initial)
    context['importform'] = UploadFileForm()

    return render(request, 'gui/vm/add.html', context)
Example #3
0
def multi_settings_form(request):
    """
    Ajax page for changing settings of multiple servers.
    """
    if not request.user.is_admin(request):  # can_edit permission
        raise PermissionDenied

    if request.POST['action'] == 'delete':  # delete only for now
        for hostname in request.POST.getlist('hostname'):
            # DELETE vm_define
            vm = get_vm(request, hostname, auto_dc_switch=False)
            res = AdminServerSettingsForm.api_call('delete', vm, request, args=(hostname,))
            if res.status_code != 200:
                return JSONResponse(res.data, status=res.status_code)

        node = request.GET.get('node', None)

        if node:
            return redirect('node_vms', node)
        else:
            return redirect('vm_list')
Example #4
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)