@highstate/k8s 0.9.32 → 0.9.33
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-6FUARTRJ.js → chunk-2ZAEILVT.js} +5 -5
- package/dist/{chunk-6FUARTRJ.js.map → chunk-2ZAEILVT.js.map} +1 -1
- package/dist/{chunk-6IVLEA6D.js → chunk-3DFFUGSJ.js} +6 -3
- package/dist/chunk-3DFFUGSJ.js.map +1 -0
- package/dist/{chunk-GEXFRUDO.js → chunk-IDKGFFZ7.js} +9 -8
- package/dist/chunk-IDKGFFZ7.js.map +1 -0
- package/dist/{chunk-WJQSKV2K.js → chunk-XU6ZPTWO.js} +6 -3
- package/dist/chunk-XU6ZPTWO.js.map +1 -0
- package/dist/deployment-D3ZXIZRN.js +8 -0
- package/dist/{deployment-BT6MUIT5.js.map → deployment-D3ZXIZRN.js.map} +1 -1
- package/dist/highstate.manifest.json +2 -2
- package/dist/index.js +11 -5
- package/dist/index.js.map +1 -1
- package/dist/stateful-set-AXF4QRFI.js +8 -0
- package/dist/{stateful-set-O44CY62K.js.map → stateful-set-AXF4QRFI.js.map} +1 -1
- package/dist/units/cert-manager/index.js +4 -4
- package/dist/units/reduced-access-cluster/index.js +3 -3
- package/package.json +9 -9
- package/src/cron-job.ts +4 -0
- package/src/deployment.ts +4 -0
- package/src/job.ts +4 -0
- package/src/stateful-set.ts +4 -0
- package/src/workload.ts +5 -2
- package/dist/chunk-6IVLEA6D.js.map +0 -1
- package/dist/chunk-GEXFRUDO.js.map +0 -1
- package/dist/chunk-WJQSKV2K.js.map +0 -1
- package/dist/deployment-BT6MUIT5.js +0 -8
- package/dist/stateful-set-O44CY62K.js +0 -8
@@ -1,6 +1,6 @@
|
|
1
|
-
import { Deployment } from './chunk-
|
2
|
-
import { StatefulSet } from './chunk-
|
3
|
-
import { NetworkPolicy } from './chunk-
|
1
|
+
import { Deployment } from './chunk-3DFFUGSJ.js';
|
2
|
+
import { StatefulSet } from './chunk-XU6ZPTWO.js';
|
3
|
+
import { NetworkPolicy } from './chunk-IDKGFFZ7.js';
|
4
4
|
import { getServiceType, Service } from './chunk-SI7X6N46.js';
|
5
5
|
import { getNamespaceName, getProvider } from './chunk-WGMJCZSK.js';
|
6
6
|
import { mkdir, unlink, readFile } from 'node:fs/promises';
|
@@ -260,5 +260,5 @@ function getChartService(chart, name) {
|
|
260
260
|
}
|
261
261
|
|
262
262
|
export { Chart, RenderedChart, getChartService, getChartServiceOutput, resolveHelmChart };
|
263
|
-
//# sourceMappingURL=chunk-
|
264
|
-
//# sourceMappingURL=chunk-
|
263
|
+
//# sourceMappingURL=chunk-2ZAEILVT.js.map
|
264
|
+
//# sourceMappingURL=chunk-2ZAEILVT.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/helm.ts"],"names":["namespace","args","name","services"],"mappings":"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","file":"chunk-6FUARTRJ.js","sourcesContent":["import type { UnitTerminal } from \"@highstate/contract\"\nimport type { Namespace } from \"./namespace\"\nimport type { Workload, WorkloadTerminalArgs } from \"./workload\"\nimport { mkdir, readFile, unlink } from \"node:fs/promises\"\nimport { resolve } from \"node:path\"\nimport { AccessPointRoute, type AccessPointRouteArgs } from \"@highstate/common\"\nimport {\n type InputArray,\n type InputRecord,\n normalize,\n normalizeInputs,\n toPromise,\n} from \"@highstate/pulumi\"\nimport { local } from \"@pulumi/command\"\nimport { apps, core, helm, type types } from \"@pulumi/kubernetes\"\nimport {\n ComponentResource,\n type ComponentResourceOptions,\n type Input,\n type Output,\n output,\n} from \"@pulumi/pulumi\"\nimport { sha256 } from \"crypto-hash\"\nimport { glob } from \"glob\"\nimport spawn from \"nano-spawn\"\nimport { isNonNullish, omit } from \"remeda\"\nimport { Deployment } from \"./deployment\"\nimport { NetworkPolicy, type NetworkPolicyArgs } from \"./network-policy\"\nimport { getServiceType, Service, type ServiceArgs } from \"./service\"\nimport { getNamespaceName, getProvider, type NamespaceLike } from \"./shared\"\nimport { StatefulSet } from \"./stateful-set\"\n\nexport type ChartArgs = Omit<\n helm.v4.ChartArgs,\n \"chart\" | \"version\" | \"repositoryOpts\" | \"namespace\"\n> & {\n /**\n * The namespace to deploy the chart into.\n */\n namespace: Input<Namespace>\n\n /**\n * The custom name of the primary service exposed by the chart.\n *\n * By default, it is the same as the chart name.\n */\n serviceName?: string\n\n /**\n * The extra args to pass to the main service of the chart.\n *\n * Will be patched via transformations.\n */\n service?: Partial<ServiceArgs>\n\n /**\n * The manifest of the chart to resolve.\n */\n chart: ChartManifest\n\n /**\n * The args for the terminal to use.\n *\n * Will be applied to all workloads created by the chart.\n */\n terminal?: Input<WorkloadTerminalArgs>\n\n /**\n * The configuration for the access point route to create.\n */\n route?: Input<Omit<AccessPointRouteArgs, \"endpoints\" | \"customData\">>\n\n /**\n * The configuration for the access point routes to create.\n */\n routes?: InputArray<Omit<AccessPointRouteArgs, \"endpoints\" | \"customData\">>\n\n /**\n * The network policy to apply to the chart.\n */\n networkPolicy?: Input<Omit<NetworkPolicyArgs, \"selector\" | \"cluster\" | \"namespace\">>\n\n /**\n * The network policies to apply to the chart.\n */\n networkPolicies?: Input<NetworkPolicyArgs[]>\n}\n\nexport class Chart extends ComponentResource {\n /**\n * The underlying Helm chart.\n */\n public readonly chart: Output<helm.v4.Chart>\n\n /**\n * The access point routes created for the chart.\n */\n public readonly routes: Output<AccessPointRoute[]>\n\n /**\n * The network policies applied to the chart.\n */\n public readonly networkPolicies: Output<NetworkPolicy[]>\n\n /**\n * All workloads created by the chart.\n */\n public readonly workloads: Output<Workload[]>\n\n constructor(\n private readonly name: string,\n private readonly args: ChartArgs,\n private readonly opts?: ComponentResourceOptions,\n ) {\n super(\"highstate:k8s:Chart\", name, args, opts)\n\n const namespace = output(args.namespace).apply(namespace =>\n output(namespace ? getNamespaceName(namespace) : \"default\"),\n )\n\n this.chart = output(args.namespace).cluster.apply(cluster => {\n return new helm.v4.Chart(\n name,\n omit(\n {\n ...args,\n chart: resolveHelmChart(args.chart),\n namespace,\n },\n [\"route\", \"routes\"],\n ),\n {\n ...opts,\n parent: this,\n provider: getProvider(cluster),\n\n transforms: [\n ...(opts?.transforms ?? []),\n\n async resourceArgs => {\n const namespace = await toPromise(output(args.namespace).metadata.name)\n\n const serviceName = args.serviceName ?? name\n const expectedName = `${name}:${namespace}/${serviceName}`\n\n if (\n resourceArgs.type === \"kubernetes:core/v1:Service\" &&\n resourceArgs.name === expectedName\n ) {\n const spec = resourceArgs.props.spec as types.input.core.v1.ServiceSpec\n\n return {\n props: {\n ...resourceArgs.props,\n spec: {\n ...spec,\n ...(args.service ?? {}),\n\n type: getServiceType(args.service, cluster),\n\n externalIPs:\n args.service?.externalIPs ?? cluster.externalIps ?? spec.externalIPs,\n },\n },\n opts: resourceArgs.opts,\n }\n }\n\n return undefined\n },\n ],\n },\n )\n })\n\n this.routes = output(normalizeInputs(args.route, args.routes)).apply(async routes => {\n if (routes.length === 0) {\n return []\n }\n\n return await Promise.all(\n routes.map(async route => {\n return new AccessPointRoute(\n name,\n {\n ...route,\n\n endpoints: this.service.endpoints,\n\n // pass the native data to the route to allow implementation to use it\n gatewayNativeData: await toPromise(this.service),\n tlsCertificateNativeData: await toPromise(args.namespace),\n },\n { ...opts, parent: this },\n )\n }),\n )\n })\n\n this.networkPolicies = output(args).apply(args => {\n const policies = normalize(args.networkPolicy, args.networkPolicies)\n\n return output(\n policies.map(policy => {\n return new NetworkPolicy(\n name,\n {\n ...policy,\n namespace: args.namespace,\n description: `Network policy for Helm chart \"${name}\"`,\n },\n { ...opts, parent: this },\n )\n }),\n )\n })\n\n this.workloads = output(this.chart).apply(chart => {\n return output(\n chart.resources.apply(resources => {\n return resources\n .map(resource => {\n if (apps.v1.Deployment.isInstance(resource)) {\n return resource.metadata.name.apply(name => {\n return Deployment.wrap(\n name,\n { namespace: args.namespace, deployment: resource, terminal: args.terminal },\n this.opts,\n )\n })\n }\n\n if (apps.v1.StatefulSet.isInstance(resource)) {\n return resource.metadata.name.apply(name => {\n return StatefulSet.wrap(\n name,\n {\n namespace: args.namespace,\n statefulSet: resource,\n service: this.getServiceOutput(name),\n terminal: args.terminal,\n },\n this.opts,\n )\n })\n }\n\n return undefined\n })\n .filter(isNonNullish)\n }),\n )\n })\n }\n\n get service(): Output<Service> {\n return this.getServiceOutput(undefined)\n }\n\n get terminals(): Output<UnitTerminal[]> {\n return this.workloads.apply(workloads => output(workloads.map(workload => workload.terminal)))\n }\n\n private readonly services = new Map<string, Service>()\n\n getServiceOutput(name: string | undefined): Output<Service> {\n return output({ args: this.args, chart: this.chart }).apply(({ args, chart }) => {\n const resolvedName = name ?? args.serviceName ?? this.name\n const existingService = this.services.get(resolvedName)\n\n if (existingService) {\n return existingService\n }\n\n const service = getChartServiceOutput(chart, resolvedName)\n\n const wrappedService = Service.wrap(\n resolvedName,\n { namespace: args.namespace, service },\n { ...this.opts, parent: this },\n )\n\n this.services.set(resolvedName, wrappedService)\n return wrappedService\n })\n }\n\n getService(name?: string): Promise<Service> {\n return toPromise(this.getServiceOutput(name))\n }\n}\n\nexport type RenderedChartArgs = {\n /**\n * The namespace to deploy the chart into.\n */\n namespace?: Input<NamespaceLike>\n\n /**\n * The manifest of the chart to resolve.\n */\n chart: ChartManifest\n\n /**\n * The values to pass to the chart.\n */\n values?: InputRecord<string>\n}\n\nexport class RenderedChart extends ComponentResource {\n /**\n * The rendered manifest of the Helm chart.\n */\n public readonly manifest: Output<string>\n\n /**\n * The underlying command used to render the chart.\n */\n public readonly command: Output<local.Command>\n\n constructor(name: string, args: RenderedChartArgs, opts?: ComponentResourceOptions) {\n super(\"highstate:k8s:RenderedChart\", name, args, opts)\n\n this.command = output(args).apply(args => {\n const values = args.values\n ? Object.entries(args.values).flatMap(([key, value]) => [\"--set\", `${key}=\"${value}\"`])\n : []\n\n return new local.Command(\n name,\n {\n create: output([\n \"helm\",\n \"template\",\n resolveHelmChart(args.chart),\n\n ...(args.namespace ? [\"--namespace\", getNamespaceName(args.namespace)] : []),\n\n ...values,\n ]).apply(command => command.join(\" \")),\n\n logging: \"stderr\",\n },\n { parent: this, ...opts },\n )\n })\n\n this.manifest = this.command.stdout\n\n this.registerOutputs({ manifest: this.manifest, command: this.command })\n }\n}\n\nexport type ChartManifest = {\n repo: string\n name: string\n version: string\n sha256: string\n}\n\n/**\n * Downloads or reuses the Helm chart according to the charts.json file.\n * Returns the full path to the chart's .tgz file.\n *\n * @param manifest The manifest of the Helm chart.\n */\nexport async function resolveHelmChart(manifest: ChartManifest): Promise<string> {\n if (!process.env.HIGHSTATE_CACHE_DIR) {\n throw new Error(\"Environment variable HIGHSTATE_CACHE_DIR is not set\")\n }\n\n const chartsDir = resolve(process.env.HIGHSTATE_CACHE_DIR, \"charts\")\n await mkdir(chartsDir, { recursive: true })\n\n const globPattern = `${manifest.name}-*.tgz`\n const targetFileName = `${manifest.name}-${manifest.version}.tgz`\n\n // find all matching files\n const files = await glob(globPattern, { cwd: chartsDir })\n\n if (files.includes(targetFileName)) {\n return resolve(chartsDir, targetFileName)\n }\n\n // delete old versions\n for (const file of files) {\n await unlink(resolve(chartsDir, file))\n }\n\n // download the chart\n await spawn(\"helm\", [\n \"pull\",\n manifest.name,\n \"--version\",\n manifest.version,\n \"--repo\",\n manifest.repo,\n \"--destination\",\n chartsDir,\n ])\n\n // check the SHA256\n const content = await readFile(resolve(chartsDir, targetFileName))\n const actualSha256 = await sha256(content)\n\n if (actualSha256 !== manifest.sha256) {\n throw new Error(`SHA256 mismatch for chart '${manifest.name}'`)\n }\n\n return resolve(chartsDir, targetFileName)\n}\n\n/**\n * Extracts the service with the given name from the chart resources.\n * Throws an error if the service is not found.\n *\n * @param chart The Helm chart.\n * @param name The name of the service.\n */\nexport function getChartServiceOutput(chart: helm.v4.Chart, name: string): Output<core.v1.Service> {\n const services = chart.resources.apply(resources => {\n return resources\n .filter(r => core.v1.Service.isInstance(r))\n .map(service => ({ name: service.metadata.name, service }))\n })\n\n return output(services).apply(services => {\n const service = services.find(s => s.name === name)?.service\n\n if (!service) {\n throw new Error(`Service with name '${name}' not found in the chart resources`)\n }\n\n return service\n })\n}\n\n/**\n * Extracts the service with the given name from the chart resources.\n * Throws an error if the service is not found.\n *\n * @param chart The Helm chart.\n * @param name The name of the service.\n */\nexport function getChartService(chart: helm.v4.Chart, name: string): Promise<core.v1.Service> {\n return toPromise(getChartServiceOutput(chart, name))\n}\n"]}
|
1
|
+
{"version":3,"sources":["../src/helm.ts"],"names":["namespace","args","name","services"],"mappings":"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","file":"chunk-2ZAEILVT.js","sourcesContent":["import type { UnitTerminal } from \"@highstate/contract\"\nimport type { Namespace } from \"./namespace\"\nimport type { Workload, WorkloadTerminalArgs } from \"./workload\"\nimport { mkdir, readFile, unlink } from \"node:fs/promises\"\nimport { resolve } from \"node:path\"\nimport { AccessPointRoute, type AccessPointRouteArgs } from \"@highstate/common\"\nimport {\n type InputArray,\n type InputRecord,\n normalize,\n normalizeInputs,\n toPromise,\n} from \"@highstate/pulumi\"\nimport { local } from \"@pulumi/command\"\nimport { apps, core, helm, type types } from \"@pulumi/kubernetes\"\nimport {\n ComponentResource,\n type ComponentResourceOptions,\n type Input,\n type Output,\n output,\n} from \"@pulumi/pulumi\"\nimport { sha256 } from \"crypto-hash\"\nimport { glob } from \"glob\"\nimport spawn from \"nano-spawn\"\nimport { isNonNullish, omit } from \"remeda\"\nimport { Deployment } from \"./deployment\"\nimport { NetworkPolicy, type NetworkPolicyArgs } from \"./network-policy\"\nimport { getServiceType, Service, type ServiceArgs } from \"./service\"\nimport { getNamespaceName, getProvider, type NamespaceLike } from \"./shared\"\nimport { StatefulSet } from \"./stateful-set\"\n\nexport type ChartArgs = Omit<\n helm.v4.ChartArgs,\n \"chart\" | \"version\" | \"repositoryOpts\" | \"namespace\"\n> & {\n /**\n * The namespace to deploy the chart into.\n */\n namespace: Input<Namespace>\n\n /**\n * The custom name of the primary service exposed by the chart.\n *\n * By default, it is the same as the chart name.\n */\n serviceName?: string\n\n /**\n * The extra args to pass to the main service of the chart.\n *\n * Will be patched via transformations.\n */\n service?: Partial<ServiceArgs>\n\n /**\n * The manifest of the chart to resolve.\n */\n chart: ChartManifest\n\n /**\n * The args for the terminal to use.\n *\n * Will be applied to all workloads created by the chart.\n */\n terminal?: Input<WorkloadTerminalArgs>\n\n /**\n * The configuration for the access point route to create.\n */\n route?: Input<Omit<AccessPointRouteArgs, \"endpoints\" | \"customData\">>\n\n /**\n * The configuration for the access point routes to create.\n */\n routes?: InputArray<Omit<AccessPointRouteArgs, \"endpoints\" | \"customData\">>\n\n /**\n * The network policy to apply to the chart.\n */\n networkPolicy?: Input<Omit<NetworkPolicyArgs, \"selector\" | \"cluster\" | \"namespace\">>\n\n /**\n * The network policies to apply to the chart.\n */\n networkPolicies?: Input<NetworkPolicyArgs[]>\n}\n\nexport class Chart extends ComponentResource {\n /**\n * The underlying Helm chart.\n */\n public readonly chart: Output<helm.v4.Chart>\n\n /**\n * The access point routes created for the chart.\n */\n public readonly routes: Output<AccessPointRoute[]>\n\n /**\n * The network policies applied to the chart.\n */\n public readonly networkPolicies: Output<NetworkPolicy[]>\n\n /**\n * All workloads created by the chart.\n */\n public readonly workloads: Output<Workload[]>\n\n constructor(\n private readonly name: string,\n private readonly args: ChartArgs,\n private readonly opts?: ComponentResourceOptions,\n ) {\n super(\"highstate:k8s:Chart\", name, args, opts)\n\n const namespace = output(args.namespace).apply(namespace =>\n output(namespace ? getNamespaceName(namespace) : \"default\"),\n )\n\n this.chart = output(args.namespace).cluster.apply(cluster => {\n return new helm.v4.Chart(\n name,\n omit(\n {\n ...args,\n chart: resolveHelmChart(args.chart),\n namespace,\n },\n [\"route\", \"routes\"],\n ),\n {\n ...opts,\n parent: this,\n provider: getProvider(cluster),\n\n transforms: [\n ...(opts?.transforms ?? []),\n\n async resourceArgs => {\n const namespace = await toPromise(output(args.namespace).metadata.name)\n\n const serviceName = args.serviceName ?? name\n const expectedName = `${name}:${namespace}/${serviceName}`\n\n if (\n resourceArgs.type === \"kubernetes:core/v1:Service\" &&\n resourceArgs.name === expectedName\n ) {\n const spec = resourceArgs.props.spec as types.input.core.v1.ServiceSpec\n\n return {\n props: {\n ...resourceArgs.props,\n spec: {\n ...spec,\n ...(args.service ?? {}),\n\n type: getServiceType(args.service, cluster),\n\n externalIPs:\n args.service?.externalIPs ?? cluster.externalIps ?? spec.externalIPs,\n },\n },\n opts: resourceArgs.opts,\n }\n }\n\n return undefined\n },\n ],\n },\n )\n })\n\n this.routes = output(normalizeInputs(args.route, args.routes)).apply(async routes => {\n if (routes.length === 0) {\n return []\n }\n\n return await Promise.all(\n routes.map(async route => {\n return new AccessPointRoute(\n name,\n {\n ...route,\n\n endpoints: this.service.endpoints,\n\n // pass the native data to the route to allow implementation to use it\n gatewayNativeData: await toPromise(this.service),\n tlsCertificateNativeData: await toPromise(args.namespace),\n },\n { ...opts, parent: this },\n )\n }),\n )\n })\n\n this.networkPolicies = output(args).apply(args => {\n const policies = normalize(args.networkPolicy, args.networkPolicies)\n\n return output(\n policies.map(policy => {\n return new NetworkPolicy(\n name,\n {\n ...policy,\n namespace: args.namespace,\n description: `Network policy for Helm chart \"${name}\"`,\n },\n { ...opts, parent: this },\n )\n }),\n )\n })\n\n this.workloads = output(this.chart).apply(chart => {\n return output(\n chart.resources.apply(resources => {\n return resources\n .map(resource => {\n if (apps.v1.Deployment.isInstance(resource)) {\n return resource.metadata.name.apply(name => {\n return Deployment.wrap(\n name,\n { namespace: args.namespace, deployment: resource, terminal: args.terminal },\n this.opts,\n )\n })\n }\n\n if (apps.v1.StatefulSet.isInstance(resource)) {\n return resource.metadata.name.apply(name => {\n return StatefulSet.wrap(\n name,\n {\n namespace: args.namespace,\n statefulSet: resource,\n service: this.getServiceOutput(name),\n terminal: args.terminal,\n },\n this.opts,\n )\n })\n }\n\n return undefined\n })\n .filter(isNonNullish)\n }),\n )\n })\n }\n\n get service(): Output<Service> {\n return this.getServiceOutput(undefined)\n }\n\n get terminals(): Output<UnitTerminal[]> {\n return this.workloads.apply(workloads => output(workloads.map(workload => workload.terminal)))\n }\n\n private readonly services = new Map<string, Service>()\n\n getServiceOutput(name: string | undefined): Output<Service> {\n return output({ args: this.args, chart: this.chart }).apply(({ args, chart }) => {\n const resolvedName = name ?? args.serviceName ?? this.name\n const existingService = this.services.get(resolvedName)\n\n if (existingService) {\n return existingService\n }\n\n const service = getChartServiceOutput(chart, resolvedName)\n\n const wrappedService = Service.wrap(\n resolvedName,\n { namespace: args.namespace, service },\n { ...this.opts, parent: this },\n )\n\n this.services.set(resolvedName, wrappedService)\n return wrappedService\n })\n }\n\n getService(name?: string): Promise<Service> {\n return toPromise(this.getServiceOutput(name))\n }\n}\n\nexport type RenderedChartArgs = {\n /**\n * The namespace to deploy the chart into.\n */\n namespace?: Input<NamespaceLike>\n\n /**\n * The manifest of the chart to resolve.\n */\n chart: ChartManifest\n\n /**\n * The values to pass to the chart.\n */\n values?: InputRecord<string>\n}\n\nexport class RenderedChart extends ComponentResource {\n /**\n * The rendered manifest of the Helm chart.\n */\n public readonly manifest: Output<string>\n\n /**\n * The underlying command used to render the chart.\n */\n public readonly command: Output<local.Command>\n\n constructor(name: string, args: RenderedChartArgs, opts?: ComponentResourceOptions) {\n super(\"highstate:k8s:RenderedChart\", name, args, opts)\n\n this.command = output(args).apply(args => {\n const values = args.values\n ? Object.entries(args.values).flatMap(([key, value]) => [\"--set\", `${key}=\"${value}\"`])\n : []\n\n return new local.Command(\n name,\n {\n create: output([\n \"helm\",\n \"template\",\n resolveHelmChart(args.chart),\n\n ...(args.namespace ? [\"--namespace\", getNamespaceName(args.namespace)] : []),\n\n ...values,\n ]).apply(command => command.join(\" \")),\n\n logging: \"stderr\",\n },\n { parent: this, ...opts },\n )\n })\n\n this.manifest = this.command.stdout\n\n this.registerOutputs({ manifest: this.manifest, command: this.command })\n }\n}\n\nexport type ChartManifest = {\n repo: string\n name: string\n version: string\n sha256: string\n}\n\n/**\n * Downloads or reuses the Helm chart according to the charts.json file.\n * Returns the full path to the chart's .tgz file.\n *\n * @param manifest The manifest of the Helm chart.\n */\nexport async function resolveHelmChart(manifest: ChartManifest): Promise<string> {\n if (!process.env.HIGHSTATE_CACHE_DIR) {\n throw new Error(\"Environment variable HIGHSTATE_CACHE_DIR is not set\")\n }\n\n const chartsDir = resolve(process.env.HIGHSTATE_CACHE_DIR, \"charts\")\n await mkdir(chartsDir, { recursive: true })\n\n const globPattern = `${manifest.name}-*.tgz`\n const targetFileName = `${manifest.name}-${manifest.version}.tgz`\n\n // find all matching files\n const files = await glob(globPattern, { cwd: chartsDir })\n\n if (files.includes(targetFileName)) {\n return resolve(chartsDir, targetFileName)\n }\n\n // delete old versions\n for (const file of files) {\n await unlink(resolve(chartsDir, file))\n }\n\n // download the chart\n await spawn(\"helm\", [\n \"pull\",\n manifest.name,\n \"--version\",\n manifest.version,\n \"--repo\",\n manifest.repo,\n \"--destination\",\n chartsDir,\n ])\n\n // check the SHA256\n const content = await readFile(resolve(chartsDir, targetFileName))\n const actualSha256 = await sha256(content)\n\n if (actualSha256 !== manifest.sha256) {\n throw new Error(`SHA256 mismatch for chart '${manifest.name}'`)\n }\n\n return resolve(chartsDir, targetFileName)\n}\n\n/**\n * Extracts the service with the given name from the chart resources.\n * Throws an error if the service is not found.\n *\n * @param chart The Helm chart.\n * @param name The name of the service.\n */\nexport function getChartServiceOutput(chart: helm.v4.Chart, name: string): Output<core.v1.Service> {\n const services = chart.resources.apply(resources => {\n return resources\n .filter(r => core.v1.Service.isInstance(r))\n .map(service => ({ name: service.metadata.name, service }))\n })\n\n return output(services).apply(services => {\n const service = services.find(s => s.name === name)?.service\n\n if (!service) {\n throw new Error(`Service with name '${name}' not found in the chart resources`)\n }\n\n return service\n })\n}\n\n/**\n * Extracts the service with the given name from the chart resources.\n * Throws an error if the service is not found.\n *\n * @param chart The Helm chart.\n * @param name The name of the service.\n */\nexport function getChartService(chart: helm.v4.Chart, name: string): Promise<core.v1.Service> {\n return toPromise(getChartServiceOutput(chart, name))\n}\n"]}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { ExposableWorkload, getExposableWorkloadComponents, exposableWorkloadExtraArgs } from './chunk-
|
1
|
+
import { ExposableWorkload, getExposableWorkloadComponents, exposableWorkloadExtraArgs } from './chunk-IDKGFFZ7.js';
|
2
2
|
import { Namespace, mapMetadata, getProvider } from './chunk-WGMJCZSK.js';
|
3
3
|
import { getOrCreate } from '@highstate/contract';
|
4
4
|
import { output, interpolate, toPromise } from '@highstate/pulumi';
|
@@ -26,6 +26,9 @@ var Deployment = class _Deployment extends ExposableWorkload {
|
|
26
26
|
this.spec = spec;
|
27
27
|
this.status = status;
|
28
28
|
}
|
29
|
+
get templateMetadata() {
|
30
|
+
return this.spec.template.metadata;
|
31
|
+
}
|
29
32
|
getTerminalMeta() {
|
30
33
|
return output({
|
31
34
|
title: "Deployment",
|
@@ -283,5 +286,5 @@ var ExternalDeployment = class extends Deployment {
|
|
283
286
|
};
|
284
287
|
|
285
288
|
export { Deployment };
|
286
|
-
//# sourceMappingURL=chunk-
|
287
|
-
//# sourceMappingURL=chunk-
|
289
|
+
//# sourceMappingURL=chunk-3DFFUGSJ.js.map
|
290
|
+
//# sourceMappingURL=chunk-3DFFUGSJ.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/deployment.ts"],"names":["args","podTemplate","labels"],"mappings":"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","file":"chunk-3DFFUGSJ.js","sourcesContent":["import type { AccessPointRoute } from \"@highstate/common\"\nimport type { k8s } from \"@highstate/library\"\nimport type { Container } from \"./container\"\nimport type { NetworkPolicy } from \"./network-policy\"\nimport type { Service } from \"./service\"\nimport { getOrCreate, type UnitTerminal } from \"@highstate/contract\"\nimport {\n type ComponentResourceOptions,\n type Input,\n type Inputs,\n interpolate,\n type Output,\n output,\n toPromise,\n type Unwrap,\n} from \"@highstate/pulumi\"\nimport { apps, type types } from \"@pulumi/kubernetes\"\nimport { deepmerge } from \"deepmerge-ts\"\nimport { omit } from \"remeda\"\nimport { Namespace } from \"./namespace\"\nimport { getProvider, mapMetadata } from \"./shared\"\nimport {\n ExposableWorkload,\n type ExposableWorkloadArgs,\n exposableWorkloadExtraArgs,\n getExposableWorkloadComponents,\n type WorkloadTerminalArgs,\n} from \"./workload\"\n\nexport type DeploymentArgs = Omit<ExposableWorkloadArgs, \"existing\"> &\n Omit<Partial<types.input.apps.v1.DeploymentSpec>, \"template\"> & {\n template?: {\n metadata?: types.input.meta.v1.ObjectMeta\n spec?: Partial<types.input.core.v1.PodSpec>\n }\n }\n\nexport type CreateOrGetDeploymentArgs = DeploymentArgs & {\n /**\n * The entity to use to determine the deployment to patch.\n */\n existing: Input<k8s.Deployment> | undefined\n}\n\nexport abstract class Deployment extends ExposableWorkload {\n protected constructor(\n type: string,\n name: string,\n args: Inputs,\n opts: ComponentResourceOptions | undefined,\n\n apiVersion: Output<string>,\n kind: Output<string>,\n terminalArgs: Output<Unwrap<WorkloadTerminalArgs>>,\n containers: Output<Container[]>,\n namespace: Output<Namespace>,\n metadata: Output<types.output.meta.v1.ObjectMeta>,\n networkPolicy: Output<NetworkPolicy | undefined>,\n\n service: Output<Service | undefined>,\n routes: Output<AccessPointRoute[]>,\n\n /**\n * The spec of the underlying Kubernetes deployment.\n */\n readonly spec: Output<types.output.apps.v1.DeploymentSpec>,\n\n /**\n * The status of the underlying Kubernetes deployment.\n */\n readonly status: Output<types.output.apps.v1.DeploymentStatus>,\n ) {\n super(\n type,\n name,\n args,\n opts,\n apiVersion,\n kind,\n terminalArgs,\n containers,\n namespace,\n metadata,\n networkPolicy,\n service,\n routes,\n )\n }\n\n protected override get templateMetadata(): Output<types.output.meta.v1.ObjectMeta> {\n return this.spec.template.metadata\n }\n\n protected override getTerminalMeta(): Output<UnitTerminal[\"meta\"]> {\n return output({\n title: \"Deployment\",\n globalTitle: interpolate`Deployment | ${this.metadata.name}`,\n description: \"The shell inside the deployment.\",\n icon: \"devicon:kubernetes\",\n })\n }\n\n /**\n * The Highstate deployment entity.\n */\n get entity(): Output<k8s.Deployment> {\n return output({\n type: \"deployment\",\n clusterId: this.cluster.id,\n clusterName: this.cluster.name,\n metadata: this.metadata,\n service: this._service.apply(service => service?.entity),\n })\n }\n\n /**\n * Creates a new deployment.\n */\n static create(name: string, args: DeploymentArgs, opts?: ComponentResourceOptions): Deployment {\n return new CreatedDeployment(name, args, opts)\n }\n\n /**\n * Creates a new deployment or patches an existing one.\n *\n * @param name The name of the resource. May not be the same as the deployment name.\n * @param args The arguments to create or patch the deployment with.\n * @param opts Optional resource options.\n */\n static createOrPatch(\n name: string,\n args: CreateOrGetDeploymentArgs,\n opts?: ComponentResourceOptions,\n ): Deployment {\n if (args.existing) {\n return new DeploymentPatch(name, {\n ...args,\n name: output(args.existing).metadata.name,\n namespace: Namespace.forResourceAsync(args.existing, output(args.namespace).cluster),\n })\n }\n\n return new CreatedDeployment(name, args, opts)\n }\n\n /**\n * Creates a new deployment or gets an existing one.\n *\n * @param name The name of the resource. May not be the same as the deployment name. Will not be used when existing deployment is retrieved.\n * @param args The arguments to create or get the deployment with.\n * @param opts Optional resource options.\n */\n static async createOrGet(\n name: string,\n args: CreateOrGetDeploymentArgs,\n opts?: ComponentResourceOptions,\n ): Promise<Deployment> {\n if (args.existing) {\n return await Deployment.forAsync(args.existing, output(args.namespace).cluster)\n }\n\n return new CreatedDeployment(name, args, opts)\n }\n\n /**\n * Patches an existing deployment.\n *\n * Will throw an error if the deployment does not exist.\n *\n * @param name The name of the resource. May not be the same as the deployment name.\n * @param args The arguments to patch the deployment with.\n * @param opts Optional resource options.\n */\n static patch(name: string, args: DeploymentArgs, opts?: ComponentResourceOptions): Deployment {\n return new DeploymentPatch(name, args, opts)\n }\n\n /**\n * Wraps an existing Kubernetes deployment.\n */\n static wrap(\n name: string,\n args: WrappedDeploymentArgs,\n opts?: ComponentResourceOptions,\n ): Deployment {\n return new WrappedDeployment(name, args, opts)\n }\n\n /**\n * Gets an existing deployment.\n *\n * Will throw an error if the deployment does not exist.\n */\n static get(\n name: string,\n args: ExternalDeploymentArgs,\n opts?: ComponentResourceOptions,\n ): Deployment {\n return new ExternalDeployment(name, args, opts)\n }\n\n private static readonly deploymentCache = new Map<string, Deployment>()\n\n /**\n * Gets an existing deployment for a given entity.\n * Prefer this method over `get` when possible.\n *\n * It automatically names the resource with the following format: `{clusterName}.{namespace}.{name}.{clusterId}`.\n *\n * This method is idempotent and will return the same instance for the same entity.\n *\n * @param entity The entity to get the deployment for.\n * @param cluster The cluster where the deployment is located.\n */\n static for(entity: k8s.Deployment, cluster: Input<k8s.Cluster>): Deployment {\n return getOrCreate(\n Deployment.deploymentCache,\n `${entity.clusterName}.${entity.metadata.namespace}.${entity.metadata.name}.${entity.clusterId}`,\n name => {\n return Deployment.get(name, {\n name: entity.metadata.name,\n namespace: Namespace.forResource(entity, cluster),\n })\n },\n )\n }\n\n /**\n * Gets an existing deployment for a given entity.\n * Prefer this method over `get` when possible.\n *\n * It automatically names the resource with the following format: `{clusterName}.{namespace}.{name}.{clusterId}`.\n *\n * This method is idempotent and will return the same instance for the same entity.\n *\n * @param entity The entity to get the deployment for.\n * @param cluster The cluster where the deployment is located.\n */\n static async forAsync(\n entity: Input<k8s.Deployment>,\n cluster: Input<k8s.Cluster>,\n ): Promise<Deployment> {\n const resolvedEntity = await toPromise(entity)\n return Deployment.for(resolvedEntity, cluster)\n }\n}\n\nclass CreatedDeployment extends Deployment {\n constructor(name: string, args: DeploymentArgs, opts?: ComponentResourceOptions) {\n const { labels, podTemplate, networkPolicy, containers, service, routes } =\n getExposableWorkloadComponents(name, args, () => this, opts)\n\n const deployment = output(args.namespace).cluster.apply(cluster => {\n return new apps.v1.Deployment(\n name,\n {\n metadata: mapMetadata(args, name),\n spec: output({ args, podTemplate, labels }).apply(({ args, podTemplate, labels }) => {\n return deepmerge(\n {\n template: podTemplate,\n selector: { matchLabels: labels },\n },\n omit(args, exposableWorkloadExtraArgs),\n ) as types.input.apps.v1.DeploymentSpec\n }),\n },\n { ...opts, parent: this, provider: getProvider(cluster) },\n )\n })\n\n super(\n \"highstate:k8s:Deployment\",\n name,\n args,\n opts,\n\n deployment.apiVersion,\n deployment.kind,\n output(args.terminal ?? {}),\n containers,\n output(args.namespace),\n deployment.metadata,\n networkPolicy,\n\n service,\n routes,\n\n deployment.spec,\n deployment.status,\n )\n }\n}\n\nclass DeploymentPatch extends Deployment {\n constructor(name: string, args: DeploymentArgs, opts?: ComponentResourceOptions) {\n const { labels, podTemplate, networkPolicy, containers, service, routes } =\n getExposableWorkloadComponents(name, args, () => this, opts)\n\n const deployment = output(args.namespace).cluster.apply(cluster => {\n return new apps.v1.DeploymentPatch(\n name,\n {\n metadata: mapMetadata(args, name),\n spec: output({ args, podTemplate, labels }).apply(({ args, podTemplate, labels }) => {\n return deepmerge(\n {\n template: podTemplate,\n selector: { matchLabels: labels },\n },\n omit(args, exposableWorkloadExtraArgs),\n ) as types.input.apps.v1.DeploymentSpec\n }),\n },\n {\n ...opts,\n parent: this,\n provider: getProvider(cluster),\n },\n )\n })\n\n super(\n \"highstate:k8s:DeploymentPatch\",\n name,\n args,\n opts,\n\n deployment.apiVersion,\n deployment.kind,\n output(args.terminal ?? {}),\n containers,\n output(args.namespace),\n deployment.metadata,\n networkPolicy,\n\n service,\n routes,\n\n deployment.spec,\n deployment.status,\n )\n }\n}\n\nexport type WrappedDeploymentArgs = {\n /**\n * The underlying Kubernetes deployment to wrap.\n */\n deployment: Input<apps.v1.Deployment>\n\n /**\n * The namespace where the deployment is located.\n */\n namespace: Input<Namespace>\n\n /**\n * The args for the terminal to use.\n */\n terminal?: Input<WorkloadTerminalArgs>\n}\n\nclass WrappedDeployment extends Deployment {\n constructor(name: string, args: WrappedDeploymentArgs, opts?: ComponentResourceOptions) {\n super(\n \"highstate:k8s:WrappedDeployment\",\n name,\n args,\n opts,\n\n output(args.deployment).apiVersion,\n output(args.deployment).kind,\n output(args.terminal ?? {}),\n output([]),\n output(args.namespace),\n output(args.deployment).metadata,\n\n output(undefined),\n output(undefined),\n output([]),\n\n output(args.deployment).spec,\n output(args.deployment).status,\n )\n }\n}\n\nexport type ExternalDeploymentArgs = {\n /**\n * The name of the deployment to get.\n */\n name: Input<string>\n\n /**\n * The namespace where the deployment is located.\n */\n namespace: Input<Namespace>\n}\n\nclass ExternalDeployment extends Deployment {\n constructor(name: string, args: ExternalDeploymentArgs, opts?: ComponentResourceOptions) {\n const deployment = output(args.namespace).cluster.apply(cluster => {\n return apps.v1.Deployment.get(\n name,\n interpolate`${output(args.namespace).metadata.name}/${args.name}`,\n { ...opts, parent: this, provider: getProvider(cluster) },\n )\n })\n\n super(\n \"highstate:k8s:ExternalDeployment\",\n name,\n args,\n opts,\n\n deployment.apiVersion,\n deployment.kind,\n output({}),\n output([]),\n output(args.namespace),\n deployment.metadata,\n\n output(undefined),\n output(undefined),\n output([]),\n\n deployment.spec,\n deployment.status,\n )\n }\n}\n"]}
|
@@ -1337,7 +1337,7 @@ var Workload = class extends ScopedResource {
|
|
1337
1337
|
return containers[0]?.name ?? this.name;
|
1338
1338
|
});
|
1339
1339
|
const shell = this.terminalArgs.apply((args) => args.shell ?? "bash");
|
1340
|
-
const
|
1340
|
+
const podLabelSelector = this.templateMetadata.apply((meta) => meta.labels ?? {}).apply(
|
1341
1341
|
(labels) => Object.entries(labels).map(([key, value]) => `${key}=${value}`).join(",")
|
1342
1342
|
);
|
1343
1343
|
return output({
|
@@ -1359,11 +1359,12 @@ var Workload = class extends ScopedResource {
|
|
1359
1359
|
RESOURCE_NAME="${this.metadata.name}"
|
1360
1360
|
CONTAINER_NAME="${containerName}"
|
1361
1361
|
SHELL="${shell}"
|
1362
|
+
LABEL_SELECTOR="${podLabelSelector}"
|
1362
1363
|
|
1363
1364
|
echo "Connecting to $RESOURCE_TYPE \\"$RESOURCE_NAME\\" in namespace \\"$NAMESPACE\\""
|
1364
1365
|
|
1365
1366
|
# get all pods for this workload
|
1366
|
-
PODS=$(kubectl get pods -n "$NAMESPACE" -l "$
|
1367
|
+
PODS=$(kubectl get pods -n "$NAMESPACE" -l "$LABEL_SELECTOR" -o jsonpath='{.items[*].metadata.name}' 2>/dev/null || echo "")
|
1367
1368
|
|
1368
1369
|
if [ -z "$PODS" ]; then
|
1369
1370
|
echo "No pods found"
|
@@ -1489,7 +1490,7 @@ var ExposableWorkload = class extends Workload {
|
|
1489
1490
|
static createOrPatchGeneric(name, args, opts) {
|
1490
1491
|
return output(args).apply(async (args2) => {
|
1491
1492
|
if (args2.existing?.type === "deployment") {
|
1492
|
-
const { Deployment } = await import('./deployment-
|
1493
|
+
const { Deployment } = await import('./deployment-D3ZXIZRN.js');
|
1493
1494
|
return Deployment.patch(
|
1494
1495
|
name,
|
1495
1496
|
{
|
@@ -1501,7 +1502,7 @@ var ExposableWorkload = class extends Workload {
|
|
1501
1502
|
);
|
1502
1503
|
}
|
1503
1504
|
if (args2.existing?.type === "stateful-set") {
|
1504
|
-
const { StatefulSet } = await import('./stateful-set-
|
1505
|
+
const { StatefulSet } = await import('./stateful-set-AXF4QRFI.js');
|
1505
1506
|
return StatefulSet.patch(
|
1506
1507
|
name,
|
1507
1508
|
{
|
@@ -1513,11 +1514,11 @@ var ExposableWorkload = class extends Workload {
|
|
1513
1514
|
);
|
1514
1515
|
}
|
1515
1516
|
if (args2.type === "Deployment") {
|
1516
|
-
const { Deployment } = await import('./deployment-
|
1517
|
+
const { Deployment } = await import('./deployment-D3ZXIZRN.js');
|
1517
1518
|
return Deployment.create(name, deepmerge(args2, args2.deployment), opts);
|
1518
1519
|
}
|
1519
1520
|
if (args2.type === "StatefulSet") {
|
1520
|
-
const { StatefulSet } = await import('./stateful-set-
|
1521
|
+
const { StatefulSet } = await import('./stateful-set-AXF4QRFI.js');
|
1521
1522
|
return StatefulSet.create(name, deepmerge(args2, args2.statefulSet), opts);
|
1522
1523
|
}
|
1523
1524
|
throw new Error(`Unknown workload type: ${args2.type}`);
|
@@ -1526,5 +1527,5 @@ var ExposableWorkload = class extends Workload {
|
|
1526
1527
|
};
|
1527
1528
|
|
1528
1529
|
export { ConfigMap, ExposableWorkload, NativeNetworkPolicy, NetworkPolicy, PersistentVolumeClaim, Workload, exposableWorkloadExtraArgs, getAutoVolumeName, getBestEndpoint, getExposableWorkloadComponents, getFallbackContainerName, getWorkloadComponents, getWorkloadVolumeResourceUuid, mapContainerEnvironment, mapContainerToRaw, mapEnvironmentSource, mapVolumeMount, mapWorkloadVolume, networkPolicyMediator, podSpecDefaults, requireBestEndpoint, workloadExtraArgs };
|
1529
|
-
//# sourceMappingURL=chunk-
|
1530
|
-
//# sourceMappingURL=chunk-
|
1530
|
+
//# sourceMappingURL=chunk-IDKGFFZ7.js.map
|
1531
|
+
//# sourceMappingURL=chunk-IDKGFFZ7.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/config-map.ts","../src/pvc.ts","../src/container.ts","../src/network.ts","../src/network-policy.ts","../src/pod.ts","../src/workload.ts"],"names":["output","getOrCreate","toPromise","core","args","interpolate","omit","normalize","endpoints","rule","containers","initContainers","rawVolumes","uniqueBy","volumes","podSpec","dependencyHash","service","command","deepmerge"],"mappings":"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","file":"chunk-IDKGFFZ7.js","sourcesContent":["import type { k8s } from \"@highstate/library\"\nimport { getOrCreate } from \"@highstate/contract\"\nimport { toPromise } from \"@highstate/pulumi\"\nimport { core, type types } from \"@pulumi/kubernetes\"\nimport {\n type ComponentResourceOptions,\n type Input,\n type Inputs,\n interpolate,\n type Output,\n output,\n} from \"@pulumi/pulumi\"\nimport { Namespace } from \"./namespace\"\nimport { getProvider, mapMetadata, ScopedResource, type ScopedResourceArgs } from \"./shared\"\n\nexport type ConfigMapArgs = ScopedResourceArgs &\n Omit<types.input.core.v1.ConfigMap, \"kind\" | \"metadata\" | \"apiVersion\">\n\nexport type CreateOrGetConfigMapArgs = ConfigMapArgs & {\n /**\n * The config map entity to patch/retrieve.\n */\n existing: Input<k8s.ScopedResource> | undefined\n}\n\n/**\n * Represents a Kubernetes ConfigMap resource with metadata and data.\n */\nexport abstract class ConfigMap extends ScopedResource {\n protected constructor(\n type: string,\n name: string,\n args: Inputs,\n opts: ComponentResourceOptions | undefined,\n\n apiVersion: Output<string>,\n kind: Output<string>,\n namespace: Output<Namespace>,\n metadata: Output<types.output.meta.v1.ObjectMeta>,\n\n /**\n * The data of the underlying Kubernetes config map.\n */\n readonly data: Output<Record<string, string>>,\n ) {\n super(type, name, args, opts, apiVersion, kind, namespace, metadata)\n }\n\n /**\n * The Highstate config map entity.\n */\n get entity(): Output<k8s.ScopedResource> {\n return output({\n type: \"config-map\",\n clusterId: this.cluster.id,\n clusterName: this.cluster.name,\n metadata: this.metadata,\n })\n }\n\n /**\n * Creates a new config map.\n */\n static create(name: string, args: ConfigMapArgs, opts?: ComponentResourceOptions): ConfigMap {\n return new CreatedConfigMap(name, args, opts)\n }\n\n /**\n * Creates a new config map or patches an existing one.\n *\n * @param name The name of the resource. May not be the same as the config map name.\n * @param args The arguments to create or patch the config map with.\n * @param opts Optional resource options.\n */\n static createOrPatch(\n name: string,\n args: CreateOrGetConfigMapArgs,\n opts?: ComponentResourceOptions,\n ): ConfigMap {\n if (args.existing) {\n return new ConfigMapPatch(name, {\n ...args,\n name: output(args.existing).metadata.name,\n })\n }\n\n return new CreatedConfigMap(name, args, opts)\n }\n\n /**\n * Creates a new config map or gets an existing one.\n *\n * @param name The name of the resource. May not be the same as the config map name. Will not be used when existing config map is retrieved.\n * @param args The arguments to create or get the config map with.\n * @param opts Optional resource options.\n */\n static async createOrGet(\n name: string,\n args: CreateOrGetConfigMapArgs,\n opts?: ComponentResourceOptions,\n ): Promise<ConfigMap> {\n if (args.existing) {\n return await ConfigMap.forAsync(args.existing, output(args.namespace).cluster)\n }\n\n return new CreatedConfigMap(name, args, opts)\n }\n\n /**\n * Patches an existing config map.\n *\n * Will throw an error if the config map does not exist.\n *\n * @param name The name of the resource. May not be the same as the config map name.\n * @param args The arguments to patch the config map with.\n * @param opts Optional resource options.\n */\n static patch(name: string, args: ConfigMapArgs, opts?: ComponentResourceOptions): ConfigMap {\n return new ConfigMapPatch(name, args, opts)\n }\n\n /**\n * Wraps an existing Kubernetes config map.\n */\n static wrap(\n name: string,\n args: WrappedConfigMapArgs,\n opts?: ComponentResourceOptions,\n ): ConfigMap {\n return new WrappedConfigMap(name, args, opts)\n }\n\n /**\n * Gets an existing config map.\n *\n * Will throw an error if the config map does not exist.\n */\n static get(\n name: string,\n args: ExternalConfigMapArgs,\n opts?: ComponentResourceOptions,\n ): ConfigMap {\n return new ExternalConfigMap(name, args, opts)\n }\n\n private static readonly configMapCache = new Map<string, ConfigMap>()\n\n /**\n * Gets an existing config map for a given entity.\n * Prefer this method over `get` when possible.\n *\n * It automatically names the resource with the following format: `{clusterName}.{namespace}.{name}.{clusterId}`.\n *\n * This method is idempotent and will return the same instance for the same entity.\n *\n * @param entity The entity to get the config map for.\n * @param cluster The cluster where the config map is located.\n */\n static for(entity: k8s.ScopedResource, cluster: Input<k8s.Cluster>): ConfigMap {\n return getOrCreate(\n ConfigMap.configMapCache,\n `${entity.clusterName}.${entity.metadata.namespace}.${entity.metadata.name}.${entity.clusterId}`,\n name => {\n return ConfigMap.get(name, {\n name: entity.metadata.name,\n namespace: Namespace.forResource(entity, cluster),\n })\n },\n )\n }\n\n /**\n * Gets an existing config map for a given entity.\n * Prefer this method over `get` when possible.\n *\n * It automatically names the resource with the following format: `{clusterName}.{namespace}.{name}.{clusterId}`.\n *\n * This method is idempotent and will return the same instance for the same entity.\n *\n * @param entity The entity to get the config map for.\n * @param cluster The cluster where the config map is located.\n */\n static async forAsync(\n entity: Input<k8s.ScopedResource>,\n cluster: Input<k8s.Cluster>,\n ): Promise<ConfigMap> {\n const resolvedEntity = await toPromise(entity)\n return ConfigMap.for(resolvedEntity, cluster)\n }\n}\n\nclass CreatedConfigMap extends ConfigMap {\n constructor(name: string, args: ConfigMapArgs, opts?: ComponentResourceOptions) {\n const configMap = output(args.namespace).cluster.apply(cluster => {\n return new core.v1.ConfigMap(\n name,\n {\n metadata: mapMetadata(args, name),\n data: args.data,\n },\n {\n ...opts,\n parent: this,\n provider: getProvider(cluster),\n },\n )\n })\n\n super(\n \"highstate:k8s:ConfigMap\",\n name,\n args,\n opts,\n configMap.apiVersion,\n configMap.kind,\n output(args.namespace),\n configMap.metadata,\n configMap.data,\n )\n }\n}\n\nclass ConfigMapPatch extends ConfigMap {\n constructor(name: string, args: ConfigMapArgs, opts?: ComponentResourceOptions) {\n const configMap = output(args.namespace).cluster.apply(cluster => {\n return new core.v1.ConfigMapPatch(\n name,\n {\n metadata: mapMetadata(args, name),\n data: args.data,\n },\n {\n ...opts,\n parent: this,\n provider: getProvider(cluster),\n },\n )\n })\n\n super(\n \"highstate:k8s:ConfigMapPatch\",\n name,\n args,\n opts,\n configMap.apiVersion,\n configMap.kind,\n output(args.namespace),\n configMap.metadata,\n configMap.data,\n )\n }\n}\n\nexport type WrappedConfigMapArgs = {\n /**\n * The underlying Kubernetes config map to wrap.\n */\n configMap: Input<core.v1.ConfigMap>\n\n /**\n * The namespace where the config map is located.\n */\n namespace: Input<Namespace>\n}\n\nclass WrappedConfigMap extends ConfigMap {\n constructor(name: string, args: WrappedConfigMapArgs, opts?: ComponentResourceOptions) {\n super(\n \"highstate:k8s:WrappedConfigMap\",\n name,\n args,\n opts,\n\n output(args.configMap).apiVersion,\n output(args.configMap).kind,\n output(args.namespace),\n output(args.configMap).metadata,\n output(args.configMap).data,\n )\n }\n}\n\nexport type ExternalConfigMapArgs = {\n /**\n * The name of the config map to get.\n */\n name: Input<string>\n\n /**\n * The namespace where the config map is located.\n */\n namespace: Input<Namespace>\n}\n\nclass ExternalConfigMap extends ConfigMap {\n constructor(name: string, args: ExternalConfigMapArgs, opts?: ComponentResourceOptions) {\n const configMap = output(args.namespace).cluster.apply(cluster => {\n return core.v1.ConfigMap.get(\n name,\n interpolate`${output(args.namespace).metadata.name}/${args.name}`,\n { ...opts, parent: this, provider: getProvider(cluster) },\n )\n })\n\n super(\n \"highstate:k8s:ExternalConfigMap\",\n name,\n args,\n opts,\n\n configMap.apiVersion,\n configMap.kind,\n output(args.namespace),\n configMap.metadata,\n configMap.data,\n )\n }\n}\n","import type { k8s } from \"@highstate/library\"\nimport { getOrCreate } from \"@highstate/contract\"\nimport {\n type ComponentResourceOptions,\n type Input,\n type Inputs,\n interpolate,\n type Output,\n output,\n toPromise,\n} from \"@highstate/pulumi\"\nimport { core, type types } from \"@pulumi/kubernetes\"\nimport { deepmerge } from \"deepmerge-ts\"\nimport { omit } from \"remeda\"\nimport { Namespace } from \"./namespace\"\nimport {\n commonExtraArgs,\n getProvider,\n mapMetadata,\n ScopedResource,\n type ScopedResourceArgs,\n} from \"./shared\"\n\nexport type PersistentVolumeClaimArgs = ScopedResourceArgs &\n types.input.core.v1.PersistentVolumeClaimSpec & {\n /**\n * The size of the volume to request.\n *\n * By default, the size is set to \"100Mi\".\n */\n size?: string\n }\n\nexport type CreateOrGetPersistentVolumeClaimArgs = PersistentVolumeClaimArgs & {\n /**\n * The PVC entity to patch/retrieve.\n */\n existing: Input<k8s.PersistentVolumeClaim> | undefined\n}\n\nconst extraPersistentVolumeClaimArgs = [...commonExtraArgs, \"size\"] as const\n\n/**\n * Represents a Kubernetes PersistentVolumeClaim resource with metadata and spec.\n */\nexport abstract class PersistentVolumeClaim extends ScopedResource {\n protected constructor(\n type: string,\n name: string,\n args: Inputs,\n opts: ComponentResourceOptions | undefined,\n\n apiVersion: Output<string>,\n kind: Output<string>,\n namespace: Output<Namespace>,\n metadata: Output<types.output.meta.v1.ObjectMeta>,\n\n /**\n * The spec of the underlying Kubernetes PVC.\n */\n readonly spec: Output<types.output.core.v1.PersistentVolumeClaimSpec>,\n\n /**\n * The status of the underlying Kubernetes PVC.\n */\n readonly status: Output<types.output.core.v1.PersistentVolumeClaimStatus>,\n ) {\n super(type, name, args, opts, apiVersion, kind, namespace, metadata)\n }\n\n /**\n * The Highstate PVC entity.\n */\n get entity(): Output<k8s.PersistentVolumeClaim> {\n return output({\n type: \"persistent-volume-claim\",\n clusterId: this.cluster.id,\n clusterName: this.cluster.name,\n metadata: this.metadata,\n })\n }\n\n /**\n * Creates a new PVC.\n */\n static create(\n name: string,\n args: PersistentVolumeClaimArgs,\n opts?: ComponentResourceOptions,\n ): PersistentVolumeClaim {\n return new CreatedPersistentVolumeClaim(name, args, opts)\n }\n\n /**\n * Creates a new PVC or patches an existing one.\n *\n * @param name The name of the resource. May not be the same as the PVC name.\n * @param args The arguments to create or patch the PVC with.\n * @param opts Optional resource options.\n */\n static createOrPatch(\n name: string,\n args: CreateOrGetPersistentVolumeClaimArgs,\n opts?: ComponentResourceOptions,\n ): PersistentVolumeClaim {\n if (args.existing) {\n return new PersistentVolumeClaimPatch(name, {\n ...args,\n name: output(args.existing).metadata.name,\n })\n }\n\n return new CreatedPersistentVolumeClaim(name, args, opts)\n }\n\n /**\n * Creates a new PVC or gets an existing one.\n *\n * @param name The name of the resource. May not be the same as the PVC name. Will not be used when existing PVC is retrieved.\n * @param args The arguments to create or get the PVC with.\n * @param opts Optional resource options.\n */\n static async createOrGet(\n name: string,\n args: CreateOrGetPersistentVolumeClaimArgs,\n opts?: ComponentResourceOptions,\n ): Promise<PersistentVolumeClaim> {\n if (args.existing) {\n return await PersistentVolumeClaim.forAsync(args.existing, output(args.namespace).cluster)\n }\n\n return new CreatedPersistentVolumeClaim(name, args, opts)\n }\n\n /**\n * Patches an existing PVC.\n *\n * Will throw an error if the PVC does not exist.\n *\n * @param name The name of the resource. May not be the same as the PVC name.\n * @param args The arguments to patch the PVC with.\n * @param opts Optional resource options.\n */\n static patch(\n name: string,\n args: PersistentVolumeClaimArgs,\n opts?: ComponentResourceOptions,\n ): PersistentVolumeClaim {\n return new PersistentVolumeClaimPatch(name, args, opts)\n }\n\n /**\n * Wraps an existing Kubernetes PVC.\n */\n static wrap(\n name: string,\n args: WrappedPersistentVolumeClaimArgs,\n opts?: ComponentResourceOptions,\n ): PersistentVolumeClaim {\n return new WrappedPersistentVolumeClaim(name, args, opts)\n }\n\n /**\n * Gets an existing PVC.\n *\n * Will throw an error if the PVC does not exist.\n */\n static get(\n name: string,\n args: ExternalPersistentVolumeClaimArgs,\n opts?: ComponentResourceOptions,\n ): PersistentVolumeClaim {\n return new ExternalPersistentVolumeClaim(name, args, opts)\n }\n\n private static readonly pvcCache = new Map<string, PersistentVolumeClaim>()\n\n /**\n * Gets an existing PVC for a given entity.\n * Prefer this method over `get` when possible.\n *\n * It automatically names the resource with the following format: `{clusterName}.{namespace}.{name}.{clusterId}`.\n *\n * This method is idempotent and will return the same instance for the same entity.\n *\n * @param entity The entity to get the PVC for.\n * @param cluster The cluster where the PVC is located.\n */\n static for(\n entity: k8s.PersistentVolumeClaim,\n cluster: Input<k8s.Cluster>,\n ): PersistentVolumeClaim {\n return getOrCreate(\n PersistentVolumeClaim.pvcCache,\n `${entity.clusterName}.${entity.metadata.namespace}.${entity.metadata.name}.${entity.clusterId}`,\n name => {\n return PersistentVolumeClaim.get(name, {\n name: entity.metadata.name,\n namespace: Namespace.forResource(entity, cluster),\n })\n },\n )\n }\n\n /**\n * Gets an existing PVC for a given entity.\n * Prefer this method over `get` when possible.\n *\n * It automatically names the resource with the following format: `{clusterName}.{namespace}.{name}.{clusterId}`.\n *\n * This method is idempotent and will return the same instance for the same entity.\n *\n * @param entity The entity to get the PVC for.\n * @param cluster The cluster where the PVC is located.\n */\n static async forAsync(\n entity: Input<k8s.PersistentVolumeClaim>,\n cluster: Input<k8s.Cluster>,\n ): Promise<PersistentVolumeClaim> {\n const resolvedEntity = await toPromise(entity)\n return PersistentVolumeClaim.for(resolvedEntity, cluster)\n }\n}\n\nclass CreatedPersistentVolumeClaim extends PersistentVolumeClaim {\n constructor(name: string, args: PersistentVolumeClaimArgs, opts?: ComponentResourceOptions) {\n const pvc = output(args.namespace).cluster.apply(cluster => {\n return new core.v1.PersistentVolumeClaim(\n name,\n {\n metadata: mapMetadata(args, name),\n spec: output(args).apply(args => {\n return deepmerge(\n {\n accessModes: [\"ReadWriteOnce\"],\n resources: {\n requests: {\n storage: args.size ?? \"100Mi\",\n },\n },\n } satisfies types.input.core.v1.PersistentVolumeClaimSpec,\n omit(args, extraPersistentVolumeClaimArgs),\n )\n }),\n },\n {\n ...opts,\n parent: this,\n provider: getProvider(cluster),\n },\n )\n })\n\n super(\n \"highstate:k8s:PersistentVolumeClaim\",\n name,\n args,\n opts,\n\n pvc.apiVersion,\n pvc.kind,\n output(args.namespace),\n pvc.metadata,\n pvc.spec,\n pvc.status,\n )\n }\n}\n\nclass PersistentVolumeClaimPatch extends PersistentVolumeClaim {\n constructor(name: string, args: PersistentVolumeClaimArgs, opts?: ComponentResourceOptions) {\n const pvc = output(args.namespace).cluster.apply(cluster => {\n return new core.v1.PersistentVolumeClaimPatch(\n name,\n {\n metadata: mapMetadata(args, name),\n spec: output(args).apply(args => {\n return deepmerge(\n {\n accessModes: [\"ReadWriteOnce\"],\n resources: {\n requests: {\n storage: args.size ?? \"100Mi\",\n },\n },\n } satisfies types.input.core.v1.PersistentVolumeClaimSpec,\n omit(args, extraPersistentVolumeClaimArgs),\n )\n }),\n },\n {\n ...opts,\n parent: this,\n provider: getProvider(cluster),\n },\n )\n })\n\n super(\n \"highstate:k8s:PersistentVolumeClaimPatch\",\n name,\n args,\n opts,\n\n pvc.apiVersion,\n pvc.kind,\n output(args.namespace),\n pvc.metadata,\n pvc.spec,\n pvc.status,\n )\n }\n}\n\nexport type WrappedPersistentVolumeClaimArgs = {\n /**\n * The underlying Kubernetes PVC to wrap.\n */\n pvc: Input<core.v1.PersistentVolumeClaim>\n\n /**\n * The namespace where the PVC is located.\n */\n namespace: Input<Namespace>\n}\n\nclass WrappedPersistentVolumeClaim extends PersistentVolumeClaim {\n constructor(\n name: string,\n args: WrappedPersistentVolumeClaimArgs,\n opts?: ComponentResourceOptions,\n ) {\n super(\n \"highstate:k8s:WrappedPersistentVolumeClaim\",\n name,\n args,\n opts,\n\n output(args.pvc).apiVersion,\n output(args.pvc).kind,\n output(args.namespace),\n output(args.pvc).metadata,\n output(args.pvc).spec,\n output(args.pvc).status,\n )\n }\n}\n\nexport type ExternalPersistentVolumeClaimArgs = {\n /**\n * The name of the PVC to get.\n */\n name: Input<string>\n\n /**\n * The namespace where the PVC is located.\n */\n namespace: Input<Namespace>\n}\n\nclass ExternalPersistentVolumeClaim extends PersistentVolumeClaim {\n constructor(\n name: string,\n args: ExternalPersistentVolumeClaimArgs,\n opts?: ComponentResourceOptions,\n ) {\n const pvc = output(args.namespace).cluster.apply(cluster => {\n return core.v1.PersistentVolumeClaim.get(\n name,\n interpolate`${output(args.namespace).metadata.name}/${args.name}`,\n { ...opts, parent: this, provider: getProvider(cluster) },\n )\n })\n\n super(\n \"highstate:k8s:ExternalPersistentVolumeClaim\",\n name,\n args,\n opts,\n\n pvc.apiVersion,\n pvc.kind,\n output(args.namespace),\n pvc.metadata,\n pvc.spec,\n pvc.status,\n )\n }\n}\n\nexport function getAutoVolumeName(workloadName: string, index: number): string {\n if (index === 0) {\n return `${workloadName}-data`\n }\n\n return `${workloadName}-data-${index}`\n}\n","import type { PartialKeys } from \"@highstate/contract\"\nimport type { k8s, network } from \"@highstate/library\"\nimport {\n type Input,\n type InputArray,\n normalize,\n type Output,\n output,\n type Unwrap,\n} from \"@highstate/pulumi\"\nimport { core, type types } from \"@pulumi/kubernetes\"\nimport { concat, map, omit } from \"remeda\"\nimport { ConfigMap } from \"./config-map\"\nimport { PersistentVolumeClaim } from \"./pvc\"\nimport { Secret } from \"./secret\"\n\nexport type Container = Omit<PartialKeys<types.input.core.v1.Container, \"name\">, \"volumeMounts\"> & {\n /**\n * The single port to add to the container.\n */\n port?: Input<types.input.core.v1.ContainerPort>\n\n /**\n * The volume mount to attach to the container.\n */\n volumeMount?: Input<ContainerVolumeMount>\n\n /**\n * The volume mounts to attach to the container.\n */\n volumeMounts?: InputArray<ContainerVolumeMount>\n\n /**\n * The volume to include in the parent workload.\n * It is like the `volumes` property, but defined at the container level.\n * It will be defined as a volume mount in the parent workload automatically.\n */\n volume?: Input<WorkloadVolume>\n\n /**\n * The volumes to include in the parent workload.\n * It is like the `volumes` property, but defined at the container level.\n * It will be defined as a volume mount in the parent workload automatically.\n */\n volumes?: InputArray<WorkloadVolume>\n\n /**\n * The map of environment variables to set in the container.\n * It is like the `env` property, but more convenient to use.\n */\n environment?: Input<ContainerEnvironment>\n\n /**\n * The source of environment variables to set in the container.\n * It is like the `envFrom` property, but more convenient to use.\n */\n environmentSource?: Input<ContainerEnvironmentSource>\n\n /**\n * The sources of environment variables to set in the container.\n * It is like the `envFrom` property, but more convenient to use.\n */\n environmentSources?: InputArray<ContainerEnvironmentSource>\n\n /**\n * The list of endpoints that the container is allowed to access.\n *\n * This is used to generate a network policy.\n */\n allowedEndpoints?: InputArray<network.L34Endpoint>\n\n /**\n * Enable the TUN device in the container.\n *\n * All necessary security context settings will be applied to the container.\n */\n enableTun?: Input<boolean>\n}\n\nconst containerExtraArgs = [\n \"port\",\n \"volumeMount\",\n \"volume\",\n \"environment\",\n \"environmentSource\",\n \"environmentSources\",\n] as const\n\nexport type ContainerEnvironment = Record<\n string,\n Input<string | undefined | null | ContainerEnvironmentVariable>\n>\n\nexport type ContainerEnvironmentVariable =\n | types.input.core.v1.EnvVarSource\n | {\n /**\n * The secret to select from.\n */\n secret: Input<core.v1.Secret | Secret>\n\n /**\n * The key of the secret to select from.\n */\n key: string\n }\n | {\n /**\n * The config map to select from.\n */\n configMap: Input<core.v1.ConfigMap>\n\n /**\n * The key of the config map to select from.\n */\n key: string\n }\n\nexport type ContainerEnvironmentSource =\n | types.input.core.v1.EnvFromSource\n | core.v1.ConfigMap\n | core.v1.Secret\n\nexport type ContainerVolumeMount =\n | types.input.core.v1.VolumeMount\n | (Omit<types.input.core.v1.VolumeMount, \"name\"> & {\n /**\n * The volume to mount.\n */\n volume: Input<WorkloadVolume>\n })\n\nexport type WorkloadVolume =\n | types.input.core.v1.Volume\n | core.v1.PersistentVolumeClaim\n | PersistentVolumeClaim\n | core.v1.ConfigMap\n | ConfigMap\n | core.v1.Secret\n | Secret\n\nexport function getFallbackContainerName(name: string, index: number) {\n if (index === 0) {\n return name\n }\n\n return `${name}-${index}`\n}\n\nexport function mapContainerToRaw(\n container: Unwrap<Container>,\n cluster: k8s.Cluster,\n fallbackName: string,\n): types.input.core.v1.Container {\n const containerName = container.name ?? fallbackName\n\n const spec = {\n ...omit(container, containerExtraArgs),\n\n name: containerName,\n ports: normalize(container.port, container.ports),\n\n volumeMounts: map(normalize(container.volumeMount, container.volumeMounts), mapVolumeMount),\n\n env: concat(\n container.environment ? mapContainerEnvironment(container.environment) : [],\n container.env ?? [],\n ),\n\n envFrom: concat(\n map(\n normalize(container.environmentSource, container.environmentSources),\n mapEnvironmentSource,\n ),\n container.envFrom ?? [],\n ),\n } as Unwrap<types.input.core.v1.Container>\n\n if (container.enableTun) {\n spec.securityContext ??= {}\n spec.securityContext.capabilities ??= {}\n spec.securityContext.capabilities.add = [\"NET_ADMIN\"]\n\n if (cluster.quirks?.tunDevicePolicy?.type === \"plugin\") {\n spec.resources ??= {}\n spec.resources.limits ??= {}\n spec.resources.limits[cluster.quirks.tunDevicePolicy.resourceName] =\n cluster.quirks.tunDevicePolicy.resourceValue\n } else {\n spec.volumeMounts ??= []\n spec.volumeMounts.push({\n name: \"tun-device\",\n mountPath: \"/dev/net/tun\",\n readOnly: false,\n })\n }\n }\n\n return spec\n}\n\nexport function mapContainerEnvironment(\n environment: Unwrap<ContainerEnvironment>,\n): types.input.core.v1.EnvVar[] {\n const envVars: types.input.core.v1.EnvVar[] = []\n\n for (const [name, value] of Object.entries(environment)) {\n if (!value) {\n continue\n }\n\n if (typeof value === \"string\") {\n envVars.push({ name, value })\n continue\n }\n\n if (\"secret\" in value) {\n envVars.push({\n name,\n valueFrom: {\n secretKeyRef: {\n name: value.secret.metadata.name,\n key: value.key,\n },\n },\n })\n continue\n }\n\n if (\"configMap\" in value) {\n envVars.push({\n name,\n valueFrom: {\n configMapKeyRef: {\n name: value.configMap.metadata.name,\n key: value.key,\n },\n },\n })\n continue\n }\n\n envVars.push({ name, valueFrom: value })\n }\n\n return envVars\n}\n\nexport function mapVolumeMount(volumeMount: ContainerVolumeMount): types.input.core.v1.VolumeMount {\n if (\"volume\" in volumeMount) {\n return omit(\n {\n ...volumeMount,\n name: output(volumeMount.volume)\n .apply(mapWorkloadVolume)\n .apply(volume => output(volume.name)),\n },\n [\"volume\"],\n )\n }\n\n return {\n ...volumeMount,\n name: volumeMount.name,\n }\n}\n\nexport function mapEnvironmentSource(\n envFrom: ContainerEnvironmentSource,\n): types.input.core.v1.EnvFromSource {\n if (envFrom instanceof core.v1.ConfigMap) {\n return {\n configMapRef: {\n name: envFrom.metadata.name,\n },\n }\n }\n\n if (envFrom instanceof core.v1.Secret) {\n return {\n secretRef: {\n name: envFrom.metadata.name,\n },\n }\n }\n\n return envFrom\n}\n\nexport function mapWorkloadVolume(volume: WorkloadVolume) {\n if (volume instanceof PersistentVolumeClaim) {\n return {\n name: volume.metadata.name,\n persistentVolumeClaim: {\n claimName: volume.metadata.name,\n },\n }\n }\n\n if (volume instanceof Secret) {\n return {\n name: volume.metadata.name,\n secret: {\n secretName: volume.metadata.name,\n },\n }\n }\n\n if (volume instanceof ConfigMap) {\n return {\n name: volume.metadata.name,\n configMap: {\n name: volume.metadata.name,\n },\n }\n }\n\n if (core.v1.PersistentVolumeClaim.isInstance(volume)) {\n return {\n name: volume.metadata.name,\n persistentVolumeClaim: {\n claimName: volume.metadata.name,\n },\n }\n }\n\n if (core.v1.ConfigMap.isInstance(volume)) {\n return {\n name: volume.metadata.name,\n configMap: {\n name: volume.metadata.name,\n },\n }\n }\n\n if (core.v1.Secret.isInstance(volume)) {\n return {\n name: volume.metadata.name,\n secret: {\n secretName: volume.metadata.name,\n },\n }\n }\n\n return volume\n}\n\nexport function getWorkloadVolumeResourceUuid(volume: WorkloadVolume): Output<string | undefined> {\n if (volume instanceof PersistentVolumeClaim) {\n return volume.metadata.uid\n }\n\n if (volume instanceof Secret) {\n return volume.metadata.uid\n }\n\n if (volume instanceof ConfigMap) {\n return volume.metadata.uid\n }\n\n if (core.v1.PersistentVolumeClaim.isInstance(volume)) {\n return volume.metadata.uid\n }\n\n if (core.v1.ConfigMap.isInstance(volume)) {\n return volume.metadata.uid\n }\n\n if (core.v1.Secret.isInstance(volume)) {\n return volume.metadata.uid\n }\n\n return output(undefined)\n}\n","import type { k8s, network } from \"@highstate/library\"\nimport { filterEndpoints } from \"@highstate/common\"\nimport { isEndpointFromCluster } from \"./service\"\n\nexport function getBestEndpoint<TEndpoint extends network.L34Endpoint>(\n endpoints: TEndpoint[],\n cluster?: k8s.Cluster,\n): TEndpoint | undefined {\n if (!endpoints.length) {\n return undefined\n }\n\n if (endpoints.length === 1) {\n return endpoints[0]\n }\n\n if (!cluster) {\n return filterEndpoints(endpoints)[0]\n }\n\n const clusterEndpoint = endpoints.find(endpoint => isEndpointFromCluster(endpoint, cluster))\n\n if (clusterEndpoint) {\n return clusterEndpoint\n }\n\n return filterEndpoints(endpoints)[0]\n}\n\nexport function requireBestEndpoint<TEndpoint extends network.L34Endpoint>(\n endpoints: TEndpoint[],\n cluster: k8s.Cluster,\n): TEndpoint {\n const endpoint = getBestEndpoint(endpoints, cluster)\n\n if (!endpoint) {\n throw new Error(`No best endpoint found for cluster \"${cluster.name}\" (${cluster.id})`)\n }\n\n return endpoint\n}\n","import type { k8s, network } from \"@highstate/library\"\nimport type { Namespace } from \"./namespace\"\nimport {\n ImplementationMediator,\n type InputL34Endpoint,\n l3EndpointToCidr,\n l34EndpointToString,\n parseL34Endpoint,\n} from \"@highstate/common\"\nimport { z } from \"@highstate/contract\"\nimport {\n ComponentResource,\n type Input,\n type InputArray,\n interpolate,\n normalize,\n type Output,\n output,\n type Resource,\n type ResourceOptions,\n toPromise,\n type Unwrap,\n} from \"@highstate/pulumi\"\nimport { type core, networking, type types } from \"@pulumi/kubernetes\"\nimport { flat, groupBy, merge, mergeDeep, uniqueBy } from \"remeda\"\nimport { requireBestEndpoint } from \"./network\"\nimport { isEndpointFromCluster, mapServiceToLabelSelector } from \"./service\"\nimport {\n getNamespaceName,\n getProviderAsync,\n mapMetadata,\n mapNamespaceNameToSelector,\n mapSelectorLikeToSelector,\n type NamespaceLike,\n type ScopedResourceArgs,\n type SelectorLike,\n} from \"./shared\"\n\nexport type NetworkPolicyPort = {\n /**\n * The protocol to match.\n *\n * If not provided, \"TCP\" will be used.\n */\n protocol?: string\n} & (\n | {\n /**\n * The single port to match.\n */\n port: number | string\n }\n | {\n /**\n * The range of ports to match.\n */\n range: [start: number, end: number]\n }\n)\n\nexport type IngressRuleArgs = {\n /**\n * Whether to allow all incoming traffic.\n *\n * If set to `true`, all other rules will be ignored for matched traffic.\n */\n fromAll?: Input<boolean>\n\n /**\n * The allowed cidr for incoming traffic.\n *\n * Will be ORed with other conditions inside the same rule (except ports).\n */\n fromCidr?: Input<string>\n\n /**\n * The list of allowed cidrs for incoming traffic.\n *\n * Will be ORed with other conditions inside the same rule (except ports).\n */\n fromCidrs?: InputArray<string>\n\n /**\n * The list of allowed L3 or L4 endpoints for outgoing traffic.\n *\n * Just a syntactic sugar for `fromFqdn` and `fromService` for cases when the endpoint can be one of them + optional port/protocol.\n *\n * Will be ORed with other conditions inside the same rule (except ports).\n *\n * If a single endpoint also has a port/protocol/service metadata,\n * it will produce separate rule for it with them and ORed with the rest of the rules.\n */\n fromEndpoint?: Input<InputL34Endpoint>\n\n /**\n * The list of allowed L3 or L4 endpoints for incoming traffic.\n *\n * Just a syntactic sugar for `fromFqdn` and `fromService` for cases when the endpoint can be one of them + optional port/protocol.\n *\n * Will be ORed with other conditions inside the same rule (except ports).\n *\n * If a single endpoint also has a port/protocol/service metadata,\n * it will produce separate rule for it with them and ORed with the rest of the rules.\n */\n fromEndpoints?: InputArray<InputL34Endpoint>\n\n /**\n * The service to allow traffic from.\n *\n * Will be ORed with other conditions inside the same rule (except ports).\n */\n fromService?: Input<core.v1.Service>\n\n /**\n * The list of allowed services for incoming traffic.\n *\n * Will be ORed with other conditions inside the same rule (except ports).\n */\n fromServices?: InputArray<core.v1.Service>\n\n /**\n * The namespace to allow traffic from.\n *\n * If provided with `fromSelector(s)`, it will be ANDed with them.\n * Otherwise, it will match all pods in the namespace.\n *\n * Will be ORed with other conditions inside the same rule (except ports and selectors).\n */\n fromNamespace?: Input<NamespaceLike>\n\n /**\n * The list of allowed namespaces for incoming traffic.\n *\n * If provided with `fromSelector(s)`, it will be ANDed with them.\n * Otherwise, it will match all pods in the namespaces.\n *\n * Will be ORed with other conditions inside the same rule (except ports and selectors).\n */\n fromNamespaces?: InputArray<NamespaceLike>\n\n /**\n * The selector for incoming traffic.\n *\n * If provided with `fromNamespace(s)`, it will be ANDed with them.\n * Otherwise, it will match pods in all namespaces.\n *\n * Will be ORed with other conditions inside the same rule (except ports and namespaces).\n */\n fromSelector?: Input<SelectorLike>\n\n /**\n * The list of selectors for incoming traffic.\n *\n * If provided with `fromNamespace(s)`, it will be ANDed with them.\n * Otherwise, it will match pods in all namespaces.\n *\n * Will be ORed with other conditions inside the same rule (except ports and namespaces).\n */\n fromSelectors?: InputArray<SelectorLike>\n\n /**\n * The port to allow incoming traffic on.\n *\n * Will be ANDed with all conditions inside the same rule.\n */\n toPort?: Input<NetworkPolicyPort>\n\n /**\n * The list of allowed ports for incoming traffic.\n *\n * Will be ANDed with all conditions inside the same rule.\n */\n toPorts?: InputArray<NetworkPolicyPort>\n}\n\nexport type EgressRuleArgs = {\n /**\n * Whether to allow all outgoing traffic.\n *\n * If set to `true`, all other rules will be ignored for matched traffic.\n */\n toAll?: Input<boolean>\n\n /**\n * The allowed cidr for outgoing traffic.\n *\n * Will be ORed with other conditions inside the same rule (except ports).\n */\n toCidr?: Input<string>\n\n /**\n * The list of allowed cidrs for outgoing traffic.\n *\n * Will be ORed with other conditions inside the same rule (except ports).\n */\n toCidrs?: InputArray<string>\n\n /**\n * The FQDN to allow outgoing traffic.\n *\n * Will be ORed with other conditions inside the same rule (except ports).\n */\n toFqdn?: Input<string>\n\n /**\n * The list of allowed FQDNs for outgoing traffic.\n *\n * Will be ORed with other conditions inside the same rule (except ports).\n */\n toFqdns?: InputArray<string>\n\n /**\n * The L3 or L4 endpoint to allow outgoing traffic.\n *\n * Just a syntactic sugar for `toFqdn`, `toCidr` and `toService` for cases when the endpoint can be one of them + optional port/protocol.\n *\n * Will be ORed with other conditions inside the same rule (except ports).\n *\n * If a single endpoint also has a port/protocol/service metadata,\n * it will produce separate rule for it with them and ORed with the rest of the rules.\n */\n toEndpoint?: Input<InputL34Endpoint>\n\n /**\n * The list of allowed L3 or L4 endpoints for outgoing traffic.\n *\n * Just a syntactic sugar for `toFqdn`, `toCidr` and `toService` for cases when the endpoint can be one of them + optional port/protocol.\n *\n * Will be ORed with other conditions inside the same rule (except ports).\n *\n * If a single endpoint also has a port/protocol/service metadata,\n * it will produce separate rule for it with them and ORed with the rest of the rules.\n */\n toEndpoints?: InputArray<InputL34Endpoint>\n\n /**\n * The service to allow traffic to.\n *\n * Will be ORed with other conditions inside the same rule (except ports).\n */\n toService?: Input<core.v1.Service>\n\n /**\n * The list of allowed services for outgoing traffic.\n *\n * Will be ORed with other conditions inside the same rule (except ports).\n */\n toServices?: InputArray<core.v1.Service>\n\n /**\n * The namespace to allow traffic to.\n *\n * If provided with `toSelector(s)`, it will be ANDed with them.\n * Otherwise, it will match all pods in the namespace.\n *\n * Will be ORed with other conditions inside the same rule (except ports and selectors).\n */\n toNamespace?: Input<NamespaceLike>\n\n /**\n * The list of allowed namespaces for outgoing traffic.\n *\n * If provided with `toSelector(s)`, it will be ANDed with them.\n * Otherwise, it will match all pods in the namespaces.\n *\n * Will be ORed with other conditions inside the same rule (except ports and selectors).\n */\n toNamespaces?: InputArray<NamespaceLike>\n\n /**\n * The selector for outgoing traffic.\n *\n * If provided with `toNamespace(s)`, it will be ANDe with them.\n *\n * Otherwise, it will match pods only in all namespaces.\n */\n toSelector?: Input<SelectorLike>\n\n /**\n * The list of selectors for outgoing traffic.\n *\n * If provided with `toNamespace(s)`, it will be ANDed with them.\n * Otherwise, it will match pods only in all namespaces.\n */\n toSelectors?: InputArray<SelectorLike>\n\n /**\n * The port to allow outgoing traffic on.\n *\n * Will be ANDed with all conditions inside the same rule.\n */\n toPort?: Input<NetworkPolicyPort>\n\n /**\n * The list of allowed ports for outgoing traffic.\n *\n * Will be ANDed with all conditions inside the same rule.\n */\n toPorts?: InputArray<NetworkPolicyPort>\n}\n\nexport type NetworkPolicyArgs = ScopedResourceArgs & {\n /**\n * The description of this network policy.\n */\n description?: Input<string>\n\n /**\n * The pod selector for this network policy.\n * If not provided, it will select all pods in the namespace.\n */\n selector?: SelectorLike\n\n /**\n * The rule for incoming traffic.\n */\n ingressRule?: Input<IngressRuleArgs>\n\n /**\n * The rules for incoming traffic.\n */\n ingressRules?: InputArray<IngressRuleArgs>\n\n /**\n * The rule for outgoing traffic.\n */\n egressRule?: Input<EgressRuleArgs>\n\n /**\n * The rules for outgoing traffic.\n */\n egressRules?: InputArray<EgressRuleArgs>\n\n /**\n * Enable the isolation of ingress traffic, so that only matched traffic can ingress.\n */\n isolateIngress?: Input<boolean>\n\n /**\n * Enable the isolation of egress traffic, so that only matched traffic can egress.\n */\n isolateEgress?: Input<boolean>\n\n /**\n * Allow the eggress traffic to the API server of the cluster.\n *\n * By default, `false`.\n */\n allowKubeApiServer?: Input<boolean>\n\n /**\n * Allow the eggress traffic to the DNS server of the cluster.\n *\n * By default, `false`.\n */\n allowKubeDns?: Input<boolean>\n}\n\nexport type NormalizedRuleArgs = {\n all: boolean\n cidrs: string[]\n fqdns: string[]\n services: core.v1.Service[]\n namespaces: NamespaceLike[]\n selectors: SelectorLike[]\n ports: NetworkPolicyPort[]\n}\n\nexport type NormalizedNetworkPolicyArgs = Omit<\n Unwrap<NetworkPolicyArgs>,\n | \"podSelector\"\n | \"ingressRule\"\n | \"ingressRules\"\n | \"egressRule\"\n | \"egressRules\"\n | \"isolateIngress\"\n | \"isolateEgress\"\n | \"allowKubeApiServer\"\n | \"allowKubeDNS\"\n> & {\n cluster: k8s.Cluster\n podSelector: Unwrap<types.input.meta.v1.LabelSelector>\n\n isolateIngress: boolean\n isolateEgress: boolean\n\n allowKubeApiServer: boolean\n\n ingressRules: NormalizedRuleArgs[]\n egressRules: NormalizedRuleArgs[]\n}\n\nexport const networkPolicyMediator = new ImplementationMediator(\n \"network-policy\",\n z.object({ name: z.string(), args: z.custom<NormalizedNetworkPolicyArgs>() }),\n z.instanceof(ComponentResource),\n)\n\n/**\n * The resource for creating network policies.\n * Will use different resources depending on the cluster configuration.\n *\n * Note: In the worst case, it will create native `NetworkPolicy` resources and ignore some features like L7 rules.\n */\nexport class NetworkPolicy extends ComponentResource {\n /**\n * The underlying network policy resource.\n */\n public readonly networkPolicy: Output<Resource>\n\n constructor(name: string, args: NetworkPolicyArgs, opts?: ResourceOptions) {\n super(\"k8s:network-policy\", name, args, opts)\n\n const normalizedArgs = output(args).apply(async args => {\n const ingressRules = normalize(args.ingressRule, args.ingressRules)\n const egressRules = normalize(args.egressRule, args.egressRules)\n const cluster = await toPromise(args.namespace.cluster)\n\n const extraEgressRules: NormalizedRuleArgs[] = []\n\n if (args.allowKubeDns) {\n extraEgressRules.push({\n namespaces: [\"kube-system\"],\n selectors: [{ matchLabels: { \"k8s-app\": \"kube-dns\" } }],\n ports: [{ port: 53, protocol: \"UDP\" }],\n all: false,\n cidrs: [],\n fqdns: [],\n services: [],\n })\n }\n\n return {\n ...args,\n\n podSelector: args.selector ? mapSelectorLikeToSelector(args.selector) : {},\n cluster,\n\n isolateEgress: args.isolateEgress ?? false,\n isolateIngress: args.isolateIngress ?? false,\n\n allowKubeApiServer: args.allowKubeApiServer ?? false,\n\n ingressRules: ingressRules.flatMap(rule => {\n const endpoints = normalize(rule?.fromEndpoint, rule?.fromEndpoints)\n const parsedEndpoints = endpoints.map(parseL34Endpoint)\n\n const endpointsNamespaces = groupBy(parsedEndpoints, endpoint => {\n const namespace = isEndpointFromCluster(endpoint, cluster)\n ? endpoint.metadata[\"k8s.service\"].namespace\n : \"\"\n\n return namespace\n })\n\n const l3OnlyRule = endpointsNamespaces[\"\"]\n ? NetworkPolicy.getRuleFromEndpoint(undefined, endpointsNamespaces[\"\"], cluster)\n : undefined\n\n const otherRules = Object.entries(endpointsNamespaces)\n .filter(([key]) => key !== \"\")\n .map(([, endpoints]) => {\n return NetworkPolicy.getRuleFromEndpoint(undefined, endpoints, cluster)\n })\n\n return [\n {\n all: rule.fromAll ?? false,\n cidrs: normalize(rule.fromCidr, rule.fromCidrs).concat(l3OnlyRule?.cidrs ?? []),\n fqdns: [],\n services: normalize(rule.fromService, rule.fromServices),\n namespaces: normalize(rule.fromNamespace, rule.fromNamespaces),\n selectors: normalize(rule.fromSelector, rule.fromSelectors),\n ports: normalize(rule.toPort, rule.toPorts),\n } as NormalizedRuleArgs,\n\n ...otherRules,\n ].filter(rule => !NetworkPolicy.isEmptyRule(rule))\n }),\n\n egressRules: egressRules\n .flatMap(rule => {\n const endpoints = normalize(rule?.toEndpoint, rule?.toEndpoints)\n const parsedEndpoints = endpoints.map(parseL34Endpoint)\n\n const endpointsByPortsAnsNamespaces = groupBy(parsedEndpoints, endpoint => {\n const namespace = isEndpointFromCluster(endpoint, cluster)\n ? endpoint.metadata[\"k8s.service\"].namespace\n : \"\"\n\n const port = isEndpointFromCluster(endpoint, cluster)\n ? endpoint.metadata[\"k8s.service\"].targetPort\n : endpoint.port\n\n return `${port ?? \"0\"}:${namespace}`\n })\n\n const l3OnlyRule = endpointsByPortsAnsNamespaces[\"0:\"]\n ? NetworkPolicy.getRuleFromEndpoint(\n undefined,\n endpointsByPortsAnsNamespaces[\"0:\"],\n cluster,\n )\n : undefined\n\n const otherRules = Object.entries(endpointsByPortsAnsNamespaces)\n .filter(([key]) => key !== \"0:\")\n .map(([key, endpoints]) => {\n const [port] = key.split(\":\")\n const portNumber = parseInt(port, 10)\n const portValue = Number.isNaN(portNumber) ? port : portNumber\n\n return NetworkPolicy.getRuleFromEndpoint(portValue, endpoints, cluster)\n })\n\n return [\n {\n all: rule.toAll ?? false,\n cidrs: normalize(rule.toCidr, rule.toCidrs).concat(l3OnlyRule?.cidrs ?? []),\n fqdns: normalize(rule.toFqdn, rule.toFqdns).concat(l3OnlyRule?.fqdns ?? []),\n services: normalize(rule.toService, rule.toServices),\n namespaces: normalize(rule.toNamespace, rule.toNamespaces),\n selectors: normalize(rule.toSelector, rule.toSelectors),\n ports: normalize(rule.toPort, rule.toPorts),\n } as NormalizedRuleArgs,\n\n ...otherRules,\n ].filter(rule => !NetworkPolicy.isEmptyRule(rule))\n })\n .concat(extraEgressRules),\n }\n })\n\n this.networkPolicy = output(\n normalizedArgs.apply(async args => {\n const cluster = args.cluster\n\n // Check if cluster has a custom network policy implementation\n if (cluster.networkPolicyImplRef) {\n return networkPolicyMediator.call(cluster.networkPolicyImplRef, {\n name,\n args: args as NormalizedNetworkPolicyArgs,\n })\n }\n\n // Fallback to native network policy\n const nativePolicy = new NativeNetworkPolicy(name, args as NormalizedNetworkPolicyArgs, {\n ...opts,\n parent: this,\n provider: await getProviderAsync(output(args.namespace).cluster),\n })\n return nativePolicy.networkPolicy\n }),\n )\n }\n\n private static mapCidrFromEndpoint(\n this: void,\n result: network.L3Endpoint & { type: \"ipv4\" | \"ipv6\" },\n ): string {\n if (result.type === \"ipv4\") {\n return `${result.address}/32`\n }\n\n return `${result.address}/128`\n }\n\n private static getRuleFromEndpoint(\n port: number | string | undefined,\n endpoints: network.L34Endpoint[],\n cluster: k8s.Cluster,\n ): NormalizedRuleArgs {\n const ports: NetworkPolicyPort[] = port\n ? [{ port, protocol: endpoints[0].protocol?.toUpperCase() }]\n : []\n\n const cidrs = endpoints\n .filter(endpoint => !isEndpointFromCluster(endpoint, cluster))\n .filter(endpoint => endpoint.type === \"ipv4\" || endpoint.type === \"ipv6\")\n .map(NetworkPolicy.mapCidrFromEndpoint)\n\n const fqdns = endpoints\n .filter(endpoint => endpoint.type === \"hostname\")\n .map(endpoint => endpoint.hostname)\n\n const selectors = endpoints\n .filter(endpoint => isEndpointFromCluster(endpoint, cluster))\n .map(endpoint => endpoint.metadata[\"k8s.service\"].selector)\n\n const namespace = endpoints\n .filter(endpoint => isEndpointFromCluster(endpoint, cluster))\n .map(endpoint => endpoint.metadata[\"k8s.service\"].namespace)[0]\n\n return {\n all: false,\n cidrs,\n fqdns,\n services: [],\n namespaces: namespace ? [namespace] : [],\n selectors,\n ports,\n }\n }\n\n private static isEmptyRule(rule: NormalizedRuleArgs): boolean {\n return (\n !rule.all &&\n rule.cidrs.length === 0 &&\n rule.fqdns.length === 0 &&\n rule.services.length === 0 &&\n rule.namespaces.length === 0 &&\n rule.selectors.length === 0 &&\n rule.ports.length === 0\n )\n }\n\n /**\n * Creates network policy to isolate the namespace by denying all traffic to/from it.\n *\n * Automatically names the policy as: `isolate-namespace.{clusterName}.{namespace}.{clusterId}`.\n *\n * @param namespace The namespace to isolate.\n * @param opts Optional resource options.\n */\n static async isolateNamespace(\n namespace: Input<Namespace>,\n opts?: ResourceOptions,\n ): Promise<NetworkPolicy> {\n const name = await toPromise(output(namespace).metadata.name)\n const cluster = await toPromise(output(namespace).cluster)\n\n return new NetworkPolicy(\n `isolate-namespace.${cluster.name}.${name}.${cluster.id}`,\n {\n namespace,\n\n description: \"By default, deny all traffic to/from the namespace.\",\n\n isolateEgress: true,\n isolateIngress: true,\n },\n opts,\n )\n }\n\n /**\n * Creates network policy to allow all traffic inside the namespace (pod to pod within same namespace).\n *\n * Automatically names the policy as: `allow-inside-namespace.{clusterName}.{namespace}.{clusterId}`.\n *\n * @param namespace The namespace to create the policy in.\n * @param opts Optional resource options.\n */\n static async allowInsideNamespace(\n namespace: Input<Namespace>,\n opts?: ResourceOptions,\n ): Promise<NetworkPolicy> {\n const nsName = await toPromise(output(namespace).metadata.name)\n const cluster = await toPromise(output(namespace).cluster)\n\n return new NetworkPolicy(\n `allow-inside-namespace.${cluster.name}.${nsName}.${cluster.id}`,\n {\n namespace,\n description: \"Allow all traffic inside the namespace.\",\n ingressRule: { fromNamespace: namespace },\n egressRule: { toNamespace: namespace },\n },\n opts,\n )\n }\n\n /**\n * Creates network policy to allow traffic from the namespace to the Kubernetes API server.\n *\n * Automatically names the policy as: `allow-kube-api-server.{clusterName}.{namespace}.{clusterId}`.\n *\n * @param namespace The namespace to create the policy in.\n * @param opts Optional resource options.\n */\n static async allowKubeApiServer(\n namespace: Input<Namespace>,\n opts?: ResourceOptions,\n ): Promise<NetworkPolicy> {\n const nsName = await toPromise(output(namespace).metadata.name)\n const cluster = await toPromise(output(namespace).cluster)\n\n return new NetworkPolicy(\n `allow-kube-api-server.${cluster.name}.${nsName}.${cluster.id}`,\n {\n namespace,\n description: \"Allow all traffic to the Kubernetes API server from the namespace.\",\n allowKubeApiServer: true,\n },\n opts,\n )\n }\n\n /**\n * Creates network policy to allow egress DNS traffic (UDP 53) required for name resolution.\n *\n * Automatically names the policy as: `allow-kube-dns.{clusterName}.{namespace}.{clusterId}`.\n *\n * @param namespace The namespace to create the policy in.\n * @param opts Optional resource options.\n */\n static async allowKubeDns(\n namespace: Input<Namespace>,\n opts?: ResourceOptions,\n ): Promise<NetworkPolicy> {\n const nsName = await toPromise(output(namespace).metadata.name)\n const cluster = await toPromise(output(namespace).cluster)\n\n return new NetworkPolicy(\n `allow-kube-dns.${cluster.name}.${nsName}.${cluster.id}`,\n {\n namespace,\n description: \"Allow all traffic to the Kubernetes DNS server from the namespace.\",\n allowKubeDns: true,\n },\n opts,\n )\n }\n\n /**\n * Creates network policy to allow all egress traffic from the namespace.\n *\n * Automatically names the policy as: `allow-all-egress.{clusterName}.{namespace}.{clusterId}`.\n *\n * @param namespace The namespace to create the policy in.\n * @param opts Optional resource options.\n */\n static async allowAllEgress(\n namespace: Input<Namespace>,\n opts?: ResourceOptions,\n ): Promise<NetworkPolicy> {\n const nsName = await toPromise(output(namespace).metadata.name)\n const cluster = await toPromise(output(namespace).cluster)\n\n return new NetworkPolicy(\n `allow-all-egress.${cluster.name}.${nsName}.${cluster.id}`,\n {\n namespace,\n description: \"Allow all egress traffic from the namespace.\",\n egressRule: { toAll: true },\n },\n opts,\n )\n }\n\n /**\n * Creates network policy to allow all ingress traffic to the namespace.\n *\n * Automatically names the policy as: `allow-all-ingress.{clusterName}.{namespace}.{clusterId}`.\n *\n * @param namespace The namespace to create the policy in.\n * @param opts Optional resource options.\n */\n static async allowAllIngress(\n namespace: Input<Namespace>,\n opts?: ResourceOptions,\n ): Promise<NetworkPolicy> {\n const nsName = await toPromise(output(namespace).metadata.name)\n const cluster = await toPromise(output(namespace).cluster)\n return new NetworkPolicy(\n `allow-all-ingress.${cluster.name}.${nsName}.${cluster.id}`,\n {\n namespace,\n description: \"Allow all ingress traffic to the namespace.\",\n ingressRule: { fromAll: true },\n },\n opts,\n )\n }\n\n /**\n * Creates network policy to allow egress traffic to a specific L3/L4 endpoint.\n *\n * Automatically names the policy as: `allow-egress-to-<endpoint>.{clusterName}.{namespace}.{clusterId}`.\n *\n * @param namespace The namespace to create the policy in.\n * @param endpoint The endpoint to allow egress to.\n * @param opts Optional resource options.\n */\n static async allowEgressToEndpoint(\n namespace: Input<Namespace>,\n endpoint: InputL34Endpoint,\n opts?: ResourceOptions,\n ): Promise<NetworkPolicy> {\n const parsedEndpoint = parseL34Endpoint(endpoint)\n const endpointStr = l34EndpointToString(parsedEndpoint).replace(/:/g, \"-\")\n const nsName = await toPromise(output(namespace).metadata.name)\n const cluster = await toPromise(output(namespace).cluster)\n\n return new NetworkPolicy(\n `allow-egress-to-${endpointStr}.${cluster.name}.${nsName}.${cluster.id}`,\n {\n namespace,\n description: `Allow egress traffic to \"${l34EndpointToString(parsedEndpoint)}\" from the namespace.`,\n egressRule: { toEndpoint: endpoint },\n },\n opts,\n )\n }\n\n /**\n * Creates network policy to allow egress traffic to the best endpoint among provided candidates.\n *\n * Automatically names the policy as: `allow-egress-to-<bestEndpoint>.{clusterName}.{namespace}.{clusterId}`.\n *\n * @param namespace The namespace to create the policy in.\n * @param endpoints The candidate endpoints to select from.\n * @param opts Optional resource options.\n */\n static async allowEgressToBestEndpoint(\n namespace: Input<Namespace>,\n endpoints: InputArray<InputL34Endpoint>,\n opts?: ResourceOptions,\n ): Promise<NetworkPolicy> {\n const cluster = await toPromise(output(namespace).cluster)\n const resolvedEndpoints = await toPromise(output(endpoints))\n const bestEndpoint = requireBestEndpoint(resolvedEndpoints.map(parseL34Endpoint), cluster)\n\n return await NetworkPolicy.allowEgressToEndpoint(namespace, bestEndpoint, opts)\n }\n\n /**\n * Creates network policy to allow ingress traffic from a specific L3/L4 endpoint.\n *\n * Automatically names the policy as: `allow-ingress-from-<endpoint>.{clusterName}.{namespace}.{clusterId}`.\n *\n * @param namespace The namespace to create the policy in.\n * @param endpoint The endpoint to allow ingress from.\n * @param opts Optional resource options.\n */\n static async allowIngressFromEndpoint(\n namespace: Input<Namespace>,\n endpoint: InputL34Endpoint,\n opts?: ResourceOptions,\n ): Promise<NetworkPolicy> {\n const parsedEndpoint = parseL34Endpoint(endpoint)\n const endpointStr = l34EndpointToString(parsedEndpoint).replace(/:/g, \"-\")\n const nsName = await toPromise(output(namespace).metadata.name)\n const cluster = await toPromise(output(namespace).cluster)\n\n return new NetworkPolicy(\n `allow-ingress-from-${endpointStr}.${cluster.name}.${nsName}.${cluster.id}`,\n {\n namespace,\n description: interpolate`Allow ingress traffic from \"${l34EndpointToString(parsedEndpoint)}\" to the namespace.`,\n ingressRule: { fromEndpoint: endpoint },\n },\n opts,\n )\n }\n}\n\nexport class NativeNetworkPolicy extends ComponentResource {\n /**\n * The underlying native network policy resource.\n */\n public readonly networkPolicy: Resource\n\n constructor(name: string, args: NormalizedNetworkPolicyArgs, opts?: ResourceOptions) {\n super(\"k8s:native-network-policy\", name, args, opts)\n\n const ingress = NativeNetworkPolicy.createIngressRules(args)\n const egress = NativeNetworkPolicy.createEgressRules(args)\n\n const policyTypes: string[] = []\n\n if (ingress.length > 0 || args.isolateIngress) {\n policyTypes.push(\"Ingress\")\n }\n\n if (egress.length > 0 || args.isolateEgress) {\n policyTypes.push(\"Egress\")\n }\n\n this.networkPolicy = new networking.v1.NetworkPolicy(\n name,\n {\n metadata: mergeDeep(mapMetadata(args, name), {\n annotations: args.description\n ? { \"kubernetes.io/description\": args.description }\n : undefined,\n }),\n spec: {\n podSelector: args.podSelector,\n ingress,\n egress,\n policyTypes,\n },\n },\n { ...opts, parent: this },\n )\n }\n\n private static fallbackIpBlock: types.input.networking.v1.IPBlock = {\n cidr: \"0.0.0.0/0\",\n except: [\"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"],\n }\n\n private static fallbackDnsRule: types.input.networking.v1.NetworkPolicyEgressRule = {\n to: [\n {\n namespaceSelector: { matchLabels: { \"kubernetes.io/metadata.name\": \"kube-system\" } },\n podSelector: { matchLabels: { \"k8s-app\": \"kube-dns\" } },\n },\n ],\n ports: [{ port: 53, protocol: \"UDP\" }],\n }\n\n private static createIngressRules(\n args: NormalizedNetworkPolicyArgs,\n ): types.input.networking.v1.NetworkPolicyIngressRule[] {\n return uniqueBy(\n args.ingressRules.map(rule => ({\n from: rule.all ? [] : NativeNetworkPolicy.createRulePeers(rule),\n ports: NativeNetworkPolicy.mapPorts(rule.ports),\n })),\n rule => JSON.stringify(rule),\n )\n }\n\n private static createEgressRules(\n args: NormalizedNetworkPolicyArgs,\n ): types.input.networking.v1.NetworkPolicyEgressRule[] {\n const extraRules: types.input.networking.v1.NetworkPolicyEgressRule[] = []\n\n const needKubeDns = args.egressRules.some(rule => rule.fqdns.length > 0)\n if (needKubeDns) {\n extraRules.push(NativeNetworkPolicy.fallbackDnsRule)\n }\n\n // the native resource does not support FQDNs\n // to provide compatibility, we need to fallback to all except private CIDRs\n const needFallback = args.egressRules.some(rule =>\n rule.fqdns.some(fqdn => !fqdn.endsWith(\".cluster.local\")),\n )\n if (needFallback) {\n extraRules.push({ to: [{ ipBlock: NativeNetworkPolicy.fallbackIpBlock }] })\n }\n\n // apply fallback rules for kube-apiserver\n if (args.allowKubeApiServer) {\n const { quirks, apiEndpoints } = args.cluster\n\n if (quirks?.fallbackKubeApiAccess) {\n extraRules.push({\n to: [{ ipBlock: { cidr: `${quirks?.fallbackKubeApiAccess.serverIp}/32` } }],\n ports: [{ port: quirks?.fallbackKubeApiAccess.serverPort, protocol: \"TCP\" }],\n })\n } else {\n const rules = apiEndpoints\n .filter(endpoint => endpoint.type !== \"hostname\")\n .map(endpoint => ({\n to: [{ ipBlock: { cidr: l3EndpointToCidr(endpoint) } }],\n ports: [{ port: endpoint.port, protocol: \"TCP\" }],\n }))\n\n extraRules.push(...rules)\n }\n }\n\n return uniqueBy(\n args.egressRules\n .map(rule => {\n return {\n to: rule.all ? [] : NativeNetworkPolicy.createRulePeers(rule),\n ports: NativeNetworkPolicy.mapPorts(rule.ports),\n } as types.input.networking.v1.NetworkPolicyEgressRule\n })\n .filter(rule => rule.to !== undefined)\n .concat(extraRules),\n rule => JSON.stringify(rule),\n )\n }\n\n private static createRulePeers(\n this: void,\n args: NormalizedRuleArgs,\n ): types.input.networking.v1.NetworkPolicyPeer[] | undefined {\n const peers = uniqueBy(\n [\n ...NativeNetworkPolicy.createCidrPeers(args),\n ...NativeNetworkPolicy.createServicePeers(args),\n ...NativeNetworkPolicy.createSelectorPeers(args),\n ],\n peer => JSON.stringify(peer),\n )\n\n return peers.length > 0 ? peers : undefined\n }\n\n private static createCidrPeers(\n args: NormalizedRuleArgs,\n ): types.input.networking.v1.NetworkPolicyPeer[] {\n return args.cidrs.map(cidr => ({ ipBlock: { cidr } }))\n }\n\n private static createServicePeers(\n args: NormalizedRuleArgs,\n ): types.input.networking.v1.NetworkPolicyPeer[] {\n return args.services.map(service => {\n const selector = mapServiceToLabelSelector(service)\n\n return {\n namespaceSelector: mapNamespaceNameToSelector(service.metadata.namespace),\n podSelector: selector,\n }\n })\n }\n\n private static createSelectorPeers(\n args: NormalizedRuleArgs,\n ): types.input.networking.v1.NetworkPolicyPeer[] {\n const selectorPeers = args.selectors.map(selector => ({\n podSelector: mapSelectorLikeToSelector(selector),\n }))\n\n const namespacePeers = args.namespaces.map(NativeNetworkPolicy.createNamespacePeer)\n\n if (namespacePeers.length === 0) {\n // if there are no namespaces, we can just return selector peers\n return selectorPeers\n }\n\n if (selectorPeers.length === 0) {\n // if there are no selectors, we can just return namespace peers\n return namespacePeers\n }\n\n // if there are both, we need to create a cartesian product\n return flat(\n selectorPeers.map(selectorPeer => {\n return namespacePeers.map(namespacePeer => merge(selectorPeer, namespacePeer))\n }),\n )\n }\n\n private static createNamespacePeer(\n this: void,\n namespace: NamespaceLike,\n ): types.input.networking.v1.NetworkPolicyPeer {\n const namespaceName = getNamespaceName(namespace)\n const namespaceSelector = mapNamespaceNameToSelector(namespaceName)\n\n return { namespaceSelector }\n }\n\n private static mapPorts(\n ports: NetworkPolicyPort[],\n ): types.input.networking.v1.NetworkPolicyPort[] {\n return ports.map(port => {\n if (\"port\" in port) {\n return {\n port: port.port,\n protocol: port.protocol ?? \"TCP\",\n }\n }\n\n return {\n port: port.range[0],\n endPort: port.range[1],\n protocol: port.protocol ?? \"TCP\",\n }\n })\n }\n}\n","import type { types } from \"@pulumi/kubernetes\"\n\nexport const podSpecDefaults: Partial<types.input.core.v1.PodSpec> = {\n automountServiceAccountToken: false,\n}\n","import type { k8s } from \"@highstate/library\"\nimport type { types } from \"@pulumi/kubernetes\"\nimport type { Except } from \"type-fest\"\nimport type { DeploymentArgs } from \"./deployment\"\nimport type { StatefulSetArgs } from \"./stateful-set\"\nimport { AccessPointRoute, type AccessPointRouteArgs } from \"@highstate/common\"\nimport { type TerminalSpec, trimIndentation, type UnitTerminal } from \"@highstate/contract\"\nimport {\n type ComponentResourceOptions,\n type DeepInput,\n fileFromString,\n type InputArray,\n normalize,\n normalizeInputs,\n} from \"@highstate/pulumi\"\nimport {\n type ComponentResource,\n type CustomResourceOptions,\n type Input,\n type Inputs,\n interpolate,\n type Output,\n output,\n type Unwrap,\n} from \"@pulumi/pulumi\"\nimport { sha256 } from \"crypto-hash\"\nimport { deepmerge } from \"deepmerge-ts\"\nimport { filter, isNonNullish, unique, uniqueBy } from \"remeda\"\nimport {\n type Container,\n getFallbackContainerName,\n getWorkloadVolumeResourceUuid,\n mapContainerToRaw,\n mapWorkloadVolume,\n type WorkloadVolume,\n} from \"./container\"\nimport { Namespace } from \"./namespace\"\nimport { NetworkPolicy, type NetworkPolicyArgs } from \"./network-policy\"\nimport { podSpecDefaults } from \"./pod\"\nimport { mapContainerPortToServicePort, Service, type ServiceArgs } from \"./service\"\nimport { commonExtraArgs, images, ScopedResource, type ScopedResourceArgs } from \"./shared\"\n\nexport type WorkloadTerminalArgs = {\n /**\n * The shell to use in the terminal.\n *\n * By default, `bash` is used.\n */\n shell?: string\n}\n\nexport type WorkloadArgs = ScopedResourceArgs & {\n /**\n * The init container to include in the workload.\n */\n initContainer?: Input<Container>\n\n /**\n * The init containers to include in the workload.\n */\n initContainers?: InputArray<Container>\n\n /**\n * The container to include in the workload.\n */\n container?: Input<Container>\n\n /**\n * The containers to include in the workload.\n */\n containers?: InputArray<Container>\n\n /**\n * The args for the terminal to use.\n */\n terminal?: Input<WorkloadTerminalArgs>\n\n /**\n * The network policy to apply to the deployment.\n */\n networkPolicy?: Omit<NetworkPolicyArgs, \"selector\" | \"cluster\" | \"namespace\">\n}\n\nexport const workloadExtraArgs = [...commonExtraArgs, \"container\", \"containers\"] as const\n\nexport type ExposableWorkloadRouteArgs = Except<\n AccessPointRouteArgs,\n \"endpoints\" | \"gatewayNativeData\" | \"tlsCertificateNativeData\"\n>\n\nexport type ExposableWorkloadArgs = WorkloadArgs & {\n service?: Input<Omit<ServiceArgs, \"cluster\" | \"namespace\">>\n\n /**\n * The configuration for the access point route to create.\n */\n route?: Input<ExposableWorkloadRouteArgs>\n\n /**\n * The configuration for the access point routes to create.\n */\n routes?: InputArray<ExposableWorkloadRouteArgs>\n\n /**\n * The existing workload to patch.\n */\n existing?: Input<k8s.ExposableWorkload>\n}\n\nexport const exposableWorkloadExtraArgs = [\n ...workloadExtraArgs,\n \"service\",\n \"route\",\n \"routes\",\n] as const\n\nexport type ExposableWorkloadType = \"Deployment\" | \"StatefulSet\"\n\nexport type GenericExposableWorkloadArgs = Omit<ExposableWorkloadArgs, \"existing\"> & {\n /**\n * The type of workload to create.\n *\n * Will be ignored if the `existing` argument is provided.\n */\n type: ExposableWorkloadType\n\n /**\n * The existing workload to patch.\n */\n existing: Input<k8s.ExposableWorkload | undefined>\n\n /**\n * The args specific to the \"Deployment\" workload type.\n *\n * Will be ignored for other workload types.\n */\n deployment?: Input<DeploymentArgs>\n\n /**\n * The args specific to the \"StatefulSet\" workload type.\n *\n * Will be ignored for other workload types.\n */\n statefulSet?: Input<StatefulSetArgs>\n}\n\nexport function getWorkloadComponents(\n name: string,\n args: WorkloadArgs,\n parent: () => ComponentResource,\n opts: ComponentResourceOptions | undefined,\n) {\n const labels = {\n \"app.kubernetes.io/name\": name,\n }\n\n const containers = output(args).apply(args => normalize(args.container, args.containers))\n const initContainers = output(args).apply(args =>\n normalize(args.initContainer, args.initContainers),\n )\n\n const rawVolumes = output({ containers, initContainers }).apply(\n ({ containers, initContainers }) => {\n const containerVolumes = [...containers, ...initContainers].flatMap(container =>\n normalize(container.volume, container.volumes),\n )\n\n const containerVolumeMounts = containers.flatMap(container => {\n return normalize(container.volumeMount, container.volumeMounts)\n .map(volumeMount => {\n return \"volume\" in volumeMount ? volumeMount.volume : undefined\n })\n .filter(Boolean) as WorkloadVolume[]\n })\n\n return output([...containerVolumes, ...containerVolumeMounts])\n },\n )\n\n const volumes = rawVolumes.apply(rawVolumes => {\n return output(rawVolumes.map(mapWorkloadVolume)).apply(uniqueBy(volume => volume.name))\n })\n\n const podSpec = output({\n cluster: output(args.namespace).cluster,\n containers,\n initContainers,\n volumes,\n }).apply(({ cluster, containers, initContainers, volumes }) => {\n const spec = {\n volumes,\n containers: containers.map((container, index) =>\n mapContainerToRaw(container, cluster, getFallbackContainerName(name, index)),\n ),\n initContainers: initContainers.map((container, index) =>\n mapContainerToRaw(container, cluster, getFallbackContainerName(`init-${name}`, index)),\n ),\n ...podSpecDefaults,\n } satisfies types.input.core.v1.PodSpec\n\n if (\n containers.some(container => container.enableTun) &&\n cluster.quirks?.tunDevicePolicy?.type !== \"plugin\"\n ) {\n spec.volumes = output(spec.volumes).apply(volumes => [\n ...(volumes ?? []),\n {\n name: \"tun-device\",\n hostPath: {\n path: \"/dev/net/tun\",\n },\n },\n ])\n }\n\n return spec\n })\n\n const dependencyHash = rawVolumes.apply(rawVolumes => {\n return output(rawVolumes.map(getWorkloadVolumeResourceUuid))\n .apply(filter(isNonNullish))\n .apply(unique())\n .apply(ids => sha256(ids.join(\",\")))\n })\n\n const podTemplate = output({ podSpec, dependencyHash }).apply(({ podSpec, dependencyHash }) => {\n return {\n metadata: {\n labels,\n annotations: {\n // to trigger a redeployment when the volumes change\n \"highstate.io/dependency-hash\": dependencyHash,\n },\n },\n spec: podSpec,\n } satisfies types.input.core.v1.PodTemplateSpec\n })\n\n const networkPolicy = output({ containers }).apply(({ containers }) => {\n const allowedEndpoints = containers.flatMap(container => container.allowedEndpoints ?? [])\n\n if (allowedEndpoints.length === 0 && !args.networkPolicy) {\n return output(undefined)\n }\n\n return output(\n new NetworkPolicy(\n name,\n {\n namespace: args.namespace,\n selector: labels,\n description: `Network policy for \"${name}\"`,\n\n ...args.networkPolicy,\n\n egressRules: output(args.networkPolicy?.egressRules).apply(egressRules => [\n ...(egressRules ?? []),\n ...(allowedEndpoints.length > 0 ? [{ toEndpoints: allowedEndpoints }] : []),\n ]),\n },\n { ...opts, parent: parent() },\n ),\n )\n })\n\n return { labels, containers, volumes, podSpec, podTemplate, networkPolicy }\n}\n\nexport function getExposableWorkloadComponents(\n name: string,\n args: ExposableWorkloadArgs,\n parent: () => ComponentResource,\n opts: ComponentResourceOptions | undefined,\n) {\n const { labels, containers, volumes, podSpec, podTemplate, networkPolicy } =\n getWorkloadComponents(name, args, parent, opts)\n\n const service = output({\n existing: args.existing,\n serviceArgs: args.service,\n containers,\n }).apply(({ existing, serviceArgs, containers }) => {\n if (!args.service && !args.route && !args.routes) {\n return undefined\n }\n\n if (existing?.service) {\n return Service.for(existing.service, output(args.namespace).cluster)\n }\n\n if (existing) {\n return undefined\n }\n\n const ports = containers.flatMap(container => normalize(container.port, container.ports))\n\n return Service.create(name, {\n ...serviceArgs,\n selector: labels,\n namespace: args.namespace,\n\n ports:\n // allow to completely override the ports\n !serviceArgs?.port && !serviceArgs?.ports\n ? ports.map(mapContainerPortToServicePort)\n : serviceArgs?.ports,\n })\n })\n\n const routes = output({\n routesArgs: normalizeInputs(args.route, args.routes),\n service,\n namespace: output(args.namespace),\n }).apply(({ routesArgs, service, namespace }) => {\n if (!routesArgs.length || !service) {\n return []\n }\n\n if (args.existing) {\n return []\n }\n\n return routesArgs.map((routeArgs, index) => {\n return new AccessPointRoute(`${name}.${index}`, {\n ...routeArgs,\n endpoints: service.endpoints,\n\n // pass the native data to the route to allow implementation to use it\n gatewayNativeData: service,\n tlsCertificateNativeData: namespace,\n })\n })\n })\n\n return { labels, containers, volumes, podSpec, podTemplate, networkPolicy, service, routes }\n}\n\nexport abstract class Workload extends ScopedResource {\n protected constructor(\n type: string,\n protected readonly name: string,\n args: Inputs,\n opts: ComponentResourceOptions | undefined,\n\n apiVersion: Output<string>,\n kind: Output<string>,\n protected readonly terminalArgs: Output<Unwrap<WorkloadTerminalArgs>>,\n protected readonly containers: Output<Container[]>,\n namespace: Output<Namespace>,\n metadata: Output<types.output.meta.v1.ObjectMeta>,\n\n /**\n * The network policy associated with the workload.\n *\n * Will be created if one or more containers have `allowedEndpoints` defined.\n */\n readonly networkPolicy: Output<NetworkPolicy | undefined>,\n ) {\n super(type, name, args, opts, apiVersion, kind, namespace, metadata)\n }\n\n protected abstract get templateMetadata(): Output<types.output.meta.v1.ObjectMeta>\n\n protected abstract getTerminalMeta(): Output<UnitTerminal[\"meta\"]>\n\n /**\n * The instance terminal to interact with the deployment.\n */\n get terminal(): Output<UnitTerminal> {\n const containerName = output(this.containers).apply(containers => {\n return containers[0]?.name ?? this.name\n })\n\n const shell = this.terminalArgs.apply(args => args.shell ?? \"bash\")\n\n const podLabelSelector = this.templateMetadata\n .apply(meta => meta.labels ?? {})\n .apply(labels =>\n Object.entries(labels)\n .map(([key, value]) => `${key}=${value}`)\n .join(\",\"),\n )\n\n return output({\n name: this.metadata.name,\n meta: this.getTerminalMeta(),\n\n spec: {\n image: images[\"terminal-kubectl\"].image,\n command: [\"bash\", \"/welcome.sh\"],\n\n files: {\n \"/kubeconfig\": fileFromString(\"kubeconfig\", this.cluster.kubeconfig, { isSecret: true }),\n\n \"/welcome.sh\": fileFromString(\n \"welcome.sh\",\n interpolate`\n #!/bin/bash\n set -euo pipefail\n\n NAMESPACE=\"${this.metadata.namespace}\"\n RESOURCE_TYPE=\"${this.kind.apply(k => k.toLowerCase())}\"\n RESOURCE_NAME=\"${this.metadata.name}\"\n CONTAINER_NAME=\"${containerName}\"\n SHELL=\"${shell}\"\n LABEL_SELECTOR=\"${podLabelSelector}\"\n\n echo \"Connecting to $RESOURCE_TYPE \\\\\"$RESOURCE_NAME\\\\\" in namespace \\\\\"$NAMESPACE\\\\\"\"\n\n # get all pods for this workload\n PODS=$(kubectl get pods -n \"$NAMESPACE\" -l \"$LABEL_SELECTOR\" -o jsonpath='{.items[*].metadata.name}' 2>/dev/null || echo \"\")\n\n if [ -z \"$PODS\" ]; then\n echo \"No pods found\"\n exit 1\n fi\n\n # convert space-separated string to array\n read -ra POD_ARRAY <<< \"$PODS\"\n\n if [ \\${#POD_ARRAY[@]} -eq 1 ]; then\n # single pod found, connect directly\n SELECTED_POD=\"\\${POD_ARRAY[0]}\"\n echo \"Found single pod: $SELECTED_POD\"\n else\n # multiple pods found, use fzf for selection\n echo \"Found \\${#POD_ARRAY[@]} pods. Please select one.\"\n \n SELECTED_POD=$(printf '%s\\n' \"\\${POD_ARRAY[@]}\" | fzf --prompt=\"Select pod: \" --height 10 --border --info=inline)\n \n if [ -z \"$SELECTED_POD\" ]; then\n echo \"No pod selected\"\n exit 1\n fi\n \n echo \"Selected pod: $SELECTED_POD\"\n fi\n\n # execute into the selected pod\n exec kubectl exec -it -n \"$NAMESPACE\" \"$SELECTED_POD\" -c \"$CONTAINER_NAME\" -- \"$SHELL\"\n `.apply(trimIndentation),\n ),\n },\n\n env: {\n KUBECONFIG: \"/kubeconfig\",\n },\n },\n })\n }\n\n /**\n * Creates a terminal with a custom command.\n *\n * @param meta The metadata for the terminal.\n * @param command The command to run in the terminal.\n * @param spec Additional spec options for the terminal.\n */\n createTerminal(\n name: string,\n meta: UnitTerminal[\"meta\"],\n command: InputArray<string>,\n spec?: { env?: DeepInput<TerminalSpec[\"env\"]>; files?: DeepInput<TerminalSpec[\"files\"]> },\n ): Output<UnitTerminal> {\n const containerName = output(this.containers).apply(containers => {\n return containers[0]?.name ?? this.name\n })\n\n return output({\n name,\n\n meta: output(this.getTerminalMeta()).apply(currentMeta => ({\n ...currentMeta,\n ...meta,\n })),\n\n spec: {\n image: images[\"terminal-kubectl\"].image,\n\n command: output(command).apply(command => [\n \"exec\",\n \"kubectl\",\n \"exec\",\n \"-it\",\n \"-n\",\n this.metadata.namespace,\n interpolate`${this.kind.apply(k => k.toLowerCase())}/${this.metadata.name}`,\n \"-c\",\n containerName,\n \"--\",\n ...command,\n ]),\n\n files: {\n \"/kubeconfig\": fileFromString(\"kubeconfig\", this.cluster.kubeconfig, { isSecret: true }),\n ...spec?.files,\n },\n\n env: {\n KUBECONFIG: \"/kubeconfig\",\n ...spec?.env,\n },\n },\n })\n }\n}\n\nexport abstract class ExposableWorkload extends Workload {\n protected constructor(\n type: string,\n name: string,\n args: Inputs,\n opts: ComponentResourceOptions | undefined,\n\n apiVersion: Output<string>,\n kind: Output<string>,\n terminalArgs: Output<Unwrap<WorkloadTerminalArgs>>,\n containers: Output<Container[]>,\n namespace: Output<Namespace>,\n metadata: Output<types.output.meta.v1.ObjectMeta>,\n networkPolicy: Output<NetworkPolicy | undefined>,\n\n protected readonly _service: Output<Service | undefined>,\n\n /**\n * The access point routes associated with the workload.\n */\n readonly routes: Output<AccessPointRoute[]>,\n ) {\n super(\n type,\n name,\n args,\n opts,\n apiVersion,\n kind,\n terminalArgs,\n containers,\n namespace,\n metadata,\n networkPolicy,\n )\n }\n\n /**\n * The service associated with the workload.\n */\n get optionalService(): Output<Service | undefined> {\n return this._service\n }\n\n /**\n * The service associated with the workload.\n *\n * Will throw an error if the service is not available.\n */\n get service(): Output<Service> {\n return this._service.apply(service => {\n if (!service) {\n throw new Error(`The service of the workload \"${this.name}\" is not available.`)\n }\n\n return service\n })\n }\n\n /**\n * The entity of the workload.\n */\n abstract get entity(): Output<k8s.ExposableWorkload>\n\n /**\n * The sped of the underlying Kubernetes workload.\n */\n abstract get spec(): Output<\n types.output.apps.v1.DeploymentSpec | types.output.apps.v1.StatefulSetSpec\n >\n\n /**\n * Creates a generic workload or patches the existing one.\n */\n static createOrPatchGeneric(\n name: string,\n args: GenericExposableWorkloadArgs,\n opts?: CustomResourceOptions,\n ): Output<ExposableWorkload> {\n return output(args).apply(async args => {\n if (args.existing?.type === \"deployment\") {\n const { Deployment } = await import(\"./deployment\")\n\n return Deployment.patch(\n name,\n {\n ...deepmerge(args, args.deployment),\n name: args.existing.metadata.name,\n namespace: Namespace.forResourceAsync(args.existing, output(args.namespace).cluster),\n },\n opts,\n )\n }\n\n if (args.existing?.type === \"stateful-set\") {\n const { StatefulSet } = await import(\"./stateful-set\")\n\n return StatefulSet.patch(\n name,\n {\n ...deepmerge(args, args.statefulSet),\n name: args.existing.metadata.name,\n namespace: Namespace.forResourceAsync(args.existing, output(args.namespace).cluster),\n },\n opts,\n )\n }\n\n if (args.type === \"Deployment\") {\n const { Deployment } = await import(\"./deployment\")\n\n return Deployment.create(name, deepmerge(args, args.deployment), opts)\n }\n\n if (args.type === \"StatefulSet\") {\n const { StatefulSet } = await import(\"./stateful-set\")\n\n return StatefulSet.create(name, deepmerge(args, args.statefulSet), opts)\n }\n\n throw new Error(`Unknown workload type: ${args.type as string}`)\n })\n }\n}\n"]}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { ExposableWorkload, getExposableWorkloadComponents, exposableWorkloadExtraArgs } from './chunk-
|
1
|
+
import { ExposableWorkload, getExposableWorkloadComponents, exposableWorkloadExtraArgs } from './chunk-IDKGFFZ7.js';
|
2
2
|
import { Namespace, mapMetadata, getProvider } from './chunk-WGMJCZSK.js';
|
3
3
|
import { getOrCreate } from '@highstate/contract';
|
4
4
|
import { output, toPromise, interpolate } from '@highstate/pulumi';
|
@@ -26,6 +26,9 @@ var StatefulSet = class _StatefulSet extends ExposableWorkload {
|
|
26
26
|
this.spec = spec;
|
27
27
|
this.status = status;
|
28
28
|
}
|
29
|
+
get templateMetadata() {
|
30
|
+
return this.spec.template.metadata;
|
31
|
+
}
|
29
32
|
/**
|
30
33
|
* The Highstate stateful set entity.
|
31
34
|
*/
|
@@ -302,5 +305,5 @@ var ExternalStatefulSet = class extends StatefulSet {
|
|
302
305
|
};
|
303
306
|
|
304
307
|
export { StatefulSet };
|
305
|
-
//# sourceMappingURL=chunk-
|
306
|
-
//# sourceMappingURL=chunk-
|
308
|
+
//# sourceMappingURL=chunk-XU6ZPTWO.js.map
|
309
|
+
//# sourceMappingURL=chunk-XU6ZPTWO.js.map
|