@highstate/k8s 0.11.7 → 0.12.1

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.
Files changed (49) hide show
  1. package/dist/{chunk-DJE2YX64.js → chunk-3CKMDTYK.js} +3 -3
  2. package/dist/{chunk-DJE2YX64.js.map → chunk-3CKMDTYK.js.map} +1 -1
  3. package/dist/{chunk-23KLAP3X.js → chunk-3ZITTM5N.js} +8 -10
  4. package/dist/chunk-3ZITTM5N.js.map +1 -0
  5. package/dist/{chunk-5CMNORLF.js → chunk-6ACIPGW4.js} +3 -3
  6. package/dist/{chunk-5CMNORLF.js.map → chunk-6ACIPGW4.js.map} +1 -1
  7. package/dist/{chunk-SY7FPT77.js → chunk-7H4L3DFC.js} +4 -4
  8. package/dist/{chunk-SY7FPT77.js.map → chunk-7H4L3DFC.js.map} +1 -1
  9. package/dist/{chunk-77AY36LR.js → chunk-C6WHUOC3.js} +4 -4
  10. package/dist/{chunk-77AY36LR.js.map → chunk-C6WHUOC3.js.map} +1 -1
  11. package/dist/{chunk-Q35R54GK.js → chunk-EACAK6W4.js} +4 -4
  12. package/dist/{chunk-Q35R54GK.js.map → chunk-EACAK6W4.js.map} +1 -1
  13. package/dist/{chunk-4NWENXPT.js → chunk-F4JMKHHE.js} +32 -21
  14. package/dist/chunk-F4JMKHHE.js.map +1 -0
  15. package/dist/{chunk-UXEHNDI7.js → chunk-MXEIFVBL.js} +8 -10
  16. package/dist/chunk-MXEIFVBL.js.map +1 -0
  17. package/dist/{chunk-UHWJ2GDK.js → chunk-SEWB4FUB.js} +4 -4
  18. package/dist/{chunk-UHWJ2GDK.js.map → chunk-SEWB4FUB.js.map} +1 -1
  19. package/dist/{chunk-LR6OTL6T.js → chunk-VJL2BFKO.js} +3 -3
  20. package/dist/{chunk-LR6OTL6T.js.map → chunk-VJL2BFKO.js.map} +1 -1
  21. package/dist/{chunk-KCPQLLNX.js → chunk-WDNOBEI6.js} +19 -17
  22. package/dist/chunk-WDNOBEI6.js.map +1 -0
  23. package/dist/deployment-NNP3UJLZ.js +8 -0
  24. package/dist/{deployment-LVMOBFVO.js.map → deployment-NNP3UJLZ.js.map} +1 -1
  25. package/dist/highstate.manifest.json +2 -2
  26. package/dist/impl/gateway-route.js +5 -5
  27. package/dist/impl/tls-certificate.js +3 -3
  28. package/dist/index.js +20 -16
  29. package/dist/index.js.map +1 -1
  30. package/dist/stateful-set-XNB255LX.js +8 -0
  31. package/dist/{stateful-set-KKQDQMES.js.map → stateful-set-XNB255LX.js.map} +1 -1
  32. package/dist/units/cert-manager/index.js +7 -7
  33. package/dist/units/dns01-issuer/index.js +1 -1
  34. package/dist/units/existing-cluster/index.js +2 -2
  35. package/dist/units/gateway-api/index.js +1 -1
  36. package/dist/units/reduced-access-cluster/index.js +8 -8
  37. package/package.json +1 -1
  38. package/src/cron-job.ts +2 -0
  39. package/src/deployment.ts +5 -7
  40. package/src/helm.ts +15 -10
  41. package/src/job.ts +2 -0
  42. package/src/stateful-set.ts +5 -7
  43. package/src/workload.ts +28 -8
  44. package/dist/chunk-23KLAP3X.js.map +0 -1
  45. package/dist/chunk-4NWENXPT.js.map +0 -1
  46. package/dist/chunk-KCPQLLNX.js.map +0 -1
  47. package/dist/chunk-UXEHNDI7.js.map +0 -1
  48. package/dist/deployment-LVMOBFVO.js +0 -8
  49. package/dist/stateful-set-KKQDQMES.js +0 -8
