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