diff --git a/examples/freenas-api-iscsi.yaml b/examples/freenas-api-iscsi.yaml index 210cfed..b46d651 100644 --- a/examples/freenas-api-iscsi.yaml +++ b/examples/freenas-api-iscsi.yaml @@ -33,6 +33,8 @@ zfs: # "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}" # "org.freenas:test": "{{ parameters.foo }}" # "org.freenas:test2": "some value" + # can be used to set the comments field in the UI + #datasetCommentTemplate: "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}" # total volume name (zvol//) length cannot exceed 63 chars # https://www.ixsystems.com/documentation/freenas/11.2-U5/storage.html#zfs-zvol-config-opts-tab diff --git a/src/driver/freenas/api.js b/src/driver/freenas/api.js index 8af3853..b94b75b 100644 --- a/src/driver/freenas/api.js +++ b/src/driver/freenas/api.js @@ -2173,6 +2173,26 @@ class FreeNASApiDriver extends CsiBaseDriver { */ const datasetName = datasetParentName + "/" + volume_id; + // Instead of templatizing the name, use the comment field to store details visible in the UI. + let datasetComment; + if (this.options.zfs.datasetCommentTemplate) { + datasetComment = Handlebars.compile( + this.options.zfs.datasetCommentTemplate + )({ + name: call.request.name, + parameters: call.request.parameters, + csi: { + name: this.ctx.args.csiName, + version: this.ctx.args.csiVersion, + }, + zfs: { + datasetName: datasetName, + }, + }); + } else { + datasetComment = ""; + } + // ensure volumes with the same name being requested a 2nd time but with a different size fails try { let properties = await httpApiClient.DatasetGet(datasetName, [ @@ -2399,6 +2419,7 @@ class FreeNASApiDriver extends CsiBaseDriver { break; } + volumeProperties.comments = datasetComment; response = await httpApiClient.DatasetSet( datasetName, volumeProperties @@ -2438,6 +2459,13 @@ class FreeNASApiDriver extends CsiBaseDriver { throw err; } + + // CloneCreate doesn't support the comments field, so set it after the fact. + if (datasetComment) { + await httpApiClient.DatasetSet(datasetName, { + comments: datasetComment + }); + } } if (!zb.helpers.isZfsSnapshot(volume_content_source_snapshot_id)) { @@ -2569,6 +2597,7 @@ class FreeNASApiDriver extends CsiBaseDriver { } } + volumeProperties.comments = datasetComment; response = await httpApiClient.DatasetSet( datasetName, volumeProperties @@ -2605,6 +2634,13 @@ class FreeNASApiDriver extends CsiBaseDriver { throw err; } + + // CloneCreate doesn't support the comments field, so set it after the fact. + if (datasetComment) { + await httpApiClient.DatasetSet(datasetName, { + comments: datasetComment + }); + } } break; default: @@ -2629,6 +2665,7 @@ class FreeNASApiDriver extends CsiBaseDriver { share_type: driver.getDriverShareType().includes("smb") ? "SMB" : "GENERIC", + comments: datasetComment, user_properties: httpApiClient.getPropertiesKeyValueArray( httpApiClient.getUserProperties(volumeProperties) ),