k8ts
Version:
Powerful framework for building Kubernetes manifests in TypeScript.
158 lines • 7.37 kB
JavaScript
;
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
var _, done = false;
for (var i = decorators.length - 1; i >= 0; i--) {
var context = {};
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
if (kind === "accessor") {
if (result === void 0) continue;
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
if (_ = accept(result.get)) descriptor.get = _;
if (_ = accept(result.set)) descriptor.set = _;
if (_ = accept(result.init)) initializers.unshift(_);
}
else if (_ = accept(result)) {
if (kind === "field") initializers.unshift(_);
else descriptor[key] = _;
}
}
if (target) Object.defineProperty(target, contextIn.name, descriptor);
done = true;
};
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
var useValue = arguments.length > 2;
for (var i = 0; i < initializers.length; i++) {
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
}
return useValue ? value : void 0;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Container = void 0;
const instruments_1 = require("@k8ts/instruments");
const immutable_1 = require("immutable");
const adapters_1 = require("../../utils/adapters");
const doddle_1 = require("doddle");
const lodash_1 = require("lodash");
const env_1 = require("../../../env");
const kind_map_1 = require("../../../kind-map");
const kinds_1 = require("../../../kinds");
const sub_resource_1 = require("../../../node/sub-resource");
const mounts_1 = require("./mounts");
var Container;
(function (Container_1) {
Container_1.Mount = mounts_1.Mount;
const container_ResourcesSpec = instruments_1.ResourcesSpec.make({
cpu: instruments_1.Unit.Cpu,
memory: instruments_1.Unit.Data
});
let Container = (() => {
let _classDecorators = [(0, kind_map_1.k8ts)(kinds_1.api.v1_.Pod_.Container), (0, instruments_1.relations)({
needs: self => {
const a = self.mounts;
return (0, lodash_1.mapValues)((0, lodash_1.mapKeys)(a, x => x.path), x => x.mount.volume);
}
})];
let _classDescriptor;
let _classExtraInitializers = [];
let _classThis;
let _classSuper = sub_resource_1.SubResource;
var Container = class extends _classSuper {
static { _classThis = this; }
static {
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
Container = _classThis = _classDescriptor.value;
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
__runInitializers(_classThis, _classExtraInitializers);
}
subtype;
props;
__PORTS__;
kind = kinds_1.api.v1_.Pod_.Container;
get mounts() {
return (0, immutable_1.Map)(this.props.$mounts ?? {})
.mapEntries(([path, mount]) => {
return [
mount,
{
mount: mount,
path: path
}
];
})
.valueSeq()
.toArray();
}
get volumes() {
return (0, doddle_1.seq)(this.mounts.map(x => x.mount.volume))
.uniq()
.toArray()
.pull();
}
get ports() {
return instruments_1.PortSet.make(this.props.$ports);
}
submanifest() {
const self = this;
const { $image, $ports, $command, $env } = self.props;
const untaggedProps = (0, lodash_1.omitBy)(self.props, (_, k) => k.startsWith("$"));
const container = {
...untaggedProps,
name: self.name,
image: $image.toString(),
ports: $ports && (0, adapters_1.toContainerPorts)(instruments_1.PortSet.make($ports)).valueSeq().toArray(),
resources: self._resources()?.toObject(),
command: $command?.toArray(),
env: (0, env_1.Env)($env).toEnvVars(),
...self._groupedMounts()
};
return container;
}
constructor(parent, name, subtype, props) {
super(parent, name, props);
this.subtype = subtype;
this.props = props;
}
_groupedMounts() {
const x = {
volumeMounts: [],
volumeDevices: []
};
for (const mnt of this.mounts) {
const { mount, path } = mnt;
if (mount instanceof Container_1.Mount.ContainerDeviceMount) {
x.volumeDevices.push(mount.submanifest(path));
}
else {
x.volumeMounts.push(mount.submanifest(path));
}
}
return x;
}
_resources() {
if (!this.props.$resources) {
return undefined;
}
const { cpu, memory } = this.props.$resources;
return container_ResourcesSpec.parse({
cpu: cpu,
memory: memory
});
}
};
return Container = _classThis;
})();
Container_1.Container = Container;
function make(parent, name, subtype, props) {
return new Container(parent, name, subtype, props);
}
Container_1.make = make;
})(Container || (exports.Container = Container = {}));
//# sourceMappingURL=container.js.map