Add the ability to set ZFS snapshot properties (functionally identical to `datasetProperties`)
Signed-off-by: solidDoWant <fred.heinecke@yahoo.com>
This commit is contained in:
parent
31f215c55a
commit
a1fdb7f405
|
|
@ -33,6 +33,8 @@ zfs:
|
||||||
# "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}"
|
# "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}"
|
||||||
# "org.freenas:test": "{{ parameters.foo }}"
|
# "org.freenas:test": "{{ parameters.foo }}"
|
||||||
# "org.freenas:test2": "some value"
|
# "org.freenas:test2": "some value"
|
||||||
|
# snapshotProperties:
|
||||||
|
# "org.freenas:key": "value"
|
||||||
|
|
||||||
# total volume name (zvol/<datasetParentName>/<pvc name>) length cannot exceed 63 chars
|
# total volume name (zvol/<datasetParentName>/<pvc name>) length cannot exceed 63 chars
|
||||||
# https://www.ixsystems.com/documentation/freenas/11.2-U5/storage.html#zfs-zvol-config-opts-tab
|
# https://www.ixsystems.com/documentation/freenas/11.2-U5/storage.html#zfs-zvol-config-opts-tab
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,8 @@ zfs:
|
||||||
# "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}"
|
# "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}"
|
||||||
# "org.freenas:test": "{{ parameters.foo }}"
|
# "org.freenas:test": "{{ parameters.foo }}"
|
||||||
# "org.freenas:test2": "some value"
|
# "org.freenas:test2": "some value"
|
||||||
|
# snapshotProperties:
|
||||||
|
# "org.freenas:key": "value"
|
||||||
|
|
||||||
datasetParentName: tank/k8s/a/vols
|
datasetParentName: tank/k8s/a/vols
|
||||||
# do NOT make datasetParentName and detachedSnapshotsDatasetParentName overlap
|
# do NOT make datasetParentName and detachedSnapshotsDatasetParentName overlap
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,8 @@ zfs:
|
||||||
# "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}"
|
# "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}"
|
||||||
# "org.freenas:test": "{{ parameters.foo }}"
|
# "org.freenas:test": "{{ parameters.foo }}"
|
||||||
# "org.freenas:test2": "some value"
|
# "org.freenas:test2": "some value"
|
||||||
|
# snapshotProperties:
|
||||||
|
# "org.freenas:key": "value"
|
||||||
|
|
||||||
# these are managed automatically via the volume creation process when flagged as an smb volume
|
# these are managed automatically via the volume creation process when flagged as an smb volume
|
||||||
#datasetProperties:
|
#datasetProperties:
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,8 @@ zfs:
|
||||||
# "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}"
|
# "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}"
|
||||||
# "org.freenas:test": "{{ parameters.foo }}"
|
# "org.freenas:test": "{{ parameters.foo }}"
|
||||||
# "org.freenas:test2": "some value"
|
# "org.freenas:test2": "some value"
|
||||||
|
# snapshotProperties:
|
||||||
|
# "org.freenas:key": "value"
|
||||||
|
|
||||||
# total volume name (zvol/<datasetParentName>/<pvc name>) length cannot exceed 63 chars
|
# total volume name (zvol/<datasetParentName>/<pvc name>) length cannot exceed 63 chars
|
||||||
# https://www.ixsystems.com/documentation/freenas/11.2-U5/storage.html#zfs-zvol-config-opts-tab
|
# https://www.ixsystems.com/documentation/freenas/11.2-U5/storage.html#zfs-zvol-config-opts-tab
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,8 @@ zfs:
|
||||||
# "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}"
|
# "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}"
|
||||||
# "org.freenas:test": "{{ parameters.foo }}"
|
# "org.freenas:test": "{{ parameters.foo }}"
|
||||||
# "org.freenas:test2": "some value"
|
# "org.freenas:test2": "some value"
|
||||||
|
# snapshotProperties:
|
||||||
|
# "org.freenas:key": "value"
|
||||||
|
|
||||||
datasetParentName: tank/k8s/a/vols
|
datasetParentName: tank/k8s/a/vols
|
||||||
# do NOT make datasetParentName and detachedSnapshotsDatasetParentName overlap
|
# do NOT make datasetParentName and detachedSnapshotsDatasetParentName overlap
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,8 @@ zfs:
|
||||||
# "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}"
|
# "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}"
|
||||||
# "org.freenas:test": "{{ parameters.foo }}"
|
# "org.freenas:test": "{{ parameters.foo }}"
|
||||||
# "org.freenas:test2": "some value"
|
# "org.freenas:test2": "some value"
|
||||||
|
# snapshotProperties:
|
||||||
|
# "org.freenas:key": "value"
|
||||||
|
|
||||||
datasetProperties:
|
datasetProperties:
|
||||||
aclmode: restricted
|
aclmode: restricted
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,8 @@ zfs:
|
||||||
# "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}"
|
# "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}"
|
||||||
# "org.freenas:test": "{{ parameters.foo }}"
|
# "org.freenas:test": "{{ parameters.foo }}"
|
||||||
# "org.freenas:test2": "some value"
|
# "org.freenas:test2": "some value"
|
||||||
|
# snapshotProperties:
|
||||||
|
# "org.freenas:key": "value"
|
||||||
|
|
||||||
datasetParentName: tank/k8s/test
|
datasetParentName: tank/k8s/test
|
||||||
# do NOT make datasetParentName and detachedSnapshotsDatasetParentName overlap
|
# do NOT make datasetParentName and detachedSnapshotsDatasetParentName overlap
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,8 @@ zfs:
|
||||||
# "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}"
|
# "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}"
|
||||||
# "org.freenas:test": "{{ parameters.foo }}"
|
# "org.freenas:test": "{{ parameters.foo }}"
|
||||||
# "org.freenas:test2": "some value"
|
# "org.freenas:test2": "some value"
|
||||||
|
# snapshotProperties:
|
||||||
|
# "org.freenas:key": "value"
|
||||||
|
|
||||||
datasetParentName: tank/k8s/test
|
datasetParentName: tank/k8s/test
|
||||||
# do NOT make datasetParentName and detachedSnapshotsDatasetParentName overlap
|
# do NOT make datasetParentName and detachedSnapshotsDatasetParentName overlap
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,8 @@ zfs:
|
||||||
# "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}"
|
# "org.freenas:description": "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}/{{ parameters.[csi.storage.k8s.io/pvc/name] }}"
|
||||||
# "org.freenas:test": "{{ parameters.foo }}"
|
# "org.freenas:test": "{{ parameters.foo }}"
|
||||||
# "org.freenas:test2": "some value"
|
# "org.freenas:test2": "some value"
|
||||||
|
# snapshotProperties:
|
||||||
|
# "org.freenas:key": "value"
|
||||||
|
|
||||||
datasetParentName: tank/k8s/test
|
datasetParentName: tank/k8s/test
|
||||||
# do NOT make datasetParentName and detachedSnapshotsDatasetParentName overlap
|
# do NOT make datasetParentName and detachedSnapshotsDatasetParentName overlap
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,8 @@ zfs:
|
||||||
#aclinherit: passthrough
|
#aclinherit: passthrough
|
||||||
#acltype: nfsv4
|
#acltype: nfsv4
|
||||||
casesensitivity: insensitive
|
casesensitivity: insensitive
|
||||||
|
# snapshotProperties:
|
||||||
|
# "org.freenas:key": "value"
|
||||||
|
|
||||||
datasetParentName: tank/k8s/test
|
datasetParentName: tank/k8s/test
|
||||||
# do NOT make datasetParentName and detachedSnapshotsDatasetParentName overlap
|
# do NOT make datasetParentName and detachedSnapshotsDatasetParentName overlap
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,8 @@ zfs:
|
||||||
|
|
||||||
datasetProperties:
|
datasetProperties:
|
||||||
# key: value
|
# key: value
|
||||||
|
snapshotProperties:
|
||||||
|
# "org.freenas:key": "value"
|
||||||
|
|
||||||
datasetEnableQuotas: true
|
datasetEnableQuotas: true
|
||||||
datasetEnableReservation: false
|
datasetEnableReservation: false
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,8 @@ zfs:
|
||||||
|
|
||||||
datasetProperties:
|
datasetProperties:
|
||||||
# key: value
|
# key: value
|
||||||
|
snapshotProperties:
|
||||||
|
# "org.freenas:key": "value"
|
||||||
|
|
||||||
zvolCompression:
|
zvolCompression:
|
||||||
zvolDedup:
|
zvolDedup:
|
||||||
|
|
|
||||||
|
|
@ -2106,6 +2106,19 @@ class ControllerZfsBaseDriver extends CsiBaseDriver {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// user-supplied properties
|
||||||
|
// put early to prevent stupid (user-supplied values overwriting system values)
|
||||||
|
if (driver.options.zfs.snapshotProperties) {
|
||||||
|
for (let property in driver.options.zfs.snapshotProperties) {
|
||||||
|
let value = driver.options.zfs.snapshotProperties[property];
|
||||||
|
const template = Handlebars.compile(value);
|
||||||
|
|
||||||
|
snapshotProperties[property] = template({
|
||||||
|
parameters: call.request.parameters,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const volumeDatasetName = volumeParentDatasetName + "/" + source_volume_id;
|
const volumeDatasetName = volumeParentDatasetName + "/" + source_volume_id;
|
||||||
const datasetName = datasetParentName + "/" + source_volume_id;
|
const datasetName = datasetParentName + "/" + source_volume_id;
|
||||||
snapshotProperties[SNAPSHOT_CSI_NAME_PROPERTY_NAME] = name;
|
snapshotProperties[SNAPSHOT_CSI_NAME_PROPERTY_NAME] = name;
|
||||||
|
|
|
||||||
|
|
@ -4000,6 +4000,19 @@ class FreeNASApiDriver extends CsiBaseDriver {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// user-supplied properties
|
||||||
|
// put early to prevent stupid (user-supplied values overwriting system values)
|
||||||
|
if (driver.options.zfs.snapshotProperties) {
|
||||||
|
for (let property in driver.options.zfs.snapshotProperties) {
|
||||||
|
let value = driver.options.zfs.snapshotProperties[property];
|
||||||
|
const template = Handlebars.compile(value);
|
||||||
|
|
||||||
|
snapshotProperties[property] = template({
|
||||||
|
parameters: call.request.parameters,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const datasetName = datasetParentName + "/" + source_volume_id;
|
const datasetName = datasetParentName + "/" + source_volume_id;
|
||||||
snapshotProperties[SNAPSHOT_CSI_NAME_PROPERTY_NAME] = name;
|
snapshotProperties[SNAPSHOT_CSI_NAME_PROPERTY_NAME] = name;
|
||||||
snapshotProperties[SNAPSHOT_CSI_SOURCE_VOLUME_ID_PROPERTY_NAME] =
|
snapshotProperties[SNAPSHOT_CSI_SOURCE_VOLUME_ID_PROPERTY_NAME] =
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue