@highstate/k8s 0.15.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/dist/chunk-22GOWZQP.js +286 -0
  2. package/dist/chunk-22GOWZQP.js.map +1 -0
  3. package/dist/{chunk-VJL2BFKO.js → chunk-4G6LLC2X.js} +13 -24
  4. package/dist/chunk-4G6LLC2X.js.map +1 -0
  5. package/dist/{chunk-C6WHUOC3.js → chunk-BR2CLUUD.js} +15 -26
  6. package/dist/chunk-BR2CLUUD.js.map +1 -0
  7. package/dist/{chunk-EACAK6W4.js → chunk-DCUMJSO6.js} +17 -28
  8. package/dist/chunk-DCUMJSO6.js.map +1 -0
  9. package/dist/{chunk-NWXKLVBC.js → chunk-HJKJHTJM.js} +20 -30
  10. package/dist/chunk-HJKJHTJM.js.map +1 -0
  11. package/dist/{chunk-7H4L3DFC.js → chunk-KMLRI5UZ.js} +57 -70
  12. package/dist/chunk-KMLRI5UZ.js.map +1 -0
  13. package/dist/{chunk-6ACIPGW4.js → chunk-LGHFSXNT.js} +12 -13
  14. package/dist/chunk-LGHFSXNT.js.map +1 -0
  15. package/dist/{chunk-SEWB4FUB.js → chunk-OBDQONMV.js} +64 -23
  16. package/dist/chunk-OBDQONMV.js.map +1 -0
  17. package/dist/chunk-SL5CBM3A.js +301 -0
  18. package/dist/chunk-SL5CBM3A.js.map +1 -0
  19. package/dist/{chunk-3CKMDTYK.js → chunk-TWBMG6TD.js} +68 -91
  20. package/dist/chunk-TWBMG6TD.js.map +1 -0
  21. package/dist/{chunk-YTRQ6JRU.js → chunk-XRIC6EJ3.js} +159 -94
  22. package/dist/chunk-XRIC6EJ3.js.map +1 -0
  23. package/dist/{chunk-O64YZLA4.js → chunk-ZBFWQHE4.js} +21 -30
  24. package/dist/chunk-ZBFWQHE4.js.map +1 -0
  25. package/dist/{chunk-4VGISFL4.js → chunk-ZHVKK2U6.js} +12 -11
  26. package/dist/chunk-ZHVKK2U6.js.map +1 -0
  27. package/dist/cron-job-LX35I6HG.js +8 -0
  28. package/dist/cron-job-LX35I6HG.js.map +1 -0
  29. package/dist/deployment-HRJGAEJR.js +8 -0
  30. package/dist/{deployment-THUD5QUH.js.map → deployment-HRJGAEJR.js.map} +1 -1
  31. package/dist/highstate.manifest.json +2 -3
  32. package/dist/impl/gateway-route.js +10 -10
  33. package/dist/impl/gateway-route.js.map +1 -1
  34. package/dist/impl/tls-certificate.js +3 -3
  35. package/dist/index.js +39 -627
  36. package/dist/index.js.map +1 -1
  37. package/dist/job-J4BKBVQD.js +8 -0
  38. package/dist/job-J4BKBVQD.js.map +1 -0
  39. package/dist/stateful-set-LAJR5RL4.js +8 -0
  40. package/dist/{stateful-set-ABCZML4L.js.map → stateful-set-LAJR5RL4.js.map} +1 -1
  41. package/dist/units/cert-manager/index.js +7 -7
  42. package/dist/units/cluster-patch/index.js +9 -18
  43. package/dist/units/cluster-patch/index.js.map +1 -1
  44. package/dist/units/dns01-issuer/index.js +6 -6
  45. package/dist/units/dns01-issuer/index.js.map +1 -1
  46. package/dist/units/existing-cluster/index.js +19 -9
  47. package/dist/units/existing-cluster/index.js.map +1 -1
  48. package/dist/units/gateway-api/index.js +2 -2
  49. package/dist/units/gateway-api/index.js.map +1 -1
  50. package/dist/units/reduced-access-cluster/index.js +18 -25
  51. package/dist/units/reduced-access-cluster/index.js.map +1 -1
  52. package/package.json +6 -11
  53. package/src/cluster.ts +14 -14
  54. package/src/config-map.ts +16 -30
  55. package/src/container.ts +1 -1
  56. package/src/cron-job.ts +23 -41
  57. package/src/deployment.ts +23 -30
  58. package/src/gateway/gateway.ts +21 -29
  59. package/src/helm.ts +7 -8
  60. package/src/impl/gateway-route.ts +5 -13
  61. package/src/job.ts +20 -38
  62. package/src/namespace.ts +18 -22
  63. package/src/network-policy.ts +37 -36
  64. package/src/network.ts +18 -10
  65. package/src/pvc.ts +12 -28
  66. package/src/rbac.ts +75 -97
  67. package/src/scripting/bundle.ts +3 -3
  68. package/src/scripting/environment.ts +3 -3
  69. package/src/secret.ts +16 -30
  70. package/src/service.ts +86 -105
  71. package/src/shared.ts +82 -20
  72. package/src/stateful-set.ts +17 -28
  73. package/src/tls.ts +20 -31
  74. package/src/units/cluster-patch/index.ts +9 -19
  75. package/src/units/dns01-issuer/index.ts +6 -6
  76. package/src/units/existing-cluster/index.ts +28 -10
  77. package/src/units/gateway-api/index.ts +1 -1
  78. package/src/units/reduced-access-cluster/index.ts +16 -24
  79. package/src/worker.ts +7 -5
  80. package/src/workload.ts +172 -28
  81. package/dist/chunk-3CKMDTYK.js.map +0 -1
  82. package/dist/chunk-4VGISFL4.js.map +0 -1
  83. package/dist/chunk-6ACIPGW4.js.map +0 -1
  84. package/dist/chunk-7H4L3DFC.js.map +0 -1
  85. package/dist/chunk-C6WHUOC3.js.map +0 -1
  86. package/dist/chunk-EACAK6W4.js.map +0 -1
  87. package/dist/chunk-NWXKLVBC.js.map +0 -1
  88. package/dist/chunk-O64YZLA4.js.map +0 -1
  89. package/dist/chunk-SEWB4FUB.js.map +0 -1
  90. package/dist/chunk-VJL2BFKO.js.map +0 -1
  91. package/dist/chunk-YTRQ6JRU.js.map +0 -1
  92. package/dist/deployment-THUD5QUH.js +0 -8
  93. package/dist/stateful-set-ABCZML4L.js +0 -8
  94. package/dist/units/cluster-dns/index.js +0 -37
  95. package/dist/units/cluster-dns/index.js.map +0 -1
  96. package/src/units/cluster-dns/index.ts +0 -37
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/helm.ts"],"names":["namespace","args","name","services"],"mappings":"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","file":"chunk-4VGISFL4.js","sourcesContent":["import type { UnitTerminal } from \"@highstate/contract\"\nimport type { Namespace } from \"./namespace\"\nimport type { Workload, WorkloadTerminalArgs } from \"./workload\"\nimport { mkdir, readFile, unlink } from \"node:fs/promises\"\nimport { resolve } from \"node:path\"\nimport { AccessPointRoute, type AccessPointRouteArgs } from \"@highstate/common\"\nimport {\n type InputArray,\n type InputRecord,\n normalize,\n normalizeInputs,\n toPromise,\n} from \"@highstate/pulumi\"\nimport { local } from \"@pulumi/command\"\nimport { apps, core, helm, type types } from \"@pulumi/kubernetes\"\nimport {\n ComponentResource,\n type ComponentResourceOptions,\n type Input,\n type Output,\n output,\n} from \"@pulumi/pulumi\"\nimport { sha256 } from \"crypto-hash\"\nimport { glob } from \"glob\"\nimport spawn from \"nano-spawn\"\nimport { isNonNullish, omit } from \"remeda\"\nimport { Deployment } from \"./deployment\"\nimport { NetworkPolicy, type NetworkPolicyArgs } from \"./network-policy\"\nimport { getServiceType, Service, type ServiceArgs } from \"./service\"\nimport { getNamespaceName, getProvider, type NamespaceLike } from \"./shared\"\nimport { StatefulSet } from \"./stateful-set\"\n\nexport type ChartArgs = Omit<\n helm.v4.ChartArgs,\n \"chart\" | \"version\" | \"repositoryOpts\" | \"namespace\"\n> & {\n /**\n * The namespace to deploy the chart into.\n */\n namespace: Input<Namespace>\n\n /**\n * The custom name of the primary service exposed by the chart.\n *\n * By default, it is the same as the chart name.\n */\n serviceName?: string\n\n /**\n * The extra args to pass to the main service of the chart.\n *\n * Will be patched via transformations.\n */\n service?: Partial<ServiceArgs>\n\n /**\n * The manifest of the chart to resolve.\n */\n chart: ChartManifest\n\n /**\n * The args for the terminal to use.\n *\n * Will be applied to all workloads created by the chart.\n */\n terminal?: Input<WorkloadTerminalArgs>\n\n /**\n * The configuration for the access point route to create.\n */\n route?: Input<Omit<AccessPointRouteArgs, \"endpoints\" | \"customData\">>\n\n /**\n * The configuration for the access point routes to create.\n */\n routes?: InputArray<Omit<AccessPointRouteArgs, \"endpoints\" | \"customData\">>\n\n /**\n * The network policy to apply to the chart.\n */\n networkPolicy?: Input<Omit<NetworkPolicyArgs, \"selector\" | \"cluster\" | \"namespace\">>\n\n /**\n * The network policies to apply to the chart.\n */\n networkPolicies?: Input<NetworkPolicyArgs[]>\n}\n\nexport class Chart extends ComponentResource {\n /**\n * The underlying Helm chart.\n */\n public readonly chart: Output<helm.v4.Chart>\n\n /**\n * The access point routes created for the chart.\n */\n public readonly routes: Output<AccessPointRoute[]>\n\n /**\n * The network policies applied to the chart.\n */\n public readonly networkPolicies: Output<NetworkPolicy[]>\n\n /**\n * All workloads created by the chart.\n */\n public readonly workloads: Output<Workload[]>\n\n constructor(\n private readonly name: string,\n private readonly args: ChartArgs,\n private readonly opts?: ComponentResourceOptions,\n ) {\n super(\"highstate:k8s:Chart\", name, args, opts)\n\n const namespace = output(args.namespace).apply(namespace =>\n output(namespace ? getNamespaceName(namespace) : \"default\"),\n )\n\n this.chart = output(args.namespace).cluster.apply(cluster => {\n return new helm.v4.Chart(\n name,\n omit(\n {\n ...args,\n chart: resolveHelmChart(args.chart),\n namespace,\n },\n [\"route\", \"routes\"],\n ),\n {\n ...opts,\n parent: this,\n provider: getProvider(cluster),\n\n transforms: [\n ...(opts?.transforms ?? []),\n\n async resourceArgs => {\n const namespace = await toPromise(output(args.namespace).metadata.name)\n\n const serviceName = args.serviceName ?? name\n const expectedName = `${name}:${namespace}/${serviceName}`\n\n if (\n resourceArgs.type === \"kubernetes:core/v1:Service\" &&\n resourceArgs.name === expectedName\n ) {\n const spec = resourceArgs.props.spec as types.input.core.v1.ServiceSpec\n\n return {\n props: {\n ...resourceArgs.props,\n spec: {\n ...spec,\n ...(args.service ?? {}),\n\n type: getServiceType(args.service, cluster),\n\n externalIPs:\n args.service?.externalIPs ?? cluster.externalIps ?? spec.externalIPs,\n },\n },\n opts: resourceArgs.opts,\n }\n }\n\n return undefined\n },\n ],\n },\n )\n })\n\n this.routes = output(normalizeInputs(args.route, args.routes)).apply(async routes => {\n if (routes.length === 0) {\n return []\n }\n\n return await Promise.all(\n routes.map(async route => {\n return new AccessPointRoute(\n name,\n {\n ...route,\n\n endpoints: this.service.endpoints,\n\n // pass the native data to the route to allow implementation to use it\n gatewayNativeData: await toPromise(this.service),\n tlsCertificateNativeData: await toPromise(args.namespace),\n },\n { ...opts, parent: this },\n )\n }),\n )\n })\n\n this.networkPolicies = output(args).apply(args => {\n const policies = normalize(args.networkPolicy, args.networkPolicies)\n\n return output(\n policies.map(policy => {\n return new NetworkPolicy(\n name,\n {\n ...policy,\n namespace: args.namespace,\n description: `Network policy for Helm chart \"${name}\"`,\n },\n { ...opts, parent: this },\n )\n }),\n )\n })\n\n this.workloads = output(this.chart).apply(chart => {\n return output(\n chart.resources.apply(resources => {\n return resources\n .map(resource => {\n if (apps.v1.Deployment.isInstance(resource)) {\n return resource.metadata.name.apply(name => {\n return Deployment.wrap(\n name,\n { namespace: args.namespace, deployment: resource, terminal: args.terminal },\n this.opts,\n )\n })\n }\n\n if (apps.v1.StatefulSet.isInstance(resource)) {\n return resource.metadata.name.apply(name => {\n return StatefulSet.wrap(\n name,\n {\n namespace: args.namespace,\n statefulSet: resource,\n service: this.getServiceOutput(name),\n terminal: args.terminal,\n },\n this.opts,\n )\n })\n }\n\n return undefined\n })\n .filter(isNonNullish)\n }),\n )\n })\n }\n\n private set service(_value: never) {}\n\n // biome-ignore lint/correctness/noUnusedPrivateClassMembers: for pulumi which for some reason tries to copy all properties\n private set terminals(_value: never) {}\n\n get service(): Output<Service> {\n return this.getServiceOutput(undefined)\n }\n\n get terminals(): Output<UnitTerminal[]> {\n return this.workloads.apply(workloads => output(workloads.map(workload => workload.terminal)))\n }\n\n private readonly services = new Map<string, Service>()\n\n getServiceOutput(name: string | undefined): Output<Service> {\n return output({ args: this.args, chart: this.chart }).apply(({ args, chart }) => {\n const resolvedName = name ?? args.serviceName ?? this.name\n const existingService = this.services.get(resolvedName)\n\n if (existingService) {\n return existingService\n }\n\n const service = getChartServiceOutput(chart, resolvedName)\n\n const wrappedService = Service.wrap(\n resolvedName,\n { namespace: args.namespace, service },\n { ...this.opts, parent: this },\n )\n\n this.services.set(resolvedName, wrappedService)\n return wrappedService\n })\n }\n\n getService(name?: string): Promise<Service> {\n return toPromise(this.getServiceOutput(name))\n }\n}\n\nexport type RenderedChartArgs = {\n /**\n * The namespace to deploy the chart into.\n */\n namespace?: Input<NamespaceLike>\n\n /**\n * The manifest of the chart to resolve.\n */\n chart: ChartManifest\n\n /**\n * The values to pass to the chart.\n */\n values?: InputRecord<string>\n}\n\nexport class RenderedChart extends ComponentResource {\n /**\n * The rendered manifest of the Helm chart.\n */\n public readonly manifest: Output<string>\n\n /**\n * The underlying command used to render the chart.\n */\n public readonly command: Output<local.Command>\n\n constructor(name: string, args: RenderedChartArgs, opts?: ComponentResourceOptions) {\n super(\"highstate:k8s:RenderedChart\", name, args, opts)\n\n this.command = output(args).apply(args => {\n const values = args.values\n ? Object.entries(args.values).flatMap(([key, value]) => [\"--set\", `${key}=\"${value}\"`])\n : []\n\n return new local.Command(\n name,\n {\n create: output([\n \"helm\",\n \"template\",\n resolveHelmChart(args.chart),\n\n ...(args.namespace ? [\"--namespace\", getNamespaceName(args.namespace)] : []),\n\n ...values,\n ]).apply(command => command.join(\" \")),\n\n logging: \"stderr\",\n },\n { parent: this, ...opts },\n )\n })\n\n this.manifest = this.command.stdout\n\n this.registerOutputs({ manifest: this.manifest, command: this.command })\n }\n}\n\nexport type ChartManifest = {\n repo: string\n name: string\n version: string\n sha256: string\n}\n\n/**\n * Downloads or reuses the Helm chart according to the charts.json file.\n * Returns the full path to the chart's .tgz file.\n *\n * @param manifest The manifest of the Helm chart.\n */\nexport async function resolveHelmChart(manifest: ChartManifest): Promise<string> {\n if (!process.env.HIGHSTATE_CACHE_DIR) {\n throw new Error(\"Environment variable HIGHSTATE_CACHE_DIR is not set\")\n }\n\n const chartsDir = resolve(process.env.HIGHSTATE_CACHE_DIR, \"charts\")\n await mkdir(chartsDir, { recursive: true })\n\n const globPattern = `${manifest.name}-*.tgz`\n const targetFileName = `${manifest.name}-${manifest.version}.tgz`\n\n // find all matching files\n const files = await glob(globPattern, { cwd: chartsDir })\n\n if (files.includes(targetFileName)) {\n return resolve(chartsDir, targetFileName)\n }\n\n // delete old versions\n for (const file of files) {\n await unlink(resolve(chartsDir, file))\n }\n\n // download the chart\n const isOci = manifest.repo.startsWith(\"oci://\")\n const chartRef = isOci ? `${manifest.repo.replace(/\\/$/, \"\")}/${manifest.name}` : manifest.name\n\n const pullArgs = [\"pull\", chartRef, \"--version\", manifest.version, \"--destination\", chartsDir]\n\n if (!isOci) {\n pullArgs.push(\"--repo\", manifest.repo)\n }\n\n await spawn(\"helm\", pullArgs)\n\n // check the SHA256\n const content = await readFile(resolve(chartsDir, targetFileName))\n const actualSha256 = await sha256(content)\n\n if (actualSha256 !== manifest.sha256) {\n throw new Error(`SHA256 mismatch for chart '${manifest.name}'`)\n }\n\n return resolve(chartsDir, targetFileName)\n}\n\n/**\n * Extracts the service with the given name from the chart resources.\n * Throws an error if the service is not found.\n *\n * @param chart The Helm chart.\n * @param name The name of the service.\n */\nexport function getChartServiceOutput(chart: helm.v4.Chart, name: string): Output<core.v1.Service> {\n const services = chart.resources.apply(resources => {\n return resources\n .filter(r => core.v1.Service.isInstance(r))\n .map(service => ({ name: service.metadata.name, service }))\n })\n\n return output(services).apply(services => {\n const service = services.find(s => s.name === name)?.service\n\n if (!service) {\n throw new Error(`Service with name '${name}' not found in the chart resources`)\n }\n\n return service\n })\n}\n\n/**\n * Extracts the service with the given name from the chart resources.\n * Throws an error if the service is not found.\n *\n * @param chart The Helm chart.\n * @param name The name of the service.\n */\nexport function getChartService(chart: helm.v4.Chart, name: string): Promise<core.v1.Service> {\n return toPromise(getChartServiceOutput(chart, name))\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cluster.ts"],"names":[],"mappings":";;;;;AAMA,SAAS,YAAY,EAAA,EAAY;AAC/B,EAAA,MAAM,cAAA,GAAiB,0BAAA;AACvB,EAAA,OAAO,cAAA,CAAe,KAAK,EAAE,CAAA;AAC/B;AAEA,eAAsB,iBAAA,CACpB,YACA,iBAAA,EACmB;AACnB,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,aAAA,CAAc,SAAS,CAAA;AAClD,EAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,QAAA,EAAS;AAErC,EAAA,OAAO,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,CAAA,IAAA,KAAQ;AACjC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,EAAQ,SAAA,IAAa,EAAC;AAC7C,IAAA,MAAM,aAAa,SAAA,CAAU,IAAA,CAAK,CAAA,OAAA,KAAW,OAAA,CAAQ,SAAS,YAAY,CAAA;AAC1E,IAAA,MAAM,aAAa,SAAA,CAAU,IAAA,CAAK,CAAA,OAAA,KAAW,OAAA,CAAQ,SAAS,YAAY,CAAA;AAE1E,IAAA,MAAM,SAAmB,EAAC;AAE1B,IAAA,IAAI,YAAY,OAAA,EAAS;AACvB,MAAA,MAAA,CAAO,IAAA,CAAK,WAAW,OAAO,CAAA;AAAA,IAChC;AAEA,IAAA,IAAI,UAAA,EAAY,OAAA,IAAW,iBAAA,KAAsB,QAAA,EAAU;AACzD,MAAA,MAAA,CAAO,IAAA,CAAK,WAAW,OAAO,CAAA;AAAA,IAChC;AAEA,IAAA,IAAI,UAAA,EAAY,WAAW,iBAAA,KAAsB,QAAA,IAAY,CAAC,WAAA,CAAY,UAAA,CAAW,OAAO,CAAA,EAAG;AAC7F,MAAA,MAAA,CAAO,IAAA,CAAK,WAAW,OAAO,CAAA;AAAA,IAChC;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAC,CAAA;AACH;AAEO,SAAS,kBAAkB,UAAA,EAAiD;AACjF,EAAA,OAAO,MAAA,CAAO;AAAA,IACZ,IAAA,EAAM,YAAA;AAAA,IAEN,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO,oBAAA;AAAA,MACP,WAAA,EAAa,2CAAA;AAAA,MACb,IAAA,EAAM;AAAA,KACR;AAAA,IAEA,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO,cAAA,CAAO,kBAAkB,CAAA,CAAE,KAAA;AAAA,MAClC,OAAA,EAAS,CAAC,MAAA,EAAQ,aAAa,CAAA;AAAA,MAE/B,KAAA,EAAO;AAAA,QACL,eAAe,cAAA,CAAe,YAAA,EAAc,YAAY,EAAE,QAAA,EAAU,MAAM,CAAA;AAAA,QAE1E,aAAA,EAAe,cAAA;AAAA,UACb,YAAA;AAAA,UACA,IAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA,UAAA;AAAA;AASF,OACF;AAAA,MAEA,GAAA,EAAK;AAAA,QACH,UAAA,EAAY;AAAA;AACd;AACF,GACD,CAAA;AACH","file":"chunk-6ACIPGW4.js","sourcesContent":["import type { k8s } from \"@highstate/library\"\nimport { text, type UnitTerminal } from \"@highstate/contract\"\nimport { fileFromString, type Input, type Output, output } from \"@highstate/pulumi\"\nimport { CoreV1Api, type KubeConfig } from \"@kubernetes/client-node\"\nimport { images } from \"./shared\"\n\nfunction isPrivateIp(ip: string) {\n const privateIpRegex = /^(10|172\\.16|192\\.168)\\./\n return privateIpRegex.test(ip)\n}\n\nexport async function detectExternalIps(\n kubeConfig: KubeConfig,\n internalIpsPolicy: k8s.InternalIpsPolicy,\n): Promise<string[]> {\n const nodeApi = kubeConfig.makeApiClient(CoreV1Api)\n const nodes = await nodeApi.listNode()\n\n return nodes.items.flatMap(node => {\n const addresses = node.status?.addresses ?? []\n const externalIp = addresses.find(address => address.type === \"ExternalIP\")\n const internalIp = addresses.find(address => address.type === \"InternalIP\")\n\n const result: string[] = []\n\n if (externalIp?.address) {\n result.push(externalIp.address)\n }\n\n if (internalIp?.address && internalIpsPolicy === \"always\") {\n result.push(internalIp.address)\n }\n\n if (internalIp?.address && internalIpsPolicy === \"public\" && !isPrivateIp(internalIp.address)) {\n result.push(internalIp.address)\n }\n\n return result\n })\n}\n\nexport function createK8sTerminal(kubeconfig: Input<string>): Output<UnitTerminal> {\n return output({\n name: \"management\",\n\n meta: {\n title: \"Cluster Management\",\n description: \"Manage the cluster using kubectl and helm\",\n icon: \"devicon:kubernetes\",\n },\n\n spec: {\n image: images[\"terminal-kubectl\"].image,\n command: [\"bash\", \"/welcome.sh\"],\n\n files: {\n \"/kubeconfig\": fileFromString(\"kubeconfig\", kubeconfig, { isSecret: true }),\n\n \"/welcome.sh\": fileFromString(\n \"welcome.sh\",\n text`\n echo \"Connecting to the cluster...\"\n kubectl cluster-info\n\n echo \"Use 'kubectl' and 'helm' to manage the cluster.\"\n echo\n\n exec bash\n `,\n ),\n },\n\n env: {\n KUBECONFIG: \"/kubeconfig\",\n },\n },\n })\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/rbac.ts"],"names":["serviceAccount","kubeconfig"],"mappings":"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","file":"chunk-7H4L3DFC.js","sourcesContent":["import type { k8s } from \"@highstate/library\"\nimport type { Namespace } from \"./namespace\"\nimport {\n ComponentResource,\n type ComponentResourceOptions,\n type Input,\n type InputArray,\n interpolate,\n normalizeInputs,\n type Output,\n output,\n toPromise,\n} from \"@highstate/pulumi\"\nimport { KubeConfig } from \"@kubernetes/client-node\"\nimport { core, rbac, type types } from \"@pulumi/kubernetes\"\nimport { map, unique } from \"remeda\"\nimport { stringify } from \"yaml\"\nimport { Secret } from \"./secret\"\nimport { getNamespaceName, getProvider, type NamespaceLike, type ScopedResource } from \"./shared\"\n\nexport type ClusterAccessScopeArgs = {\n /**\n * The namespace to locate the ServiceAccount in.\n */\n namespace: Input<Namespace>\n\n /**\n * The RBAC rule to apply to the `ServiceAccount`.\n *\n * It will be used to create ClusterRole.\n */\n rule?: Input<types.input.rbac.v1.PolicyRule>\n\n /**\n * The RBAC rules to apply to the `ServiceAccount`.\n *\n * It will be used to create `ClusterRole`.\n */\n rules?: InputArray<types.input.rbac.v1.PolicyRule>\n\n /**\n * Whether to allow the `ServiceAccount` to access resources in the namespace where it is created.\n *\n * By default, it is set to `true`.\n */\n allowOriginNamespace?: boolean\n\n /**\n * The extra namespaces to bind to the `ClusterRole` and allow `ServiceAccount` to access them\n * with specified `rules`.\n */\n extraNamespaces?: InputArray<NamespaceLike>\n\n /**\n * Whether to create `ClusterRoleBinding` to bind the `ServiceAccount` to the `ClusterRole`.\n *\n * This will allow the `ServiceAccount` to access all namespaces and cluster resources.\n */\n clusterWide?: boolean\n}\n\nexport type ClusterAccessScopeForResourcesArgs = {\n /**\n * The namespace to locate the `ServiceAccount` in.\n */\n namespace: Input<Namespace>\n\n /**\n * The verbs to allow on the resources.\n */\n verbs: string[]\n\n /**\n * The resources to allow verbs on.\n */\n resources: InputArray<ScopedResource>\n\n /**\n * Whether to allow access on the whole collection rather than specific resources.\n *\n * The provided resources in this case will be used to determine the types and api groups only.\n */\n collectionAccess?: boolean\n}\n\nexport class ClusterAccessScope extends ComponentResource {\n /**\n * The cluster entity with the reduced access.\n */\n readonly cluster: Output<k8s.Cluster>\n\n constructor(name: string, args: ClusterAccessScopeArgs, opts?: ComponentResourceOptions) {\n super(\"highstate:k8s:ClusterAccessScope\", name, args, opts)\n\n const { serviceAccount, kubeconfig } = output(args.namespace).cluster.apply(cluster => {\n const provider = getProvider(cluster)\n const namespaceName = output(args.namespace).metadata.name\n\n const serviceAccount = new core.v1.ServiceAccount(\n name,\n {\n metadata: {\n name,\n namespace: namespaceName,\n },\n },\n { provider },\n )\n\n const clusterRole = new rbac.v1.ClusterRole(\n name,\n {\n metadata: {\n name: interpolate`highstate.${namespaceName}.${name}`,\n annotations: {\n \"kubernetes.io/description\": interpolate`Created by Highstate for the ServiceAccount \"${name}\" in the namespace \"${namespaceName}\".`,\n },\n },\n rules: normalizeInputs(args.rule, args.rules),\n },\n { provider },\n )\n\n const createRoleBinding = (namespace: Input<string>) => {\n return new rbac.v1.RoleBinding(\n name,\n {\n metadata: { name, namespace },\n roleRef: {\n kind: \"ClusterRole\",\n name: clusterRole.metadata.name,\n apiGroup: \"rbac.authorization.k8s.io\",\n },\n subjects: [\n {\n kind: \"ServiceAccount\",\n name: serviceAccount.metadata.name,\n namespace: namespaceName,\n },\n ],\n },\n { provider },\n )\n }\n\n if (args.allowOriginNamespace ?? true) {\n createRoleBinding(namespaceName)\n }\n\n output(args.extraNamespaces ?? [])\n .apply(map(getNamespaceName))\n .apply(map(createRoleBinding))\n\n return { serviceAccount, kubeconfig: cluster.kubeconfig }\n })\n\n const accessTokenSecret = Secret.create(`${name}-token`, {\n namespace: args.namespace,\n type: \"kubernetes.io/service-account-token\",\n metadata: {\n annotations: {\n \"kubernetes.io/service-account.name\": serviceAccount.metadata.name,\n },\n },\n })\n\n this.cluster = output({\n cluster: output(args.namespace).cluster,\n kubeconfig,\n newToken: accessTokenSecret.getValue(\"token\"),\n serviceAccount: serviceAccount.metadata.name,\n }).apply(({ cluster, kubeconfig, newToken, serviceAccount }) => {\n const config = new KubeConfig()\n config.loadFromString(kubeconfig)\n\n // clear all existing contexts and users\n config.users = []\n config.contexts = []\n\n config.addUser({ name: serviceAccount, token: newToken })\n\n config.addContext({\n name: config.clusters[0].name,\n cluster: config.clusters[0].name,\n user: serviceAccount,\n })\n\n config.setCurrentContext(config.clusters[0].name)\n\n return {\n ...cluster,\n kubeconfig: stringify(JSON.parse(config.exportConfig())),\n }\n })\n }\n\n /**\n * Creates `ClusterAccessScope` for the given resources with the specified verbs.\n *\n * All resources must belong to the same namespace in the same cluster.\n *\n * @param name The name of the resource and the ServiceAccount.\n * @param resources The resources to create access scope for.\n * @param verbs The verbs to allow on the resources.\n */\n static async forResources(\n name: string,\n args: ClusterAccessScopeForResourcesArgs,\n opts?: ComponentResourceOptions,\n ): Promise<ClusterAccessScope> {\n const resolved = await toPromise(\n output(args.resources).apply(resources =>\n resources.map(r => ({\n namespaceId: r.namespace.metadata.uid,\n namespace: r.namespace,\n metadata: r.metadata,\n apiVersion: r.apiVersion,\n kind: r.kind,\n })),\n ),\n )\n\n if (resolved.length === 0) {\n throw new Error(\"No resources provided to forResources.\")\n }\n\n if (unique(resolved.map(r => r.namespaceId)).length > 1) {\n throw new Error(\"All resources must belong to the same namespace.\")\n }\n\n const saNamespaceId = await toPromise(output(args.namespace).metadata.uid)\n\n if (resolved[0].namespaceId !== saNamespaceId) {\n throw new Error(\"The resources must belong to the same namespace as the ServiceAccount.\")\n }\n\n if (args.collectionAccess) {\n // when collection access is requested, we only need to know the types and api groups\n const uniqueTypes = unique(resolved.map(r => `${r.apiVersion}::${r.kind}`))\n\n return new ClusterAccessScope(\n name,\n {\n namespace: args.namespace,\n rules: uniqueTypes.map(t => {\n const [apiVersion, kind] = t.split(\"::\")\n\n return {\n apiGroups: apiVersion === \"v1\" ? [\"\"] : [apiVersion.split(\"/\")[0]],\n resources: [`${kind.toLowerCase()}s`],\n verbs: args.verbs,\n }\n }),\n },\n opts,\n )\n }\n\n return new ClusterAccessScope(\n name,\n {\n namespace: args.namespace,\n rules: resolved.map(r => ({\n apiGroups: r.apiVersion === \"v1\" ? [\"\"] : [r.apiVersion.split(\"/\")[0]],\n resources: [r.kind.toLowerCase() + (r.metadata?.name ? \"s\" : \"\")],\n resourceNames: r.metadata?.name ? [r.metadata.name] : undefined,\n verbs: args.verbs,\n })),\n },\n opts,\n )\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/tls.ts"],"names":[],"mappings":"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","file":"chunk-C6WHUOC3.js","sourcesContent":["import type { k8s } from \"@highstate/library\"\nimport type { types } from \"@pulumi/kubernetes\"\nimport { cert_manager, type types as cmTypes } from \"@highstate/cert-manager\"\nimport { getOrCreate } from \"@highstate/contract\"\nimport {\n ComponentResource,\n type ComponentResourceOptions,\n type Input,\n type Inputs,\n interpolate,\n type Output,\n output,\n toPromise,\n} from \"@highstate/pulumi\"\nimport { omit } from \"remeda\"\nimport { Namespace } from \"./namespace\"\nimport { Secret } from \"./secret\"\nimport { commonExtraArgs, getProvider, mapMetadata, type ScopedResourceArgs } from \"./shared\"\n\nexport type CertificateArgs = ScopedResourceArgs & cmTypes.input.cert_manager.v1.CertificateSpec\n\nexport type CreateOrGetCertificateArgs = CertificateArgs & {\n /**\n * The certificate entity to patch/retrieve.\n */\n existing: Input<k8s.Certificate> | undefined\n}\n\n/**\n * Represents a cert-manager Certificate resource with metadata and secret.\n */\nexport abstract class Certificate extends ComponentResource {\n private _secret?: Output<Secret>\n\n protected constructor(\n type: string,\n private readonly name: string,\n args: Inputs,\n opts: ComponentResourceOptions | undefined,\n\n /**\n * The namespace where the certificate is located.\n */\n readonly namespace: Output<Namespace>,\n\n /**\n * The metadata of the underlying cert-manager certificate.\n */\n readonly metadata: Output<types.output.meta.v1.ObjectMeta>,\n\n /**\n * The spec of the underlying cert-manager certificate.\n */\n readonly spec: Output<cmTypes.output.cert_manager.v1.CertificateSpec>,\n\n /**\n * The status of the underlying cert-manager certificate.\n */\n readonly status: Output<cmTypes.output.cert_manager.v1.CertificateStatus>,\n ) {\n super(type, name, args, opts)\n }\n\n /**\n * The cluster where the certificate is located.\n */\n get cluster(): Output<k8s.Cluster> {\n return this.namespace.cluster\n }\n\n /**\n * The Highstate certificate entity.\n */\n get entity(): Output<k8s.ScopedResource> {\n return output({\n type: \"certificate\",\n clusterId: this.cluster.id,\n clusterName: this.cluster.name,\n metadata: this.metadata,\n })\n }\n\n /**\n * The secret containing the certificate data.\n */\n get secret(): Output<Secret> {\n if (this._secret) {\n return this._secret\n }\n\n this._secret = output({\n secretName: this.spec.apply(spec => spec.secretName),\n namespace: this.namespace,\n }).apply(({ secretName, namespace }) => {\n return Secret.get(`${this.name}.secret`, {\n name: secretName,\n namespace,\n })\n })\n\n return this._secret\n }\n\n /**\n * Creates a new certificate.\n */\n static create(name: string, args: CertificateArgs, opts?: ComponentResourceOptions): Certificate {\n return new CreatedCertificate(name, args, opts)\n }\n\n /**\n * Creates a new certificate or patches an existing one.\n *\n * @param name The name of the resource. May not be the same as the certificate name.\n * @param args The arguments to create or patch the certificate with.\n * @param opts Optional resource options.\n */\n static createOrPatch(\n name: string,\n args: CreateOrGetCertificateArgs,\n opts?: ComponentResourceOptions,\n ): Certificate {\n if (args.existing) {\n return new CertificatePatch(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 CreatedCertificate(name, args, opts)\n }\n\n /**\n * Creates a new certificate or gets an existing one.\n *\n * @param name The name of the resource. May not be the same as the certificate name. Will not be used when existing certificate is retrieved.\n * @param args The arguments to create or get the certificate with.\n * @param opts Optional resource options.\n */\n static async createOrGet(\n name: string,\n args: CreateOrGetCertificateArgs,\n opts?: ComponentResourceOptions,\n ): Promise<Certificate> {\n if (args.existing) {\n return await Certificate.forAsync(args.existing, output(args.namespace).cluster)\n }\n\n return new CreatedCertificate(name, args, opts)\n }\n\n /**\n * Patches an existing certificate.\n *\n * Will throw an error if the certificate does not exist.\n *\n * @param name The name of the resource. May not be the same as the certificate name.\n * @param args The arguments to patch the certificate with.\n * @param opts Optional resource options.\n */\n static patch(name: string, args: CertificateArgs, opts?: ComponentResourceOptions): Certificate {\n return new CertificatePatch(name, args, opts)\n }\n\n /**\n * Wraps an existing cert-manager certificate.\n */\n static wrap(\n name: string,\n args: WrappedCertificateArgs,\n opts?: ComponentResourceOptions,\n ): Certificate {\n return new WrappedCertificate(name, args, opts)\n }\n\n /**\n * Gets an existing certificate.\n *\n * Will throw an error if the certificate does not exist.\n */\n static get(\n name: string,\n args: ExternalCertificateArgs,\n opts?: ComponentResourceOptions,\n ): Certificate {\n return new ExternalCertificate(name, args, opts)\n }\n\n private static readonly certificateCache = new Map<string, Certificate>()\n\n /**\n * Gets an existing certificate 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 certificate for.\n * @param cluster The cluster where the certificate is located.\n */\n static for(entity: k8s.Certificate, cluster: Input<k8s.Cluster>): Certificate {\n return getOrCreate(\n Certificate.certificateCache,\n `${entity.clusterName}.${entity.metadata.namespace}.${entity.metadata.name}.${entity.clusterId}`,\n name => {\n return Certificate.get(name, {\n name: entity.metadata.name,\n namespace: Namespace.forResourceAsync(entity, cluster),\n })\n },\n )\n }\n\n /**\n * Gets an existing certificate 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 certificate for.\n * @param cluster The cluster where the certificate is located.\n */\n static async forAsync(\n entity: Input<k8s.Certificate>,\n cluster: Input<k8s.Cluster>,\n ): Promise<Certificate> {\n const resolvedEntity = await toPromise(entity)\n return Certificate.for(resolvedEntity, output(cluster))\n }\n}\n\nclass CreatedCertificate extends Certificate {\n constructor(name: string, args: CertificateArgs, opts?: ComponentResourceOptions) {\n const certificate = output(args.namespace).cluster.apply(cluster => {\n return new cert_manager.v1.Certificate(\n name,\n {\n metadata: mapMetadata(args, name),\n spec: omit(args, commonExtraArgs),\n },\n { ...opts, parent: this, provider: getProvider(cluster) },\n )\n })\n\n super(\n \"highstate:k8s:Certificate\",\n name,\n args,\n opts,\n\n output(args.namespace),\n certificate.metadata as Output<types.output.meta.v1.ObjectMeta>,\n certificate.spec,\n certificate.status,\n )\n }\n}\n\nclass CertificatePatch extends Certificate {\n constructor(name: string, args: CertificateArgs, opts?: ComponentResourceOptions) {\n const certificate = output(args.namespace).cluster.apply(cluster => {\n return new cert_manager.v1.CertificatePatch(\n name,\n {\n metadata: mapMetadata(args, name),\n spec: omit(args, commonExtraArgs),\n },\n { ...opts, parent: this, provider: getProvider(cluster) },\n )\n })\n\n super(\n \"highstate:k8s:CertificatePatch\",\n name,\n args,\n opts,\n\n output(args.namespace),\n certificate.metadata as Output<types.output.meta.v1.ObjectMeta>,\n certificate.spec,\n certificate.status,\n )\n }\n}\n\nexport type WrappedCertificateArgs = {\n /**\n * The underlying cert-manager certificate to wrap.\n */\n certificate: Input<cert_manager.v1.Certificate>\n\n /**\n * The namespace where the certificate is located.\n */\n namespace: Input<Namespace>\n}\n\nclass WrappedCertificate extends Certificate {\n constructor(name: string, args: WrappedCertificateArgs, opts?: ComponentResourceOptions) {\n super(\n \"highstate:k8s:WrappedCertificate\",\n name,\n args,\n opts,\n\n output(args.namespace),\n output(args.certificate).metadata as Output<types.output.meta.v1.ObjectMeta>,\n output(args.certificate).spec,\n output(args.certificate).status,\n )\n }\n}\n\nexport type ExternalCertificateArgs = {\n /**\n * The name of the certificate to get.\n */\n name: Input<string>\n\n /**\n * The namespace of the certificate to get.\n */\n namespace: Input<Namespace>\n}\n\nclass ExternalCertificate extends Certificate {\n constructor(name: string, args: ExternalCertificateArgs, opts?: ComponentResourceOptions) {\n const certificate = output(args.namespace).cluster.apply(cluster => {\n return cert_manager.v1.Certificate.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:ExternalCertificate\",\n name,\n args,\n opts,\n\n output(args.namespace),\n certificate.metadata as Output<types.output.meta.v1.ObjectMeta>,\n certificate.spec,\n certificate.status,\n )\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/gateway/backend.ts","../src/gateway/gateway.ts","../src/gateway/http-route.ts","../src/gateway/tcp-route.ts","../src/gateway/udp-route.ts"],"names":["output","ComponentResource","gateway","normalizeInputsAndMap"],"mappings":"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","file":"chunk-EACAK6W4.js","sourcesContent":["import type { core } from \"@pulumi/kubernetes\"\nimport { type Input, type Output, output, type Unwrap } from \"@highstate/pulumi\"\nimport { Service } from \"../service\"\n\nexport interface FullBackendRef {\n /**\n * The name of the resource being referenced.\n */\n name: Input<string>\n\n /**\n * The namespace of the resource being referenced.\n * May be undefined if the resource is not in a namespace.\n */\n namespace?: Input<string | undefined>\n\n /**\n * The port of the resource being referenced.\n */\n port: Input<number>\n}\n\nexport interface ServiceBackendRef {\n /**\n * The name of the service being referenced.\n */\n service: Input<core.v1.Service>\n\n /**\n * The port of the service being referenced.\n */\n port: Input<number>\n}\n\nexport type BackendRef = FullBackendRef | ServiceBackendRef | Service\n\nexport function resolveBackendRef(ref: BackendRef): Output<Unwrap<FullBackendRef>> {\n if (Service.isInstance(ref)) {\n return output({\n name: ref.metadata.name,\n namespace: ref.metadata.namespace,\n port: ref.spec.ports[0].port,\n })\n }\n\n if (\"service\" in ref) {\n const service = output(ref.service)\n\n return output({\n name: service.metadata.name,\n namespace: service.metadata.namespace,\n port: ref.port,\n })\n }\n\n return output({\n name: ref.name,\n namespace: ref.namespace,\n port: ref.port,\n })\n}\n","import type { k8s, network } from \"@highstate/library\"\nimport type { types } from \"@pulumi/kubernetes\"\nimport type { SetRequired } from \"type-fest\"\nimport { parseL3Endpoint } from \"@highstate/common\"\nimport { getOrCreate } from \"@highstate/contract\"\nimport { gateway, type types as gwTypes } from \"@highstate/gateway-api\"\nimport {\n ComponentResource,\n type ComponentResourceOptions,\n type Input,\n type InputArray,\n type Inputs,\n interpolate,\n type Output,\n output,\n toPromise,\n} from \"@highstate/pulumi\"\nimport { omit } from \"remeda\"\nimport { Namespace } from \"../namespace\"\nimport { commonExtraArgs, getProvider, mapMetadata, type ScopedResourceArgs } from \"../shared\"\n\nexport type GatewayArgs = ScopedResourceArgs & {\n /**\n * The FQDN to configure the listeners for.\n */\n fqdn?: Input<string>\n\n /**\n * The FQDNs to configure the listeners for.\n */\n fqdns?: InputArray<string>\n} & gwTypes.input.gateway.v1.GatewaySpec\n\nexport type CreateOrGetGatewayArgs = GatewayArgs & {\n /**\n * The gateway entity to patch/retrieve.\n */\n existing: Input<k8s.Gateway> | undefined\n}\n\nconst gatewayExtraArgs = [...commonExtraArgs, \"fqdn\", \"fqdns\"] as const\n\n/**\n * Represents a Kubernetes Gateway resource.\n */\nexport abstract class Gateway extends ComponentResource {\n protected constructor(\n type: string,\n name: string,\n args: Inputs,\n opts: ComponentResourceOptions | undefined,\n\n /**\n * The namespace where the gateway is located.\n */\n readonly namespace: Output<Namespace>,\n\n /**\n * The metadata of the underlying Kubernetes gateway.\n */\n readonly metadata: Output<types.output.meta.v1.ObjectMeta>,\n\n /**\n * The spec of the underlying Gateway resource.\n */\n readonly spec: Output<gwTypes.output.gateway.v1.GatewaySpec>,\n\n /**\n * The status of the underlying Gateway resource.\n */\n readonly status: Output<gwTypes.output.gateway.v1.GatewayStatus>,\n ) {\n super(type, name, args, opts)\n }\n\n /**\n * The cluster where the gateway is located.\n */\n get cluster(): Output<k8s.Cluster> {\n return this.namespace.cluster\n }\n\n /**\n * The Highstate gateway entity.\n */\n get entity(): Output<k8s.Gateway> {\n return output({\n type: \"gateway\",\n clusterId: this.cluster.id,\n clusterName: this.cluster.name,\n metadata: this.metadata,\n })\n }\n\n /**\n * Returns the endpoints L3 endpoints on which the gateway is exposed.\n */\n get endpoints(): Output<network.L3Endpoint[]> {\n return this.status.addresses.apply(addresses => {\n if (!addresses) {\n return []\n }\n\n return addresses.map(address => parseL3Endpoint(address.value))\n })\n }\n\n /**\n * Creates a new gateway.\n */\n static create(name: string, args: GatewayArgs, opts?: ComponentResourceOptions): Gateway {\n return new CreatedGateway(name, args, opts)\n }\n\n /**\n * Creates a new gateway or patches an existing one.\n *\n * @param name The name of the resource. May not be the same as the gateway name.\n * @param args The arguments to create or patch the gateway with.\n * @param opts Optional resource options.\n */\n static createOrPatch(\n name: string,\n args: CreateOrGetGatewayArgs,\n opts?: ComponentResourceOptions,\n ): Gateway {\n if (args.existing) {\n return new GatewayPatch(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 CreatedGateway(name, args, opts)\n }\n\n /**\n * Creates a new gateway or gets an existing one.\n *\n * @param name The name of the resource. May not be the same as the gateway name. Will not be used when existing gateway is retrieved.\n * @param args The arguments to create or get the gateway with.\n * @param opts Optional resource options.\n */\n static async createOrGet(\n name: string,\n args: CreateOrGetGatewayArgs,\n opts?: ComponentResourceOptions,\n ): Promise<Gateway> {\n if (args.existing) {\n return await Gateway.forAsync(args.existing, output(args.namespace).cluster)\n }\n\n return new CreatedGateway(name, args, opts)\n }\n\n /**\n * Patches an existing gateway.\n *\n * Will throw an error if the gateway does not exist.\n *\n * @param name The name of the resource. May not be the same as the gateway name.\n * @param args The arguments to patch the gateway with.\n * @param opts Optional resource options.\n */\n static patch(name: string, args: GatewayArgs, opts?: ComponentResourceOptions): Gateway {\n return new GatewayPatch(name, args, opts)\n }\n\n /**\n * Wraps an existing Kubernetes gateway.\n */\n static wrap(name: string, args: WrappedGatewayArgs, opts?: ComponentResourceOptions): Gateway {\n return new WrappedGateway(name, args, opts)\n }\n\n /**\n * Gets an existing gateway.\n *\n * Will throw an error if the gateway does not exist.\n */\n static get(name: string, args: ExternalGatewayArgs, opts?: ComponentResourceOptions): Gateway {\n return new ExternalGateway(name, args, opts)\n }\n\n private static readonly gatewayCache = new Map<string, Gateway>()\n\n /**\n * Gets an existing gateway 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}.{gatewayName}.{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 gateway for.\n * @param cluster The cluster where the gateway is located.\n */\n static for(entity: k8s.Gateway, cluster: Input<k8s.Cluster>): Gateway {\n return getOrCreate(\n Gateway.gatewayCache,\n `${entity.clusterName}.${entity.metadata.namespace}.${entity.metadata.name}.${entity.clusterId}`,\n name => {\n return Gateway.get(name, {\n name: entity.metadata.name,\n namespace: Namespace.forResourceAsync(entity, cluster),\n })\n },\n )\n }\n\n /**\n * Gets an existing gateway 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}.{gatewayName}.{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 gateway for.\n * @param cluster The cluster where the gateway is located.\n */\n static async forAsync(entity: Input<k8s.Gateway>, cluster: Input<k8s.Cluster>): Promise<Gateway> {\n const resolvedEntity = await toPromise(entity)\n\n return Gateway.for(resolvedEntity, output(cluster))\n }\n\n /**\n * Creates a gateway with the provided name/namespace/cluster only once.\n *\n * It automatically names the resource with the following format: `{name}.{namespace}.{clusterName}.{clusterId}`.\n *\n * On subsequent calls the gateway is patched with the union of existing and requested listeners.\n * Only the listeners field is modified to avoid altering other spec fields.\n *\n * @param name The name of the gateway to create.\n * @param args The arguments to create the gateway with.\n * @param opts Optional resource options.\n */\n static async createOnce(\n args: SetRequired<GatewayArgs, \"name\">,\n opts?: ComponentResourceOptions,\n ): Promise<Gateway> {\n const { name, namespace, cluster } = await toPromise({\n name: args.name,\n namespace: output(args.namespace).metadata.name,\n cluster: output(args.namespace).cluster,\n })\n\n const fullName = `${name}.${namespace}.${cluster.name}.${cluster.id}`\n\n const existing = Gateway.gatewayCache.get(fullName)\n if (existing) {\n Gateway.patch(\n fullName,\n {\n name,\n namespace: args.namespace,\n listeners: args.listeners,\n },\n opts,\n )\n\n return existing\n }\n\n const created = Gateway.create(\n fullName,\n {\n ...args,\n name,\n namespace: args.namespace,\n },\n opts,\n )\n\n Gateway.gatewayCache.set(fullName, created)\n return created\n }\n}\n\nclass CreatedGateway extends Gateway {\n constructor(name: string, args: GatewayArgs, opts?: ComponentResourceOptions) {\n const gatewayResource = output(args.namespace).cluster.apply(cluster => {\n return new gateway.v1.Gateway(\n name,\n {\n metadata: mapMetadata(args, name),\n spec: omit(args, gatewayExtraArgs),\n },\n { ...opts, parent: this, provider: getProvider(cluster) },\n )\n })\n\n super(\n \"highstate:k8s:Gateway\",\n name,\n args,\n opts,\n\n output(args.namespace),\n gatewayResource.metadata as Output<types.output.meta.v1.ObjectMeta>,\n gatewayResource.spec,\n gatewayResource.status,\n )\n }\n}\n\nclass GatewayPatch extends Gateway {\n constructor(name: string, args: GatewayArgs, opts?: ComponentResourceOptions) {\n const gatewayResource = output(args.namespace).cluster.apply(cluster => {\n return new gateway.v1.GatewayPatch(\n name,\n {\n metadata: mapMetadata(args, name),\n spec: omit(args, gatewayExtraArgs),\n },\n { ...opts, parent: this, provider: getProvider(cluster) },\n )\n })\n\n super(\n \"highstate:k8s:GatewayPatch\",\n name,\n args,\n opts,\n\n output(args.namespace),\n gatewayResource.metadata as Output<types.output.meta.v1.ObjectMeta>,\n gatewayResource.spec,\n gatewayResource.status,\n )\n }\n}\n\nexport type WrappedGatewayArgs = {\n /**\n * The underlying Kubernetes gateway to wrap.\n */\n gateway: Input<gateway.v1.Gateway>\n\n /**\n * The namespace where the gateway is located.\n */\n namespace: Input<Namespace>\n}\n\nclass WrappedGateway extends Gateway {\n constructor(name: string, args: WrappedGatewayArgs, opts?: ComponentResourceOptions) {\n super(\n \"highstate:k8s:WrappedGateway\",\n name,\n args,\n opts,\n\n output(args.namespace),\n output(args.gateway).metadata as Output<types.output.meta.v1.ObjectMeta>,\n output(args.gateway).spec,\n output(args.gateway).status,\n )\n }\n}\n\nexport type ExternalGatewayArgs = {\n /**\n * The name of the gateway to get.\n */\n name: Input<string>\n\n /**\n * The namespace of the gateway to get.\n */\n namespace: Input<Namespace>\n}\n\nclass ExternalGateway extends Gateway {\n constructor(name: string, args: ExternalGatewayArgs, opts?: ComponentResourceOptions) {\n const gatewayResource = output(args.namespace).cluster.apply(cluster => {\n return gateway.v1.Gateway.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:ExternalGateway\",\n name,\n args,\n opts,\n\n output(args.namespace),\n gatewayResource.metadata as Output<types.output.meta.v1.ObjectMeta>,\n gatewayResource.spec,\n gatewayResource.status,\n )\n }\n}\n","import type { Gateway } from \"./gateway\"\nimport { gateway, type types } from \"@highstate/gateway-api\"\nimport {\n ComponentResource,\n type ComponentResourceOptions,\n type Input,\n type InputArray,\n normalize,\n normalizeInputs,\n normalizeInputsAndMap,\n type Output,\n output,\n} from \"@highstate/pulumi\"\nimport { map, pipe } from \"remeda\"\nimport { getProvider, mapMetadata, type ScopedResourceArgs } from \"../shared\"\nimport { type BackendRef, resolveBackendRef } from \"./backend\"\n\nexport type HttpRouteArgs = Omit<ScopedResourceArgs, \"namespace\"> & {\n /**\n * The gateway to associate with the route.\n */\n gateway: Input<Gateway>\n\n /**\n * The alias for `hostnames: [hostname]`.\n */\n hostname?: Input<string>\n\n /**\n * The rule of the route.\n */\n rule?: Input<HttpRouteRuleArgs>\n\n /**\n * The rules of the route.\n */\n rules?: InputArray<HttpRouteRuleArgs>\n} & Omit<Partial<types.input.gateway.v1.HTTPRouteSpec>, \"rules\">\n\nexport type HttpRouteRuleArgs = Omit<\n types.input.gateway.v1.HTTPRouteSpecRules,\n \"matches\" | \"filters\" | \"backendRefs\"\n> & {\n /**\n * The conditions of the rule.\n * Can be specified as string to match on the path.\n */\n matches?: InputArray<HttpRouteRuleMatchOptions>\n\n /**\n * The condition of the rule.\n * Can be specified as string to match on the path.\n */\n match?: Input<HttpRouteRuleMatchOptions>\n\n /**\n * The filters of the rule.\n */\n filters?: InputArray<types.input.gateway.v1.HTTPRouteSpecRulesFilters>\n\n /**\n * The filter of the rule.\n */\n filter?: Input<types.input.gateway.v1.HTTPRouteSpecRulesFilters>\n\n /**\n * The service to route to.\n */\n backend?: Input<BackendRef>\n\n /**\n * The services to route to.\n */\n backends?: InputArray<BackendRef>\n}\n\nexport type HttpRouteRuleMatchOptions = types.input.gateway.v1.HTTPRouteSpecRulesMatches | string\n\nexport class HttpRoute extends ComponentResource {\n /**\n * The underlying Kubernetes resource.\n */\n public readonly route: Output<gateway.v1.HTTPRoute>\n\n constructor(name: string, args: HttpRouteArgs, opts?: ComponentResourceOptions) {\n super(\"highstate:k8s:HttpRoute\", name, args, opts)\n\n this.route = output(args.gateway).cluster.apply(cluster => {\n return new gateway.v1.HTTPRoute(\n name,\n {\n metadata: mapMetadata(args, name).apply(metadata => ({\n ...metadata,\n namespace: output(args.gateway).namespace.metadata.name,\n })),\n spec: {\n hostnames: normalizeInputs(args.hostname, args.hostnames),\n\n parentRefs: [\n {\n name: output(args.gateway).metadata.name,\n },\n ],\n\n rules: normalizeInputsAndMap(args.rule, args.rules, rule => ({\n timeouts: rule.timeouts,\n\n matches: pipe(\n normalize(rule.match, rule.matches),\n map(mapHttpRouteRuleMatch),\n addDefaultPathMatch,\n ),\n\n filters: normalize(rule.filter, rule.filters),\n backendRefs: normalizeInputsAndMap(rule.backend, rule.backends, resolveBackendRef),\n })),\n } satisfies types.input.gateway.v1.HTTPRouteSpec,\n },\n { ...opts, parent: this, provider: getProvider(cluster) },\n )\n })\n }\n}\n\nfunction addDefaultPathMatch(\n matches: types.input.gateway.v1.HTTPRouteSpecRulesMatches[],\n): types.input.gateway.v1.HTTPRouteSpecRulesMatches[] {\n return matches.length ? matches : [{ path: { type: \"PathPrefix\", value: \"/\" } }]\n}\n\nexport function mapHttpRouteRuleMatch(\n match: HttpRouteRuleMatchOptions,\n): types.input.gateway.v1.HTTPRouteSpecRulesMatches {\n if (typeof match === \"string\") {\n return { path: { type: \"PathPrefix\", value: match } }\n }\n\n return match\n}\n","import type { Gateway } from \"./gateway\"\nimport { gateway, type types } from \"@highstate/gateway-api\"\nimport {\n ComponentResource,\n type ComponentResourceOptions,\n type Input,\n type InputArray,\n normalizeInputsAndMap,\n type Output,\n output,\n} from \"@highstate/pulumi\"\nimport { getProvider, mapMetadata, type ScopedResourceArgs } from \"../shared\"\nimport { type BackendRef, resolveBackendRef } from \"./backend\"\n\nexport type TcpRouteArgs = Omit<ScopedResourceArgs, \"namespace\"> & {\n /**\n * The gateway to associate with the route.\n */\n gateway: Input<Gateway>\n\n /**\n * The name of the listener to attach the route to.\n */\n listenerName: Input<string>\n\n /**\n * The backend reference handled by the route.\n */\n backend?: Input<BackendRef>\n\n /**\n * The backend references handled by the route.\n */\n backends?: InputArray<BackendRef>\n}\n\nexport class TcpRoute extends ComponentResource {\n /**\n * The underlying Kubernetes resource.\n */\n public readonly route: Output<gateway.v1alpha2.TCPRoute>\n\n constructor(name: string, args: TcpRouteArgs, opts?: ComponentResourceOptions) {\n super(\"highstate:k8s:TcpRoute\", name, args, opts)\n\n const gatewayOutput = output(args.gateway)\n\n const parentRefs = output({\n gateway: gatewayOutput,\n listenerName: args.listenerName,\n }).apply(\n ({ gateway, listenerName }) =>\n [\n {\n group: \"gateway.networking.k8s.io\",\n kind: \"Gateway\",\n name: gateway.metadata.name,\n namespace: gateway.namespace.metadata.name,\n sectionName: listenerName,\n },\n ] satisfies types.input.gateway.v1alpha2.TCPRouteSpecParentRefs[],\n )\n\n const backendRefs = normalizeInputsAndMap(args.backend, args.backends, resolveBackendRef)\n\n this.route = gatewayOutput.cluster.apply(cluster => {\n return new gateway.v1alpha2.TCPRoute(\n name,\n {\n metadata: mapMetadata(args, name).apply(metadata => ({\n ...metadata,\n namespace: gatewayOutput.namespace.metadata.name,\n })),\n spec: {\n parentRefs,\n rules: [\n {\n backendRefs,\n },\n ],\n } satisfies types.input.gateway.v1alpha2.TCPRouteSpec,\n },\n { ...opts, parent: this, provider: getProvider(cluster) },\n )\n })\n }\n}\n","import type { Gateway } from \"./gateway\"\nimport { gateway, type types } from \"@highstate/gateway-api\"\nimport {\n ComponentResource,\n type ComponentResourceOptions,\n type Input,\n type InputArray,\n normalizeInputsAndMap,\n type Output,\n output,\n} from \"@highstate/pulumi\"\nimport { getProvider, mapMetadata, type ScopedResourceArgs } from \"../shared\"\nimport { type BackendRef, resolveBackendRef } from \"./backend\"\n\nexport type UdpRouteArgs = Omit<ScopedResourceArgs, \"namespace\"> & {\n /**\n * The gateway to associate with the route.\n */\n gateway: Input<Gateway>\n\n /**\n * The name of the listener to attach the route to.\n */\n listenerName: Input<string>\n\n /**\n * The backend reference handled by the route.\n */\n backend?: Input<BackendRef>\n\n /**\n * The backend references handled by the route.\n */\n backends?: InputArray<BackendRef>\n}\n\nexport class UdpRoute extends ComponentResource {\n /**\n * The underlying Kubernetes resource.\n */\n public readonly route: Output<gateway.v1alpha2.UDPRoute>\n\n constructor(name: string, args: UdpRouteArgs, opts?: ComponentResourceOptions) {\n super(\"highstate:k8s:UdpRoute\", name, args, opts)\n\n const gatewayOutput = output(args.gateway)\n\n const parentRefs = output({\n gateway: gatewayOutput,\n listenerName: args.listenerName,\n }).apply(\n ({ gateway, listenerName }) =>\n [\n {\n group: \"gateway.networking.k8s.io\",\n kind: \"Gateway\",\n name: gateway.metadata.name,\n namespace: gateway.namespace.metadata.name,\n sectionName: listenerName,\n },\n ] satisfies types.input.gateway.v1alpha2.UDPRouteSpecParentRefs[],\n )\n\n const backendRefs = normalizeInputsAndMap(args.backend, args.backends, resolveBackendRef)\n\n this.route = gatewayOutput.cluster.apply(cluster => {\n return new gateway.v1alpha2.UDPRoute(\n name,\n {\n metadata: mapMetadata(args, name).apply(metadata => ({\n ...metadata,\n namespace: gatewayOutput.namespace.metadata.name,\n })),\n spec: {\n parentRefs,\n rules: [\n {\n backendRefs,\n },\n ],\n } satisfies types.input.gateway.v1alpha2.UDPRouteSpec,\n },\n { ...opts, parent: this, provider: getProvider(cluster) },\n )\n })\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/stateful-set.ts"],"names":["service","args","podTemplate","labels"],"mappings":"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","file":"chunk-NWXKLVBC.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 StatefulSetArgs = Omit<ExposableWorkloadArgs, \"existing\"> &\n Omit<Partial<types.input.apps.v1.StatefulSetSpec>, \"template\"> & {\n template?: {\n metadata?: types.input.meta.v1.ObjectMeta\n spec?: Partial<types.input.core.v1.PodSpec>\n }\n }\n\nexport type CreateOrGetStatefulSetArgs = StatefulSetArgs & {\n /**\n * The entity to use to determine the stateful set to patch.\n */\n existing: Input<k8s.StatefulSet> | undefined\n}\n\nexport abstract class StatefulSet 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 stateful set.\n */\n readonly spec: Output<types.output.apps.v1.StatefulSetSpec>,\n\n /**\n * The status of the underlying Kubernetes stateful set.\n */\n readonly status: Output<types.output.apps.v1.StatefulSetStatus>,\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 /**\n * The Highstate stateful set entity.\n */\n get entity(): Output<k8s.StatefulSet> {\n return output({\n type: \"stateful-set\",\n clusterId: this.cluster.id,\n clusterName: this.cluster.name,\n metadata: this.metadata,\n service: this.service.entity,\n })\n }\n\n /**\n * Creates a new stateful set.\n */\n static create(name: string, args: StatefulSetArgs, opts?: ComponentResourceOptions): StatefulSet {\n return new CreatedStatefulSet(name, args, opts)\n }\n\n /**\n * Creates a new stateful set or patches an existing one.\n *\n * @param name The name of the resource. May not be the same as the stateful set name.\n * @param args The arguments to create or patch the stateful set with.\n * @param opts Optional resource options.\n */\n static createOrPatch(\n name: string,\n args: CreateOrGetStatefulSetArgs,\n opts?: ComponentResourceOptions,\n ): StatefulSet {\n if (args.existing) {\n return new StatefulSetPatch(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 CreatedStatefulSet(name, args, opts)\n }\n\n /**\n * Creates a new stateful set or gets an existing one.\n *\n * @param name The name of the resource. May not be the same as the stateful set name. Will not be used when existing stateful set is retrieved.\n * @param args The arguments to create or get the stateful set with.\n * @param opts Optional resource options.\n */\n static async createOrGet(\n name: string,\n args: CreateOrGetStatefulSetArgs,\n opts?: ComponentResourceOptions,\n ): Promise<StatefulSet> {\n if (args.existing) {\n return await StatefulSet.forAsync(args.existing, output(args.namespace).cluster)\n }\n\n return new CreatedStatefulSet(name, args, opts)\n }\n\n /**\n * Patches an existing stateful set.\n *\n * Will throw an error if the stateful set does not exist.\n *\n * @param name The name of the resource. May not be the same as the stateful set name.\n * @param args The arguments to patch the stateful set with.\n * @param opts Optional resource options.\n */\n static patch(name: string, args: StatefulSetArgs, opts?: ComponentResourceOptions): StatefulSet {\n return new StatefulSetPatch(name, args, opts)\n }\n\n /**\n * Wraps an existing Kubernetes stateful set.\n */\n static wrap(\n name: string,\n args: WrappedStatefulSetArgs,\n opts?: ComponentResourceOptions,\n ): StatefulSet {\n return new WrappedStatefulSet(name, args, opts)\n }\n\n /**\n * Gets an existing stateful set.\n *\n * Will throw an error if the stateful set does not exist.\n */\n static get(\n name: string,\n args: ExternalStatefulSetArgs,\n opts?: ComponentResourceOptions,\n ): StatefulSet {\n return new ExternalStatefulSet(name, args, opts)\n }\n\n private static readonly statefulSetCache = new Map<string, StatefulSet>()\n\n /**\n * Gets an existing stateful set 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 stateful set for.\n * @param cluster The cluster where the stateful set is located.\n */\n static for(entity: k8s.StatefulSet, cluster: Input<k8s.Cluster>): StatefulSet {\n return getOrCreate(\n StatefulSet.statefulSetCache,\n `${entity.clusterName}.${entity.metadata.namespace}.${entity.metadata.name}.${entity.clusterId}`,\n name => {\n return StatefulSet.get(name, {\n name: entity.metadata.name,\n namespace: Namespace.forResource(entity, cluster),\n })\n },\n )\n }\n\n /**\n * Gets an existing stateful set 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 stateful set for.\n * @param cluster The cluster where the stateful set is located.\n */\n static async forAsync(\n entity: Input<k8s.StatefulSet>,\n cluster: Input<k8s.Cluster>,\n ): Promise<StatefulSet> {\n const resolvedEntity = await toPromise(entity)\n return StatefulSet.for(resolvedEntity, cluster)\n }\n\n protected getTerminalMeta(): Output<UnitTerminal[\"meta\"]> {\n return output({\n title: \"StatefulSet\",\n globalTitle: interpolate`StatefulSet | ${this.metadata.name}`,\n description: \"The shell inside the stateful set.\",\n icon: \"devicon:kubernetes\",\n })\n }\n\n protected get resourceType(): string {\n return \"statefulset\"\n }\n}\n\nclass CreatedStatefulSet extends StatefulSet {\n constructor(name: string, args: StatefulSetArgs, opts?: ComponentResourceOptions) {\n const { labels, podTemplate, networkPolicy, containers, service, routes } =\n getExposableWorkloadComponents(\n name,\n {\n ...args,\n\n // force create a service since it is required for stateful sets\n service: output(args.service).apply(service => ({ ...service })),\n },\n () => this,\n opts,\n )\n\n const statefulSet = output(args.namespace).cluster.apply(cluster => {\n return new apps.v1.StatefulSet(\n name,\n {\n metadata: mapMetadata(args, name),\n spec: output({ args, podTemplate, labels, service }).apply(\n ({ args, podTemplate, labels, service }) => {\n return deepmerge(\n {\n serviceName: service?.metadata.name,\n template: podTemplate,\n selector: { matchLabels: labels },\n },\n omit(args, exposableWorkloadExtraArgs),\n ) as types.input.apps.v1.StatefulSetSpec\n },\n ),\n },\n {\n ...opts,\n parent: this,\n provider: getProvider(cluster),\n },\n )\n })\n\n super(\n \"highstate:k8s:StatefulSet\",\n name,\n args,\n opts,\n\n statefulSet.apiVersion,\n statefulSet.kind,\n output(args.terminal ?? {}),\n containers,\n output(args.namespace),\n statefulSet.metadata,\n networkPolicy,\n\n service,\n routes,\n\n statefulSet.spec,\n statefulSet.status,\n )\n }\n}\n\nclass StatefulSetPatch extends StatefulSet {\n constructor(name: string, args: StatefulSetArgs, opts?: ComponentResourceOptions) {\n const { podTemplate, networkPolicy, containers, service, routes } =\n getExposableWorkloadComponents(name, args, () => this, opts, true)\n\n const statefulSet = output(args.namespace).cluster.apply(cluster => {\n return new apps.v1.StatefulSetPatch(\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.StatefulSetSpec\n }),\n },\n {\n ...opts,\n parent: this,\n provider: getProvider(cluster),\n },\n )\n })\n\n super(\n \"highstate:k8s:StatefulSetPatch\",\n name,\n args,\n opts,\n\n statefulSet.apiVersion,\n statefulSet.kind,\n output(args.terminal ?? {}),\n containers,\n output(args.namespace),\n statefulSet.metadata,\n networkPolicy,\n\n service,\n routes,\n\n statefulSet.spec,\n statefulSet.status,\n )\n }\n}\n\nexport type WrappedStatefulSetArgs = {\n /**\n * The underlying Kubernetes stateful set to wrap.\n */\n statefulSet: Input<apps.v1.StatefulSet>\n\n // TODO: remove\n service?: Input<Service>\n\n /**\n * The namespace where the stateful set 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 WrappedStatefulSet extends StatefulSet {\n constructor(name: string, args: WrappedStatefulSetArgs, opts?: ComponentResourceOptions) {\n super(\n \"highstate:k8s:WrappedStatefulSet\",\n name,\n args,\n opts,\n\n output(args.statefulSet).apiVersion,\n output(args.statefulSet).kind,\n output(args.terminal ?? {}),\n output([]),\n output(args.namespace),\n output(args.statefulSet).metadata,\n\n output(undefined),\n output(args.service),\n output([]),\n\n output(args.statefulSet).spec,\n output(args.statefulSet).status,\n )\n }\n}\n\nexport type ExternalStatefulSetArgs = {\n /**\n * The name of the stateful set to get.\n */\n name: Input<string>\n\n /**\n * The namespace where the stateful set is located.\n */\n namespace: Input<Namespace>\n}\n\nclass ExternalStatefulSet extends StatefulSet {\n constructor(name: string, args: ExternalStatefulSetArgs, opts?: ComponentResourceOptions) {\n const statefulSet = output(args.namespace).cluster.apply(cluster => {\n return apps.v1.StatefulSet.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:ExternalStatefulSet\",\n name,\n args,\n opts,\n\n statefulSet.apiVersion,\n statefulSet.kind,\n output({}),\n output([]),\n output(args.namespace),\n statefulSet.metadata,\n\n output(undefined),\n output(undefined),\n output([]),\n\n statefulSet.spec,\n statefulSet.status,\n )\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/deployment.ts"],"names":["args","podTemplate","labels"],"mappings":"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","file":"chunk-O64YZLA4.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"]}
@@ -1 +0,0 @@
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":";;;;;;;AAAA,IAAA,cAAA,GAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA,cAAA;AAAA,EAAA,kBAAA,EAAA,MAAAA,gBAAAA;AAAA,EAAA,oBAAA,EAAA,MAAAC;AAAA,CAAA,CAAA;AACE,IAAAD,gBAAAA,GAAoB;AAAA,EAClB,IAAA,EAAQ,iDAAA;AAAA,EACR,GAAA,EAAO,QAAA;AAAA,EACP,KAAA,EAAS;AACX,CAAA;AACA,IAAAC,kBAAAA,GAAsB;AAAA,EACpB,IAAA,EAAQ,mDAAA;AAAA,EACR,GAAA,EAAO,QAAA;AAAA,EACP,KAAA,EAAS;AACX,CAAA;AAVF,IAAA,cAAA,GAAA;AAAA,EACE,kBAAA,EAAAD,gBAAAA;AAAA,EAKA,oBAAA,EAAAC;AAKF,CAAA;ACMA,IAAM,SAAA,uBAAgB,GAAA,EAAqC;AAEpD,SAAS,YAAY,OAAA,EAAgC;AAC1D,EAAA,MAAM,OAAO,CAAA,EAAG,OAAA,CAAQ,IAAI,CAAA,CAAA,EAAI,QAAQ,YAAY,CAAA,CAAA;AACpD,EAAA,MAAM,QAAA,GAAW,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AACnC,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GAAW,IAAI,QAAA,CAAS,IAAA,EAAM,EAAE,YAAY,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG,CAAA;AAC9E,EAAA,SAAA,CAAU,GAAA,CAAI,MAAM,QAAQ,CAAA;AAE5B,EAAA,OAAO,QAAA;AACT;AAEA,eAAsB,iBAAiB,OAAA,EAAgD;AACrF,EAAA,MAAM,eAAA,GAAkB,MAAM,SAAA,CAAU,OAAO,CAAA;AAE/C,EAAA,OAAO,YAAY,eAAe,CAAA;AACpC;AAqBO,IAAM,eAAA,GAAkB,CAAC,MAAA,EAAQ,WAAA,EAAa,UAAU;AAExD,SAAS,WAAA,CACd,MACA,YAAA,EACgD;AAChD,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,KAAA;AAAA,IAAM,cACjC,MAAA,CAAO;AAAA,MACL,GAAG,QAAA;AAAA,MACH,IAAA,EAAM,IAAA,CAAK,IAAA,IAAQ,QAAA,EAAU,IAAA,IAAQ,YAAA;AAAA,MACrC,SAAA,EACE,QAAA,EAAU,SAAA,KAAc,IAAA,CAAK,SAAA,GAAY,OAAO,IAAA,CAAK,SAAS,CAAA,CAAE,QAAA,CAAS,IAAA,GAAO,MAAA;AAAA,KACnF;AAAA,GACH;AACF;AAIO,SAAS,0BACd,QAAA,EACmC;AACnC,EAAA,IAAI,aAAA,IAAiB,QAAA,IAAY,kBAAA,IAAsB,QAAA,EAAU;AAC/D,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,WAAA,EAAa;AAAA,GACf;AACF;AAEO,SAAS,iBAAiB,SAAA,EAA0C;AACzE,EAAA,IAAI,SAAA,CAAU,UAAA,CAAW,SAAS,CAAA,EAAG;AACnC,IAAA,OAAO,UAAU,QAAA,CAAS,IAAA;AAAA,EAC5B;AAEA,EAAA,IAAI,IAAA,CAAK,EAAA,CAAG,SAAA,CAAU,UAAA,CAAW,SAAS,CAAA,EAAG;AAC3C,IAAA,OAAO,UAAU,QAAA,CAAS,IAAA;AAAA,EAC5B;AAEA,EAAA,OAAO,OAAO,SAAS,CAAA;AACzB;AAEO,SAAS,2BACd,SAAA,EACmC;AACnC,EAAA,OAAO;AAAA,IACL,WAAA,EAAa;AAAA,MACX,6BAAA,EAA+B;AAAA;AACjC,GACF;AACF;AAEO,SAAS,eAAA,CACd,QACA,OAAA,EACoB;AACpB,EAAA,OAAO,MAAA,CAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,CAAC,EAAE,MAAA,EAAAC,OAAAA,EAAQ,OAAA,EAAAC,UAAQ,KAAM;AAChE,IAAA,IAAID,OAAAA,CAAO,SAAA,KAAcC,QAAAA,CAAQ,EAAA,EAAI;AACnC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,qBAAA,EAAwBD,OAAAA,CAAO,IAAI,CAAA,EAAA,EAAKA,OAAAA,CAAO,QAAA,CAAS,IAAI,CAAA,IAAA,EAAOA,OAAAA,CAAO,SAAS,CAAA,MAAA,EAASC,QAAAA,CAAQ,EAAE,CAAA,CAAA;AAAA,OACxG;AAAA,IACF;AAEA,IAAA,OAAOA,QAAAA;AAAA,EACT,CAAC,CAAA;AACH;AASO,IAAe,cAAA,GAAf,cAAsC,iBAAA,CAAkB;AAAA,EACnD,WAAA,CACR,MACA,IAAA,EACA,IAAA,EACA,MAKS,UAAA,EAKA,IAAA,EAKA,WAKA,QAAA,EACT;AACA,IAAA,KAAA,CAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAjBnB,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAKA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAKA,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAKA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAGX;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAA,GAA+B;AACjC,IAAA,OAAO,KAAK,SAAA,CAAU,OAAA;AAAA,EACxB;AAMF;;;ACnIO,IAAe,SAAA,GAAf,MAAe,UAAA,SAAkBC,mBAAAA,CAAkB;AAAA,EACxD,WAAA,CACE,MACA,IAAA,EACA,IAAA,EACA,MAKS,OAAA,EAKA,QAAA,EAKA,MAKA,MAAA,EACT;AACA,IAAA,KAAA,CAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAjBnB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAKA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAKA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAKA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAGX;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAA,GAAgC;AAClC,IAAA,OAAOC,QAAAA,CAAO;AAAA,MACZ,IAAA,EAAM,WAAA;AAAA,MACN,SAAA,EAAW,KAAK,OAAA,CAAQ,EAAA;AAAA,MACxB,WAAA,EAAa,KAAK,OAAA,CAAQ,IAAA;AAAA,MAC1B,UAAU,IAAA,CAAK;AAAA,KAChB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAA,CAAO,IAAA,EAAc,IAAA,EAAqB,IAAA,EAA4C;AAC3F,IAAA,OAAO,IAAI,gBAAA,CAAiB,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,IAAA,CACL,IAAA,EACA,IAAA,EACA,IAAA,EACW;AACX,IAAA,OAAO,IAAI,gBAAA,CAAiB,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAa,WAAA,CACX,IAAA,EACA,IAAA,EACA,IAAA,EACoB;AACpB,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,OAAO,MAAM,UAAA,CAAU,gBAAA,CAAiB,IAAA,CAAK,QAAA,EAAU,KAAK,OAAO,CAAA;AAAA,IACrE;AAEA,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,OAAO,MAAM,UAAA,CAAU,QAAA,CAAS,IAAA,CAAK,QAAA,EAAU,KAAK,OAAO,CAAA;AAAA,IAC7D;AAEA,IAAA,OAAO,IAAI,gBAAA,CAAiB,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,aAAA,CACL,IAAA,EACA,IAAA,EACA,IAAA,EACW;AACX,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,OAAO,IAAI,eAAe,IAAA,EAAM;AAAA,QAC9B,GAAG,IAAA;AAAA,QACH,IAAA,EAAMA,QAAAA,CAAO,IAAA,CAAK,QAAQ,EAAE,QAAA,CAAS,SAAA;AAAA,QACrC,OAAA,EAAS,eAAA,CAAgB,IAAA,CAAK,QAAA,EAAU,KAAK,OAAO;AAAA,OACrD,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,OAAO,IAAI,eAAe,IAAA,EAAM;AAAA,QAC9B,GAAG,IAAA;AAAA,QACH,IAAA,EAAMA,QAAAA,CAAO,IAAA,CAAK,QAAQ,EAAE,QAAA,CAAS,IAAA;AAAA,QACrC,OAAA,EAAS,eAAA,CAAgB,IAAA,CAAK,QAAA,EAAU,KAAK,OAAO;AAAA,OACrD,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,IAAI,gBAAA,CAAiB,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,KAAA,CAAM,IAAA,EAAc,IAAA,EAAqB,IAAA,EAA4C;AAC1F,IAAA,OAAO,IAAI,cAAA,CAAe,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,GAAA,CACL,IAAA,EACA,IAAA,EACA,IAAA,EACW;AACX,IAAA,OAAO,IAAI,iBAAA,CAAkB,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAC/C;AAAA,EAEA,OAAwB,cAAA,mBAAiB,IAAI,GAAA,EAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAapE,OAAO,GAAA,CAAI,MAAA,EAAuB,OAAA,EAAwC;AACxE,IAAA,OAAO,WAAA;AAAA,MACL,UAAA,CAAU,cAAA;AAAA,MACV,CAAA,EAAG,OAAO,WAAW,CAAA,CAAA,EAAI,OAAO,QAAA,CAAS,IAAI,CAAA,CAAA,EAAI,MAAA,CAAO,SAAS,CAAA,CAAA;AAAA,MACjE,CAAA,IAAA,KAAQ;AACN,QAAA,OAAO,UAAA,CAAU,IAAI,IAAA,EAAM;AAAA,UACzB,IAAA,EAAM,OAAO,QAAA,CAAS,IAAA;AAAA,UACtB,OAAA,EAAS,eAAA,CAAgB,MAAA,EAAQ,OAAO;AAAA,SACzC,CAAA;AAAA,MACH;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAa,QAAA,CACX,MAAA,EACA,OAAA,EACoB;AACpB,IAAA,MAAM,cAAA,GAAiB,MAAMC,SAAAA,CAAU,MAAM,CAAA;AAE7C,IAAA,OAAO,UAAA,CAAU,GAAA,CAAI,cAAA,EAAgB,OAAO,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,OAAO,WAAA,CAAY,QAAA,EAA8B,OAAA,EAAwC;AACvF,IAAA,OAAO,WAAA;AAAA,MACL,UAAA,CAAU,cAAA;AAAA,MACV,CAAA,EAAG,SAAS,WAAW,CAAA,CAAA,EAAI,SAAS,QAAA,CAAS,SAAS,CAAA,CAAA,EAAI,QAAA,CAAS,SAAS,CAAA,CAAA;AAAA,MAC5E,CAAA,IAAA,KAAQ;AACN,QAAA,OAAO,UAAA,CAAU,IAAI,IAAA,EAAM;AAAA,UACzB,IAAA,EAAM,SAAS,QAAA,CAAS,SAAA;AAAA,UACxB,OAAA,EAAS,eAAA,CAAgB,QAAA,EAAU,OAAO;AAAA,SAC3C,CAAA;AAAA,MACH;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAa,gBAAA,CACX,QAAA,EACA,OAAA,EACoB;AACpB,IAAA,MAAM,gBAAA,GAAmB,MAAMA,SAAAA,CAAU,QAAQ,CAAA;AAEjD,IAAA,OAAO,UAAA,CAAU,WAAA,CAAY,gBAAA,EAAkB,OAAO,CAAA;AAAA,EACxD;AACF;AAEA,SAAS,oBAAA,CACP,MACA,YAAA,EACgD;AAChD,EAAA,OAAO,WAAA,CAAY,IAAA,EAAM,YAAY,CAAA,CAAE,MAAM,CAAA,QAAA,KAAY;AACvD,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,QAAA,CAAS,MAAA,GAAS;AAAA,QAChB,GAAG,QAAA,CAAS,MAAA;AAAA,QACZ,oCAAA,EAAsC;AAAA,OACxC;AAAA,IACF;AAEA,IAAA,OAAO,QAAA;AAAA,EACT,CAAC,CAAA;AACH;AAEA,IAAM,gBAAA,GAAN,cAA+B,SAAA,CAAU;AAAA,EACvC,WAAA,CAAY,IAAA,EAAc,IAAA,EAAqB,IAAA,EAAiC;AAC9E,IAAA,MAAM,YAAYD,QAAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAM,CAAA,OAAA,KAAW;AACtD,MAAA,OAAO,IAAIE,KAAK,EAAA,CAAG,SAAA;AAAA,QACjB,IAAA;AAAA,QACA,EAAE,QAAA,EAAU,oBAAA,CAAqB,IAAA,EAAM,IAAI,CAAA,EAAE;AAAA,QAC7C,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,MAAM,QAAA,EAAU,WAAA,CAAY,OAAO,CAAA;AAAE,OAC1D;AAAA,IACF,CAAC,CAAA;AAED,IAAA,KAAA;AAAA,MACE,yBAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACAF,QAAAA,CAAO,KAAK,OAAO,CAAA;AAAA,MACnB,SAAA,CAAU,QAAA;AAAA,MACV,SAAA,CAAU,IAAA;AAAA,MACV,SAAA,CAAU;AAAA,KACZ;AAAA,EACF;AACF,CAAA;AAEA,IAAM,cAAA,GAAN,cAA6B,SAAA,CAAU;AAAA,EACrC,WAAA,CAAY,IAAA,EAAc,IAAA,EAAqB,IAAA,EAAiC;AAC9E,IAAA,MAAM,YAAYA,QAAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAM,CAAA,OAAA,KAAW;AACtD,MAAA,OAAO,IAAIE,KAAK,EAAA,CAAG,cAAA;AAAA,QACjB,IAAA;AAAA,QACA,EAAE,QAAA,EAAU,oBAAA,CAAqB,IAAA,EAAM,IAAI,CAAA,EAAE;AAAA,QAC7C,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,MAAM,QAAA,EAAU,WAAA,CAAY,OAAO,CAAA;AAAE,OAC1D;AAAA,IACF,CAAC,CAAA;AAED,IAAA,KAAA;AAAA,MACE,8BAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACAF,QAAAA,CAAO,KAAK,OAAO,CAAA;AAAA,MACnB,SAAA,CAAU,QAAA;AAAA,MACV,SAAA,CAAU,IAAA;AAAA,MACV,SAAA,CAAU;AAAA,KACZ;AAAA,EACF;AACF,CAAA;AA0BA,IAAM,iBAAA,GAAN,cAAgC,SAAA,CAAU;AAAA,EACxC,WAAA,CAAY,IAAA,EAAc,IAAA,EAA6B,IAAA,EAAiC;AACtF,IAAA,MAAM,YAAYA,QAAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAM,CAAA,OAAA,KAAW;AACtD,MAAA,OAAOE,KAAK,EAAA,CAAG,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,KAAK,IAAA,EAAM;AAAA,QAC5C,GAAG,IAAA;AAAA,QACH,MAAA,EAAQ,IAAA;AAAA,QACR,QAAA,EAAU,YAAY,OAAO;AAAA,OAC9B,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,KAAA;AAAA,MACE,iCAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACAF,QAAAA,CAAO,KAAK,OAAO,CAAA;AAAA,MACnB,SAAA,CAAU,QAAA;AAAA,MACV,SAAA,CAAU,IAAA;AAAA,MACV,SAAA,CAAU;AAAA,KACZ;AAAA,EACF;AACF,CAAA;AAEA,IAAM,gBAAA,GAAN,cAA+B,SAAA,CAAU;AAAA,EACvC,WAAA,CAAY,IAAA,EAAc,IAAA,EAA4B,IAAA,EAAiC;AACrF,IAAA,KAAA;AAAA,MACE,gCAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MAEAA,QAAAA,CAAO,KAAK,OAAO,CAAA;AAAA,MACnBA,QAAAA,CAAO,IAAA,CAAK,SAAS,CAAA,CAAE,QAAA;AAAA,MACvBA,QAAAA,CAAO,IAAA,CAAK,SAAS,CAAA,CAAE,IAAA;AAAA,MACvBA,QAAAA,CAAO,IAAA,CAAK,SAAS,CAAA,CAAE;AAAA,KACzB;AAAA,EACF;AACF,CAAA","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 +0,0 @@
1
- {"version":3,"sources":["../src/secret.ts"],"names":["secret"],"mappings":"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","file":"chunk-VJL2BFKO.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 SecretArgs = ScopedResourceArgs &\n Omit<types.input.core.v1.Secret, \"kind\" | \"metadata\" | \"apiVersion\">\n\nexport type CreateOrGetSecretArgs = SecretArgs & {\n /**\n * The secret entity to patch/retrieve.\n */\n existing: Input<k8s.ScopedResource> | undefined\n}\n\n/**\n * Represents a Kubernetes Secret resource with metadata and data.\n */\nexport abstract class Secret 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 secret.\n */\n readonly data: Output<Record<string, string>>,\n\n /**\n * The stringData of the underlying Kubernetes secret.\n */\n readonly stringData: Output<Record<string, string>>,\n ) {\n super(type, name, args, opts, apiVersion, kind, namespace, metadata)\n }\n\n /**\n * The Highstate secret entity.\n */\n get entity(): Output<k8s.ScopedResource> {\n return output({\n type: \"secret\",\n clusterId: this.cluster.id,\n clusterName: this.cluster.name,\n metadata: this.metadata,\n })\n }\n\n /**\n * Gets the value of the secret field by the given key in `data`.\n *\n * Automatically decodes the base64 value.\n *\n * @param key The key of the secret.\n * @returns The value of the secret.\n */\n getValue(key: string): Output<string> {\n return this.data[key].apply(value => Buffer.from(value, \"base64\").toString())\n }\n\n /**\n * Creates a new secret.\n */\n static create(name: string, args: SecretArgs, opts?: ComponentResourceOptions): Secret {\n return new CreatedSecret(name, args, opts)\n }\n\n /**\n * Creates a new secret or patches an existing one.\n *\n * @param name The name of the resource. May not be the same as the secret name.\n * @param args The arguments to create or patch the secret with.\n * @param opts Optional resource options.\n */\n static createOrPatch(\n name: string,\n args: CreateOrGetSecretArgs,\n opts?: ComponentResourceOptions,\n ): Secret {\n if (args.existing) {\n return new SecretPatch(name, {\n ...args,\n name: output(args.existing).metadata.name,\n })\n }\n\n return new CreatedSecret(name, args, opts)\n }\n\n /**\n * Creates a new secret or gets an existing one.\n *\n * @param name The name of the resource. May not be the same as the secret name. Will not be used when existing secret is retrieved.\n * @param args The arguments to create or get the secret with.\n * @param opts Optional resource options.\n */\n static async createOrGet(\n name: string,\n args: CreateOrGetSecretArgs,\n opts?: ComponentResourceOptions,\n ): Promise<Secret> {\n if (args.existing) {\n return await Secret.forAsync(args.existing, output(args.namespace).cluster)\n }\n\n return new CreatedSecret(name, args, opts)\n }\n\n /**\n * Patches an existing secret.\n *\n * Will throw an error if the secret does not exist.\n *\n * @param name The name of the resource. May not be the same as the secret name.\n * @param args The arguments to patch the secret with.\n * @param opts Optional resource options.\n */\n static patch(name: string, args: SecretArgs, opts?: ComponentResourceOptions): Secret {\n return new SecretPatch(name, args, opts)\n }\n\n /**\n * Wraps an existing Kubernetes secret.\n */\n static wrap(name: string, args: WrappedSecretArgs, opts?: ComponentResourceOptions): Secret {\n return new WrappedSecret(name, args, opts)\n }\n\n /**\n * Gets an existing secret.\n *\n * Will throw an error if the secret does not exist.\n */\n static get(name: string, args: ExternalSecretArgs, opts?: ComponentResourceOptions): Secret {\n return new ExternalSecret(name, args, opts)\n }\n\n private static readonly secretCache = new Map<string, Secret>()\n\n /**\n * Gets an existing secret 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 secret for.\n * @param cluster The cluster where the secret is located.\n */\n static for(entity: k8s.ScopedResource, cluster: Input<k8s.Cluster>): Secret {\n return getOrCreate(\n Secret.secretCache,\n `${entity.clusterName}.${entity.metadata.namespace}.${entity.metadata.name}.${entity.clusterId}`,\n name => {\n return Secret.get(name, {\n name: entity.metadata.name,\n namespace: Namespace.forResource(entity, cluster),\n })\n },\n )\n }\n\n /**\n * Gets an existing secret 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 secret for.\n * @param cluster The cluster where the secret is located.\n */\n static async forAsync(\n entity: Input<k8s.ScopedResource>,\n cluster: Input<k8s.Cluster>,\n ): Promise<Secret> {\n const resolvedEntity = await toPromise(entity)\n return Secret.for(resolvedEntity, cluster)\n }\n}\n\nclass CreatedSecret extends Secret {\n constructor(name: string, args: SecretArgs, opts?: ComponentResourceOptions) {\n const secret = output(args.namespace).cluster.apply(cluster => {\n return new core.v1.Secret(\n name,\n {\n metadata: mapMetadata(args, name),\n data: args.data,\n stringData: args.stringData,\n type: args.type,\n immutable: args.immutable,\n },\n {\n ...opts,\n parent: this,\n provider: getProvider(cluster),\n },\n )\n })\n\n super(\n \"highstate:k8s:Secret\",\n name,\n args,\n opts,\n secret.apiVersion,\n secret.kind,\n output(args.namespace),\n secret.metadata,\n secret.data,\n secret.stringData,\n )\n }\n}\n\nclass SecretPatch extends Secret {\n constructor(name: string, args: SecretArgs, opts?: ComponentResourceOptions) {\n const secret = output(args.namespace).cluster.apply(cluster => {\n return new core.v1.SecretPatch(\n name,\n {\n metadata: mapMetadata(args, name),\n data: args.data,\n stringData: args.stringData,\n type: args.type,\n immutable: args.immutable,\n },\n {\n ...opts,\n parent: this,\n provider: getProvider(cluster),\n },\n )\n })\n\n super(\n \"highstate:k8s:SecretPatch\",\n name,\n args,\n opts,\n secret.apiVersion,\n secret.kind,\n output(args.namespace),\n secret.metadata,\n secret.data,\n secret.stringData,\n )\n }\n}\n\nexport type WrappedSecretArgs = {\n /**\n * The underlying Kubernetes secret to wrap.\n */\n secret: Input<core.v1.Secret>\n\n /**\n * The namespace where the secret is located.\n */\n namespace: Input<Namespace>\n}\n\nclass WrappedSecret extends Secret {\n constructor(name: string, args: WrappedSecretArgs, opts?: ComponentResourceOptions) {\n super(\n \"highstate:k8s:WrappedSecret\",\n name,\n args,\n opts,\n\n output(args.secret).apiVersion,\n output(args.secret).kind,\n output(args.namespace),\n output(args.secret).metadata,\n output(args.secret).data,\n output(args.secret).stringData,\n )\n }\n}\n\nexport type ExternalSecretArgs = {\n /**\n * The name of the secret to get.\n */\n name: Input<string>\n\n /**\n * The namespace where the secret is located.\n */\n namespace: Input<Namespace>\n}\n\nclass ExternalSecret extends Secret {\n constructor(name: string, args: ExternalSecretArgs, opts?: ComponentResourceOptions) {\n const secret = output(args.namespace).cluster.apply(async cluster => {\n const secret = core.v1.Secret.get(\n name,\n interpolate`${output(args.namespace).metadata.name}/${args.name}`,\n { ...opts, parent: this, provider: getProvider(cluster) },\n )\n\n // TODO: investigate why this needed\n const namespace = await toPromise(output(args.namespace).metadata.name)\n const resolvedName = await toPromise(args.name)\n const metadata = await toPromise(secret.metadata)\n if (!metadata) {\n throw new Error(`Secret ${resolvedName} in namespace ${namespace} not found`)\n }\n\n return secret\n })\n\n super(\n \"highstate:k8s:ExternalSecret\",\n name,\n args,\n opts,\n\n secret.apiVersion,\n secret.kind,\n output(args.namespace),\n secret.metadata,\n secret.data,\n secret.stringData,\n )\n }\n}\n"]}