k8ts
Version:
Powerful framework for building Kubernetes manifests in TypeScript.
57 lines • 2.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Pv = void 0;
const instruments_1 = require("@k8ts/instruments");
const sample_interfaces_1 = require("@k8ts/sample-interfaces");
const error_1 = require("../../../error");
const default_1 = require("../../../kinds/default");
const storage_1 = require("../../../kinds/storage");
const access_mode_1 = require("../access-mode");
const parse_backend_1 = require("./parse-backend");
const StorageClassKind = storage_1.storage.v1.StorageClass._;
class Pv extends instruments_1.Resource_Top {
__MODE__;
get kind() {
return default_1.v1.PersistentVolume._;
}
__needs__() {
return {
storageClass: this.props.$storageClass
};
}
body() {
const self = this;
const pvProps = self.props;
const accessModes = access_mode_1.Access.pv_parseAccessMode(pvProps.$accessModes);
if (self.props.$backend?.type === "Local") {
if (!pvProps.nodeAffinity) {
throw new error_1.MakeError(`While manifesting ${self.node.format("source")}, PV with Local backend must have nodeAffinity.`);
}
}
if (!self.props.$backend && !self.props.$storageClass) {
throw new error_1.MakeError(`While manifesting ${self.node.format("source")}, PV that doesn't have a $backend must have a $storageClass.`);
}
let base = {
accessModes,
storageClassName: pvProps.$storageClass?.name ?? "standard",
capacity: pvProps.$capacity
? {
storage: sample_interfaces_1.CDK.Quantity.fromString(pvProps.$capacity)
}
: undefined,
volumeMode: pvProps.$mode ?? "Filesystem",
mountOptions: pvProps.mountOptions,
persistentVolumeReclaimPolicy: pvProps.reclaimPolicy ?? "Retain",
nodeAffinity: pvProps.nodeAffinity
};
base = {
...base,
...(0, parse_backend_1.parseBackend)(pvProps.$backend)
};
return {
spec: base
};
}
}
exports.Pv = Pv;
//# sourceMappingURL=pv.js.map