@@ -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-F4JMKHHE.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 | 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 isForPatch?: boolean,\n) {\n // do not set labels when patching to avoid overwriting existing labels\n const labels = isForPatch ? undefined : { \"app.kubernetes.io/name\": name }\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 // we embed a hash as annotation name (not value) to allow patching without conflicts\n [`highstate.io/dependency-hash-${dependencyHash}`]: \"1\",\n },\n },\n spec: podSpec,\n } satisfies types.input.core.v1.PodTemplateSpec\n })\n\n const networkPolicy = output({ containers }).apply(({ containers }) => {\n if (isForPatch) {\n return output(undefined)\n }\n\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 isForPatch?: boolean,\n) {\n const { labels, containers, volumes, podSpec, podTemplate, networkPolicy } =\n getWorkloadComponents(name, args, parent, opts, isForPatch)\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 rendered pod template of the workload.\n */\n readonly podTemplate: Output<types.output.core.v1.PodTemplateSpec>,\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 // biome-ignore lint/correctness/noUnusedPrivateClassMembers: for pulumi which for some reason tries to copy all properties\n private set terminal(_value: never) {}\n\n /**\n * The instance terminal to interact with the deployment.\n */\n get terminal(): Output<UnitTerminal> {\n const containerName = this.podTemplate.spec.containers.apply(containers => containers[0].name)\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 podTemplate: Output<types.output.core.v1.PodTemplateSpec>,\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 podTemplate,\n networkPolicy,\n )\n }\n\n // biome-ignore lint/correctness/noUnusedPrivateClassMembers: for pulumi which for some reason tries to copy all properties\n private set optionalService(_value: never) {}\n\n // biome-ignore lint/correctness/noUnusedPrivateClassMembers: for pulumi which for some reason tries to copy all properties\n private set service(_value: never) {}\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,5 +1,5 @@
1
- import { ExposableWorkload, getExposableWorkloadComponents, exposableWorkloadExtraArgs } from './chunk-4NWENXPT.js';
2
- import { Namespace, mapMetadata, getProvider } from './chunk-UHWJ2GDK.js';
1
+ import { ExposableWorkload, getExposableWorkloadComponents, exposableWorkloadExtraArgs } from './chunk-F4JMKHHE.js';
2
+ import { Namespace, mapMetadata, getProvider } from './chunk-SEWB4FUB.js';
3
3
  import { getOrCreate } from '@highstate/contract';
4
4
  import { output, interpolate, toPromise } from '@highstate/pulumi';
5
5
  import { apps } from '@pulumi/kubernetes';
@@ -19,6 +19,7 @@ var Deployment = class _Deployment extends ExposableWorkload {
19
19
  containers,
20
20
  namespace,
21
21
  metadata,
22
+ spec.template,
22
23
  networkPolicy,
23
24
  service,
24
25
  routes
@@ -193,18 +194,15 @@ var CreatedDeployment = class extends Deployment {
193
194
  };
194
195
  var DeploymentPatch = class extends Deployment {
195
196
  constructor(name, args, opts) {
196
- const { labels, podTemplate, networkPolicy, containers, service, routes } = getExposableWorkloadComponents(name, args, () => this, opts);
197
+ const { podTemplate, networkPolicy, containers, service, routes } = getExposableWorkloadComponents(name, args, () => this, opts, true);
197
198
  const deployment = output(args.namespace).cluster.apply((cluster) => {
198
199
  return new apps.v1.DeploymentPatch(
199
200
  name,
200
201
  {
201
202
  metadata: mapMetadata(args, name),
202
- spec: output({ args, podTemplate, labels }).apply(({ args: args2, podTemplate: podTemplate2, labels: labels2 }) => {
203
+ spec: output({ args, podTemplate }).apply(({ args: args2, podTemplate: podTemplate2 }) => {
203
204
  return deepmerge(
204
- {
205
- template: podTemplate2,
206
- selector: { matchLabels: labels2 }
207
- },
205
+ { template: podTemplate2 },
208
206
  omit(args2, exposableWorkloadExtraArgs)
209
207
  );
210
208
  })
@@ -286,5 +284,5 @@ var ExternalDeployment = class extends Deployment {
286
284
  };
287
285
 
288
286
  export { Deployment };
289
- //# sourceMappingURL=chunk-UXEHNDI7.js.map
290
- //# sourceMappingURL=chunk-UXEHNDI7.js.map
287
+ //# sourceMappingURL=chunk-MXEIFVBL.js.map
288
+ //# sourceMappingURL=chunk-MXEIFVBL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/deployment.ts"],"names":["args","podTemplate","labels"],"mappings":"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","file":"chunk-MXEIFVBL.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 spec.template,\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 { podTemplate, networkPolicy, containers, service, routes } =\n getExposableWorkloadComponents(name, args, () => this, opts, true)\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 }).apply(({ args, podTemplate }) => {\n return deepmerge(\n { template: podTemplate },\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"]}
@@ -14,12 +14,12 @@ __export(images_exports, {
14
14
  var terminal_kubectl = {
15
15
  name: "ghcr.io/highstate-io/highstate/terminal.kubectl",
16
16
  tag: "latest",
17
- image: "ghcr.io/highstate-io/highstate/terminal.kubectl:latest@sha256:2cd011119f6098d41b5bb377420f0106577d3b289ae4fc7982b4578b23c82ef4"
17
+ image: "ghcr.io/highstate-io/highstate/terminal.kubectl:latest@sha256:31cf095ec6acc0b3a5088c92483d88dc1e2e7dd7fcbf2ec8de29a0171debd8aa"
18
18
  };
19
19
  var worker_k8s_monitor = {
20
20
  name: "ghcr.io/highstate-io/highstate/worker.k8s-monitor",
21
21
  tag: "latest",
22
- image: "ghcr.io/highstate-io/highstate/worker.k8s-monitor:latest@sha256:66b985a97925d39a4c6e2b15cbeefadaadfce0cb4d6e5df8881cca85281383d5"
22
+ image: "ghcr.io/highstate-io/highstate/worker.k8s-monitor:latest@sha256:1a3743611f1ae0dce76e6eceede827271f426992aac60ab5fdf4ad5e2948e2cd"
23
23
  };
24
24
  var images_default = {
25
25
  "terminal-kubectl": terminal_kubectl,
@@ -356,5 +356,5 @@ var WrappedNamespace = class extends Namespace {
356
356
  };
357
357
 
358
358
  export { Namespace, ScopedResource, commonExtraArgs, getNamespaceName, getProvider, getProviderAsync, images_exports, mapMetadata, mapNamespaceNameToSelector, mapSelectorLikeToSelector, validateCluster };
359
- //# sourceMappingURL=chunk-UHWJ2GDK.js.map
360
- //# sourceMappingURL=chunk-UHWJ2GDK.js.map
359
+ //# sourceMappingURL=chunk-SEWB4FUB.js.map
360
+ //# sourceMappingURL=chunk-SEWB4FUB.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../assets/images.json","../src/shared.ts","../src/namespace.ts"],"names":["terminal-kubectl","worker.k8s-monitor","entity","cluster","ComponentResource","output","toPromise","core"],"mappings":"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","file":"chunk-UHWJ2GDK.js","sourcesContent":["{\n \"terminal-kubectl\": {\n \"name\": \"ghcr.io/highstate-io/highstate/terminal.kubectl\",\n \"tag\": \"latest\",\n \"image\": \"ghcr.io/highstate-io/highstate/terminal.kubectl:latest@sha256:2cd011119f6098d41b5bb377420f0106577d3b289ae4fc7982b4578b23c82ef4\"\n },\n \"worker.k8s-monitor\": {\n \"name\": \"ghcr.io/highstate-io/highstate/worker.k8s-monitor\",\n \"tag\": \"latest\",\n \"image\": \"ghcr.io/highstate-io/highstate/worker.k8s-monitor:latest@sha256:66b985a97925d39a4c6e2b15cbeefadaadfce0cb4d6e5df8881cca85281383d5\"\n }\n}\n","import type { PartialKeys } from \"@highstate/contract\"\nimport type { k8s } from \"@highstate/library\"\nimport {\n ComponentResource,\n type ComponentResourceOptions,\n type Input,\n type Inputs,\n type Output,\n output,\n secret,\n toPromise,\n type Unwrap,\n} from \"@highstate/pulumi\"\nimport { core, Provider, type types } from \"@pulumi/kubernetes\"\nimport * as images from \"../assets/images.json\"\nimport { Namespace } from \"./namespace\"\n\nconst providers = new Map<`${string}.${string}`, Provider>()\n\nexport function getProvider(cluster: k8s.Cluster): Provider {\n const name = `${cluster.name}.${cluster.connectionId}` as const\n const existing = providers.get(name)\n if (existing) {\n return existing\n }\n\n const provider = new Provider(name, { kubeconfig: secret(cluster.kubeconfig) })\n providers.set(name, provider)\n\n return provider\n}\n\nexport async function getProviderAsync(cluster: Input<k8s.Cluster>): Promise<Provider> {\n const resolvedCluster = await toPromise(cluster)\n\n return getProvider(resolvedCluster)\n}\n\nexport type NamespaceLike = core.v1.Namespace | Namespace | string\n\nexport type ScopedResourceArgs = {\n /**\n * The name of the resource.\n */\n name?: Input<string>\n\n /**\n * The namespace to create the resource in.\n */\n namespace: Input<Namespace>\n\n /**\n * The metadata to apply to the resource.\n */\n metadata?: Input<types.input.meta.v1.ObjectMeta>\n}\n\nexport const commonExtraArgs = [\"name\", \"namespace\", \"metadata\"] as const\n\nexport function mapMetadata(\n args: PartialKeys<ScopedResourceArgs, \"namespace\">,\n fallbackName?: string,\n): Output<Unwrap<types.input.meta.v1.ObjectMeta>> {\n return output(args.metadata).apply(metadata =>\n output({\n ...metadata,\n name: args.name ?? metadata?.name ?? fallbackName,\n namespace:\n metadata?.namespace ?? (args.namespace ? output(args.namespace).metadata.name : undefined),\n }),\n )\n}\n\nexport type SelectorLike = types.input.meta.v1.LabelSelector | Record<string, Input<string>>\n\nexport function mapSelectorLikeToSelector(\n selector: SelectorLike,\n): types.input.meta.v1.LabelSelector {\n if (\"matchLabels\" in selector || \"matchExpressions\" in selector) {\n return selector\n }\n\n return {\n matchLabels: selector as Record<string, Input<string>>,\n }\n}\n\nexport function getNamespaceName(namespace: NamespaceLike): Output<string> {\n if (Namespace.isInstance(namespace)) {\n return namespace.metadata.name\n }\n\n if (core.v1.Namespace.isInstance(namespace)) {\n return namespace.metadata.name\n }\n\n return output(namespace)\n}\n\nexport function mapNamespaceNameToSelector(\n namespace: Input<string>,\n): types.input.meta.v1.LabelSelector {\n return {\n matchLabels: {\n \"kubernetes.io/metadata.name\": namespace,\n },\n }\n}\n\nexport function validateCluster(\n entity: Input<k8s.Resource>,\n cluster: Input<k8s.Cluster>,\n): Input<k8s.Cluster> {\n return output({ entity, cluster }).apply(({ entity, cluster }) => {\n if (entity.clusterId !== cluster.id) {\n throw new Error(\n `Cluster mismatch for ${entity.type} \"${entity.metadata.name}\": \"${entity.clusterId}\" != \"${cluster.id}\"`,\n )\n }\n\n return cluster\n })\n}\n\nexport { images }\n\n/**\n * Base class for all Kubernetes scoped resources.\n *\n * Provides common functionality for resources that have a cluster, namespace, metadata, and entity.\n */\nexport abstract class ScopedResource extends ComponentResource {\n protected constructor(\n type: string,\n name: string,\n args: Inputs,\n opts: ComponentResourceOptions | undefined,\n\n /**\n * The Kubernetes API version (e.g., \"v1\", \"apps/v1\", \"batch/v1\").\n */\n readonly apiVersion: Output<string>,\n\n /**\n * The Kubernetes kind (e.g., \"ConfigMap\", \"Deployment\", \"CronJob\").\n */\n readonly kind: Output<string>,\n\n /**\n * The namespace where the resource is located.\n */\n readonly namespace: Output<Namespace>,\n\n /**\n * The metadata of the underlying Kubernetes resource.\n */\n readonly metadata: Output<types.output.meta.v1.ObjectMeta>,\n ) {\n super(type, name, args, opts)\n }\n\n /**\n * The cluster where the resource is located.\n */\n get cluster(): Output<k8s.Cluster> {\n return this.namespace.cluster\n }\n\n /**\n * The Highstate resource entity.\n */\n abstract get entity(): Output<k8s.ScopedResource>\n}\n","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 ComponentResource,\n type ComponentResourceOptions,\n type Input,\n type Inputs,\n type Output,\n output,\n type Unwrap,\n} from \"@pulumi/pulumi\"\nimport { getProvider, mapMetadata, type ScopedResourceArgs, validateCluster } from \"./shared\"\n\nexport type NamespaceArgs = Omit<ScopedResourceArgs, \"namespace\"> & {\n /**\n * The cluster where the namespace is located.\n */\n cluster: Input<k8s.Cluster>\n\n /**\n * Whether to apply \"pod-security.kubernetes.io/enforce=privileged\" label to the namespace.\n */\n privileged?: boolean\n}\n\nexport type CreateOrGetNamespaceArgs = NamespaceArgs & {\n /**\n * The resource to use to determine the name of the namespace.\n *\n * If not provided, the namespace will be created, otherwise it will be retrieved/patched.\n */\n resource?: Input<k8s.ScopedResource>\n\n /**\n * The namespace entity to patch/retrieve.\n */\n existing?: Input<k8s.Namespace> | undefined\n}\n\nexport abstract class Namespace extends ComponentResource {\n constructor(\n type: string,\n name: string,\n args: Inputs,\n opts: ComponentResourceOptions | undefined,\n\n /**\n * The cluster where the namespace is created.\n */\n readonly cluster: Output<k8s.Cluster>,\n\n /*\n * The metadata of the underlying Kubernetes namespace.\n */\n readonly metadata: Output<types.output.meta.v1.ObjectMeta>,\n\n /**\n * The spec of the underlying Kubernetes namespace.\n */\n readonly spec: Output<types.output.core.v1.NamespaceSpec>,\n\n /**\n * The status of the underlying Kubernetes namespace.\n */\n readonly status: Output<types.output.core.v1.NamespaceStatus>,\n ) {\n super(type, name, args, opts)\n }\n\n /**\n * The Highstate namespace entity.\n */\n get entity(): Output<k8s.Namespace> {\n return output({\n type: \"namespace\",\n clusterId: this.cluster.id,\n clusterName: this.cluster.name,\n metadata: this.metadata,\n })\n }\n\n /**\n * Creates a new namespace.\n */\n static create(name: string, args: NamespaceArgs, opts?: ComponentResourceOptions): Namespace {\n return new CreatedNamespace(name, args, opts)\n }\n\n /**\n * Wraps an existing Kubernetes namespace.\n */\n static wrap(\n name: string,\n args: WrappedNamespaceArgs,\n opts?: ComponentResourceOptions,\n ): Namespace {\n return new WrappedNamespace(name, args, opts)\n }\n\n /**\n * Creates a new namespace or gets an existing one.\n *\n * @param name The name of the resource. May not be the same as the namespace name. Will not be used when existing namespace is retrieved.\n * @param args The arguments to create or get the namespace with.\n * @param opts Optional resource options.\n */\n static async createOrGet(\n name: string,\n args: CreateOrGetNamespaceArgs,\n opts?: ComponentResourceOptions,\n ): Promise<Namespace> {\n if (args.resource) {\n return await Namespace.forResourceAsync(args.resource, args.cluster)\n }\n\n if (args.existing) {\n return await Namespace.forAsync(args.existing, args.cluster)\n }\n\n return new CreatedNamespace(name, args, opts)\n }\n\n /**\n * Creates a new namespace or patches an existing one.\n *\n * @param name The name of the resource. May not be the same as the namespace name.\n * @param args The arguments to create or patch the namespace with.\n * @param opts Optional resource options.\n */\n static createOrPatch(\n name: string,\n args: CreateOrGetNamespaceArgs,\n opts?: ComponentResourceOptions,\n ): Namespace {\n if (args.resource) {\n return new NamespacePatch(name, {\n ...args,\n name: output(args.resource).metadata.namespace,\n cluster: validateCluster(args.resource, args.cluster),\n })\n }\n\n if (args.existing) {\n return new NamespacePatch(name, {\n ...args,\n name: output(args.existing).metadata.name,\n cluster: validateCluster(args.existing, args.cluster),\n })\n }\n\n return new CreatedNamespace(name, args, opts)\n }\n\n /**\n * Patches an existing namespace.\n *\n * Will throw an error if the namespace does not exist.\n *\n * @param name The name of the resource. May not be the same as the namespace name.\n * @param args The arguments to patch the namespace with.\n * @param opts Optional resource options.\n */\n static patch(name: string, args: NamespaceArgs, opts?: ComponentResourceOptions): Namespace {\n return new NamespacePatch(name, args, opts)\n }\n\n /**\n * Gets an existing namespace.\n *\n * Will throw an error if the namespace does not exist.\n *\n * @param name The name of the resource. May not be the same as the namespace name.\n * @param args The arguments to get the namespace with.\n * @param opts Optional resource options.\n */\n static get(\n name: string,\n args: ExternalNamespaceArgs,\n opts?: ComponentResourceOptions,\n ): Namespace {\n return new ExternalNamespace(name, args, opts)\n }\n\n private static readonly namespaceCache = new Map<string, Namespace>()\n\n /**\n * Gets an existing namespace 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}.{clusterId}`.\n *\n * This method it idempotent and will return the same instance for the same entity.\n *\n * @param entity The entity to get the namespace for.\n * @param cluster The cluster where the namespace is located.\n */\n static for(entity: k8s.Namespace, cluster: Input<k8s.Cluster>): Namespace {\n return getOrCreate(\n Namespace.namespaceCache,\n `${entity.clusterName}.${entity.metadata.name}.${entity.clusterId}`,\n name => {\n return Namespace.get(name, {\n name: entity.metadata.name,\n cluster: validateCluster(entity, cluster),\n })\n },\n )\n }\n\n /**\n * Gets an existing namespace for a given entity.\n * Prefer this method over `get` when possible.\n *\n * @param entity The entity to get the namespace for.\n * @param cluster The cluster where the namespace is located.\n */\n static async forAsync(\n entity: Input<k8s.Namespace>,\n cluster: Input<k8s.Cluster>,\n ): Promise<Namespace> {\n const resolvedEntity = await toPromise(entity)\n\n return Namespace.for(resolvedEntity, cluster)\n }\n\n /**\n * Gets an existing namespace where the provided resource is located.\n * Prefer this method over `get` when possible.\n *\n * It automatically names the resource with the following format: `{clusterName}.{namespace}.{clusterId}`.\n *\n * This method it idempotent and will return the same instance for the same resource.\n *\n * @param resource The resource to get the namespace for.\n * @param cluster The cluster where the namespace is located.\n */\n static forResource(resource: k8s.ScopedResource, cluster: Input<k8s.Cluster>): Namespace {\n return getOrCreate(\n Namespace.namespaceCache,\n `${resource.clusterName}.${resource.metadata.namespace}.${resource.clusterId}`,\n name => {\n return Namespace.get(name, {\n name: resource.metadata.namespace,\n cluster: validateCluster(resource, cluster),\n })\n },\n )\n }\n\n /**\n * Gets an existing namespace for a given entity.\n * Prefer this method over `get` when possible.\n *\n * @param resource The resource to get the namespace for.\n * @param cluster The cluster where the namespace is located.\n */\n static async forResourceAsync(\n resource: Input<k8s.ScopedResource>,\n cluster: Input<k8s.Cluster>,\n ): Promise<Namespace> {\n const resolvedResource = await toPromise(resource)\n\n return Namespace.forResource(resolvedResource, cluster)\n }\n}\n\nfunction mapNamespaceMetadata(\n args: NamespaceArgs,\n fallbackName: string,\n): Output<Unwrap<types.input.meta.v1.ObjectMeta>> {\n return mapMetadata(args, fallbackName).apply(metadata => {\n if (args.privileged) {\n metadata.labels = {\n ...metadata.labels,\n \"pod-security.kubernetes.io/enforce\": \"privileged\",\n }\n }\n\n return metadata\n })\n}\n\nclass CreatedNamespace extends Namespace {\n constructor(name: string, args: NamespaceArgs, opts?: ComponentResourceOptions) {\n const namespace = output(args.cluster).apply(cluster => {\n return new core.v1.Namespace(\n name,\n { metadata: mapNamespaceMetadata(args, name) },\n { ...opts, parent: this, provider: getProvider(cluster) },\n )\n })\n\n super(\n \"highstate:k8s:Namespace\",\n name,\n args,\n opts,\n output(args.cluster),\n namespace.metadata,\n namespace.spec,\n namespace.status,\n )\n }\n}\n\nclass NamespacePatch extends Namespace {\n constructor(name: string, args: NamespaceArgs, opts?: ComponentResourceOptions) {\n const namespace = output(args.cluster).apply(cluster => {\n return new core.v1.NamespacePatch(\n name,\n { metadata: mapNamespaceMetadata(args, name) },\n { ...opts, parent: this, provider: getProvider(cluster) },\n )\n })\n\n super(\n \"highstate:k8s:NamespacePatch\",\n name,\n args,\n opts,\n output(args.cluster),\n namespace.metadata,\n namespace.spec,\n namespace.status,\n )\n }\n}\n\nexport type WrappedNamespaceArgs = {\n /**\n * The underlying Kubernetes namespace to wrap.\n */\n namespace: Input<core.v1.Namespace>\n\n /**\n * The cluster where the namespace is located.\n */\n cluster: Input<k8s.Cluster>\n}\n\nexport type ExternalNamespaceArgs = {\n /**\n * The real name of the namespace in the cluster.\n */\n name: Input<string>\n\n /**\n * The cluster where the namespace is located.\n */\n cluster: Input<k8s.Cluster>\n}\n\nclass ExternalNamespace extends Namespace {\n constructor(name: string, args: ExternalNamespaceArgs, opts?: ComponentResourceOptions) {\n const namespace = output(args.cluster).apply(cluster => {\n return core.v1.Namespace.get(name, args.name, {\n ...opts,\n parent: this,\n provider: getProvider(cluster),\n })\n })\n\n super(\n \"highstate:k8s:ExternalNamespace\",\n name,\n args,\n opts,\n output(args.cluster),\n namespace.metadata,\n namespace.spec,\n namespace.status,\n )\n }\n}\n\nclass WrappedNamespace extends Namespace {\n constructor(name: string, args: WrappedNamespaceArgs, opts?: ComponentResourceOptions) {\n super(\n \"highstate:k8s:WrappedNamespace\",\n name,\n args,\n opts,\n\n output(args.cluster),\n output(args.namespace).metadata,\n output(args.namespace).spec,\n output(args.namespace).status,\n )\n }\n}\n"]}
1
+ {"version":3,"sources":["../assets/images.json","../src/shared.ts","../src/namespace.ts"],"names":["terminal-kubectl","worker.k8s-monitor","entity","cluster","ComponentResource","output","toPromise","core"],"mappings":"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","file":"chunk-SEWB4FUB.js","sourcesContent":["{\n \"terminal-kubectl\": {\n \"name\": \"ghcr.io/highstate-io/highstate/terminal.kubectl\",\n \"tag\": \"latest\",\n \"image\": \"ghcr.io/highstate-io/highstate/terminal.kubectl:latest@sha256:31cf095ec6acc0b3a5088c92483d88dc1e2e7dd7fcbf2ec8de29a0171debd8aa\"\n },\n \"worker.k8s-monitor\": {\n \"name\": \"ghcr.io/highstate-io/highstate/worker.k8s-monitor\",\n \"tag\": \"latest\",\n \"image\": \"ghcr.io/highstate-io/highstate/worker.k8s-monitor:latest@sha256:1a3743611f1ae0dce76e6eceede827271f426992aac60ab5fdf4ad5e2948e2cd\"\n }\n}\n","import type { PartialKeys } from \"@highstate/contract\"\nimport type { k8s } from \"@highstate/library\"\nimport {\n ComponentResource,\n type ComponentResourceOptions,\n type Input,\n type Inputs,\n type Output,\n output,\n secret,\n toPromise,\n type Unwrap,\n} from \"@highstate/pulumi\"\nimport { core, Provider, type types } from \"@pulumi/kubernetes\"\nimport * as images from \"../assets/images.json\"\nimport { Namespace } from \"./namespace\"\n\nconst providers = new Map<`${string}.${string}`, Provider>()\n\nexport function getProvider(cluster: k8s.Cluster): Provider {\n const name = `${cluster.name}.${cluster.connectionId}` as const\n const existing = providers.get(name)\n if (existing) {\n return existing\n }\n\n const provider = new Provider(name, { kubeconfig: secret(cluster.kubeconfig) })\n providers.set(name, provider)\n\n return provider\n}\n\nexport async function getProviderAsync(cluster: Input<k8s.Cluster>): Promise<Provider> {\n const resolvedCluster = await toPromise(cluster)\n\n return getProvider(resolvedCluster)\n}\n\nexport type NamespaceLike = core.v1.Namespace | Namespace | string\n\nexport type ScopedResourceArgs = {\n /**\n * The name of the resource.\n */\n name?: Input<string>\n\n /**\n * The namespace to create the resource in.\n */\n namespace: Input<Namespace>\n\n /**\n * The metadata to apply to the resource.\n */\n metadata?: Input<types.input.meta.v1.ObjectMeta>\n}\n\nexport const commonExtraArgs = [\"name\", \"namespace\", \"metadata\"] as const\n\nexport function mapMetadata(\n args: PartialKeys<ScopedResourceArgs, \"namespace\">,\n fallbackName?: string,\n): Output<Unwrap<types.input.meta.v1.ObjectMeta>> {\n return output(args.metadata).apply(metadata =>\n output({\n ...metadata,\n name: args.name ?? metadata?.name ?? fallbackName,\n namespace:\n metadata?.namespace ?? (args.namespace ? output(args.namespace).metadata.name : undefined),\n }),\n )\n}\n\nexport type SelectorLike = types.input.meta.v1.LabelSelector | Record<string, Input<string>>\n\nexport function mapSelectorLikeToSelector(\n selector: SelectorLike,\n): types.input.meta.v1.LabelSelector {\n if (\"matchLabels\" in selector || \"matchExpressions\" in selector) {\n return selector\n }\n\n return {\n matchLabels: selector as Record<string, Input<string>>,\n }\n}\n\nexport function getNamespaceName(namespace: NamespaceLike): Output<string> {\n if (Namespace.isInstance(namespace)) {\n return namespace.metadata.name\n }\n\n if (core.v1.Namespace.isInstance(namespace)) {\n return namespace.metadata.name\n }\n\n return output(namespace)\n}\n\nexport function mapNamespaceNameToSelector(\n namespace: Input<string>,\n): types.input.meta.v1.LabelSelector {\n return {\n matchLabels: {\n \"kubernetes.io/metadata.name\": namespace,\n },\n }\n}\n\nexport function validateCluster(\n entity: Input<k8s.Resource>,\n cluster: Input<k8s.Cluster>,\n): Input<k8s.Cluster> {\n return output({ entity, cluster }).apply(({ entity, cluster }) => {\n if (entity.clusterId !== cluster.id) {\n throw new Error(\n `Cluster mismatch for ${entity.type} \"${entity.metadata.name}\": \"${entity.clusterId}\" != \"${cluster.id}\"`,\n )\n }\n\n return cluster\n })\n}\n\nexport { images }\n\n/**\n * Base class for all Kubernetes scoped resources.\n *\n * Provides common functionality for resources that have a cluster, namespace, metadata, and entity.\n */\nexport abstract class ScopedResource extends ComponentResource {\n protected constructor(\n type: string,\n name: string,\n args: Inputs,\n opts: ComponentResourceOptions | undefined,\n\n /**\n * The Kubernetes API version (e.g., \"v1\", \"apps/v1\", \"batch/v1\").\n */\n readonly apiVersion: Output<string>,\n\n /**\n * The Kubernetes kind (e.g., \"ConfigMap\", \"Deployment\", \"CronJob\").\n */\n readonly kind: Output<string>,\n\n /**\n * The namespace where the resource is located.\n */\n readonly namespace: Output<Namespace>,\n\n /**\n * The metadata of the underlying Kubernetes resource.\n */\n readonly metadata: Output<types.output.meta.v1.ObjectMeta>,\n ) {\n super(type, name, args, opts)\n }\n\n /**\n * The cluster where the resource is located.\n */\n get cluster(): Output<k8s.Cluster> {\n return this.namespace.cluster\n }\n\n /**\n * The Highstate resource entity.\n */\n abstract get entity(): Output<k8s.ScopedResource>\n}\n","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 ComponentResource,\n type ComponentResourceOptions,\n type Input,\n type Inputs,\n type Output,\n output,\n type Unwrap,\n} from \"@pulumi/pulumi\"\nimport { getProvider, mapMetadata, type ScopedResourceArgs, validateCluster } from \"./shared\"\n\nexport type NamespaceArgs = Omit<ScopedResourceArgs, \"namespace\"> & {\n /**\n * The cluster where the namespace is located.\n */\n cluster: Input<k8s.Cluster>\n\n /**\n * Whether to apply \"pod-security.kubernetes.io/enforce=privileged\" label to the namespace.\n */\n privileged?: boolean\n}\n\nexport type CreateOrGetNamespaceArgs = NamespaceArgs & {\n /**\n * The resource to use to determine the name of the namespace.\n *\n * If not provided, the namespace will be created, otherwise it will be retrieved/patched.\n */\n resource?: Input<k8s.ScopedResource>\n\n /**\n * The namespace entity to patch/retrieve.\n */\n existing?: Input<k8s.Namespace> | undefined\n}\n\nexport abstract class Namespace extends ComponentResource {\n constructor(\n type: string,\n name: string,\n args: Inputs,\n opts: ComponentResourceOptions | undefined,\n\n /**\n * The cluster where the namespace is created.\n */\n readonly cluster: Output<k8s.Cluster>,\n\n /*\n * The metadata of the underlying Kubernetes namespace.\n */\n readonly metadata: Output<types.output.meta.v1.ObjectMeta>,\n\n /**\n * The spec of the underlying Kubernetes namespace.\n */\n readonly spec: Output<types.output.core.v1.NamespaceSpec>,\n\n /**\n * The status of the underlying Kubernetes namespace.\n */\n readonly status: Output<types.output.core.v1.NamespaceStatus>,\n ) {\n super(type, name, args, opts)\n }\n\n /**\n * The Highstate namespace entity.\n */\n get entity(): Output<k8s.Namespace> {\n return output({\n type: \"namespace\",\n clusterId: this.cluster.id,\n clusterName: this.cluster.name,\n metadata: this.metadata,\n })\n }\n\n /**\n * Creates a new namespace.\n */\n static create(name: string, args: NamespaceArgs, opts?: ComponentResourceOptions): Namespace {\n return new CreatedNamespace(name, args, opts)\n }\n\n /**\n * Wraps an existing Kubernetes namespace.\n */\n static wrap(\n name: string,\n args: WrappedNamespaceArgs,\n opts?: ComponentResourceOptions,\n ): Namespace {\n return new WrappedNamespace(name, args, opts)\n }\n\n /**\n * Creates a new namespace or gets an existing one.\n *\n * @param name The name of the resource. May not be the same as the namespace name. Will not be used when existing namespace is retrieved.\n * @param args The arguments to create or get the namespace with.\n * @param opts Optional resource options.\n */\n static async createOrGet(\n name: string,\n args: CreateOrGetNamespaceArgs,\n opts?: ComponentResourceOptions,\n ): Promise<Namespace> {\n if (args.resource) {\n return await Namespace.forResourceAsync(args.resource, args.cluster)\n }\n\n if (args.existing) {\n return await Namespace.forAsync(args.existing, args.cluster)\n }\n\n return new CreatedNamespace(name, args, opts)\n }\n\n /**\n * Creates a new namespace or patches an existing one.\n *\n * @param name The name of the resource. May not be the same as the namespace name.\n * @param args The arguments to create or patch the namespace with.\n * @param opts Optional resource options.\n */\n static createOrPatch(\n name: string,\n args: CreateOrGetNamespaceArgs,\n opts?: ComponentResourceOptions,\n ): Namespace {\n if (args.resource) {\n return new NamespacePatch(name, {\n ...args,\n name: output(args.resource).metadata.namespace,\n cluster: validateCluster(args.resource, args.cluster),\n })\n }\n\n if (args.existing) {\n return new NamespacePatch(name, {\n ...args,\n name: output(args.existing).metadata.name,\n cluster: validateCluster(args.existing, args.cluster),\n })\n }\n\n return new CreatedNamespace(name, args, opts)\n }\n\n /**\n * Patches an existing namespace.\n *\n * Will throw an error if the namespace does not exist.\n *\n * @param name The name of the resource. May not be the same as the namespace name.\n * @param args The arguments to patch the namespace with.\n * @param opts Optional resource options.\n */\n static patch(name: string, args: NamespaceArgs, opts?: ComponentResourceOptions): Namespace {\n return new NamespacePatch(name, args, opts)\n }\n\n /**\n * Gets an existing namespace.\n *\n * Will throw an error if the namespace does not exist.\n *\n * @param name The name of the resource. May not be the same as the namespace name.\n * @param args The arguments to get the namespace with.\n * @param opts Optional resource options.\n */\n static get(\n name: string,\n args: ExternalNamespaceArgs,\n opts?: ComponentResourceOptions,\n ): Namespace {\n return new ExternalNamespace(name, args, opts)\n }\n\n private static readonly namespaceCache = new Map<string, Namespace>()\n\n /**\n * Gets an existing namespace 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}.{clusterId}`.\n *\n * This method it idempotent and will return the same instance for the same entity.\n *\n * @param entity The entity to get the namespace for.\n * @param cluster The cluster where the namespace is located.\n */\n static for(entity: k8s.Namespace, cluster: Input<k8s.Cluster>): Namespace {\n return getOrCreate(\n Namespace.namespaceCache,\n `${entity.clusterName}.${entity.metadata.name}.${entity.clusterId}`,\n name => {\n return Namespace.get(name, {\n name: entity.metadata.name,\n cluster: validateCluster(entity, cluster),\n })\n },\n )\n }\n\n /**\n * Gets an existing namespace for a given entity.\n * Prefer this method over `get` when possible.\n *\n * @param entity The entity to get the namespace for.\n * @param cluster The cluster where the namespace is located.\n */\n static async forAsync(\n entity: Input<k8s.Namespace>,\n cluster: Input<k8s.Cluster>,\n ): Promise<Namespace> {\n const resolvedEntity = await toPromise(entity)\n\n return Namespace.for(resolvedEntity, cluster)\n }\n\n /**\n * Gets an existing namespace where the provided resource is located.\n * Prefer this method over `get` when possible.\n *\n * It automatically names the resource with the following format: `{clusterName}.{namespace}.{clusterId}`.\n *\n * This method it idempotent and will return the same instance for the same resource.\n *\n * @param resource The resource to get the namespace for.\n * @param cluster The cluster where the namespace is located.\n */\n static forResource(resource: k8s.ScopedResource, cluster: Input<k8s.Cluster>): Namespace {\n return getOrCreate(\n Namespace.namespaceCache,\n `${resource.clusterName}.${resource.metadata.namespace}.${resource.clusterId}`,\n name => {\n return Namespace.get(name, {\n name: resource.metadata.namespace,\n cluster: validateCluster(resource, cluster),\n })\n },\n )\n }\n\n /**\n * Gets an existing namespace for a given entity.\n * Prefer this method over `get` when possible.\n *\n * @param resource The resource to get the namespace for.\n * @param cluster The cluster where the namespace is located.\n */\n static async forResourceAsync(\n resource: Input<k8s.ScopedResource>,\n cluster: Input<k8s.Cluster>,\n ): Promise<Namespace> {\n const resolvedResource = await toPromise(resource)\n\n return Namespace.forResource(resolvedResource, cluster)\n }\n}\n\nfunction mapNamespaceMetadata(\n args: NamespaceArgs,\n fallbackName: string,\n): Output<Unwrap<types.input.meta.v1.ObjectMeta>> {\n return mapMetadata(args, fallbackName).apply(metadata => {\n if (args.privileged) {\n metadata.labels = {\n ...metadata.labels,\n \"pod-security.kubernetes.io/enforce\": \"privileged\",\n }\n }\n\n return metadata\n })\n}\n\nclass CreatedNamespace extends Namespace {\n constructor(name: string, args: NamespaceArgs, opts?: ComponentResourceOptions) {\n const namespace = output(args.cluster).apply(cluster => {\n return new core.v1.Namespace(\n name,\n { metadata: mapNamespaceMetadata(args, name) },\n { ...opts, parent: this, provider: getProvider(cluster) },\n )\n })\n\n super(\n \"highstate:k8s:Namespace\",\n name,\n args,\n opts,\n output(args.cluster),\n namespace.metadata,\n namespace.spec,\n namespace.status,\n )\n }\n}\n\nclass NamespacePatch extends Namespace {\n constructor(name: string, args: NamespaceArgs, opts?: ComponentResourceOptions) {\n const namespace = output(args.cluster).apply(cluster => {\n return new core.v1.NamespacePatch(\n name,\n { metadata: mapNamespaceMetadata(args, name) },\n { ...opts, parent: this, provider: getProvider(cluster) },\n )\n })\n\n super(\n \"highstate:k8s:NamespacePatch\",\n name,\n args,\n opts,\n output(args.cluster),\n namespace.metadata,\n namespace.spec,\n namespace.status,\n )\n }\n}\n\nexport type WrappedNamespaceArgs = {\n /**\n * The underlying Kubernetes namespace to wrap.\n */\n namespace: Input<core.v1.Namespace>\n\n /**\n * The cluster where the namespace is located.\n */\n cluster: Input<k8s.Cluster>\n}\n\nexport type ExternalNamespaceArgs = {\n /**\n * The real name of the namespace in the cluster.\n */\n name: Input<string>\n\n /**\n * The cluster where the namespace is located.\n */\n cluster: Input<k8s.Cluster>\n}\n\nclass ExternalNamespace extends Namespace {\n constructor(name: string, args: ExternalNamespaceArgs, opts?: ComponentResourceOptions) {\n const namespace = output(args.cluster).apply(cluster => {\n return core.v1.Namespace.get(name, args.name, {\n ...opts,\n parent: this,\n provider: getProvider(cluster),\n })\n })\n\n super(\n \"highstate:k8s:ExternalNamespace\",\n name,\n args,\n opts,\n output(args.cluster),\n namespace.metadata,\n namespace.spec,\n namespace.status,\n )\n }\n}\n\nclass WrappedNamespace extends Namespace {\n constructor(name: string, args: WrappedNamespaceArgs, opts?: ComponentResourceOptions) {\n super(\n \"highstate:k8s:WrappedNamespace\",\n name,\n args,\n opts,\n\n output(args.cluster),\n output(args.namespace).metadata,\n output(args.namespace).spec,\n output(args.namespace).status,\n )\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { ScopedResource, Namespace, mapMetadata, getProvider } from './chunk-UHWJ2GDK.js';
1
+ import { ScopedResource, Namespace, mapMetadata, getProvider } from './chunk-SEWB4FUB.js';
2
2
  import { getOrCreate } from '@highstate/contract';
3
3
  import { toPromise } from '@highstate/pulumi';
4
4
  import { core } from '@pulumi/kubernetes';
@@ -247,5 +247,5 @@ var ExternalSecret = class extends Secret {
247
247
  };
248
248
 
249
249
  export { Secret };
250
- //# sourceMappingURL=chunk-LR6OTL6T.js.map
251
- //# sourceMappingURL=chunk-LR6OTL6T.js.map
250
+ //# sourceMappingURL=chunk-VJL2BFKO.js.map
251
+ //# sourceMappingURL=chunk-VJL2BFKO.js.map