k8ts 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +7 -0
- package/README.md +3 -0
- package/dist/.imports.tsbuildinfo +1 -0
- package/dist/_imports/_mix.d.ts +4 -0
- package/dist/_imports/_mix.d.ts.map +1 -0
- package/dist/_imports/_mix.js +20 -0
- package/dist/_imports/_mix.js.map +1 -0
- package/dist/_imports/acme.cert-manager.io.d.ts +4832 -0
- package/dist/_imports/acme.cert-manager.io.d.ts.map +1 -0
- package/dist/_imports/acme.cert-manager.io.js +2476 -0
- package/dist/_imports/acme.cert-manager.io.js.map +1 -0
- package/dist/_imports/gateway.networking.k8s.io.d.ts +8786 -0
- package/dist/_imports/gateway.networking.k8s.io.d.ts.map +1 -0
- package/dist/_imports/gateway.networking.k8s.io.js +3668 -0
- package/dist/_imports/gateway.networking.k8s.io.js.map +1 -0
- package/dist/_imports/index.d.ts +3 -0
- package/dist/_imports/index.d.ts.map +1 -0
- package/dist/_imports/index.js +39 -0
- package/dist/_imports/index.js.map +1 -0
- package/dist/_imports/k8s.d.ts +18782 -0
- package/dist/_imports/k8s.d.ts.map +1 -0
- package/dist/_imports/k8s.js +12173 -0
- package/dist/_imports/k8s.js.map +1 -0
- package/dist/api-versions.d.ts +5 -0
- package/dist/api-versions.d.ts.map +1 -0
- package/dist/api-versions.js +8 -0
- package/dist/api-versions.js.map +1 -0
- package/dist/error.d.ts +5 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +12 -0
- package/dist/error.js.map +1 -0
- package/dist/external/index.d.ts +13 -0
- package/dist/external/index.d.ts.map +1 -0
- package/dist/external/index.js +81 -0
- package/dist/external/index.js.map +1 -0
- package/dist/file/exports.d.ts +20 -0
- package/dist/file/exports.d.ts.map +1 -0
- package/dist/file/exports.js +62 -0
- package/dist/file/exports.js.map +1 -0
- package/dist/file/factory.d.ts +34 -0
- package/dist/file/factory.d.ts.map +1 -0
- package/dist/file/factory.js +171 -0
- package/dist/file/factory.js.map +1 -0
- package/dist/file/file.d.ts +17 -0
- package/dist/file/file.d.ts.map +1 -0
- package/dist/file/file.js +21 -0
- package/dist/file/file.js.map +1 -0
- package/dist/file/index.d.ts +2 -0
- package/dist/file/index.d.ts.map +1 -0
- package/dist/file/index.js +18 -0
- package/dist/file/index.js.map +1 -0
- package/dist/file/origin.d.ts +18 -0
- package/dist/file/origin.d.ts.map +1 -0
- package/dist/file/origin.js +27 -0
- package/dist/file/origin.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/k8ts-sys-kind.d.ts +3 -0
- package/dist/k8ts-sys-kind.d.ts.map +1 -0
- package/dist/k8ts-sys-kind.js +8 -0
- package/dist/k8ts-sys-kind.js.map +1 -0
- package/dist/kind-map.d.ts +11 -0
- package/dist/kind-map.d.ts.map +1 -0
- package/dist/kind-map.js +29 -0
- package/dist/kind-map.js.map +1 -0
- package/dist/meta/k8ts-section.d.ts +3 -0
- package/dist/meta/k8ts-section.d.ts.map +1 -0
- package/dist/meta/k8ts-section.js +10 -0
- package/dist/meta/k8ts-section.js.map +1 -0
- package/dist/node/abs-resource.d.ts +15 -0
- package/dist/node/abs-resource.d.ts.map +1 -0
- package/dist/node/abs-resource.js +76 -0
- package/dist/node/abs-resource.js.map +1 -0
- package/dist/node/dependencies.d.ts +1 -0
- package/dist/node/dependencies.d.ts.map +1 -0
- package/dist/node/dependencies.js +2 -0
- package/dist/node/dependencies.js.map +1 -0
- package/dist/node/index.d.ts +2 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +6 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/manifest-resource.d.ts +11 -0
- package/dist/node/manifest-resource.d.ts.map +1 -0
- package/dist/node/manifest-resource.js +19 -0
- package/dist/node/manifest-resource.js.map +1 -0
- package/dist/node/sub-resource.d.ts +8 -0
- package/dist/node/sub-resource.d.ts.map +1 -0
- package/dist/node/sub-resource.js +72 -0
- package/dist/node/sub-resource.js.map +1 -0
- package/dist/node/top-resource.d.ts +7 -0
- package/dist/node/top-resource.d.ts.map +1 -0
- package/dist/node/top-resource.js +8 -0
- package/dist/node/top-resource.js.map +1 -0
- package/dist/paths.d.ts +2 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +5 -0
- package/dist/paths.js.map +1 -0
- package/dist/resources/configmap/configmap.d.ts +12 -0
- package/dist/resources/configmap/configmap.d.ts.map +1 -0
- package/dist/resources/configmap/configmap.js +79 -0
- package/dist/resources/configmap/configmap.js.map +1 -0
- package/dist/resources/configmap/index.d.ts +2 -0
- package/dist/resources/configmap/index.d.ts.map +1 -0
- package/dist/resources/configmap/index.js +18 -0
- package/dist/resources/configmap/index.js.map +1 -0
- package/dist/resources/deployment/deployment.d.ts +18 -0
- package/dist/resources/deployment/deployment.d.ts.map +1 -0
- package/dist/resources/deployment/deployment.js +99 -0
- package/dist/resources/deployment/deployment.js.map +1 -0
- package/dist/resources/deployment/index.d.ts +2 -0
- package/dist/resources/deployment/index.d.ts.map +1 -0
- package/dist/resources/deployment/index.js +18 -0
- package/dist/resources/deployment/index.js.map +1 -0
- package/dist/resources/http-route/http-route.d.ts +17 -0
- package/dist/resources/http-route/http-route.d.ts.map +1 -0
- package/dist/resources/http-route/http-route.js +93 -0
- package/dist/resources/http-route/http-route.js.map +1 -0
- package/dist/resources/http-route/index.d.ts +2 -0
- package/dist/resources/http-route/index.d.ts.map +1 -0
- package/dist/resources/http-route/index.js +18 -0
- package/dist/resources/http-route/index.js.map +1 -0
- package/dist/resources/index.d.ts +9 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +25 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/namespace/index.d.ts +2 -0
- package/dist/resources/namespace/index.d.ts.map +1 -0
- package/dist/resources/namespace/index.js +18 -0
- package/dist/resources/namespace/index.js.map +1 -0
- package/dist/resources/namespace/namespace.d.ts +13 -0
- package/dist/resources/namespace/namespace.d.ts.map +1 -0
- package/dist/resources/namespace/namespace.js +79 -0
- package/dist/resources/namespace/namespace.js.map +1 -0
- package/dist/resources/persistent/access-mode.d.ts +8 -0
- package/dist/resources/persistent/access-mode.d.ts.map +1 -0
- package/dist/resources/persistent/access-mode.js +29 -0
- package/dist/resources/persistent/access-mode.js.map +1 -0
- package/dist/resources/persistent/block-mode.d.ts +2 -0
- package/dist/resources/persistent/block-mode.d.ts.map +1 -0
- package/dist/resources/persistent/block-mode.js +3 -0
- package/dist/resources/persistent/block-mode.js.map +1 -0
- package/dist/resources/persistent/claim/index.d.ts +2 -0
- package/dist/resources/persistent/claim/index.d.ts.map +1 -0
- package/dist/resources/persistent/claim/index.js +18 -0
- package/dist/resources/persistent/claim/index.js.map +1 -0
- package/dist/resources/persistent/claim/pvc.d.ts +23 -0
- package/dist/resources/persistent/claim/pvc.d.ts.map +1 -0
- package/dist/resources/persistent/claim/pvc.js +99 -0
- package/dist/resources/persistent/claim/pvc.js.map +1 -0
- package/dist/resources/persistent/index.d.ts +11 -0
- package/dist/resources/persistent/index.d.ts.map +1 -0
- package/dist/resources/persistent/index.js +13 -0
- package/dist/resources/persistent/index.js.map +1 -0
- package/dist/resources/persistent/volume/backend.d.ts +13 -0
- package/dist/resources/persistent/volume/backend.d.ts.map +1 -0
- package/dist/resources/persistent/volume/backend.js +3 -0
- package/dist/resources/persistent/volume/backend.js.map +1 -0
- package/dist/resources/persistent/volume/index.d.ts +2 -0
- package/dist/resources/persistent/volume/index.d.ts.map +1 -0
- package/dist/resources/persistent/volume/index.js +18 -0
- package/dist/resources/persistent/volume/index.js.map +1 -0
- package/dist/resources/persistent/volume/parse-backend.d.ts +14 -0
- package/dist/resources/persistent/volume/parse-backend.d.ts.map +1 -0
- package/dist/resources/persistent/volume/parse-backend.js +26 -0
- package/dist/resources/persistent/volume/parse-backend.js.map +1 -0
- package/dist/resources/persistent/volume/pv.d.ts +26 -0
- package/dist/resources/persistent/volume/pv.d.ts.map +1 -0
- package/dist/resources/persistent/volume/pv.js +95 -0
- package/dist/resources/persistent/volume/pv.js.map +1 -0
- package/dist/resources/pod/container/container.d.ts +44 -0
- package/dist/resources/pod/container/container.d.ts.map +1 -0
- package/dist/resources/pod/container/container.js +156 -0
- package/dist/resources/pod/container/container.js.map +1 -0
- package/dist/resources/pod/container/index.d.ts +2 -0
- package/dist/resources/pod/container/index.d.ts.map +1 -0
- package/dist/resources/pod/container/index.js +18 -0
- package/dist/resources/pod/container/index.js.map +1 -0
- package/dist/resources/pod/container/mounts.d.ts +27 -0
- package/dist/resources/pod/container/mounts.d.ts.map +1 -0
- package/dist/resources/pod/container/mounts.js +40 -0
- package/dist/resources/pod/container/mounts.js.map +1 -0
- package/dist/resources/pod/index.d.ts +4 -0
- package/dist/resources/pod/index.d.ts.map +1 -0
- package/dist/resources/pod/index.js +20 -0
- package/dist/resources/pod/index.js.map +1 -0
- package/dist/resources/pod/pod-template.d.ts +29 -0
- package/dist/resources/pod/pod-template.d.ts.map +1 -0
- package/dist/resources/pod/pod-template.js +123 -0
- package/dist/resources/pod/pod-template.js.map +1 -0
- package/dist/resources/pod/volume/devices.d.ts +23 -0
- package/dist/resources/pod/volume/devices.d.ts.map +1 -0
- package/dist/resources/pod/volume/devices.js +94 -0
- package/dist/resources/pod/volume/devices.js.map +1 -0
- package/dist/resources/pod/volume/index.d.ts +4 -0
- package/dist/resources/pod/volume/index.d.ts.map +1 -0
- package/dist/resources/pod/volume/index.js +10 -0
- package/dist/resources/pod/volume/index.js.map +1 -0
- package/dist/resources/pod/volume/volumes.d.ts +30 -0
- package/dist/resources/pod/volume/volumes.d.ts.map +1 -0
- package/dist/resources/pod/volume/volumes.js +124 -0
- package/dist/resources/pod/volume/volumes.js.map +1 -0
- package/dist/resources/secret/index.d.ts +4 -0
- package/dist/resources/secret/index.d.ts.map +1 -0
- package/dist/resources/secret/index.js +39 -0
- package/dist/resources/secret/index.js.map +1 -0
- package/dist/resources/secret/secret.d.ts +9 -0
- package/dist/resources/secret/secret.d.ts.map +1 -0
- package/dist/resources/secret/secret.js +77 -0
- package/dist/resources/secret/secret.js.map +1 -0
- package/dist/resources/service/frontend.d.ts +11 -0
- package/dist/resources/service/frontend.d.ts.map +1 -0
- package/dist/resources/service/frontend.js +3 -0
- package/dist/resources/service/frontend.js.map +1 -0
- package/dist/resources/service/index.d.ts +2 -0
- package/dist/resources/service/index.d.ts.map +1 -0
- package/dist/resources/service/index.js +18 -0
- package/dist/resources/service/index.js.map +1 -0
- package/dist/resources/service/service-port.d.ts +19 -0
- package/dist/resources/service/service-port.d.ts.map +1 -0
- package/dist/resources/service/service-port.js +21 -0
- package/dist/resources/service/service-port.js.map +1 -0
- package/dist/resources/service/service.d.ts +21 -0
- package/dist/resources/service/service.d.ts.map +1 -0
- package/dist/resources/service/service.js +99 -0
- package/dist/resources/service/service.js.map +1 -0
- package/dist/resources/utils/adapters.d.ts +8 -0
- package/dist/resources/utils/adapters.d.ts.map +1 -0
- package/dist/resources/utils/adapters.js +38 -0
- package/dist/resources/utils/adapters.js.map +1 -0
- package/dist/runner/exporter/assembler.d.ts +50 -0
- package/dist/runner/exporter/assembler.d.ts.map +1 -0
- package/dist/runner/exporter/assembler.js +122 -0
- package/dist/runner/exporter/assembler.js.map +1 -0
- package/dist/runner/exporter/index.d.ts +3 -0
- package/dist/runner/exporter/index.d.ts.map +1 -0
- package/dist/runner/exporter/index.js +19 -0
- package/dist/runner/exporter/index.js.map +1 -0
- package/dist/runner/exporter/loader.d.ts +19 -0
- package/dist/runner/exporter/loader.d.ts.map +1 -0
- package/dist/runner/exporter/loader.js +47 -0
- package/dist/runner/exporter/loader.js.map +1 -0
- package/dist/runner/exporter/manifester.d.ts +21 -0
- package/dist/runner/exporter/manifester.d.ts.map +1 -0
- package/dist/runner/exporter/manifester.js +72 -0
- package/dist/runner/exporter/manifester.js.map +1 -0
- package/dist/runner/exporter/meta.d.ts +2 -0
- package/dist/runner/exporter/meta.d.ts.map +1 -0
- package/dist/runner/exporter/meta.js +5 -0
- package/dist/runner/exporter/meta.js.map +1 -0
- package/dist/runner/exporter/progress-shower.d.ts +11 -0
- package/dist/runner/exporter/progress-shower.d.ts.map +1 -0
- package/dist/runner/exporter/progress-shower.js +68 -0
- package/dist/runner/exporter/progress-shower.js.map +1 -0
- package/dist/runner/exporter/saver.d.ts +27 -0
- package/dist/runner/exporter/saver.d.ts.map +1 -0
- package/dist/runner/exporter/saver.js +49 -0
- package/dist/runner/exporter/saver.js.map +1 -0
- package/dist/runner/exporter/serializer.d.ts +18 -0
- package/dist/runner/exporter/serializer.d.ts.map +1 -0
- package/dist/runner/exporter/serializer.js +47 -0
- package/dist/runner/exporter/serializer.js.map +1 -0
- package/dist/runner/exporter/stage.d.ts +9 -0
- package/dist/runner/exporter/stage.d.ts.map +1 -0
- package/dist/runner/exporter/stage.js +94 -0
- package/dist/runner/exporter/stage.js.map +1 -0
- package/dist/runner/exporter/trace-embedder.d.ts +1 -0
- package/dist/runner/exporter/trace-embedder.d.ts.map +1 -0
- package/dist/runner/exporter/trace-embedder.js +2 -0
- package/dist/runner/exporter/trace-embedder.js.map +1 -0
- package/dist/runner/index.d.ts +2 -0
- package/dist/runner/index.d.ts.map +1 -0
- package/dist/runner/index.js +18 -0
- package/dist/runner/index.js.map +1 -0
- package/dist/runner/proverbs.d.ts +1 -0
- package/dist/runner/proverbs.d.ts.map +1 -0
- package/dist/runner/proverbs.js +2 -0
- package/dist/runner/proverbs.js.map +1 -0
- package/dist/runner/runner.d.ts +13 -0
- package/dist/runner/runner.d.ts.map +1 -0
- package/dist/runner/runner.js +51 -0
- package/dist/runner/runner.js.map +1 -0
- package/dist/runner/silly/proverbs.d.ts +7 -0
- package/dist/runner/silly/proverbs.d.ts.map +1 -0
- package/dist/runner/silly/proverbs.js +20 -0
- package/dist/runner/silly/proverbs.js.map +1 -0
- package/dist/runner/summarizer.d.ts +23 -0
- package/dist/runner/summarizer.d.ts.map +1 -0
- package/dist/runner/summarizer.js +115 -0
- package/dist/runner/summarizer.js.map +1 -0
- package/dist/src.tsbuildinfo +1 -0
- package/dist/test.tsbuildinfo +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/dist/world/index.d.ts +2 -0
- package/dist/world/index.d.ts.map +1 -0
- package/dist/world/index.js +18 -0
- package/dist/world/index.js.map +1 -0
- package/dist/world/world.d.ts +28 -0
- package/dist/world/world.d.ts.map +1 -0
- package/dist/world/world.js +41 -0
- package/dist/world/world.js.map +1 -0
- package/package.json +106 -0
- package/proverbs.txt +23 -0
- package/src/_imports/_mix.ts +3 -0
- package/src/_imports/acme.cert-manager.io.ts +8202 -0
- package/src/_imports/gateway.networking.k8s.io.ts +12226 -0
- package/src/_imports/index.ts +2 -0
- package/src/_imports/k8s.ts +31028 -0
- package/src/_imports/tsconfig.json +22 -0
- package/src/api-versions.ts +5 -0
- package/src/error.ts +7 -0
- package/src/external/index.ts +34 -0
- package/src/file/exports.ts +63 -0
- package/src/file/factory.ts +150 -0
- package/src/file/file.ts +34 -0
- package/src/file/index.ts +1 -0
- package/src/file/origin.ts +38 -0
- package/src/index.ts +8 -0
- package/src/k8ts-sys-kind.ts +4 -0
- package/src/kind-map.ts +39 -0
- package/src/meta/k8ts-section.ts +6 -0
- package/src/node/abs-resource.ts +32 -0
- package/src/node/dependencies.ts +0 -0
- package/src/node/index.ts +1 -0
- package/src/node/manifest-resource.ts +19 -0
- package/src/node/sub-resource.ts +20 -0
- package/src/node/top-resource.ts +7 -0
- package/src/paths.ts +1 -0
- package/src/resources/configmap/configmap.ts +26 -0
- package/src/resources/configmap/index.ts +1 -0
- package/src/resources/deployment/deployment.ts +54 -0
- package/src/resources/deployment/index.ts +1 -0
- package/src/resources/http-route/http-route.ts +45 -0
- package/src/resources/http-route/index.ts +1 -0
- package/src/resources/index.ts +8 -0
- package/src/resources/namespace/index.ts +1 -0
- package/src/resources/namespace/namespace.ts +26 -0
- package/src/resources/persistent/access-mode.ts +29 -0
- package/src/resources/persistent/block-mode.ts +1 -0
- package/src/resources/persistent/claim/index.ts +1 -0
- package/src/resources/persistent/claim/pvc.ts +52 -0
- package/src/resources/persistent/index.ts +10 -0
- package/src/resources/persistent/volume/backend.ts +14 -0
- package/src/resources/persistent/volume/index.ts +1 -0
- package/src/resources/persistent/volume/parse-backend.ts +23 -0
- package/src/resources/persistent/volume/pv.ts +56 -0
- package/src/resources/pod/container/container.ts +137 -0
- package/src/resources/pod/container/index.ts +1 -0
- package/src/resources/pod/container/mounts.ts +45 -0
- package/src/resources/pod/index.ts +3 -0
- package/src/resources/pod/pod-template.ts +73 -0
- package/src/resources/pod/volume/devices.ts +50 -0
- package/src/resources/pod/volume/index.ts +3 -0
- package/src/resources/pod/volume/volumes.ts +90 -0
- package/src/resources/secret/index.ts +3 -0
- package/src/resources/secret/secret.ts +25 -0
- package/src/resources/service/frontend.ts +11 -0
- package/src/resources/service/index.ts +1 -0
- package/src/resources/service/service-port.ts +24 -0
- package/src/resources/service/service.ts +53 -0
- package/src/resources/utils/adapters.ts +36 -0
- package/src/runner/exporter/FILE xyz.md +47 -0
- package/src/runner/exporter/assembler.ts +170 -0
- package/src/runner/exporter/index.ts +2 -0
- package/src/runner/exporter/loader.ts +54 -0
- package/src/runner/exporter/manifester.ts +77 -0
- package/src/runner/exporter/meta.ts +1 -0
- package/src/runner/exporter/progress-shower.ts +77 -0
- package/src/runner/exporter/saver.ts +62 -0
- package/src/runner/exporter/serializer.ts +49 -0
- package/src/runner/exporter/stage.ts +36 -0
- package/src/runner/exporter/trace-embedder.ts +0 -0
- package/src/runner/index.ts +1 -0
- package/src/runner/proverbs.ts +0 -0
- package/src/runner/runner.ts +53 -0
- package/src/runner/silly/proverbs.ts +14 -0
- package/src/runner/summarizer.ts +133 -0
- package/src/tsconfig.json +16 -0
- package/src/version.ts +1 -0
- package/src/world/index.ts +1 -0
- package/src/world/world.ts +62 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { manifest, relations, type Origin } from "@k8ts/instruments"
|
|
2
|
+
import { Meta, MutableMeta } from "@k8ts/metadata"
|
|
3
|
+
import type { CDK } from "../../_imports"
|
|
4
|
+
import { v1 } from "../../api-versions"
|
|
5
|
+
import { k8ts } from "../../kind-map"
|
|
6
|
+
import { ManifestResource } from "../../node/manifest-resource"
|
|
7
|
+
export type Namespace = Namespace.Namespace
|
|
8
|
+
export namespace Namespace {
|
|
9
|
+
export interface Props {}
|
|
10
|
+
const ident = v1.kind("Namespace")
|
|
11
|
+
@k8ts(ident)
|
|
12
|
+
@relations("none")
|
|
13
|
+
@manifest({
|
|
14
|
+
body(self): CDK.KubeNamespaceProps {
|
|
15
|
+
return {
|
|
16
|
+
spec: {}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
})
|
|
20
|
+
export class Namespace extends ManifestResource<Props> {
|
|
21
|
+
override kind = ident
|
|
22
|
+
constructor(origin: Origin, meta: Meta | MutableMeta, props?: Props) {
|
|
23
|
+
super(origin, meta.toMutable(), props ?? {})
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type Access = Access.Inputs
|
|
2
|
+
|
|
3
|
+
export namespace Access {
|
|
4
|
+
export type Mode = "ReadWriteOnce" | "ReadOnlyMany" | "ReadWriteMany"
|
|
5
|
+
export type Input = Mode | "RWX" | "ROX" | "RWO"
|
|
6
|
+
export type Inputs = Input | Input[]
|
|
7
|
+
|
|
8
|
+
function parseOne(mode: Input): Mode {
|
|
9
|
+
switch (mode) {
|
|
10
|
+
case "RWX":
|
|
11
|
+
case "ReadWriteMany":
|
|
12
|
+
return "ReadWriteMany"
|
|
13
|
+
case "ROX":
|
|
14
|
+
case "ReadOnlyMany":
|
|
15
|
+
return "ReadOnlyMany"
|
|
16
|
+
case "RWO":
|
|
17
|
+
case "ReadWriteOnce":
|
|
18
|
+
return "ReadWriteOnce"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function parse(modes: Inputs): Mode[] {
|
|
23
|
+
if (Array.isArray(modes)) {
|
|
24
|
+
return modes.map(parseOne)
|
|
25
|
+
} else {
|
|
26
|
+
return [parseOne(modes)]
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type DataMode = "Block" | "Filesystem"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./pvc"
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { manifest, relations, ResourcesSpec, Unit } from "@k8ts/instruments"
|
|
2
|
+
import type { CDK } from "../../../_imports"
|
|
3
|
+
import { v1 } from "../../../api-versions"
|
|
4
|
+
import { k8ts } from "../../../kind-map"
|
|
5
|
+
import { ManifestResource } from "../../../node"
|
|
6
|
+
import { Access } from "../access-mode"
|
|
7
|
+
import type { DataMode } from "../block-mode"
|
|
8
|
+
import type { Volume } from "../volume"
|
|
9
|
+
|
|
10
|
+
export type Claim<T extends DataMode = DataMode> = Claim.Claim<T>
|
|
11
|
+
export namespace Claim {
|
|
12
|
+
const pvc_ResourcesSpec = ResourcesSpec.make({
|
|
13
|
+
storage: Unit.Data
|
|
14
|
+
})
|
|
15
|
+
type PvcResourceSpec = typeof pvc_ResourcesSpec
|
|
16
|
+
type PvcResources = PvcResourceSpec["__INPUT__"]
|
|
17
|
+
export interface Props<Mode extends DataMode> extends PvcResources {
|
|
18
|
+
accessModes: Access
|
|
19
|
+
mode?: Mode
|
|
20
|
+
bind: Volume.Volume<Mode>
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const ident = v1.kind("PersistentVolumeClaim")
|
|
24
|
+
@k8ts(ident)
|
|
25
|
+
@relations({
|
|
26
|
+
needs: self => ({
|
|
27
|
+
bind: self.props.bind
|
|
28
|
+
})
|
|
29
|
+
})
|
|
30
|
+
@manifest({
|
|
31
|
+
body(self): CDK.KubePersistentVolumeClaimProps {
|
|
32
|
+
const { storage, accessModes, mode } = self.props
|
|
33
|
+
const nAccessModes = Access.parse(accessModes)
|
|
34
|
+
return {
|
|
35
|
+
spec: {
|
|
36
|
+
accessModes: nAccessModes,
|
|
37
|
+
volumeName: self.props.bind!.name,
|
|
38
|
+
volumeMode: mode,
|
|
39
|
+
resources: pvc_ResourcesSpec
|
|
40
|
+
.parse({
|
|
41
|
+
storage
|
|
42
|
+
})
|
|
43
|
+
.toObject(),
|
|
44
|
+
storageClassName: "standard"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
})
|
|
49
|
+
export class Claim<Mode extends DataMode = DataMode> extends ManifestResource<Props<Mode>> {
|
|
50
|
+
kind = ident
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Access as Access_ } from "./access-mode"
|
|
2
|
+
import { DataMode as DataMode_ } from "./block-mode"
|
|
3
|
+
import { Claim as Claim_ } from "./claim"
|
|
4
|
+
import { Volume as Volume_ } from "./volume"
|
|
5
|
+
export namespace Persistent {
|
|
6
|
+
export import Claim = Claim_
|
|
7
|
+
export import Volume = Volume_
|
|
8
|
+
export import Access = Access_
|
|
9
|
+
export type DataMode = DataMode_
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./pv"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { MakeError } from "../../../error"
|
|
2
|
+
import { Backend } from "./backend"
|
|
3
|
+
export function parseBackend(backend: Backend) {
|
|
4
|
+
switch (backend.type) {
|
|
5
|
+
case "HostPath":
|
|
6
|
+
return {
|
|
7
|
+
hostPath: {
|
|
8
|
+
path: backend.path,
|
|
9
|
+
type: backend.type
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
case "Local":
|
|
13
|
+
return {
|
|
14
|
+
local: {
|
|
15
|
+
path: backend.path
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
default:
|
|
19
|
+
throw new MakeError(`Unknown backend kind!`, {
|
|
20
|
+
backend
|
|
21
|
+
})
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { manifest, relations, type Unit } from "@k8ts/instruments"
|
|
2
|
+
import { CDK } from "../../../_imports"
|
|
3
|
+
import { v1 } from "../../../api-versions"
|
|
4
|
+
import { k8ts } from "../../../kind-map"
|
|
5
|
+
import { ManifestResource } from "../../../node/manifest-resource"
|
|
6
|
+
import { Access } from "../access-mode"
|
|
7
|
+
import type { DataMode } from "../block-mode"
|
|
8
|
+
import { Backend as Backend_ } from "./backend"
|
|
9
|
+
import { parseBackend } from "./parse-backend"
|
|
10
|
+
|
|
11
|
+
export type Volume<T extends DataMode = DataMode> = Volume.Volume<T>
|
|
12
|
+
export namespace Volume {
|
|
13
|
+
export import Backend = Backend_
|
|
14
|
+
export interface Props<Mode extends DataMode = DataMode> {
|
|
15
|
+
accessModes: Access
|
|
16
|
+
storageClassName?: string
|
|
17
|
+
mode?: Mode
|
|
18
|
+
reclaimPolicy?: Reclaim
|
|
19
|
+
capacity?: Unit.Data
|
|
20
|
+
backend: Backend
|
|
21
|
+
nodeAffinity?: CDK.VolumeNodeAffinity
|
|
22
|
+
}
|
|
23
|
+
export type Reclaim = "Retain" | "Delete" | "Recycle"
|
|
24
|
+
|
|
25
|
+
const ident = v1.kind("PersistentVolume")
|
|
26
|
+
|
|
27
|
+
@manifest({
|
|
28
|
+
body(self) {
|
|
29
|
+
const pvProps = self.props
|
|
30
|
+
const accessModes = Access.parse(pvProps.accessModes)
|
|
31
|
+
let base: CDK.PersistentVolumeSpec = {
|
|
32
|
+
accessModes,
|
|
33
|
+
storageClassName: pvProps.storageClassName,
|
|
34
|
+
capacity: pvProps.capacity
|
|
35
|
+
? {
|
|
36
|
+
storage: CDK.Quantity.fromString(pvProps.capacity)
|
|
37
|
+
}
|
|
38
|
+
: undefined,
|
|
39
|
+
volumeMode: pvProps.mode ?? "Filesystem",
|
|
40
|
+
persistentVolumeReclaimPolicy: pvProps.reclaimPolicy ?? "Retain"
|
|
41
|
+
}
|
|
42
|
+
base = {
|
|
43
|
+
...base,
|
|
44
|
+
...parseBackend(pvProps.backend)
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
spec: base
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
})
|
|
51
|
+
@k8ts(ident)
|
|
52
|
+
@relations("none")
|
|
53
|
+
export class Volume<Mode extends DataMode = DataMode> extends ManifestResource<Props<Mode>> {
|
|
54
|
+
declare readonly kind: typeof ident
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Env,
|
|
3
|
+
PortSet,
|
|
4
|
+
relations,
|
|
5
|
+
ResourcesSpec,
|
|
6
|
+
Unit,
|
|
7
|
+
type CmdBuilder,
|
|
8
|
+
type InputEnvMapping,
|
|
9
|
+
type InputPortSetRecord,
|
|
10
|
+
type TaggedImage
|
|
11
|
+
} from "@k8ts/instruments"
|
|
12
|
+
import { Map } from "immutable"
|
|
13
|
+
import type { CDK } from "../../../_imports"
|
|
14
|
+
import { toContainerPorts, toEnvVars } from "../../utils/adapters"
|
|
15
|
+
|
|
16
|
+
import { seq } from "doddle"
|
|
17
|
+
import { mapKeys, mapValues } from "lodash"
|
|
18
|
+
import type { ManifestResource } from "../../../node"
|
|
19
|
+
import { SubResource } from "../../../node/sub-resource"
|
|
20
|
+
import { Mount as Mount_ } from "./mounts"
|
|
21
|
+
export type Container<Ports extends string> = Container.Container<Ports>
|
|
22
|
+
export namespace Container {
|
|
23
|
+
export import Mount = Mount_
|
|
24
|
+
const container_ResourcesSpec = ResourcesSpec.make({
|
|
25
|
+
cpu: Unit.Cpu,
|
|
26
|
+
memory: Unit.Data
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
type Resources = (typeof container_ResourcesSpec)["__INPUT__"]
|
|
30
|
+
export type Mounts = {
|
|
31
|
+
[key: string]: Mount.ContainerDeviceMount | Mount.ContainerVolumeMount
|
|
32
|
+
}
|
|
33
|
+
export interface Props<Ports extends string> {
|
|
34
|
+
image: TaggedImage
|
|
35
|
+
ports: InputPortSetRecord<Ports>
|
|
36
|
+
command?: CmdBuilder
|
|
37
|
+
mounts?: Mounts
|
|
38
|
+
env?: InputEnvMapping
|
|
39
|
+
securityContext?: CDK.SecurityContext
|
|
40
|
+
resources?: Resources
|
|
41
|
+
}
|
|
42
|
+
@relations({
|
|
43
|
+
needs: self => {
|
|
44
|
+
const a = self.mounts
|
|
45
|
+
return mapValues(
|
|
46
|
+
mapKeys(a, x => x.path),
|
|
47
|
+
x => x.mount.parent
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
})
|
|
51
|
+
export class Container<Ports extends string> extends SubResource<Props<Ports>> {
|
|
52
|
+
get kind() {
|
|
53
|
+
return this.parent.kind.subkind("Container")
|
|
54
|
+
}
|
|
55
|
+
get mounts() {
|
|
56
|
+
return Map(this.props.mounts ?? {})
|
|
57
|
+
.mapEntries(([path, mount]) => {
|
|
58
|
+
return [
|
|
59
|
+
mount,
|
|
60
|
+
{
|
|
61
|
+
mount,
|
|
62
|
+
path: path as string
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
})
|
|
66
|
+
.valueSeq()
|
|
67
|
+
.toArray()
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
get volumes() {
|
|
71
|
+
return seq(this.mounts.map(x => x.mount.parent))
|
|
72
|
+
.uniq()
|
|
73
|
+
.toArray()
|
|
74
|
+
.pull()
|
|
75
|
+
}
|
|
76
|
+
get ports() {
|
|
77
|
+
return PortSet.make(this.props.ports)
|
|
78
|
+
}
|
|
79
|
+
submanifest(): CDK.Container {
|
|
80
|
+
const self = this
|
|
81
|
+
const { image, ports, command, env, securityContext } = self.props
|
|
82
|
+
const container: CDK.Container = {
|
|
83
|
+
name: self.name,
|
|
84
|
+
image: image.text,
|
|
85
|
+
ports: toContainerPorts(PortSet.make(ports)).valueSeq().toArray(),
|
|
86
|
+
resources: self._resources()?.toObject(),
|
|
87
|
+
command: command?.toArray(),
|
|
88
|
+
env: toEnvVars(Env(env)).valueSeq().toArray(),
|
|
89
|
+
securityContext,
|
|
90
|
+
...self._groupedMounts()
|
|
91
|
+
}
|
|
92
|
+
return container
|
|
93
|
+
}
|
|
94
|
+
constructor(
|
|
95
|
+
parent: ManifestResource,
|
|
96
|
+
name: string,
|
|
97
|
+
readonly subtype: "init" | "main",
|
|
98
|
+
override readonly props: Props<Ports>
|
|
99
|
+
) {
|
|
100
|
+
super(parent, name, props)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
private _groupedMounts() {
|
|
104
|
+
const x = {
|
|
105
|
+
volumeMounts: [],
|
|
106
|
+
volumeDevices: []
|
|
107
|
+
} as Pick<CDK.Container, "volumeMounts" | "volumeDevices">
|
|
108
|
+
for (const [path, mount] of Object.entries(this.props.mounts ?? {})) {
|
|
109
|
+
if (mount instanceof Mount.ContainerDeviceMount) {
|
|
110
|
+
x.volumeDevices!.push(mount.submanifest(path))
|
|
111
|
+
} else {
|
|
112
|
+
x.volumeMounts!.push(mount.submanifest(path))
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return x
|
|
116
|
+
}
|
|
117
|
+
private _resources() {
|
|
118
|
+
if (!this.props.resources) {
|
|
119
|
+
return undefined
|
|
120
|
+
}
|
|
121
|
+
const { cpu, memory } = this.props.resources
|
|
122
|
+
return container_ResourcesSpec.parse({
|
|
123
|
+
cpu: cpu,
|
|
124
|
+
memory: memory
|
|
125
|
+
})
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export function make<Ports extends string>(
|
|
130
|
+
parent: ManifestResource,
|
|
131
|
+
name: string,
|
|
132
|
+
subtype: "init" | "main",
|
|
133
|
+
props: Props<Ports>
|
|
134
|
+
) {
|
|
135
|
+
return new Container(parent, name, subtype, props)
|
|
136
|
+
}
|
|
137
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./container"
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { CDK } from "../../../_imports"
|
|
2
|
+
import type { Device } from "../volume/devices"
|
|
3
|
+
import type { Volume } from "../volume/volumes"
|
|
4
|
+
export type Mount = Mount.ContainerVolumeMount | Mount.ContainerDeviceMount
|
|
5
|
+
export namespace Mount {
|
|
6
|
+
type Path_Rooted = `/${string}`
|
|
7
|
+
export type Path = `${"" | "." | ".."}${Path_Rooted}`
|
|
8
|
+
|
|
9
|
+
export interface Options {
|
|
10
|
+
readOnly?: boolean
|
|
11
|
+
subPath?: string
|
|
12
|
+
}
|
|
13
|
+
export class ContainerVolumeMount {
|
|
14
|
+
get kind() {
|
|
15
|
+
return this.parent.kind.parent.subkind("ContainerVolumeMount")
|
|
16
|
+
}
|
|
17
|
+
constructor(
|
|
18
|
+
readonly parent: Volume.PodVolume,
|
|
19
|
+
readonly props: Options
|
|
20
|
+
) {}
|
|
21
|
+
|
|
22
|
+
submanifest(mountPath: string): CDK.VolumeMount {
|
|
23
|
+
return {
|
|
24
|
+
name: this.parent.name,
|
|
25
|
+
mountPath: mountPath,
|
|
26
|
+
readOnly: this.props.readOnly,
|
|
27
|
+
subPath: this.props.subPath
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export class ContainerDeviceMount {
|
|
33
|
+
get kind() {
|
|
34
|
+
return this.parent.kind.parent.subkind("ContainerDeviceMount")
|
|
35
|
+
}
|
|
36
|
+
constructor(readonly parent: Device.PodDevice) {}
|
|
37
|
+
|
|
38
|
+
submanifest(devicePath: string): CDK.VolumeDevice {
|
|
39
|
+
return {
|
|
40
|
+
devicePath: devicePath,
|
|
41
|
+
name: this.parent.name
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { manifest, relations } from "@k8ts/instruments"
|
|
2
|
+
import { seq } from "doddle"
|
|
3
|
+
import { omit } from "lodash"
|
|
4
|
+
import { CDK } from "../../_imports"
|
|
5
|
+
import { apps_v1 } from "../../api-versions"
|
|
6
|
+
import { k8ts } from "../../kind-map"
|
|
7
|
+
import { ManifestResource } from "../../node/manifest-resource"
|
|
8
|
+
import { Container } from "./container"
|
|
9
|
+
import { Device, Volume } from "./volume"
|
|
10
|
+
export type PodTemplate<Ports extends string> = PodTemplate.PodTemplate<Ports>
|
|
11
|
+
export namespace PodTemplate {
|
|
12
|
+
export type Props<Ports extends string> = Omit<
|
|
13
|
+
CDK.PodSpec,
|
|
14
|
+
"containers" | "initContainers" | "volumes"
|
|
15
|
+
> & {
|
|
16
|
+
POD(scope: PodScope): Iterable<Container.Container<Ports>>
|
|
17
|
+
}
|
|
18
|
+
const ident = apps_v1.kind("PodTemplate")
|
|
19
|
+
@k8ts(ident)
|
|
20
|
+
@relations({
|
|
21
|
+
kids: s => [...s.containers, ...s.volumes]
|
|
22
|
+
})
|
|
23
|
+
@manifest({
|
|
24
|
+
body(self): CDK.PodTemplateSpec {
|
|
25
|
+
const { meta, props } = self
|
|
26
|
+
const containers = self.containers
|
|
27
|
+
const initContainers = containers
|
|
28
|
+
.filter(c => c.subtype === "init")
|
|
29
|
+
.map(x => x.submanifest())
|
|
30
|
+
.toArray()
|
|
31
|
+
const mainContainers = containers
|
|
32
|
+
.filter(c => c.subtype === "main")
|
|
33
|
+
.map(x => x.submanifest())
|
|
34
|
+
.toArray()
|
|
35
|
+
|
|
36
|
+
const volumes = self.volumes.map(x => x.submanifest()).toArray()
|
|
37
|
+
return {
|
|
38
|
+
spec: {
|
|
39
|
+
...omit(props, "POD"),
|
|
40
|
+
containers: mainContainers.pull(),
|
|
41
|
+
initContainers: initContainers.pull(),
|
|
42
|
+
volumes: volumes.pull()
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
})
|
|
47
|
+
export class PodTemplate<Ports extends string = string> extends ManifestResource<Props<Ports>> {
|
|
48
|
+
kind = ident
|
|
49
|
+
readonly containers = seq(() => this.props.POD(new PodScope(this))).cache()
|
|
50
|
+
readonly mounts = seq(() => this.containers.concatMap(x => x.mounts)).cache()
|
|
51
|
+
readonly volumes = seq(() => this.containers.concatMap(x => x.volumes)).uniq()
|
|
52
|
+
readonly ports = seq(() => this.containers.map(x => x.ports)).reduce((a, b) => a.union(b))
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export class PodScope {
|
|
56
|
+
constructor(private readonly _parent: PodTemplate) {}
|
|
57
|
+
Container<Ports extends string>(
|
|
58
|
+
name: string,
|
|
59
|
+
options: Container.Props<Ports>
|
|
60
|
+
): Container<Ports> {
|
|
61
|
+
return Container.make(this._parent, name, "main", options)
|
|
62
|
+
}
|
|
63
|
+
InitContainer(name: string, options: Container.Props<never>): Container<never> {
|
|
64
|
+
return Container.make(this._parent, name, "init", options)
|
|
65
|
+
}
|
|
66
|
+
Volume(name: string, options: Volume.Backend) {
|
|
67
|
+
return Volume.make(this._parent, name, options)
|
|
68
|
+
}
|
|
69
|
+
Device(name: string, options: Device.Backend): Device {
|
|
70
|
+
return Device.make(this._parent, name, options)
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { relations } from "@k8ts/instruments"
|
|
2
|
+
import type { CDK } from "../../../_imports"
|
|
3
|
+
import type { ManifestResource } from "../../../node"
|
|
4
|
+
import { SubResource } from "../../../node/sub-resource"
|
|
5
|
+
import { Persistent } from "../../persistent"
|
|
6
|
+
import { Mount } from "../container/mounts"
|
|
7
|
+
export type Device = Device.PodDevice
|
|
8
|
+
export namespace Device {
|
|
9
|
+
interface PodDevice_Backend_Pvc {
|
|
10
|
+
backend: Persistent.Claim<"Block">
|
|
11
|
+
readOnly?: boolean
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export type Backend = PodDevice_Backend_Pvc
|
|
15
|
+
@relations({
|
|
16
|
+
needs: self => ({
|
|
17
|
+
backend: self.backend.backend
|
|
18
|
+
})
|
|
19
|
+
})
|
|
20
|
+
export class PodDevice extends SubResource<PodDevice_Backend_Pvc> {
|
|
21
|
+
get kind() {
|
|
22
|
+
return this.parent.kind.subkind("Device")
|
|
23
|
+
}
|
|
24
|
+
constructor(
|
|
25
|
+
parent: ManifestResource,
|
|
26
|
+
name: string,
|
|
27
|
+
readonly backend: PodDevice_Backend_Pvc
|
|
28
|
+
) {
|
|
29
|
+
super(parent, name, backend)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
submanifest(): CDK.Volume {
|
|
33
|
+
return {
|
|
34
|
+
name: this.name,
|
|
35
|
+
persistentVolumeClaim: {
|
|
36
|
+
claimName: this.backend.backend.name,
|
|
37
|
+
readOnly: this.backend.readOnly
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
mount() {
|
|
43
|
+
return new Mount.ContainerDeviceMount(this)
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function make(parent: ManifestResource, name: string, input: Backend) {
|
|
48
|
+
return new PodDevice(parent, name, input)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { CDK } from "../../../_imports"
|
|
2
|
+
|
|
3
|
+
import { relations } from "@k8ts/instruments"
|
|
4
|
+
import type { ManifestResource } from "../../../node"
|
|
5
|
+
import { SubResource } from "../../../node/sub-resource"
|
|
6
|
+
import type { ConfigMap } from "../../configmap"
|
|
7
|
+
import type { Persistent } from "../../persistent"
|
|
8
|
+
import type { Secret } from "../../secret"
|
|
9
|
+
import { Mount } from "../container/mounts"
|
|
10
|
+
export type Volume<Props extends Volume.Backend = Volume.Backend> = Volume.PodVolume<Props>
|
|
11
|
+
export namespace Volume {
|
|
12
|
+
interface PodVolume_Backend_Pvc {
|
|
13
|
+
backend: Persistent.Claim<"Filesystem">
|
|
14
|
+
readOnly?: boolean
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface PodVolume_Backend_ConfigMap {
|
|
18
|
+
backend: ConfigMap
|
|
19
|
+
}
|
|
20
|
+
interface PodVolume_Backend_Secret {
|
|
21
|
+
backend: Secret
|
|
22
|
+
}
|
|
23
|
+
export type Backend =
|
|
24
|
+
| PodVolume_Backend_Pvc
|
|
25
|
+
| PodVolume_Backend_ConfigMap
|
|
26
|
+
| PodVolume_Backend_Secret
|
|
27
|
+
@relations({
|
|
28
|
+
needs: self => ({
|
|
29
|
+
backend: self.props.backend
|
|
30
|
+
})
|
|
31
|
+
})
|
|
32
|
+
export abstract class PodVolume<Props extends Backend = Backend> extends SubResource<Props> {
|
|
33
|
+
private KIND = "Volume" as const
|
|
34
|
+
get kind() {
|
|
35
|
+
return this.parent.kind.subkind("Volume")
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
abstract submanifest(): CDK.Volume
|
|
39
|
+
|
|
40
|
+
Mount(options?: Mount.Options) {
|
|
41
|
+
return new Mount.ContainerVolumeMount(this as any, options ?? {})
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
class PvcPodVolume extends PodVolume<PodVolume_Backend_Pvc> {
|
|
46
|
+
override submanifest(): CDK.Volume {
|
|
47
|
+
return {
|
|
48
|
+
name: this.name,
|
|
49
|
+
persistentVolumeClaim: {
|
|
50
|
+
claimName: this.props.backend.name,
|
|
51
|
+
readOnly: this.props.readOnly
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
class ConfigMapPodVolume extends PodVolume<PodVolume_Backend_ConfigMap> {
|
|
58
|
+
override submanifest(): CDK.Volume {
|
|
59
|
+
return {
|
|
60
|
+
name: this.name,
|
|
61
|
+
configMap: {
|
|
62
|
+
name: this.props.backend.name
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
class SecretPodVolume extends PodVolume<PodVolume_Backend_Secret> {
|
|
69
|
+
override submanifest(): CDK.Volume {
|
|
70
|
+
return {
|
|
71
|
+
name: this.name,
|
|
72
|
+
secret: {
|
|
73
|
+
secretName: this.props.backend.name
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function make(parent: ManifestResource, name: string, input: Backend): PodVolume {
|
|
80
|
+
const { backend } = input
|
|
81
|
+
switch (backend.kind.name) {
|
|
82
|
+
case "PersistentVolumeClaim":
|
|
83
|
+
return new PvcPodVolume(parent, name, input as PodVolume_Backend_Pvc)
|
|
84
|
+
case "ConfigMap":
|
|
85
|
+
return new ConfigMapPodVolume(parent, name, input as PodVolume_Backend_ConfigMap)
|
|
86
|
+
case "Secret":
|
|
87
|
+
return new SecretPodVolume(parent, name, input as PodVolume_Backend_Secret)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { manifest, relations } from "@k8ts/instruments"
|
|
2
|
+
import { CDK } from "../../_imports"
|
|
3
|
+
import { v1 } from "../../api-versions"
|
|
4
|
+
import { k8ts } from "../../kind-map"
|
|
5
|
+
import { ManifestResource } from "../../node/manifest-resource"
|
|
6
|
+
|
|
7
|
+
export interface Props {
|
|
8
|
+
data: Record<string, string>
|
|
9
|
+
stringData: Record<string, string>
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const ident = v1.kind("Secret")
|
|
13
|
+
@k8ts(ident)
|
|
14
|
+
@relations("none")
|
|
15
|
+
@manifest({
|
|
16
|
+
body(self): CDK.KubeSecretProps {
|
|
17
|
+
return {
|
|
18
|
+
data: self.props.data,
|
|
19
|
+
stringData: self.props.stringData
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
})
|
|
23
|
+
export class Secret extends ManifestResource<Props> {
|
|
24
|
+
kind = ident
|
|
25
|
+
}
|