Example #1
0
    def get(self, many=False):
        request = self.request
        active = self.data.get('active', False)
        sr = ['owner', 'node']

        if self.extended:
            ser_class = ExtendedVmSerializer
            extra = {'select': ExtendedVmSerializer.extra_select}
            sr.append('slavevm')
        else:
            ser_class = VmSerializer
            extra = None

        def set_active(x):
            # Do not revert owner and template, because it could generate lots of queries otherwise
            x.revert_active(revert_owner=False, revert_template=False)
            return x

        if many:
            if self.full or self.extended:
                vms = get_vms(request, sr=sr, order_by=self.order_by)

                if self.extended:
                    # noinspection PyArgumentList
                    vms = vms.extra(**extra).prefetch_related('tags')

                if active:
                    vms = [set_active(vm) for vm in vms]

                if vms:
                    res = ser_class(request, vms, many=True).data
                else:
                    res = []
            else:
                res = list(
                    get_vms(request,
                            order_by=self.order_by).values_list('hostname',
                                                                flat=True))

        else:
            vm = get_vm(request,
                        self.hostname_or_uuid,
                        exists_ok=True,
                        noexists_fail=True,
                        sr=sr,
                        extra=extra)

            if active:
                set_active(vm)

            res = ser_class(request, vm).data

        return SuccessTaskResponse(self.request, res)
Example #2
0
def vm_define_list(request, data=None):
    """
    List (:http:get:`GET </vm/define>`) VM definitions.

    .. http:get:: /vm/define

        :DC-bound?:
            * |dc-yes|
        :Permissions:
            * |VmOwner|
        :Asynchronous?:
            * |async-no|
        :arg data.full: Display full VM definitions (including disk and nic lists) (default: false)
        :type data.full: boolean
        :arg data.active: Display currently active VM definitions on compute node (default: false)
        :type data.active: boolean
        :arg data.order_by: :ref:`Available fields for sorting <order_by>`: ``hostname`` (default: ``hostname``)
        :type data.order_by: string
        :status 200: SUCCESS
        :status 403: Forbidden
    """
    vms = get_vms(request,
                  sr=('node', 'owner', 'template', 'slavevm'),
                  order_by=VmDefineView.get_order_by(data))

    return VmDefineView(request).get(vms.prefetch_related('tags'),
                                     None,
                                     many=True)
Example #3
0
def vm_define_snapshot_list_all(request, data=None):
    """
    List (:http:get:`GET </vm/define/snapshot>`) all snapshot definitions for all VMs.

    .. http:get:: /vm/define/snapshot

        :DC-bound?:
            * |dc-yes|
        :Permissions:
            * |VmOwner|
        :Asynchronous?:
            * |async-no|
        :arg data.full: Return list of objects with all snapshot definition details (default: false)
        :type data.full: boolean
        :arg data.extended: Include total number of snapshots for each snapshot definition (default: false)
        :type data.extended: boolean
        :arg data.order_by: :ref:`Available fields for sorting <order_by>`: ``name``, ``disk_id``, ``hostname``, \
``created`` (default: ``hostname,-created``)
        :type data.order_by: string
        :status 200: SUCCESS
        :status 403: Forbidden
    """
    extra = output_extended_snap_count(request, data)
    # TODO: check indexes
    snap_define = SnapshotDefine.objects.select_related('vm', 'periodic_task', 'periodic_task__crontab')\
                                        .filter(vm__in=get_vms(request))\
                                        .order_by(*SnapshotDefineView.get_order_by(data))

    if extra:
        snap_define = snap_define.extra(extra)

    return SnapshotDefineView(request, data=data).get(None,
                                                      snap_define,
                                                      many=True,
                                                      extended=bool(extra))
Example #4
0
    def __init__(self, request, hostname_or_uuid, action, data):
        super(VmStatus, self).__init__(request)
        self.hostname_or_uuid = hostname_or_uuid
        self.action = action
        self.data = data

        if hostname_or_uuid:
            self.vm = get_vm(request, hostname_or_uuid, exists_ok=True, noexists_fail=True, sr=('node', 'owner'))
        else:
            self.vm = get_vms(request, sr=('node', 'owner'), order_by=self.order_by)
Example #5
0
 def __init__(self, request, *args, **kwargs):
     super(DefaultDcSettingsForm, self).__init__(request, *args, **kwargs)
     all_vms = get_vms(request,
                       dc_bound=False).values_list('uuid', 'hostname')
     self.fields['VMS_IMAGE_VM'].choices = [('', _('(none)'))
                                            ] + list(all_vms)