@highstate/k8s 0.14.2 → 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 +7 -12
  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,30 +1,27 @@
1
- import { isEndpointFromCluster, mapServiceToLabelSelector, Service, mapContainerPortToServicePort } from './chunk-3CKMDTYK.js';
2
- import { Secret } from './chunk-VJL2BFKO.js';
3
- import { commonExtraArgs, ScopedResource, Namespace, mapMetadata, getProvider, mapSelectorLikeToSelector, getProviderAsync, mapNamespaceNameToSelector, getNamespaceName, images_exports } from './chunk-SEWB4FUB.js';
1
+ import { isEndpointFromCluster, mapServiceToLabelSelector, Service, mapContainerPortToServicePort } from './chunk-TWBMG6TD.js';
2
+ import { Secret } from './chunk-4G6LLC2X.js';
3
+ import { commonExtraArgs, NamespacedResource, Namespace, mapMetadata, getProvider, mapSelectorLikeToSelector, getProviderAsync, mapNamespaceNameToSelector, getNamespaceName, images_exports } from './chunk-OBDQONMV.js';
4
4
  import { z, getOrCreate, trimIndentation } from '@highstate/contract';
5
5
  import { ComponentResource, toPromise, output as output$1, interpolate as interpolate$1, normalize, normalizeInputs, fileFromString } from '@highstate/pulumi';
6
6
  import { core, networking } from '@pulumi/kubernetes';
7
7
  import { output, interpolate } from '@pulumi/pulumi';
8
8
  import { deepmerge } from 'deepmerge-ts';
9
- import { omit, concat, map, groupBy, mergeDeep, uniqueBy, flat, merge, filter, isNonNullish, unique } from 'remeda';
10
- import { ImplementationMediator, filterEndpoints, parseL34Endpoint, l34EndpointToString, l3EndpointToCidr, AccessPointRoute } from '@highstate/common';
9
+ import { omit, concat, map, groupBy, isNonNullish, mergeDeep, uniqueBy, flat, merge, filter, unique } from 'remeda';
10
+ import { ImplementationMediator, parseEndpoint, addressToCidr, endpointToString, l3EndpointToCidr, AccessPointRoute, mergeEndpoints } from '@highstate/common';
11
11
  import { sha256 } from 'crypto-hash';
12
12
 
