local-hostpath driver
Signed-off-by: Travis Glenn Hansen <travisghansen@yahoo.com>
This commit is contained in:
parent
ee549cc694
commit
d35feec00c
|
|
@ -18,7 +18,7 @@ jobs:
|
||||||
access_token: ${{ github.token }}
|
access_token: ${{ github.token }}
|
||||||
|
|
||||||
build-npm:
|
build-npm:
|
||||||
name: build
|
name: build-npm
|
||||||
runs-on:
|
runs-on:
|
||||||
- self-hosted
|
- self-hosted
|
||||||
steps:
|
steps:
|
||||||
|
|
@ -33,6 +33,7 @@ jobs:
|
||||||
name: node-modules
|
name: node-modules
|
||||||
#path: node_modules/
|
#path: node_modules/
|
||||||
path: node_modules.tar.gz
|
path: node_modules.tar.gz
|
||||||
|
retention-days: 7
|
||||||
|
|
||||||
csi-sanity-synology:
|
csi-sanity-synology:
|
||||||
needs:
|
needs:
|
||||||
|
|
@ -156,7 +157,6 @@ jobs:
|
||||||
TRUENAS_USERNAME: ${{ secrets.SANITY_TRUENAS_USERNAME }}
|
TRUENAS_USERNAME: ${{ secrets.SANITY_TRUENAS_USERNAME }}
|
||||||
TRUENAS_PASSWORD: ${{ secrets.SANITY_TRUENAS_PASSWORD }}
|
TRUENAS_PASSWORD: ${{ secrets.SANITY_TRUENAS_PASSWORD }}
|
||||||
|
|
||||||
|
|
||||||
# ssh-based drivers
|
# ssh-based drivers
|
||||||
csi-sanity-zfs-generic:
|
csi-sanity-zfs-generic:
|
||||||
needs:
|
needs:
|
||||||
|
|
@ -210,6 +210,30 @@ jobs:
|
||||||
env:
|
env:
|
||||||
TEMPLATE_CONFIG_FILE: "./ci/configs/${{ matrix.config }}"
|
TEMPLATE_CONFIG_FILE: "./ci/configs/${{ matrix.config }}"
|
||||||
|
|
||||||
|
# zfs-local drivers
|
||||||
|
csi-sanity-local-hostpath:
|
||||||
|
needs:
|
||||||
|
- build-npm
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
config:
|
||||||
|
- local-hostpath/basic.yaml
|
||||||
|
runs-on:
|
||||||
|
- self-hosted
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
name: node-modules
|
||||||
|
- name: csi-sanity
|
||||||
|
run: |
|
||||||
|
# run tests
|
||||||
|
ci/bin/run.sh
|
||||||
|
env:
|
||||||
|
TEMPLATE_CONFIG_FILE: "./ci/configs/${{ matrix.config }}"
|
||||||
|
CSI_SANITY_SKIP: "should fail when requesting to create a snapshot with already existing name and different source volume ID|should fail when requesting to create a volume with already existing name and different capacity"
|
||||||
|
|
||||||
build-docker:
|
build-docker:
|
||||||
needs:
|
needs:
|
||||||
- csi-sanity-synology
|
- csi-sanity-synology
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,8 @@ csi-sanity --csi.endpoint "unix://${CSI_ENDPOINT}" \
|
||||||
--csi.mountdir "${CSI_SANITY_TEMP_DIR}/mnt" \
|
--csi.mountdir "${CSI_SANITY_TEMP_DIR}/mnt" \
|
||||||
--csi.stagingdir "${CSI_SANITY_TEMP_DIR}/stage" \
|
--csi.stagingdir "${CSI_SANITY_TEMP_DIR}/stage" \
|
||||||
--csi.testvolumeexpandsize 2147483648 \
|
--csi.testvolumeexpandsize 2147483648 \
|
||||||
--csi.testvolumesize 1073741824
|
--csi.testvolumesize 1073741824 \
|
||||||
|
-ginkgo.skip "${CSI_SANITY_SKIP}" \
|
||||||
|
-ginkgo.focus "${CSI_SANITY_FOCUS}"
|
||||||
|
|
||||||
rm -rf "${CSI_SANITY_TEMP_DIR}"
|
rm -rf "${CSI_SANITY_TEMP_DIR}"
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
driver: local-hostpath
|
||||||
|
instance_id:
|
||||||
|
local-hostpath:
|
||||||
|
shareBasePath: "/tmp/local-hostpath/${CI_BUILD_KEY}/controller"
|
||||||
|
controllerBasePath: "/tmp/local-hostpath/${CI_BUILD_KEY}/controller"
|
||||||
|
dirPermissionsMode: "0777"
|
||||||
|
dirPermissionsUser: root
|
||||||
|
dirPermissionsGroup: wheel
|
||||||
|
|
@ -41,7 +41,7 @@ class ControllerClientCommonDriver extends CsiBaseDriver {
|
||||||
|
|
||||||
options.service.identity.capabilities.volume_expansion = [
|
options.service.identity.capabilities.volume_expansion = [
|
||||||
//"UNKNOWN",
|
//"UNKNOWN",
|
||||||
"ONLINE",
|
//"ONLINE",
|
||||||
//"OFFLINE"
|
//"OFFLINE"
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
const _ = require("lodash");
|
||||||
|
|
||||||
|
const { ControllerClientCommonDriver } = require("../controller-client-common");
|
||||||
|
|
||||||
|
const NODE_TOPOLOGY_KEY_NAME = "org.democratic-csi.topology/node";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Crude local-hostpath driver which simply creates directories to be mounted
|
||||||
|
* and uses rsync for cloning/snapshots
|
||||||
|
*/
|
||||||
|
class ControllerLocalHostpathDriver extends ControllerClientCommonDriver {
|
||||||
|
constructor(ctx, options) {
|
||||||
|
const i_caps = _.get(
|
||||||
|
options,
|
||||||
|
"service.identity.capabilities.service",
|
||||||
|
false
|
||||||
|
);
|
||||||
|
super(...arguments);
|
||||||
|
|
||||||
|
if (!i_caps) {
|
||||||
|
this.ctx.logger.debug("setting local-hostpath identity service caps");
|
||||||
|
|
||||||
|
options.service.identity.capabilities.service = [
|
||||||
|
//"UNKNOWN",
|
||||||
|
"CONTROLLER_SERVICE",
|
||||||
|
"VOLUME_ACCESSIBILITY_CONSTRAINTS",
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getConfigKey() {
|
||||||
|
return "local-hostpath";
|
||||||
|
}
|
||||||
|
|
||||||
|
getVolumeContext(name) {
|
||||||
|
const driver = this;
|
||||||
|
const config_key = driver.getConfigKey();
|
||||||
|
return {
|
||||||
|
node_attach_driver: "hostpath",
|
||||||
|
path: driver.getShareVolumePath(name),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
getFsTypes() {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add node topologies
|
||||||
|
*
|
||||||
|
* @param {*} call
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
async NodeGetInfo(call) {
|
||||||
|
const response = await super.NodeGetInfo(...arguments);
|
||||||
|
response.accessible_topology = {
|
||||||
|
segments: {
|
||||||
|
[NODE_TOPOLOGY_KEY_NAME]: response.node_id,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.ControllerLocalHostpathDriver = ControllerLocalHostpathDriver;
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
const { FreeNASSshDriver } = require("./freenas/ssh");
|
const { FreeNASSshDriver } = require("./freenas/ssh");
|
||||||
const { FreeNASApiDriver } = require("./freenas/api");
|
const { FreeNASApiDriver } = require("./freenas/api");
|
||||||
|
const {
|
||||||
|
ControllerLocalHostpathDriver,
|
||||||
|
} = require("./controller-local-hostpath");
|
||||||
const { ControllerZfsGenericDriver } = require("./controller-zfs-generic");
|
const { ControllerZfsGenericDriver } = require("./controller-zfs-generic");
|
||||||
const { ControllerZfsLocalDriver } = require("./controller-zfs-local");
|
const { ControllerZfsLocalDriver } = require("./controller-zfs-local");
|
||||||
const {
|
const {
|
||||||
|
|
@ -41,6 +44,8 @@ function factory(ctx, options) {
|
||||||
return new ControllerSmbClientDriver(ctx, options);
|
return new ControllerSmbClientDriver(ctx, options);
|
||||||
case "nfs-client":
|
case "nfs-client":
|
||||||
return new ControllerNfsClientDriver(ctx, options);
|
return new ControllerNfsClientDriver(ctx, options);
|
||||||
|
case "local-hostpath":
|
||||||
|
return new ControllerLocalHostpathDriver(ctx, options);
|
||||||
case "lustre-client":
|
case "lustre-client":
|
||||||
return new ControllerLustreClientDriver(ctx, options);
|
return new ControllerLustreClientDriver(ctx, options);
|
||||||
case "node-manual":
|
case "node-manual":
|
||||||
|
|
|
||||||
|
|
@ -575,6 +575,17 @@ class CsiBaseDriver {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case "hostpath":
|
||||||
|
result = await mount.pathIsMounted(staging_target_path);
|
||||||
|
// if not mounted, mount
|
||||||
|
if (!result) {
|
||||||
|
await mount.bindMount(volume_context.path, staging_target_path);
|
||||||
|
return {};
|
||||||
|
} else {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "oneclient":
|
case "oneclient":
|
||||||
let oneclient = new OneClient();
|
let oneclient = new OneClient();
|
||||||
|
|
@ -1119,6 +1130,8 @@ class CsiBaseDriver {
|
||||||
case "nfs":
|
case "nfs":
|
||||||
case "smb":
|
case "smb":
|
||||||
case "lustre":
|
case "lustre":
|
||||||
|
case "oneclient":
|
||||||
|
case "hostpath":
|
||||||
case "iscsi":
|
case "iscsi":
|
||||||
case "zfs-local":
|
case "zfs-local":
|
||||||
// ensure appropriate directories/files
|
// ensure appropriate directories/files
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue