def volumemanager(request): if request.method == "POST": form = forms.VolumeManagerForm(request.POST) if form.is_valid() and form.save(): events = [] form.done(request, events) return JsonResp( request, message=_("Volume successfully added."), events=events, ) else: return JsonResp(request, form=form, formsets={'layout': { 'instance': form._formset, }}) _n = notifier() disks = [] # Grab disk list # Root device already ruled out for disk, info in list(_n.get_disks().items()): disks.append( forms.Disk(info['devname'], info['capacity'], serial=info.get('ident'))) disks = sorted(disks, key=cmp_to_key(_diskcmp)) # Exclude what's already added used_disks = [] for v in models.Volume.objects.all(): used_disks.extend(v.get_disks()) qs = iSCSITargetExtent.objects.filter(iscsi_target_extent_type='Disk') used_disks.extend([i.get_device()[5:] for i in qs]) bysize = dict() for d in list(disks): if d.dev in used_disks: continue hsize = forms.humanize_number_si(d.size) if hsize not in bysize: bysize[hsize] = [] display_name = d.dev if '/' in display_name: display_name = display_name.split('/')[-1] bysize[hsize].append({ 'dev': d.dev, 'name': str(d), 'displayName': display_name, 'size': d.size, 'serial': d.serial, }) bysize = OrderedDict(sorted(iter(bysize.items()), reverse=True)) swap = Advanced.objects.latest('id').adv_swapondrive encwarn = ( '<span style="color: red; font-size:110%%;">%s</span>' '<p>%s</p>' '<p>%s</p>' '<p>%s</p>' ) % ( _('WARNING!'), _('Always backup the key! If the key is lost, the data on the disks ' 'will also be lost with no hope of recovery.'), _('This type of encryption is primarily targeted at users who are ' 'storing sensitive data and want the ability to remove disks from ' 'the pool and dispose of/re-use them without concern for erasure.'), _('iXsystems, Inc. can not be held responsible for any lost ' 'or unrecoverable data as a consequence of using this feature.'), ) extend = [{'value': '', 'label': '-----'}] qs = models.Volume.objects.all() for vol in qs: if not vol.is_decrypted(): continue try: _n.zpool_parse(vol.vol_name) except: continue extend.append({ 'label': vol.vol_name, 'value': vol.vol_name, 'enc': vol.vol_encrypt > 0 }) return render( request, "storage/volumemanager.html", { 'disks': json.dumps(bysize), 'dedup_warning': forms.DEDUP_WARNING, 'encryption_warning': encwarn, 'swap_size': swap * 1024 * 1024 * 1024, 'manual_url': reverse('storage_volumemanager_zfs'), 'extend': json.dumps(extend), })
def volumemanager(request): if request.method == "POST": form = forms.VolumeManagerForm(request.POST) if form.is_valid() and form.save(): return JsonResp(request, message=_("Volume successfully added.")) else: return JsonResp(request, form=form, formsets={'layout': form._formset}) disks = [] # Grab disk list # Root device already ruled out for disk, info in notifier().get_disks().items(): disks.append( forms.Disk(info['devname'], info['capacity'], serial=info.get('ident'))) disks = sorted(disks, key=lambda x: (x.size, x.dev), cmp=_diskcmp) # Exclude what's already added used_disks = [] for v in models.Volume.objects.all(): used_disks.extend(v.get_disks()) qs = iSCSITargetExtent.objects.filter(iscsi_target_extent_type='Disk') used_disks.extend([i.get_device()[5:] for i in qs]) bysize = dict() for d in list(disks): if d.dev in used_disks: continue hsize = forms.humanize_number_si(d.size) if hsize not in bysize: bysize[hsize] = [] bysize[hsize].append({ 'dev': d.dev, 'name': str(d), 'size': d.size, 'serial': d.serial, }) bysize = OrderedDict(sorted(bysize.iteritems(), reverse=True)) qs = models.Volume.objects.filter(vol_fstype='ZFS') swap = Advanced.objects.latest('id').adv_swapondrive return render( request, "storage/volumemanager.html", { 'disks': json.dumps(bysize), 'dedup_warning': forms.DEDUP_WARNING, 'swap_size': swap * 1024 * 1024 * 1024, 'extend': json.dumps([{ 'value': '', 'label': '-----' }] + [{ 'label': x.vol_name, 'value': x.vol_name, 'enc': x.vol_encrypt > 0 } for x in qs]), })