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] ), })
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": 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, "manual_url": reverse("storage_volumemanager_zfs"), "extend": json.dumps( [{"value": "", "label": "-----"}] + [{"label": x.vol_name, "value": x.vol_name, "enc": x.vol_encrypt > 0} for x in qs if x.is_decrypted()] ), }, )
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(): 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, }}) 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] = [] 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(bysize.iteritems(), reverse=True)) qs = models.Volume.objects.filter(vol_fstype='ZFS') swap = Advanced.objects.latest('id').adv_swapondrive encwarn = ( u'<span style="color: red; font-size:110%%;">%s</span>' u'<p>%s</p>' u'<p>%s</p>' u'<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.' ), ) 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( [{'value': '', 'label': '-----'}] + [{ 'label': x.vol_name, 'value': x.vol_name, 'enc': x.vol_encrypt > 0 } for x in qs if x.is_decrypted()] ), })
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]), })
def volumemanager(request): if request.method == "POST": form = forms.VolumeManagerForm(request.POST) try: 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, }}) except MiddlewareError as e: form._errors['__all__'] = form.error_class([str(e)]) return JsonResp(request, form=form, formsets={'layout': { 'instance': form._formset, }}) _n = notifier() disks = [] # Grab disk list for disk, info in list(_n.get_disks(unused=True).items()): disks.append(forms.Disk( info['devname'], info['capacity'], serial=info.get('ident') )) disks = sorted(disks, key=cmp_to_key(_diskcmp)) bysize = dict() for d in list(disks): 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 Exception: 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), })