support normalized data on the node driver
This commit is contained in:
parent
18ea054a8c
commit
fabe465243
|
|
@ -21,6 +21,11 @@ const SNAPSHOT_CSI_NAME_PROPERTY_NAME = "democratic-csi:csi_snapshot_name";
|
||||||
const SNAPSHOT_CSI_SOURCE_VOLUME_ID_PROPERTY_NAME =
|
const SNAPSHOT_CSI_SOURCE_VOLUME_ID_PROPERTY_NAME =
|
||||||
"democratic-csi:csi_snapshot_source_volume_id";
|
"democratic-csi:csi_snapshot_source_volume_id";
|
||||||
|
|
||||||
|
const VOLUME_CONTEXT_PROVISIONER_DRIVER_PROPERTY_NAME =
|
||||||
|
"democratic-csi:volume_context_provisioner_driver";
|
||||||
|
const VOLUME_CONTEXT_PROVISIONER_INSTANCE_ID_PROPERTY_NAME =
|
||||||
|
"democratic-csi:volume_context_provisioner_instance_id";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base driver to provisin zfs assets over ssh.
|
* Base driver to provisin zfs assets over ssh.
|
||||||
* Derived drivers only need to implement:
|
* Derived drivers only need to implement:
|
||||||
|
|
@ -326,6 +331,12 @@ class ControllerZfsSshBaseDriver extends CsiBaseDriver {
|
||||||
let volumeProperties = {};
|
let volumeProperties = {};
|
||||||
volumeProperties[VOLUME_CSI_NAME_PROPERTY_NAME] = name;
|
volumeProperties[VOLUME_CSI_NAME_PROPERTY_NAME] = name;
|
||||||
volumeProperties[MANAGED_PROPERTY_NAME] = "true";
|
volumeProperties[MANAGED_PROPERTY_NAME] = "true";
|
||||||
|
volumeProperties[VOLUME_CONTEXT_PROVISIONER_DRIVER_PROPERTY_NAME] =
|
||||||
|
driver.options.driver;
|
||||||
|
if (driver.options.instance_id) {
|
||||||
|
volumeProperties[VOLUME_CONTEXT_PROVISIONER_INSTANCE_ID_PROPERTY_NAME] =
|
||||||
|
driver.options.instance_id;
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: also set access_mode as property?
|
// TODO: also set access_mode as property?
|
||||||
// TODO: also set fsType as property?
|
// TODO: also set fsType as property?
|
||||||
|
|
@ -678,6 +689,12 @@ class ControllerZfsSshBaseDriver extends CsiBaseDriver {
|
||||||
"'" + JSON.stringify(volume_context) + "'"
|
"'" + JSON.stringify(volume_context) + "'"
|
||||||
});
|
});
|
||||||
|
|
||||||
|
volume_context["provisioner_driver"] = driver.options.driver;
|
||||||
|
if (driver.options.instance_id) {
|
||||||
|
volume_context["provisioner_driver_instance_id"] =
|
||||||
|
driver.options.instance_id;
|
||||||
|
}
|
||||||
|
|
||||||
// set this just before sending out response so we know if volume completed
|
// set this just before sending out response so we know if volume completed
|
||||||
// this should give us a relatively sane way to clean up artifacts over time
|
// this should give us a relatively sane way to clean up artifacts over time
|
||||||
await zb.zfs.set(datasetName, { [SUCCESS_PROPERTY_NAME]: "true" });
|
await zb.zfs.set(datasetName, { [SUCCESS_PROPERTY_NAME]: "true" });
|
||||||
|
|
@ -1034,7 +1051,9 @@ class ControllerZfsSshBaseDriver extends CsiBaseDriver {
|
||||||
"volsize",
|
"volsize",
|
||||||
MANAGED_PROPERTY_NAME,
|
MANAGED_PROPERTY_NAME,
|
||||||
SHARE_VOLUME_CONTEXT_PROPERTY_NAME,
|
SHARE_VOLUME_CONTEXT_PROPERTY_NAME,
|
||||||
SUCCESS_PROPERTY_NAME
|
SUCCESS_PROPERTY_NAME,
|
||||||
|
VOLUME_CONTEXT_PROVISIONER_INSTANCE_ID_PROPERTY_NAME,
|
||||||
|
VOLUME_CONTEXT_PROVISIONER_DRIVER_PROPERTY_NAME
|
||||||
],
|
],
|
||||||
{ types, recurse: true }
|
{ types, recurse: true }
|
||||||
);
|
);
|
||||||
|
|
@ -1064,6 +1083,25 @@ class ControllerZfsSshBaseDriver extends CsiBaseDriver {
|
||||||
}
|
}
|
||||||
|
|
||||||
let volume_content_source;
|
let volume_content_source;
|
||||||
|
let volume_context = JSON.parse(row[SHARE_VOLUME_CONTEXT_PROPERTY_NAME]);
|
||||||
|
if (
|
||||||
|
zb.helpers.isPropertyValueSet(
|
||||||
|
row[VOLUME_CONTEXT_PROVISIONER_DRIVER_PROPERTY_NAME]
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
volume_context["provisioner_driver"] =
|
||||||
|
row[VOLUME_CONTEXT_PROVISIONER_DRIVER_PROPERTY_NAME];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
zb.helpers.isPropertyValueSet(
|
||||||
|
row[VOLUME_CONTEXT_PROVISIONER_INSTANCE_ID_PROPERTY_NAME]
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
volume_context["provisioner_driver_instance_id"] =
|
||||||
|
row[VOLUME_CONTEXT_PROVISIONER_INSTANCE_ID_PROPERTY_NAME];
|
||||||
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
zb.helpers.isPropertyValueSet(
|
zb.helpers.isPropertyValueSet(
|
||||||
row[VOLUME_CONTENT_SOURCE_TYPE_PROPERTY_NAME]
|
row[VOLUME_CONTENT_SOURCE_TYPE_PROPERTY_NAME]
|
||||||
|
|
@ -1096,7 +1134,7 @@ class ControllerZfsSshBaseDriver extends CsiBaseDriver {
|
||||||
? row["refquota"]
|
? row["refquota"]
|
||||||
: row["volsize"],
|
: row["volsize"],
|
||||||
content_source: volume_content_source,
|
content_source: volume_content_source,
|
||||||
volume_context: JSON.parse(row[SHARE_VOLUME_CONTEXT_PROPERTY_NAME])
|
volume_context
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
@ -1363,7 +1401,10 @@ class ControllerZfsSshBaseDriver extends CsiBaseDriver {
|
||||||
let detachedSnapshot = false;
|
let detachedSnapshot = false;
|
||||||
try {
|
try {
|
||||||
let tmpDetachedSnapshot = JSON.parse(
|
let tmpDetachedSnapshot = JSON.parse(
|
||||||
driver.getNormalizedParameterValue(call.request.parameters, "detachedSnapshots")
|
driver.getNormalizedParameterValue(
|
||||||
|
call.request.parameters,
|
||||||
|
"detachedSnapshots"
|
||||||
|
)
|
||||||
); // snapshot class parameter
|
); // snapshot class parameter
|
||||||
if (typeof tmpDetachedSnapshot === "boolean") {
|
if (typeof tmpDetachedSnapshot === "boolean") {
|
||||||
detachedSnapshot = tmpDetachedSnapshot;
|
detachedSnapshot = tmpDetachedSnapshot;
|
||||||
|
|
|
||||||
|
|
@ -30,26 +30,33 @@ class CsiBaseDriver {
|
||||||
* @param {*} parameters
|
* @param {*} parameters
|
||||||
* @param {*} key
|
* @param {*} key
|
||||||
*/
|
*/
|
||||||
getNormalizedParameterValue(parameters, key) {
|
getNormalizedParameterValue(parameters, key, driver, instance_id) {
|
||||||
const normalized = this.getNormalizedParameters(parameters);
|
const normalized = this.getNormalizedParameters(
|
||||||
|
parameters,
|
||||||
|
driver,
|
||||||
|
instance_id
|
||||||
|
);
|
||||||
return normalized[key];
|
return normalized[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
getNormalizedParameters(parameters) {
|
getNormalizedParameters(parameters, driver, instance_id) {
|
||||||
const normalized = JSON.parse(JSON.stringify(parameters));
|
const normalized = JSON.parse(JSON.stringify(parameters));
|
||||||
const base_key = "democratic-csi.org";
|
const base_key = "democratic-csi.org";
|
||||||
|
driver = driver || this.options.driver;
|
||||||
|
instance_id = instance_id || this.options.instance_id;
|
||||||
|
|
||||||
for (const key in parameters) {
|
for (const key in parameters) {
|
||||||
let normalizedKey;
|
let normalizedKey;
|
||||||
let prefixLength;
|
let prefixLength;
|
||||||
if (key.startsWith(`${base_key}/${this.options.instance_id}/`)) {
|
if (instance_id && key.startsWith(`${base_key}/${instance_id}/`)) {
|
||||||
prefixLength = `${base_key}/${this.options.instance_id}/`.length;
|
prefixLength = `${base_key}/${instance_id}/`.length;
|
||||||
normalizedKey = key.slice(prefixLength);
|
normalizedKey = key.slice(prefixLength);
|
||||||
normalized[normalizedKey] = parameters[key];
|
normalized[normalizedKey] = parameters[key];
|
||||||
delete normalized[key];
|
delete normalized[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key.startsWith(`${base_key}/${this.options.driver}/`)) {
|
if (driver && key.startsWith(`${base_key}/${driver}/`)) {
|
||||||
prefixLength = `${base_key}/${this.options.driver}/`.length;
|
prefixLength = `${base_key}/${driver}/`.length;
|
||||||
normalizedKey = key.slice(prefixLength);
|
normalizedKey = key.slice(prefixLength);
|
||||||
normalized[normalizedKey] = parameters[key];
|
normalized[normalizedKey] = parameters[key];
|
||||||
delete normalized[key];
|
delete normalized[key];
|
||||||
|
|
@ -294,11 +301,14 @@ class CsiBaseDriver {
|
||||||
// create DB entry
|
// create DB entry
|
||||||
let nodeDB = {};
|
let nodeDB = {};
|
||||||
const nodeDBKeyPrefix = "node-db.";
|
const nodeDBKeyPrefix = "node-db.";
|
||||||
const normalizedSecrets = this.getNormalizedParameters(call.request.secrets);
|
const normalizedSecrets = this.getNormalizedParameters(
|
||||||
|
call.request.secrets,
|
||||||
|
call.request.volume_context.provisioner_driver,
|
||||||
|
call.request.volume_context.provisioner_driver_instance_id
|
||||||
|
);
|
||||||
for (const key in normalizedSecrets) {
|
for (const key in normalizedSecrets) {
|
||||||
if (key.startsWith(nodeDBKeyPrefix)) {
|
if (key.startsWith(nodeDBKeyPrefix)) {
|
||||||
nodeDB[key.substr(nodeDBKeyPrefix.length)] =
|
nodeDB[key.substr(nodeDBKeyPrefix.length)] = normalizedSecrets[key];
|
||||||
normalizedSecrets[key];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await iscsi.iscsiadm.createNodeDBEntry(
|
await iscsi.iscsiadm.createNodeDBEntry(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue