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)
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)
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))
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)
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)