zfs-generic-smb driver (sharesmb=on)
Signed-off-by: Travis Glenn Hansen <travisghansen@yahoo.com>
This commit is contained in:
parent
88860d3192
commit
6cde0d3a70
|
|
@ -167,6 +167,7 @@ jobs:
|
|||
config:
|
||||
- zfs-generic/iscsi.yaml
|
||||
- zfs-generic/nfs.yaml
|
||||
- zfs-generic/smb.yaml
|
||||
runs-on:
|
||||
- self-hosted
|
||||
- csi-sanity-zfs-generic
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
#!/usr/bin/env -S node --expose-gc ${NODE_OPTIONS_CSI_1} ${NODE_OPTIONS_CSI_2} ${NODE_OPTIONS_CSI_3} ${NODE_OPTIONS_CSI_4} ${NODE_OPTIONS_CSI_5}
|
||||
#!/usr/bin/env -S node --expose-gc ${NODE_OPTIONS_CSI_1} ${NODE_OPTIONS_CSI_2} ${NODE_OPTIONS_CSI_3} ${NODE_OPTIONS_CSI_4}
|
||||
|
||||
/**
|
||||
* keep the shebang line length under 128
|
||||
* https://github.com/democratic-csi/democratic-csi/issues/171
|
||||
*/
|
||||
|
||||
const yaml = require("js-yaml");
|
||||
const fs = require("fs");
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ zfs:
|
|||
detachedSnapshotsDatasetParentName: tank/ci/${CI_BUILD_KEY}/s
|
||||
|
||||
datasetEnableQuotas: true
|
||||
datasetEnableReservation: true
|
||||
datasetEnableReservation: false
|
||||
datasetPermissionsMode: "0777"
|
||||
datasetPermissionsUser: 0
|
||||
datasetPermissionsGroup: 0
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
driver: zfs-generic-smb
|
||||
|
||||
sshConnection:
|
||||
host: ${SERVER_HOST}
|
||||
port: 22
|
||||
username: ${SERVER_USERNAME}
|
||||
password: ${SERVER_PASSWORD}
|
||||
|
||||
zfs:
|
||||
datasetParentName: tank/ci/${CI_BUILD_KEY}/v
|
||||
detachedSnapshotsDatasetParentName: tank/ci/${CI_BUILD_KEY}/s
|
||||
|
||||
datasetProperties:
|
||||
#aclmode: restricted
|
||||
#aclinherit: passthrough
|
||||
#acltype: nfsv4
|
||||
casesensitivity: insensitive
|
||||
|
||||
datasetEnableQuotas: true
|
||||
datasetEnableReservation: false
|
||||
datasetPermissionsMode: "0770"
|
||||
datasetPermissionsUser: smbroot
|
||||
datasetPermissionsGroup: smbroot
|
||||
|
||||
smb:
|
||||
shareHost: ${SERVER_HOST}
|
||||
shareStrategy: "setDatasetProperties"
|
||||
shareStrategySetDatasetProperties:
|
||||
properties:
|
||||
sharesmb: "on"
|
||||
|
||||
node:
|
||||
mount:
|
||||
mount_flags: "username=smbroot,password=smbroot"
|
||||
|
||||
_private:
|
||||
csi:
|
||||
volume:
|
||||
idHash:
|
||||
strategy: crc16
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
driver: zfs-generic-smb
|
||||
sshConnection:
|
||||
host: server address
|
||||
port: 22
|
||||
username: root
|
||||
# use either password or key
|
||||
password: ""
|
||||
privateKey: |
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
...
|
||||
-----END RSA PRIVATE KEY-----
|
||||
|
||||
zfs:
|
||||
# can be used to override defaults if necessary
|
||||
# the example below is useful for TrueNAS 12
|
||||
#cli:
|
||||
# sudoEnabled: true
|
||||
# paths:
|
||||
# zfs: /usr/local/sbin/zfs
|
||||
# zpool: /usr/local/sbin/zpool
|
||||
# sudo: /usr/local/bin/sudo
|
||||
# chroot: /usr/sbin/chroot
|
||||
|
||||
# can be used to set arbitrary values on the dataset/zvol
|
||||
# can use handlebars templates with the parameters from the storage class/CO
|
||||
datasetProperties:
|
||||
#aclmode: restricted
|
||||
#aclinherit: passthrough
|
||||
#acltype: nfsv4
|
||||
casesensitivity: insensitive
|
||||
|
||||
datasetParentName: tank/k8s/test
|
||||
# do NOT make datasetParentName and detachedSnapshotsDatasetParentName overlap
|
||||
# they may be siblings, but neither should be nested in the other
|
||||
detachedSnapshotsDatasetParentName: tanks/k8s/test-snapshots
|
||||
|
||||
datasetEnableQuotas: true
|
||||
datasetEnableReservation: false
|
||||
datasetPermissionsMode: "0770"
|
||||
datasetPermissionsUser: smbroot
|
||||
datasetPermissionsGroup: smbroot
|
||||
|
||||
#datasetPermissionsAclsBinary: nfs4_setfacl
|
||||
#datasetPermissionsAcls:
|
||||
#- "-m everyone@:full_set:allow"
|
||||
#- -s group@:modify_set:fd:allow
|
||||
#- -a owner@:full_set:fd:allow
|
||||
|
||||
smb:
|
||||
# https://docs.oracle.com/cd/E23824_01/html/821-1448/gayne.html
|
||||
# https://www.hiroom2.com/2016/05/18/ubuntu-16-04-share-zfs-storage-via-nfs-smb/
|
||||
shareStrategy: "setDatasetProperties"
|
||||
shareStrategySetDatasetProperties:
|
||||
properties:
|
||||
sharesmb: "on"
|
||||
# share: ""
|
||||
shareHost: "server address"
|
||||
|
|
@ -52,6 +52,7 @@ class ControllerZfsGenericDriver extends ControllerZfsBaseDriver {
|
|||
getDriverZfsResourceType() {
|
||||
switch (this.options.driver) {
|
||||
case "zfs-generic-nfs":
|
||||
case "zfs-generic-smb":
|
||||
return "filesystem";
|
||||
case "zfs-generic-iscsi":
|
||||
return "volume";
|
||||
|
|
@ -109,6 +110,48 @@ class ControllerZfsGenericDriver extends ControllerZfsBaseDriver {
|
|||
};
|
||||
return volume_context;
|
||||
|
||||
case "zfs-generic-smb":
|
||||
let share;
|
||||
switch (this.options.smb.shareStrategy) {
|
||||
case "setDatasetProperties":
|
||||
function generateShareName(dataset) {
|
||||
let name = dataset;
|
||||
name = name.replaceAll("/", "_");
|
||||
name = name.replaceAll("-", "_");
|
||||
return name;
|
||||
}
|
||||
|
||||
for (let key of ["share", "sharesmb"]) {
|
||||
if (
|
||||
this.options.smb.shareStrategySetDatasetProperties.properties[
|
||||
key
|
||||
]
|
||||
) {
|
||||
await zb.zfs.set(datasetName, {
|
||||
[key]:
|
||||
this.options.smb.shareStrategySetDatasetProperties
|
||||
.properties[key],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
share = generateShareName(datasetName);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
properties = await zb.zfs.get(datasetName, ["mountpoint"]);
|
||||
properties = properties[datasetName];
|
||||
this.ctx.logger.debug("zfs props data: %j", properties);
|
||||
|
||||
volume_context = {
|
||||
node_attach_driver: "smb",
|
||||
server: this.options.smb.shareHost,
|
||||
share,
|
||||
};
|
||||
return volume_context;
|
||||
|
||||
case "zfs-generic-iscsi":
|
||||
let basename;
|
||||
let iscsiName;
|
||||
|
|
@ -268,6 +311,36 @@ create /backstores/block/${iscsiName}
|
|||
}
|
||||
break;
|
||||
|
||||
case "zfs-generic-smb":
|
||||
switch (this.options.smb.shareStrategy) {
|
||||
case "setDatasetProperties":
|
||||
for (let key of ["share", "sharesmb"]) {
|
||||
if (
|
||||
this.options.smb.shareStrategySetDatasetProperties.properties[
|
||||
key
|
||||
]
|
||||
) {
|
||||
try {
|
||||
await zb.zfs.inherit(datasetName, key);
|
||||
} catch (err) {
|
||||
if (err.toString().includes("dataset does not exist")) {
|
||||
// do nothing
|
||||
} else {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
await sleep(2000); // let things settle
|
||||
break;
|
||||
default:
|
||||
throw new GrpcError(
|
||||
grpc.status.FAILED_PRECONDITION,
|
||||
`invalid configuration: unknown shareStrategy ${this.options.nfs.shareStrategy}`
|
||||
);
|
||||
}
|
||||
break;
|
||||
|
||||
case "zfs-generic-iscsi":
|
||||
let basename;
|
||||
let iscsiName;
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ function factory(ctx, options) {
|
|||
case "synology-iscsi":
|
||||
return new ControllerSynologyDriver(ctx, options);
|
||||
case "zfs-generic-nfs":
|
||||
case "zfs-generic-smb":
|
||||
case "zfs-generic-iscsi":
|
||||
return new ControllerZfsGenericDriver(ctx, options);
|
||||
case "zfs-local-dataset":
|
||||
|
|
|
|||
|
|
@ -679,6 +679,10 @@ class CsiBaseDriver {
|
|||
if (!has_guest) {
|
||||
mount_flags.push("guest");
|
||||
}
|
||||
|
||||
if (volume_mount_group) {
|
||||
mount_flags.push(`gid=${volume_mount_group}`);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "iscsi":
|
||||
|
|
|
|||
Loading…
Reference in New Issue