13
- var ConfigMap = class _ConfigMap extends ScopedResource {
14
- constructor(type, name, args, opts, apiVersion, kind, namespace, metadata, data) {
15
- super(type, name, args, opts, apiVersion, kind, namespace, metadata);
13
+ var ConfigMap = class _ConfigMap extends NamespacedResource {
14
+ constructor(type, name, args, opts, metadata, namespace, data) {
15
+ super(type, name, args, opts, metadata, namespace);
16
16
  this.data = data;
17
17
  }
18
+ static apiVersion = "v1";
19
+ static kind = "ConfigMap";
18
20
  /**
19
21
  * The Highstate config map entity.
20
22
  */
21
23
  get entity() {
22
- return output({
23
- type: "config-map",
24
- clusterId: this.cluster.id,
25
- clusterName: this.cluster.name,
26
- metadata: this.metadata
27
- });
24
+ return output(this.entityBase);
28
25
  }
29
26
  /**
30
27
  * Creates a new config map.
@@ -148,10 +145,8 @@ var CreatedConfigMap = class extends ConfigMap {
148
145
  name,
149
146
  args,
150
147
  opts,
151
- configMap.apiVersion,
152
- configMap.kind,
153
- output(args.namespace),
154
148
  configMap.metadata,
149
+ output(args.namespace),
155
150
  configMap.data
156
151
  );
157
152
  }
@@ -177,10 +172,8 @@ var ConfigMapPatch = class extends ConfigMap {
177
172
  name,
178
173
  args,
179
174
  opts,
180
- configMap.apiVersion,
181
- configMap.kind,
182
- output(args.namespace),
183
175
  configMap.metadata,
176
+ output(args.namespace),
184
177
  configMap.data
185
178
  );
186
179
  }
@@ -192,10 +185,8 @@ var WrappedConfigMap = class extends ConfigMap {
192
185
  name,
193
186
  args,
194
187
  opts,
195
- output(args.configMap).apiVersion,
196
- output(args.configMap).kind,
197
- output(args.namespace),
198
188
  output(args.configMap).metadata,
189
+ output(args.namespace),
199
190
  output(args.configMap).data
200
191
  );
201
192
  }
@@ -214,31 +205,26 @@ var ExternalConfigMap = class extends ConfigMap {
214
205
  name,
215
206
  args,
216
207
  opts,
217
- configMap.apiVersion,
218
- configMap.kind,
219
- output(args.namespace),
220
208
  configMap.metadata,
209
+ output(args.namespace),
221
210
  configMap.data
222
211
  );
223
212
  }
224
213
  };
225
214
  var extraPersistentVolumeClaimArgs = [...commonExtraArgs, "size"];
226
- var PersistentVolumeClaim = class _PersistentVolumeClaim extends ScopedResource {
227
- constructor(type, name, args, opts, apiVersion, kind, namespace, metadata, spec, status) {
228
- super(type, name, args, opts, apiVersion, kind, namespace, metadata);
215
+ var PersistentVolumeClaim = class _PersistentVolumeClaim extends NamespacedResource {
216
+ constructor(type, name, args, opts, metadata, namespace, spec, status) {
217
+ super(type, name, args, opts, metadata, namespace);
229
218
  this.spec = spec;
230
219
  this.status = status;
231
220
  }
221
+ static apiVersion = "v1";
222
+ static kind = "PersistentVolumeClaim";
232
223
  /**
233
224
  * The Highstate PVC entity.
234
225
  */
235
226
  get entity() {
236
- return output$1({
237
- type: "persistent-volume-claim",
238
- clusterId: this.cluster.id,
239
- clusterName: this.cluster.name,
240
- metadata: this.metadata
241
- });
227
+ return output$1(this.entityBase);
242
228
  }
243
229
  /**
244
230
  * Creates a new PVC.
@@ -374,10 +360,8 @@ var CreatedPersistentVolumeClaim = class extends PersistentVolumeClaim {
374
360
  name,
375
361
  args,
376
362
  opts,
377
- pvc.apiVersion,
378
- pvc.kind,
379
- output$1(args.namespace),
380
363
  pvc.metadata,
364
+ output$1(args.namespace),
381
365
  pvc.spec,
382
366
  pvc.status
383
367
  );
@@ -416,10 +400,8 @@ var PersistentVolumeClaimPatch = class extends PersistentVolumeClaim {
416
400
  name,
417
401
  args,
418
402
  opts,
419
- pvc.apiVersion,
420
- pvc.kind,
421
- output$1(args.namespace),
422
403
  pvc.metadata,
404
+ output$1(args.namespace),
423
405
  pvc.spec,
424
406
  pvc.status
425
407
  );
@@ -432,10 +414,8 @@ var WrappedPersistentVolumeClaim = class extends PersistentVolumeClaim {
432
414
  name,
433
415
  args,
434
416
  opts,
435
- output$1(args.pvc).apiVersion,
436
- output$1(args.pvc).kind,
437
- output$1(args.namespace),
438
417
  output$1(args.pvc).metadata,
418
+ output$1(args.namespace),
439
419
  output$1(args.pvc).spec,
440
420
  output$1(args.pvc).status
441
421
  );
@@ -455,10 +435,8 @@ var ExternalPersistentVolumeClaim = class extends PersistentVolumeClaim {
455
435
  name,
456
436
  args,
457
437
  opts,
458
- pvc.apiVersion,
459
- pvc.kind,
460
- output$1(args.namespace),
461
438
  pvc.metadata,
439
+ output$1(args.namespace),
462
440
  pvc.spec,
463
441
  pvc.status
464
442
  );
@@ -664,6 +642,8 @@ function getWorkloadVolumeResourceUuid(volume) {
664
642
  }
665
643
  return output$1(void 0);
666
644
  }
645
+
646
+ // src/network.ts
667
647
  function getBestEndpoint(endpoints, cluster) {
668
648
  if (!endpoints.length) {
669
649
  return void 0;
@@ -671,14 +651,19 @@ function getBestEndpoint(endpoints, cluster) {
671
651
  if (endpoints.length === 1) {
672
652
  return endpoints[0];
673
653
  }
674
- if (!cluster) {
675
- return filterEndpoints(endpoints)[0];
654
+ if (cluster) {
655
+ const clusterEndpoint = endpoints.find(
656
+ (endpoint) => isEndpointFromCluster(endpoint, cluster) && endpoint.metadata["k8s.service"].isInternal
657
+ );
658
+ if (clusterEndpoint) {
659
+ return clusterEndpoint;
660
+ }
676
661
  }
677
- const clusterEndpoint = endpoints.find((endpoint) => isEndpointFromCluster(endpoint, cluster));
678
- if (clusterEndpoint) {
679
- return clusterEndpoint;
662
+ const publicEndpoint = endpoints.find((endpoint) => endpoint.metadata["iana.scope"] === "global");
663
+ if (publicEndpoint) {
664
+ return publicEndpoint;
680
665
  }
681
- return filterEndpoints(endpoints)[0];
666
+ return endpoints[0];
682
667
  }
683
668
  function requireBestEndpoint(endpoints, cluster) {
684
669
  const endpoint = getBestEndpoint(endpoints, cluster);
@@ -724,7 +709,7 @@ var NetworkPolicy = class _NetworkPolicy extends ComponentResource {
724
709
  allowKubeApiServer: args2.allowKubeApiServer ?? false,
725
710
  ingressRules: ingressRules.flatMap((rule) => {
726
711
  const endpoints = normalize(rule?.fromEndpoint, rule?.fromEndpoints);
727
- const parsedEndpoints = endpoints.map(parseL34Endpoint);
712
+ const parsedEndpoints = endpoints.map((endpoint) => parseEndpoint(endpoint));
728
713
  const endpointsNamespaces = groupBy(parsedEndpoints, (endpoint) => {
729
714
  const namespace = isEndpointFromCluster(endpoint, cluster) ? endpoint.metadata["k8s.service"].namespace : "";
730
715
  return namespace;
@@ -748,10 +733,10 @@ var NetworkPolicy = class _NetworkPolicy extends ComponentResource {
748
733
  }),
749
734
  egressRules: egressRules.flatMap((rule) => {
750
735
  const endpoints = normalize(rule?.toEndpoint, rule?.toEndpoints);
751
- const parsedEndpoints = endpoints.map(parseL34Endpoint);
736
+ const parsedEndpoints = endpoints.map((endpoint) => parseEndpoint(endpoint));
752
737
  const endpointsByPortsAnsNamespaces = groupBy(parsedEndpoints, (endpoint) => {
753
738
  const namespace = isEndpointFromCluster(endpoint, cluster) ? endpoint.metadata["k8s.service"].namespace : "";
754
- const port = isEndpointFromCluster(endpoint, cluster) ? endpoint.metadata["k8s.service"].targetPort : endpoint.port;
739
+ const port = isEndpointFromCluster(endpoint, cluster) ? endpoint.metadata["k8s.service"].targetPort : endpoint.level !== 3 ? endpoint.port : void 0;
755
740
  return `${port ?? "0"}:${namespace}`;
756
741
  });
757
742
  const l3OnlyRule = endpointsByPortsAnsNamespaces["0:"] ? _NetworkPolicy.getRuleFromEndpoint(
@@ -798,15 +783,14 @@ var NetworkPolicy = class _NetworkPolicy extends ComponentResource {
798
783
  })
799
784
  );
800
785
  }
801
- static mapCidrFromEndpoint(result) {
802
- if (result.type === "ipv4") {
803
- return `${result.address}/32`;
804
- }
805
- return `${result.address}/128`;
806
- }
807
786
  static getRuleFromEndpoint(port, endpoints, cluster) {
808
- const ports = port ? [{ port, protocol: endpoints[0].protocol?.toUpperCase() }] : [];
809
- const cidrs = endpoints.filter((endpoint) => !isEndpointFromCluster(endpoint, cluster)).filter((endpoint) => endpoint.type === "ipv4" || endpoint.type === "ipv6").map(_NetworkPolicy.mapCidrFromEndpoint);
787
+ const ports = port ? [
788
+ {
789
+ port,
790
+ protocol: endpoints[0].level !== 3 ? endpoints[0].protocol?.toUpperCase() : void 0
791
+ }
792
+ ] : [];
793
+ const cidrs = endpoints.filter((endpoint) => !isEndpointFromCluster(endpoint, cluster)).map((endpoint) => endpoint.address ? addressToCidr(endpoint.address) : null).filter(isNonNullish);
810
794
  const fqdns = endpoints.filter((endpoint) => endpoint.type === "hostname").map((endpoint) => endpoint.hostname);
811
795
  const selectors = endpoints.filter((endpoint) => isEndpointFromCluster(endpoint, cluster)).map((endpoint) => endpoint.metadata["k8s.service"].selector);
812
796
  const namespace = endpoints.filter((endpoint) => isEndpointFromCluster(endpoint, cluster)).map((endpoint) => endpoint.metadata["k8s.service"].namespace)[0];
@@ -961,15 +945,15 @@ var NetworkPolicy = class _NetworkPolicy extends ComponentResource {
961
945
  * @param opts Optional resource options.
962
946
  */
963
947
  static async allowEgressToEndpoint(namespace, endpoint, opts) {
964
- const parsedEndpoint = parseL34Endpoint(endpoint);
965
- const endpointStr = l34EndpointToString(parsedEndpoint).replace(/:/g, "-");
948
+ const parsedEndpoint = parseEndpoint(endpoint);
949
+ const endpointStr = endpointToString(parsedEndpoint).replace(/:/g, "-");
966
950
  const nsName = await toPromise(output$1(namespace).metadata.name);
967
951
  const cluster = await toPromise(output$1(namespace).cluster);
968
952
  return new _NetworkPolicy(
969
953
  `allow-egress-to-${endpointStr}.${cluster.name}.${nsName}.${cluster.id}`,
970
954
  {
971
955
  namespace,
972
- description: `Allow egress traffic to "${l34EndpointToString(parsedEndpoint)}" from the namespace.`,
956
+ description: `Allow egress traffic to "${endpointToString(parsedEndpoint)}" from the namespace.`,
973
957
  egressRule: { toEndpoint: endpoint }
974
958
  },
975
959
  opts
@@ -987,7 +971,10 @@ var NetworkPolicy = class _NetworkPolicy extends ComponentResource {
987
971
  static async allowEgressToBestEndpoint(namespace, endpoints, opts) {
988
972
  const cluster = await toPromise(output$1(namespace).cluster);
989
973
  const resolvedEndpoints = await toPromise(output$1(endpoints));
990
- const bestEndpoint = requireBestEndpoint(resolvedEndpoints.map(parseL34Endpoint), cluster);
974
+ const bestEndpoint = requireBestEndpoint(
975
+ resolvedEndpoints.map((endpoint) => parseEndpoint(endpoint)),
976
+ cluster
977
+ );
991
978
  return await _NetworkPolicy.allowEgressToEndpoint(namespace, bestEndpoint, opts);
992
979
  }
993
980
  /**
@@ -1000,15 +987,15 @@ var NetworkPolicy = class _NetworkPolicy extends ComponentResource {
1000
987
  * @param opts Optional resource options.
1001
988
  */
1002
989
  static async allowIngressFromEndpoint(namespace, endpoint, opts) {
1003
- const parsedEndpoint = parseL34Endpoint(endpoint);
1004
- const endpointStr = l34EndpointToString(parsedEndpoint).replace(/:/g, "-");
990
+ const parsedEndpoint = parseEndpoint(endpoint);
991
+ const endpointStr = endpointToString(parsedEndpoint).replace(/:/g, "-");
1005
992
  const nsName = await toPromise(output$1(namespace).metadata.name);
1006
993
  const cluster = await toPromise(output$1(namespace).cluster);
1007
994
  return new _NetworkPolicy(
1008
995
  `allow-ingress-from-${endpointStr}.${cluster.name}.${nsName}.${cluster.id}`,
1009
996
  {
1010
997
  namespace,
1011
- description: interpolate$1`Allow ingress traffic from "${l34EndpointToString(parsedEndpoint)}" to the namespace.`,
998
+ description: interpolate$1`Allow ingress traffic from "${endpointToString(parsedEndpoint)}" to the namespace.`,
1012
999
  ingressRule: { fromEndpoint: endpoint }
1013
1000
  },
1014
1001
  opts
@@ -1323,9 +1310,9 @@ function getExposableWorkloadComponents(name, args, parent, opts, isForPatch) {
1323
1310
  });
1324
1311
  return { labels, containers, volumes, podSpec, podTemplate, networkPolicy, service, routes };
1325
1312
  }
1326
- var Workload = class extends ScopedResource {
1327
- constructor(type, name, args, opts, apiVersion, kind, terminalArgs, containers, namespace, metadata, podTemplate, networkPolicy) {
1328
- super(type, name, args, opts, apiVersion, kind, namespace, metadata);
1313
+ var Workload = class extends NamespacedResource {
1314
+ constructor(type, name, args, opts, metadata, namespace, terminalArgs, containers, podTemplate, networkPolicy) {
1315
+ super(type, name, args, opts, metadata, namespace);
1329
1316
  this.name = name;
1330
1317
  this.terminalArgs = terminalArgs;
1331
1318
  this.containers = containers;
@@ -1336,7 +1323,7 @@ var Workload = class extends ScopedResource {
1336
1323
  set terminal(_value) {
1337
1324
  }
1338
1325
  /**
1339
- * The instance terminal to interact with the deployment.
1326
+ * The instance terminal to interact with the workload's pods.
1340
1327
  */
1341
1328
  get terminal() {
1342
1329
  const containerName = this.podTemplate.spec.containers.apply((containers) => containers[0].name);
@@ -1359,7 +1346,7 @@ var Workload = class extends ScopedResource {
1359
1346
  set -euo pipefail
1360
1347
 
1361
1348
  NAMESPACE="${this.metadata.namespace}"
1362
- RESOURCE_TYPE="${this.kind.apply((k) => k.toLowerCase())}"
1349
+ RESOURCE_TYPE="${this.kind.toLowerCase()}"
1363
1350
  RESOURCE_NAME="${this.metadata.name}"
1364
1351
  CONTAINER_NAME="${containerName}"
1365
1352
  SHELL="${shell}"
@@ -1433,7 +1420,7 @@ var Workload = class extends ScopedResource {
1433
1420
  "-it",
1434
1421
  "-n",
1435
1422
  this.metadata.namespace,
1436
- interpolate`${this.kind.apply((k) => k.toLowerCase())}/${this.metadata.name}`,
1423
+ `${this.kind.toLowerCase()}/${this.metadata.name}`,
1437
1424
  "-c",
1438
1425
  containerName,
1439
1426
  "--",
@@ -1450,20 +1437,90 @@ var Workload = class extends ScopedResource {
1450
1437
  }
1451
1438
  });
1452
1439
  }
1440
+ /**
1441
+ * Creates a generic workload or patches the existing one.
1442
+ */
1443
+ static createOrPatchGeneric(name, args, opts) {
1444
+ return output(args).apply(async (args2) => {
1445
+ if (args2.existing?.kind === "Deployment") {
1446
+ const { Deployment } = await import('./deployment-HRJGAEJR.js');
1447
+ return Deployment.patch(
1448
+ name,
1449
+ {
1450
+ ...deepmerge(args2, args2.deployment),
1451
+ name: args2.existing.metadata.name,
1452
+ namespace: Namespace.forResourceAsync(args2.existing, output(args2.namespace).cluster)
1453
+ },
1454
+ opts
1455
+ );
1456
+ }
1457
+ if (args2.existing?.kind === "StatefulSet") {
1458
+ const { StatefulSet } = await import('./stateful-set-LAJR5RL4.js');
1459
+ return StatefulSet.patch(
1460
+ name,
1461
+ {
1462
+ ...deepmerge(args2, args2.statefulSet),
1463
+ name: args2.existing.metadata.name,
1464
+ namespace: Namespace.forResourceAsync(args2.existing, output(args2.namespace).cluster)
1465
+ },
1466
+ opts
1467
+ );
1468
+ }
1469
+ if (args2.existing?.kind === "Job") {
1470
+ const { Job } = await import('./job-J4BKBVQD.js');
1471
+ return Job.patch(
1472
+ name,
1473
+ {
1474
+ ...deepmerge(args2, args2.job),
1475
+ name: args2.existing.metadata.name,
1476
+ namespace: Namespace.forResourceAsync(args2.existing, output(args2.namespace).cluster)
1477
+ },
1478
+ opts
1479
+ );
1480
+ }
1481
+ if (args2.existing?.kind === "CronJob") {
1482
+ const { CronJob } = await import('./cron-job-LX35I6HG.js');
1483
+ return CronJob.patch(
1484
+ name,
1485
+ {
1486
+ ...deepmerge(args2, args2.cronJob),
1487
+ name: args2.existing.metadata.name,
1488
+ namespace: Namespace.forResourceAsync(args2.existing, output(args2.namespace).cluster)
1489
+ },
1490
+ opts
1491
+ );
1492
+ }
1493
+ if (args2.defaultType === "Deployment") {
1494
+ const { Deployment } = await import('./deployment-HRJGAEJR.js');
1495
+ return Deployment.create(name, deepmerge(args2, args2.deployment), opts);
1496
+ }
1497
+ if (args2.defaultType === "StatefulSet") {
1498
+ const { StatefulSet } = await import('./stateful-set-LAJR5RL4.js');
1499
+ return StatefulSet.create(name, deepmerge(args2, args2.statefulSet), opts);
1500
+ }
1501
+ if (args2.defaultType === "Job") {
1502
+ const { Job } = await import('./job-J4BKBVQD.js');
1503
+ return Job.create(name, deepmerge(args2, args2.job), opts);
1504
+ }
1505
+ if (args2.defaultType === "CronJob") {
1506
+ const { CronJob } = await import('./cron-job-LX35I6HG.js');
1507
+ return CronJob.create(name, deepmerge(args2, args2.cronJob), opts);
1508
+ }
1509
+ throw new Error(`Unknown workload type: ${args2.defaultType}`);
1510
+ });
1511
+ }
1453
1512
  };
1454
1513
  var ExposableWorkload = class extends Workload {
1455
- constructor(type, name, args, opts, apiVersion, kind, terminalArgs, containers, namespace, metadata, podTemplate, networkPolicy, _service, routes) {
1514
+ constructor(type, name, args, opts, metadata, namespace, terminalArgs, containers, podTemplate, networkPolicy, _service, routes) {
1456
1515
  super(
1457
1516
  type,
1458
1517
  name,
1459
1518
  args,
1460
1519
  opts,
1461
- apiVersion,
1462
- kind,
1520
+ metadata,
1521
+ namespace,
1463
1522
  terminalArgs,
1464
1523
  containers,
1465
- namespace,
1466
- metadata,
1467
1524
  podTemplate,
1468
1525
  networkPolicy
1469
1526
  );
@@ -1496,12 +1553,20 @@ var ExposableWorkload = class extends Workload {
1496
1553
  });
1497
1554
  }
1498
1555
  /**
1499
- * Creates a generic workload or patches the existing one.
1556
+ * The merged and deduplicated L3 endpoints of all routes.
1557
+ */
1558
+ get endpoints() {
1559
+ return this.routes.apply(
1560
+ (routes) => output(routes.map((route) => route.route.endpoints)).apply((endpoints) => flat(endpoints)).apply(mergeEndpoints)
1561
+ );
1562
+ }
1563
+ /**
1564
+ * Creates a generic exposable workload or patches the existing one.
1500
1565
  */
1501
1566
  static createOrPatchGeneric(name, args, opts) {
1502
1567
  return output(args).apply(async (args2) => {
1503
- if (args2.existing?.type === "deployment") {
1504
- const { Deployment } = await import('./deployment-THUD5QUH.js');
1568
+ if (args2.existing?.kind === "Deployment") {
1569
+ const { Deployment } = await import('./deployment-HRJGAEJR.js');
1505
1570
  return Deployment.patch(
1506
1571
  name,
1507
1572
  {
@@ -1512,8 +1577,8 @@ var ExposableWorkload = class extends Workload {
1512
1577
  opts
1513
1578
  );
1514
1579
  }
1515
- if (args2.existing?.type === "stateful-set") {
1516
- const { StatefulSet } = await import('./stateful-set-ABCZML4L.js');
1580
+ if (args2.existing?.kind === "StatefulSet") {
1581
+ const { StatefulSet } = await import('./stateful-set-LAJR5RL4.js');
1517
1582
  return StatefulSet.patch(
1518
1583
  name,
1519
1584
  {
@@ -1524,19 +1589,19 @@ var ExposableWorkload = class extends Workload {
1524
1589
  opts
1525
1590
  );
1526
1591
  }
1527
- if (args2.type === "Deployment") {
1528
- const { Deployment } = await import('./deployment-THUD5QUH.js');
1592
+ if (args2.defaultType === "Deployment") {
1593
+ const { Deployment } = await import('./deployment-HRJGAEJR.js');
1529
1594
  return Deployment.create(name, deepmerge(args2, args2.deployment), opts);
1530
1595
  }
1531
- if (args2.type === "StatefulSet") {
1532
- const { StatefulSet } = await import('./stateful-set-ABCZML4L.js');
1596
+ if (args2.defaultType === "StatefulSet") {
1597
+ const { StatefulSet } = await import('./stateful-set-LAJR5RL4.js');
1533
1598
  return StatefulSet.create(name, deepmerge(args2, args2.statefulSet), opts);
1534
1599
  }
1535
- throw new Error(`Unknown workload type: ${args2.type}`);
1600
+ throw new Error(`Unknown workload type: ${args2.defaultType}`);
1536
1601
  });
1537
1602
  }
1538
1603
  };
1539
1604
 
1540
1605
  export { ConfigMap, ExposableWorkload, NativeNetworkPolicy, NetworkPolicy, PersistentVolumeClaim, Workload, exposableWorkloadExtraArgs, getAutoVolumeName, getBestEndpoint, getExposableWorkloadComponents, getFallbackContainerName, getWorkloadComponents, getWorkloadVolumeResourceUuid, mapContainerEnvironment, mapContainerToRaw, mapEnvironmentSource, mapVolumeMount, mapWorkloadVolume, networkPolicyMediator, podSpecDefaults, requireBestEndpoint, workloadExtraArgs };
1541
- //# sourceMappingURL=chunk-YTRQ6JRU.js.map
1542
- //# sourceMappingURL=chunk-YTRQ6JRU.js.map
1606
+ //# sourceMappingURL=chunk-XRIC6EJ3.js.map
1607
+ //# sourceMappingURL=chunk-XRIC6EJ3.js.map