def dataset_create(request, fs): defaults = {'dataset_compression': 'inherit', 'dataset_atime': 'inherit'} if request.method == 'POST': dataset_form = forms.ZFSDataset(request.POST, fs=fs) if dataset_form.is_valid(): props = {} cleaned_data = dataset_form.cleaned_data dataset_name = "%s/%s" % (fs, cleaned_data.get('dataset_name')) dataset_compression = cleaned_data.get('dataset_compression') dataset_share_type = cleaned_data.get('dataset_share_type') if dataset_share_type == "windows": props['aclmode'] = 'restricted' props['casesensitivity'] = cleaned_data.get( 'dataset_case_sensitivity' ) props['compression'] = dataset_compression.__str__() dataset_atime = cleaned_data.get('dataset_atime') props['atime'] = dataset_atime.__str__() refquota = cleaned_data.get('dataset_refquota') if refquota != '0': props['refquota'] = refquota.__str__() quota = cleaned_data.get('dataset_quota') if quota != '0': props['quota'] = quota.__str__() refreservation = cleaned_data.get('dataset_refreservation') if refreservation != '0': props['refreservation'] = refreservation.__str__() refreservation = cleaned_data.get('dataset_reservation') if refreservation != '0': props['refreservation'] = refreservation.__str__() dedup = cleaned_data.get('dataset_dedup') if dedup != 'inherit': props['dedup'] = dedup.__str__() recordsize = cleaned_data.get('dataset_recordsize') if recordsize: props['recordsize'] = recordsize errno, errmsg = notifier().create_zfs_dataset( path=str(dataset_name), props=props) if errno == 0: if dataset_share_type == "unix": notifier().dataset_init_unix(dataset_name) elif dataset_share_type == "windows": notifier().dataset_init_windows(dataset_name) elif dataset_share_type == "mac": notifier().dataset_init_apple(dataset_name) return JsonResp( request, message=_("Dataset successfully added.")) else: dataset_form.set_error(errmsg) return JsonResp(request, form=dataset_form) else: return JsonResp(request, form=dataset_form) else: dataset_form = forms.ZFSDataset(initial=defaults, fs=fs) return render(request, 'storage/datasets.html', { 'form': dataset_form, 'fs': fs, })
def dataset_edit(request, dataset_name): if request.method == 'POST': dataset_form = forms.ZFSDataset( request.POST, fs=dataset_name, create=False ) if dataset_form.is_valid(): if dataset_form.cleaned_data["dataset_quota"] == "0": dataset_form.cleaned_data["dataset_quota"] = "none" if dataset_form.cleaned_data["dataset_refquota"] == "0": dataset_form.cleaned_data["dataset_refquota"] = "none" error = False errors = {} for attr in ( 'compression', 'atime', 'dedup', 'reservation', 'refreservation', 'quota', 'refquota', ): formfield = 'dataset_%s' % attr if dataset_form.cleaned_data[formfield] == "inherit": success, err = notifier().zfs_inherit_option( dataset_name, attr) else: success, err = notifier().zfs_set_option( dataset_name, attr, dataset_form.cleaned_data[formfield]) error |= not success if not success: errors[formfield] = err if not error: return JsonResp( request, message=_("Dataset successfully edited.")) else: for field, err in errors.items(): dataset_form._errors[field] = dataset_form.error_class([ err, ]) return JsonResp(request, form=dataset_form) else: return JsonResp(request, form=dataset_form) else: dataset_form = forms.ZFSDataset(fs=dataset_name, create=False) return render(request, 'storage/dataset_edit.html', { 'dataset_name': dataset_name, 'form': dataset_form })