Merge pull request #50 from democratic-csi/next

Next
This commit is contained in:
Travis Glenn Hansen 2021-01-29 22:49:07 -07:00 committed by GitHub
commit ba01d1ca56
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 704 additions and 227 deletions

View File

@ -35,4 +35,4 @@ jobs:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
DOCKER_CLI_EXPERIMENTAL: enabled DOCKER_CLI_EXPERIMENTAL: enabled
DOCKER_BUILD_PLATFORM: linux/amd64,linux/arm/v7,linux/arm64 DOCKER_BUILD_PLATFORM: linux/amd64,linux/arm64,linux/arm/v7

15
CHANGELOG.md Normal file
View File

@ -0,0 +1,15 @@
# v1.0.1
Released 2021-01-29
- targetCli fixes when used in conjunction with `nameTemplate` (see #49)
- multi-stage docker builds to shrink image size dramatically
- using pre-compiled grpc binaries to dramatically speed build times
- dep updates
- remove `fsck` during stage operations due to sig-storage recommendations (see #52)
# v1.0.0
Released 2021-01-07
- initial release

View File

@ -32,7 +32,7 @@ WORKDIR /home/csi/app
USER csi USER csi
COPY package*.json ./ COPY package*.json ./
RUN npm install RUN npm install --grpc_node_binary_host_mirror=https://grpc-uds-binaries.s3-us-west-2.amazonaws.com/debian-buster
COPY --chown=csi:csi . . COPY --chown=csi:csi . .
RUN rm -rf docker RUN rm -rf docker
@ -55,8 +55,9 @@ RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/*
ENV LANG=en_US.utf8 ENV LANG=en_US.utf8
# install node # install node
ENV PATH=/usr/local/lib/nodejs/bin:$PATH #ENV PATH=/usr/local/lib/nodejs/bin:$PATH
COPY --from=build /usr/local/lib/nodejs /usr/local/lib/nodejs #COPY --from=build /usr/local/lib/nodejs /usr/local/lib/nodejs
COPY --from=build /usr/local/lib/nodejs/bin/node /usr/local/bin/node
# node service requirements # node service requirements
# netbase is required by rpcbind/rpcinfo to work properly # netbase is required by rpcbind/rpcinfo to work properly

View File

@ -18,7 +18,7 @@ const args = require("yargs")
} catch (e) {} } catch (e) {}
try { try {
options = yaml.safeLoad(fs.readFileSync(path, "utf8")); options = yaml.load(fs.readFileSync(path, "utf8"));
return true; return true;
} catch (e) {} } catch (e) {}

814
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{ {
"name": "democratic-csi", "name": "democratic-csi",
"version": "1.0.0", "version": "1.0.1",
"description": "kubernetes csi driver framework", "description": "kubernetes csi driver framework",
"main": "bin/democratic-csi", "main": "bin/democratic-csi",
"scripts": { "scripts": {
@ -18,18 +18,18 @@
"url": "https://github.com/democratic-csi/democratic-csi.git" "url": "https://github.com/democratic-csi/democratic-csi.git"
}, },
"dependencies": { "dependencies": {
"@grpc/proto-loader": "^0.5.5", "@grpc/proto-loader": "^0.5.6",
"bunyan": "^1.8.14", "bunyan": "^1.8.15",
"eslint": "^7.14.0", "eslint": "^7.18.0",
"grpc-uds": "^0.1.4", "grpc-uds": "^0.1.6",
"handlebars": "^4.7.6", "handlebars": "^4.7.6",
"js-yaml": "^3.14.0", "js-yaml": "^4.0.0",
"lru-cache": "^6.0.0", "lru-cache": "^6.0.0",
"request": "^2.88.2", "request": "^2.88.2",
"ssh2": "^0.8.9", "ssh2": "^0.8.9",
"uri-js": "^4.4.0", "uri-js": "^4.4.1",
"uuid": "^8.3.1", "uuid": "^8.3.2",
"winston": "^3.3.3", "winston": "^3.3.3",
"yargs": "^16.1.1" "yargs": "^16.2.0"
} }
} }

View File

@ -3,6 +3,8 @@ const { GrpcError, grpc } = require("../../utils/grpc");
const Handlebars = require("handlebars"); const Handlebars = require("handlebars");
const ISCSI_ASSETS_NAME_PROPERTY_NAME = "democratic-csi:iscsi_assets_name";
class ControllerZfsGenericDriver extends ControllerZfsSshBaseDriver { class ControllerZfsGenericDriver extends ControllerZfsSshBaseDriver {
/** /**
* cannot make this a storage class parameter as storage class/etc context is *not* sent * cannot make this a storage class parameter as storage class/etc context is *not* sent
@ -159,6 +161,11 @@ create /backstores/block/${iscsiName}
let iqn = basename + ":" + iscsiName; let iqn = basename + ":" + iscsiName;
this.ctx.logger.info("iqn: " + iqn); this.ctx.logger.info("iqn: " + iqn);
// store this off to make delete process more bullet proof
await zb.zfs.set(datasetName, {
[ISCSI_ASSETS_NAME_PROPERTY_NAME]: iscsiName,
});
volume_context = { volume_context = {
node_attach_driver: "iscsi", node_attach_driver: "iscsi",
portal: this.options.iscsi.targetPortal, portal: this.options.iscsi.targetPortal,
@ -182,6 +189,7 @@ create /backstores/block/${iscsiName}
const sshClient = this.getSshClient(); const sshClient = this.getSshClient();
let response; let response;
let properties;
switch (this.options.driver) { switch (this.options.driver) {
case "zfs-generic-nfs": case "zfs-generic-nfs":
@ -198,7 +206,30 @@ create /backstores/block/${iscsiName}
case "zfs-generic-iscsi": case "zfs-generic-iscsi":
let basename; let basename;
let iscsiName = zb.helpers.extractLeafName(datasetName); let iscsiName;
// Delete iscsi assets
try {
properties = await zb.zfs.get(datasetName, [
ISCSI_ASSETS_NAME_PROPERTY_NAME,
]);
} catch (err) {
if (err.toString().includes("dataset does not exist")) {
return;
}
throw err;
}
properties = properties[datasetName];
this.ctx.logger.debug("zfs props data: %j", properties);
iscsiName = properties[ISCSI_ASSETS_NAME_PROPERTY_NAME].value;
if (zb.helpers.isPropertyValueSet(iscsiName)) {
//do nothing
} else {
iscsiName = zb.helpers.extractLeafName(datasetName);
if (this.options.iscsi.namePrefix) { if (this.options.iscsi.namePrefix) {
iscsiName = this.options.iscsi.namePrefix + iscsiName; iscsiName = this.options.iscsi.namePrefix + iscsiName;
} }
@ -206,6 +237,7 @@ create /backstores/block/${iscsiName}
if (this.options.iscsi.nameSuffix) { if (this.options.iscsi.nameSuffix) {
iscsiName += this.options.iscsi.nameSuffix; iscsiName += this.options.iscsi.nameSuffix;
} }
}
iscsiName = iscsiName.toLowerCase(); iscsiName = iscsiName.toLowerCase();
switch (this.options.iscsi.shareStrategy) { switch (this.options.iscsi.shareStrategy) {
@ -213,9 +245,11 @@ create /backstores/block/${iscsiName}
basename = this.options.iscsi.shareStrategyTargetCli.basename; basename = this.options.iscsi.shareStrategyTargetCli.basename;
response = await this.targetCliCommand( response = await this.targetCliCommand(
` `
# delete target
cd /iscsi cd /iscsi
delete ${basename}:${iscsiName} delete ${basename}:${iscsiName}
# delete extent
cd /backstores/block cd /backstores/block
delete ${iscsiName} delete ${iscsiName}
` `
@ -258,6 +292,8 @@ delete ${iscsiName}
async targetCliCommand(data) { async targetCliCommand(data) {
const sshClient = this.getSshClient(); const sshClient = this.getSshClient();
const driver = this;
data = data.trim(); data = data.trim();
let command = "sh"; let command = "sh";
@ -274,7 +310,28 @@ delete ${iscsiName}
args.push("'" + taregetCliCommand.join(" ") + "'"); args.push("'" + taregetCliCommand.join(" ") + "'");
return sshClient.exec(sshClient.buildCommand(command, args)); let logCommandTmp = command + " " + args.join(" ");
let logCommand = "";
logCommandTmp.split("\n").forEach((line) => {
if (line.startsWith("set auth password=")) {
logCommand += "set auth password=<redacted>";
} else if (line.startsWith("set auth mutual_password=")) {
logCommand += "set auth mutual_password=<redacted>";
} else {
logCommand += line;
}
logCommand += "\n";
});
driver.ctx.logger.verbose("TargetCLI command: " + logCommand);
let response = await sshClient.exec(sshClient.buildCommand(command, args));
driver.ctx.logger.verbose(
"TargetCLI response: " + JSON.stringify(response)
);
return response;
} }
} }

View File

@ -479,7 +479,9 @@ class CsiBaseDriver {
staging_target_path staging_target_path
); );
if (!result) { if (!result) {
await filesystem.checkFilesystem(device, fs_type); // TODO: add a parameter to control this behavior
// https://github.com/democratic-csi/democratic-csi/issues/52#issuecomment-768463401
//await filesystem.checkFilesystem(device, fs_type);
} }
} }
break; break;