@highstate/k8s 0.9.14 → 0.9.16
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/dist/{chunk-QLQ3QVGT.js → chunk-5C2BJGES.js} +17 -17
- package/dist/chunk-5C2BJGES.js.map +1 -0
- package/dist/{chunk-Y3LZSX7I.js → chunk-5TLC5BXR.js} +33 -31
- package/dist/chunk-5TLC5BXR.js.map +1 -0
- package/dist/chunk-BBIY3KUN.js +1557 -0
- package/dist/chunk-BBIY3KUN.js.map +1 -0
- package/dist/{chunk-5S4JPM4M.js → chunk-OFFSHGC6.js} +43 -32
- package/dist/chunk-OFFSHGC6.js.map +1 -0
- package/dist/chunk-PZ5AY32C.js +9 -0
- package/dist/chunk-PZ5AY32C.js.map +1 -0
- package/dist/{chunk-VL7Z5FJQ.js → chunk-TZHOUJRC.js} +29 -20
- package/dist/chunk-TZHOUJRC.js.map +1 -0
- package/dist/{chunk-6L67WIZW.js → chunk-YWRJ4EZM.js} +29 -20
- package/dist/chunk-YWRJ4EZM.js.map +1 -0
- package/dist/deployment-XK3CDJOE.js +6 -0
- package/dist/deployment-XK3CDJOE.js.map +1 -0
- package/dist/highstate.manifest.json +8 -8
- package/dist/index.js +39 -138
- package/dist/index.js.map +1 -1
- package/dist/stateful-set-7CAQWTV2.js +6 -0
- package/dist/stateful-set-7CAQWTV2.js.map +1 -0
- package/dist/units/access-point/index.js +7 -6
- package/dist/units/access-point/index.js.map +1 -1
- package/dist/units/cert-manager/index.js +11 -14
- package/dist/units/cert-manager/index.js.map +1 -1
- package/dist/units/cluster-dns/index.js +9 -8
- package/dist/units/cluster-dns/index.js.map +1 -1
- package/dist/units/cluster-patch/index.js +9 -8
- package/dist/units/cluster-patch/index.js.map +1 -1
- package/dist/units/dns01-issuer/index.js +9 -14
- package/dist/units/dns01-issuer/index.js.map +1 -1
- package/dist/units/existing-cluster/index.js +12 -19
- package/dist/units/existing-cluster/index.js.map +1 -1
- package/dist/units/gateway-api/index.js +8 -10
- package/dist/units/gateway-api/index.js.map +1 -1
- package/package.json +19 -10
- package/src/cluster.ts +14 -9
- package/src/deployment.ts +34 -0
- package/src/helm.ts +38 -2
- package/src/network-policy.ts +2 -5
- package/src/shared.ts +17 -0
- package/src/stateful-set.ts +34 -0
- package/src/units/cluster-dns/index.ts +1 -1
- package/src/units/cluster-patch/index.ts +1 -1
- package/src/units/existing-cluster/index.ts +1 -1
- package/src/workload.ts +22 -3
- package/dist/chunk-5S4JPM4M.js.map +0 -1
- package/dist/chunk-6L67WIZW.js.map +0 -1
- package/dist/chunk-QLQ3QVGT.js.map +0 -1
- package/dist/chunk-SARVLQZY.js +0 -876
- package/dist/chunk-SARVLQZY.js.map +0 -1
- package/dist/chunk-VL7Z5FJQ.js.map +0 -1
- package/dist/chunk-WEKIQRCZ.js +0 -792
- package/dist/chunk-WEKIQRCZ.js.map +0 -1
- package/dist/chunk-Y3LZSX7I.js.map +0 -1
- package/dist/deployment-QTPBNKO5.js +0 -10
- package/dist/deployment-QTPBNKO5.js.map +0 -1
- package/dist/stateful-set-K4GV7ZTK.js +0 -10
- package/dist/stateful-set-K4GV7ZTK.js.map +0 -1
- package/src/custom.ts +0 -104
@@ -1,7 +1,8 @@
|
|
1
|
-
|
2
|
-
import { text } from
|
3
|
-
import {
|
4
|
-
import { CoreV1Api } from
|
1
|
+
import { images_exports } from './chunk-5TLC5BXR.js';
|
2
|
+
import { text } from '@highstate/contract';
|
3
|
+
import { secret } from '@highstate/pulumi';
|
4
|
+
import { CoreV1Api } from '@kubernetes/client-node';
|
5
|
+
|
5
6
|
function isPrivateIp(ip) {
|
6
7
|
const privateIpRegex = /^(10|172\.16|192\.168)\./;
|
7
8
|
return privateIpRegex.test(ip);
|
@@ -29,21 +30,22 @@ async function detectExternalIps(kubeConfig, internalIpsPolicy) {
|
|
29
30
|
function createK8sTerminal(kubeconfig) {
|
30
31
|
return {
|
31
32
|
name: "management",
|
32
|
-
title:
|
33
|
+
title: "Cluster Management",
|
33
34
|
description: "Manage the cluster using kubectl and helm",
|
34
|
-
|
35
|
+
icon: "devicon:kubernetes",
|
36
|
+
image: images_exports["terminal-kubectl"].image,
|
35
37
|
command: ["bash", "/welcome.sh"],
|
36
38
|
files: {
|
37
39
|
"/kubeconfig": secret(kubeconfig),
|
38
40
|
"/welcome.sh": text`
|
39
|
-
|
40
|
-
|
41
|
+
echo "Connecting to the cluster..."
|
42
|
+
kubectl cluster-info
|
41
43
|
|
42
|
-
|
43
|
-
|
44
|
+
echo "Use 'kubectl' and 'helm' to manage the cluster."
|
45
|
+
echo
|
44
46
|
|
45
|
-
|
46
|
-
|
47
|
+
exec bash
|
48
|
+
`
|
47
49
|
},
|
48
50
|
env: {
|
49
51
|
KUBECONFIG: "/kubeconfig"
|
@@ -51,8 +53,6 @@ function createK8sTerminal(kubeconfig) {
|
|
51
53
|
};
|
52
54
|
}
|
53
55
|
|
54
|
-
export {
|
55
|
-
|
56
|
-
|
57
|
-
};
|
58
|
-
//# sourceMappingURL=chunk-QLQ3QVGT.js.map
|
56
|
+
export { createK8sTerminal, detectExternalIps };
|
57
|
+
//# sourceMappingURL=chunk-5C2BJGES.js.map
|
58
|
+
//# sourceMappingURL=chunk-5C2BJGES.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/cluster.ts"],"names":[],"mappings":";;;;;AAMA,SAAS,YAAY,EAAY,EAAA;AAC/B,EAAA,MAAM,cAAiB,GAAA,0BAAA;AACvB,EAAO,OAAA,cAAA,CAAe,KAAK,EAAE,CAAA;AAC/B;AAEA,eAAsB,iBAAA,CACpB,YACA,iBACmB,EAAA;AACnB,EAAM,MAAA,OAAA,GAAU,UAAW,CAAA,aAAA,CAAc,SAAS,CAAA;AAClD,EAAM,MAAA,KAAA,GAAQ,MAAM,OAAA,CAAQ,QAAS,EAAA;AAErC,EAAO,OAAA,KAAA,CAAM,KAAM,CAAA,OAAA,CAAQ,CAAQ,IAAA,KAAA;AACjC,IAAA,MAAM,SAAY,GAAA,IAAA,CAAK,MAAQ,EAAA,SAAA,IAAa,EAAC;AAC7C,IAAA,MAAM,aAAa,SAAU,CAAA,IAAA,CAAK,CAAW,OAAA,KAAA,OAAA,CAAQ,SAAS,YAAY,CAAA;AAC1E,IAAA,MAAM,aAAa,SAAU,CAAA,IAAA,CAAK,CAAW,OAAA,KAAA,OAAA,CAAQ,SAAS,YAAY,CAAA;AAE1E,IAAA,MAAM,SAAmB,EAAC;AAE1B,IAAA,IAAI,YAAY,OAAS,EAAA;AACvB,MAAO,MAAA,CAAA,IAAA,CAAK,WAAW,OAAO,CAAA;AAAA;AAGhC,IAAI,IAAA,UAAA,EAAY,OAAW,IAAA,iBAAA,KAAsB,QAAU,EAAA;AACzD,MAAO,MAAA,CAAA,IAAA,CAAK,WAAW,OAAO,CAAA;AAAA;AAGhC,IAAI,IAAA,UAAA,EAAY,WAAW,iBAAsB,KAAA,QAAA,IAAY,CAAC,WAAY,CAAA,UAAA,CAAW,OAAO,CAAG,EAAA;AAC7F,MAAO,MAAA,CAAA,IAAA,CAAK,WAAW,OAAO,CAAA;AAAA;AAGhC,IAAO,OAAA,MAAA;AAAA,GACR,CAAA;AACH;AAEO,SAAS,kBAAkB,UAA6C,EAAA;AAC7E,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,YAAA;AAAA,IACN,KAAO,EAAA,oBAAA;AAAA,IACP,WAAa,EAAA,2CAAA;AAAA,IACb,IAAM,EAAA,oBAAA;AAAA,IAEN,KAAA,EAAO,cAAO,CAAA,kBAAkB,CAAE,CAAA,KAAA;AAAA,IAClC,OAAA,EAAS,CAAC,MAAA,EAAQ,aAAa,CAAA;AAAA,IAE/B,KAAO,EAAA;AAAA,MACL,aAAA,EAAe,OAAO,UAAU,CAAA;AAAA,MAEhC,aAAe,EAAA,IAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA,MAAA;AAAA,KASjB;AAAA,IAEA,GAAK,EAAA;AAAA,MACH,UAAY,EAAA;AAAA;AACd,GACF;AACF","file":"chunk-5C2BJGES.js","sourcesContent":["import type { k8s } from \"@highstate/library\"\nimport { text } from \"@highstate/contract\"\nimport { secret, type Input, type InstanceTerminal } from \"@highstate/pulumi\"\nimport { CoreV1Api, type KubeConfig } from \"@kubernetes/client-node\"\nimport { images } from \"./shared\"\n\nfunction isPrivateIp(ip: string) {\n const privateIpRegex = /^(10|172\\.16|192\\.168)\\./\n return privateIpRegex.test(ip)\n}\n\nexport async function detectExternalIps(\n kubeConfig: KubeConfig,\n internalIpsPolicy: k8s.InternalIpsPolicy,\n): Promise<string[]> {\n const nodeApi = kubeConfig.makeApiClient(CoreV1Api)\n const nodes = await nodeApi.listNode()\n\n return nodes.items.flatMap(node => {\n const addresses = node.status?.addresses ?? []\n const externalIp = addresses.find(address => address.type === \"ExternalIP\")\n const internalIp = addresses.find(address => address.type === \"InternalIP\")\n\n const result: string[] = []\n\n if (externalIp?.address) {\n result.push(externalIp.address)\n }\n\n if (internalIp?.address && internalIpsPolicy === \"always\") {\n result.push(internalIp.address)\n }\n\n if (internalIp?.address && internalIpsPolicy === \"public\" && !isPrivateIp(internalIp.address)) {\n result.push(internalIp.address)\n }\n\n return result\n })\n}\n\nexport function createK8sTerminal(kubeconfig: Input<string>): InstanceTerminal {\n return {\n name: \"management\",\n title: \"Cluster Management\",\n description: \"Manage the cluster using kubectl and helm\",\n icon: \"devicon:kubernetes\",\n\n image: images[\"terminal-kubectl\"].image,\n command: [\"bash\", \"/welcome.sh\"],\n\n files: {\n \"/kubeconfig\": secret(kubeconfig),\n\n \"/welcome.sh\": text`\n echo \"Connecting to the cluster...\"\n kubectl cluster-info\n\n echo \"Use 'kubectl' and 'helm' to manage the cluster.\"\n echo\n\n exec bash\n `,\n },\n\n env: {\n KUBECONFIG: \"/kubeconfig\",\n },\n }\n}\n"]}
|
@@ -1,13 +1,24 @@
|
|
1
|
-
|
2
|
-
import { core
|
3
|
-
import {
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
import { __export } from './chunk-PZ5AY32C.js';
|
2
|
+
import { Provider, core } from '@pulumi/kubernetes';
|
3
|
+
import { ComponentResource, output as output$1 } from '@pulumi/pulumi';
|
4
|
+
import { output, toPromise, interpolate } from '@highstate/pulumi';
|
5
|
+
|
6
|
+
// assets/images.json
|
7
|
+
var images_exports = {};
|
8
|
+
__export(images_exports, {
|
9
|
+
default: () => images_default,
|
10
|
+
"terminal-kubectl": () => terminal_kubectl
|
11
|
+
});
|
12
|
+
var terminal_kubectl = {
|
13
|
+
name: "ghcr.io/exeteres/highstate/terminal-kubectl",
|
14
|
+
tag: "latest",
|
15
|
+
image: "ghcr.io/exeteres/highstate/terminal-kubectl:latest@sha256:6b43498234fa7e2edbae2cd108a40b957575d184349ea622ffabdbe9b6d06933"
|
16
|
+
};
|
17
|
+
var images_default = {
|
18
|
+
"terminal-kubectl": terminal_kubectl
|
19
|
+
};
|
7
20
|
|
8
21
|
// src/shared.ts
|
9
|
-
import { interpolate, output, toPromise } from "@highstate/pulumi";
|
10
|
-
import { core, Provider } from "@pulumi/kubernetes";
|
11
22
|
var providers = /* @__PURE__ */ new Map();
|
12
23
|
function getProvider(cluster) {
|
13
24
|
const provider = output(cluster).apply((cluster2) => {
|
@@ -100,7 +111,7 @@ var Namespace = class extends ComponentResource {
|
|
100
111
|
name,
|
101
112
|
{
|
102
113
|
...args,
|
103
|
-
name:
|
114
|
+
name: output$1(args).apply((args2) => {
|
104
115
|
if (args2.resource.clusterId !== args2.cluster.id) {
|
105
116
|
throw new Error(
|
106
117
|
`Cluster mismatch when patching namespace "${name}": "${args2.resource.clusterId}" != "${args2.cluster.id}"`
|
@@ -123,7 +134,7 @@ var Namespace = class extends ComponentResource {
|
|
123
134
|
}
|
124
135
|
return new ExternalNamespace(
|
125
136
|
name,
|
126
|
-
|
137
|
+
output$1(args).apply((args2) => {
|
127
138
|
if (args2.resource.clusterId !== args2.cluster.id) {
|
128
139
|
throw new Error(
|
129
140
|
`Cluster mismatch when receiving namespace "${name}": "${args2.resource.clusterId}" != "${args2.cluster.id}"`
|
@@ -161,8 +172,8 @@ function mapNamespaceMetadata(args, name) {
|
|
161
172
|
}
|
162
173
|
var CreatedNamespace = class extends Namespace {
|
163
174
|
constructor(name, args, opts) {
|
164
|
-
const namespace =
|
165
|
-
return new
|
175
|
+
const namespace = output$1(args).apply(async (args2) => {
|
176
|
+
return new core.v1.Namespace(
|
166
177
|
name,
|
167
178
|
{
|
168
179
|
metadata: mapNamespaceMetadata(args2, name)
|
@@ -179,7 +190,7 @@ var CreatedNamespace = class extends Namespace {
|
|
179
190
|
name,
|
180
191
|
args,
|
181
192
|
opts,
|
182
|
-
|
193
|
+
output$1(args.cluster),
|
183
194
|
namespace.metadata,
|
184
195
|
namespace.spec,
|
185
196
|
namespace.status
|
@@ -188,8 +199,8 @@ var CreatedNamespace = class extends Namespace {
|
|
188
199
|
};
|
189
200
|
var NamespacePatch = class extends Namespace {
|
190
201
|
constructor(name, args, opts) {
|
191
|
-
const namespace =
|
192
|
-
return new
|
202
|
+
const namespace = output$1(args).apply(async (args2) => {
|
203
|
+
return new core.v1.NamespacePatch(
|
193
204
|
name,
|
194
205
|
{
|
195
206
|
metadata: mapNamespaceMetadata(args2, name)
|
@@ -206,7 +217,7 @@ var NamespacePatch = class extends Namespace {
|
|
206
217
|
name,
|
207
218
|
args,
|
208
219
|
opts,
|
209
|
-
|
220
|
+
output$1(args.cluster),
|
210
221
|
namespace.metadata,
|
211
222
|
namespace.spec,
|
212
223
|
namespace.status
|
@@ -215,8 +226,8 @@ var NamespacePatch = class extends Namespace {
|
|
215
226
|
};
|
216
227
|
var ExternalNamespace = class extends Namespace {
|
217
228
|
constructor(name, id, cluster, opts) {
|
218
|
-
const namespace =
|
219
|
-
return
|
229
|
+
const namespace = output$1(id).apply(async (realName) => {
|
230
|
+
return core.v1.Namespace.get(
|
220
231
|
//
|
221
232
|
name,
|
222
233
|
realName,
|
@@ -232,7 +243,7 @@ var ExternalNamespace = class extends Namespace {
|
|
232
243
|
name,
|
233
244
|
{ id, cluster },
|
234
245
|
opts,
|
235
|
-
|
246
|
+
output$1(cluster),
|
236
247
|
namespace.metadata,
|
237
248
|
namespace.spec,
|
238
249
|
namespace.status
|
@@ -240,15 +251,6 @@ var ExternalNamespace = class extends Namespace {
|
|
240
251
|
}
|
241
252
|
};
|
242
253
|
|
243
|
-
export {
|
244
|
-
|
245
|
-
|
246
|
-
commonExtraArgs,
|
247
|
-
mapMetadata,
|
248
|
-
mapSelectorLikeToSelector,
|
249
|
-
mapNamespaceLikeToNamespaceName,
|
250
|
-
mapNamespaceNameToSelector,
|
251
|
-
resourceIdToString,
|
252
|
-
withPatchName
|
253
|
-
};
|
254
|
-
//# sourceMappingURL=chunk-Y3LZSX7I.js.map
|
254
|
+
export { Namespace, commonExtraArgs, getProvider, images_exports, mapMetadata, mapNamespaceLikeToNamespaceName, mapNamespaceNameToSelector, mapSelectorLikeToSelector, resourceIdToString, withPatchName };
|
255
|
+
//# sourceMappingURL=chunk-5TLC5BXR.js.map
|
256
|
+
//# sourceMappingURL=chunk-5TLC5BXR.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../assets/images.json","../src/shared.ts","../src/namespace.ts"],"names":["terminal-kubectl","cluster","provider","resource","output","args","core"],"mappings":"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","file":"chunk-5TLC5BXR.js","sourcesContent":["{\n \"terminal-kubectl\": {\n \"name\": \"ghcr.io/exeteres/highstate/terminal-kubectl\",\n \"tag\": \"latest\",\n \"image\": \"ghcr.io/exeteres/highstate/terminal-kubectl:latest@sha256:6b43498234fa7e2edbae2cd108a40b957575d184349ea622ffabdbe9b6d06933\"\n }\n}\n","import type { PartialKeys } from \"@highstate/contract\"\nimport type { k8s } from \"@highstate/library\"\nimport { interpolate, Output, output, toPromise, type Input, type Unwrap } from \"@highstate/pulumi\"\nimport { core, Provider, types } from \"@pulumi/kubernetes\"\nimport * as images from \"../assets/images.json\"\nimport { Namespace } from \"./namespace\"\n\nconst providers = new Map<string, Provider>()\n\nexport function getProvider(cluster: Input<k8s.Cluster>): Promise<Provider> {\n const provider = output(cluster).apply(cluster => {\n const existingProvider = providers.get(cluster.id)\n if (existingProvider) {\n return existingProvider\n }\n\n const provider = new Provider(`${cluster.name}-${cluster.id}`, {\n kubeconfig: cluster.kubeconfig,\n })\n providers.set(cluster.id, provider)\n\n return provider\n })\n\n return toPromise(provider)\n}\n\nexport function getProviderSync(cluster: k8s.Cluster): Provider {\n const existingProvider = providers.get(cluster.id)\n if (existingProvider) {\n return existingProvider\n }\n\n const provider = new Provider(`${cluster.name}-${cluster.id}`, {\n kubeconfig: cluster.kubeconfig,\n })\n providers.set(cluster.id, provider)\n\n return provider\n}\n\nexport type NamespaceLike = core.v1.Namespace | Namespace | string\n\nexport type CommonArgs = {\n /**\n * The name of the resource.\n */\n name?: Input<string>\n\n /**\n * The namespace to create the resource in.\n */\n namespace: Input<NamespaceLike | undefined>\n\n /**\n * The cluster to create the resource in.\n */\n cluster: Input<k8s.Cluster>\n\n /**\n * The metadata to apply to the resource.\n */\n metadata?: Input<types.input.meta.v1.ObjectMeta>\n}\n\nexport const commonExtraArgs = [\"name\", \"namespace\", \"cluster\", \"metadata\"] as const\n\nexport function mapMetadata(\n args: PartialKeys<Unwrap<CommonArgs>, \"namespace\" | \"cluster\">,\n fallbackName?: string,\n): types.input.meta.v1.ObjectMeta {\n return {\n ...args.metadata,\n name: args.name ?? args.metadata?.name ?? fallbackName,\n namespace: args.namespace ? mapNamespaceLikeToNamespaceName(args.namespace) : undefined,\n }\n}\n\nexport type SelectorLike = types.input.meta.v1.LabelSelector | Record<string, Input<string>>\n\nexport function mapSelectorLikeToSelector(\n selector: SelectorLike,\n): types.input.meta.v1.LabelSelector {\n if (\"matchLabels\" in selector || \"matchExpressions\" in selector) {\n return selector\n }\n\n return {\n matchLabels: selector as Record<string, Input<string>>,\n }\n}\n\nexport function mapNamespaceLikeToNamespaceName(namespace: NamespaceLike): Output<string> {\n if (Namespace.isInstance(namespace)) {\n return namespace.metadata.name\n }\n\n if (core.v1.Namespace.isInstance(namespace)) {\n return namespace.metadata.name\n }\n\n return output(namespace)\n}\n\nexport function mapNamespaceNameToSelector(\n namespace: Input<string>,\n): types.input.meta.v1.LabelSelector {\n return {\n matchLabels: {\n \"kubernetes.io/metadata.name\": namespace,\n },\n }\n}\n\nexport type ResourceId = {\n name: Input<string>\n namespace?: Input<NamespaceLike | undefined>\n}\n\nexport function resourceIdToString(id: Input<ResourceId>): Output<string> {\n return output(id).apply(metadata => {\n const namespaceName = metadata.namespace\n ? mapNamespaceLikeToNamespaceName(metadata.namespace)\n : undefined\n\n return output(namespaceName ? interpolate`${namespaceName}/${metadata.name}` : metadata.name)\n })\n}\n\nexport function withPatchName(\n resourceType: string,\n resource: Input<k8s.Resource>,\n cluster: Input<k8s.Cluster>,\n): Output<string> {\n return output({ resource, cluster }).apply(({ resource, cluster }) => {\n if (resource.clusterId !== cluster.id) {\n throw new Error(\n `Cluster mismatch when patching ${resourceType} \"${resource.metadata.name}\": \"${resource.clusterId}\" != \"${cluster.id}\"`,\n )\n }\n\n return resource.metadata.name\n })\n}\n\nexport { images }\n","import type { k8s } from \"@highstate/library\"\nimport { core, type types } from \"@pulumi/kubernetes\"\nimport {\n ComponentResource,\n output,\n Output,\n type ComponentResourceOptions,\n type Input,\n type Inputs,\n type Unwrap,\n} from \"@pulumi/pulumi\"\nimport { getProvider, mapMetadata, type CommonArgs } from \"./shared\"\n\nexport type NamespaceArgs = Omit<CommonArgs, \"namespace\"> & {\n /**\n * Whether to apply \"pod-security.kubernetes.io/enforce=privileged\" label to the namespace.\n */\n privileged?: boolean\n}\n\nexport type CreateOrPatchNamespaceArgs = NamespaceArgs & {\n /**\n * The resource to use to determine the name of the namespace.\n *\n * If not provided, the namespace will be created, otherwise it will be retrieved/patched.\n */\n resource: Input<k8s.Resource> | undefined\n}\n\nexport abstract class Namespace extends ComponentResource {\n protected constructor(\n type: string,\n name: string,\n args: Inputs,\n opts: ComponentResourceOptions | undefined,\n\n /**\n * The cluster where the namespace is created.\n */\n readonly cluster: Output<k8s.Cluster>,\n\n /*\n * The metadata of the underlying Kubernetes namespace.\n */\n readonly metadata: Output<types.output.meta.v1.ObjectMeta>,\n\n /**\n * The spec of the underlying Kubernetes namespace.\n */\n readonly spec: Output<types.output.core.v1.NamespaceSpec>,\n\n /**\n * The status of the underlying Kubernetes namespace.\n */\n readonly status: Output<types.output.core.v1.NamespaceStatus>,\n ) {\n super(type, name, args, opts)\n }\n\n /**\n * Creates a new namespace.\n */\n static create(name: string, args: NamespaceArgs, opts?: ComponentResourceOptions): Namespace {\n return new CreatedNamespace(name, args, opts)\n }\n\n /**\n * Creates a new namespace or patches an existing one.\n *\n * Will throw an error if the namespace does not exist when `args.resource` is provided.\n */\n static createOrPatch(\n name: string,\n args: CreateOrPatchNamespaceArgs,\n opts?: ComponentResourceOptions,\n ): Namespace {\n if (!args.resource) {\n return new CreatedNamespace(name, args, opts)\n }\n\n return new NamespacePatch(\n name,\n {\n ...args,\n name: output(args).apply(args => {\n if (args.resource!.clusterId !== args.cluster.id) {\n throw new Error(\n `Cluster mismatch when patching namespace \"${name}\": \"${args.resource!.clusterId}\" != \"${args.cluster.id}\"`,\n )\n }\n\n return args.resource!.metadata.namespace\n }),\n },\n opts,\n )\n }\n\n /**\n * Creates a new namespace or gets an existing one.\n *\n * Will throw an error if the namespace does not exist when `args.resource` is provided.\n */\n static createOrGet(\n name: string,\n args: CreateOrPatchNamespaceArgs,\n opts?: ComponentResourceOptions,\n ): Namespace {\n if (!args.resource) {\n return new CreatedNamespace(name, args, opts)\n }\n\n return new ExternalNamespace(\n name,\n output(args).apply(args => {\n if (args.resource!.clusterId !== args.cluster.id) {\n throw new Error(\n `Cluster mismatch when receiving namespace \"${name}\": \"${args.resource!.clusterId}\" != \"${args.cluster.id}\"`,\n )\n }\n\n return args.resource!.metadata.namespace\n }),\n args.cluster,\n opts,\n )\n }\n\n /**\n * Patches an existing namespace.\n *\n * Will throw an error if the namespace does not exist.\n */\n static patch(name: string, args: NamespaceArgs, opts?: ComponentResourceOptions): Namespace {\n return new NamespacePatch(name, args, opts)\n }\n\n /**\n * Gets an existing namespace.\n *\n * Will throw an error if the namespace does not exist.\n */\n static get(\n name: string,\n id: Input<string>,\n cluster: Input<k8s.Cluster>,\n opts?: ComponentResourceOptions,\n ): Namespace {\n return new ExternalNamespace(name, id, cluster, opts)\n }\n}\n\nfunction mapNamespaceMetadata(\n args: Unwrap<NamespaceArgs>,\n name: string,\n): types.input.meta.v1.ObjectMeta {\n const labels: Record<string, string> = args.metadata?.labels ?? {}\n\n if (args.privileged) {\n labels[\"pod-security.kubernetes.io/enforce\"] = \"privileged\"\n }\n\n return { ...mapMetadata(args, name), labels }\n}\n\nclass CreatedNamespace extends Namespace {\n constructor(name: string, args: NamespaceArgs, opts?: ComponentResourceOptions) {\n const namespace = output(args).apply(async args => {\n return new core.v1.Namespace(\n name,\n {\n metadata: mapNamespaceMetadata(args, name),\n },\n {\n ...opts,\n parent: this,\n provider: await getProvider(args.cluster),\n },\n )\n })\n\n super(\n \"highstate:k8s:Namespace\",\n name,\n args,\n opts,\n output(args.cluster),\n namespace.metadata,\n namespace.spec,\n namespace.status,\n )\n }\n}\n\nclass NamespacePatch extends Namespace {\n constructor(name: string, args: NamespaceArgs, opts?: ComponentResourceOptions) {\n const namespace = output(args).apply(async args => {\n return new core.v1.NamespacePatch(\n name,\n {\n metadata: mapNamespaceMetadata(args, name),\n },\n {\n ...opts,\n parent: this,\n provider: await getProvider(args.cluster),\n },\n )\n })\n\n super(\n \"highstate:k8s:NamespacePatch\",\n name,\n args,\n opts,\n output(args.cluster),\n namespace.metadata,\n namespace.spec,\n namespace.status,\n )\n }\n}\n\nclass ExternalNamespace extends Namespace {\n constructor(\n name: string,\n id: Input<string>,\n cluster: Input<k8s.Cluster>,\n opts?: ComponentResourceOptions,\n ) {\n const namespace = output(id).apply(async realName => {\n return core.v1.Namespace.get(\n //\n name,\n realName,\n {\n ...opts,\n parent: this,\n provider: await getProvider(cluster),\n },\n )\n })\n\n super(\n \"highstate:k8s:ExternalNamespace\",\n name,\n { id, cluster },\n opts,\n output(cluster),\n namespace.metadata,\n namespace.spec,\n namespace.status,\n )\n }\n}\n"]}
|