@highstate/k8s 0.9.18 → 0.9.19

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 (93) hide show
  1. package/dist/chunk-2EEHJZPD.js +13 -0
  2. package/dist/chunk-2EEHJZPD.js.map +1 -0
  3. package/dist/{chunk-OFFSHGC6.js → chunk-4JGXGN2L.js} +66 -48
  4. package/dist/chunk-4JGXGN2L.js.map +1 -0
  5. package/dist/chunk-A3XGSDIW.js +306 -0
  6. package/dist/chunk-A3XGSDIW.js.map +1 -0
  7. package/dist/chunk-IMTXUK2U.js +244 -0
  8. package/dist/chunk-IMTXUK2U.js.map +1 -0
  9. package/dist/chunk-JYNXQ3I3.js +287 -0
  10. package/dist/chunk-JYNXQ3I3.js.map +1 -0
  11. package/dist/{chunk-5C2BJGES.js → chunk-KDD6XUWM.js} +30 -23
  12. package/dist/chunk-KDD6XUWM.js.map +1 -0
  13. package/dist/chunk-NOFJC3EM.js +236 -0
  14. package/dist/chunk-NOFJC3EM.js.map +1 -0
  15. package/dist/chunk-NXSYCA3V.js +337 -0
  16. package/dist/chunk-NXSYCA3V.js.map +1 -0
  17. package/dist/chunk-SBC3TUIN.js +1513 -0
  18. package/dist/chunk-SBC3TUIN.js.map +1 -0
  19. package/dist/chunk-SI7X6N46.js +338 -0
  20. package/dist/chunk-SI7X6N46.js.map +1 -0
  21. package/dist/chunk-WGMJCZSK.js +360 -0
  22. package/dist/chunk-WGMJCZSK.js.map +1 -0
  23. package/dist/deployment-752P6JIT.js +8 -0
  24. package/dist/{deployment-XK3CDJOE.js.map → deployment-752P6JIT.js.map} +1 -1
  25. package/dist/highstate.manifest.json +8 -7
  26. package/dist/impl/gateway-route.js +123 -0
  27. package/dist/impl/gateway-route.js.map +1 -0
  28. package/dist/impl/tls-certificate.js +32 -0
  29. package/dist/impl/tls-certificate.js.map +1 -0
  30. package/dist/index.js +736 -208
  31. package/dist/index.js.map +1 -1
  32. package/dist/stateful-set-N64YVKR7.js +8 -0
  33. package/dist/{stateful-set-7CAQWTV2.js.map → stateful-set-N64YVKR7.js.map} +1 -1
  34. package/dist/units/cert-manager/index.js +11 -10
  35. package/dist/units/cert-manager/index.js.map +1 -1
  36. package/dist/units/dns01-issuer/index.js +27 -23
  37. package/dist/units/dns01-issuer/index.js.map +1 -1
  38. package/dist/units/existing-cluster/index.js +11 -8
  39. package/dist/units/existing-cluster/index.js.map +1 -1
  40. package/dist/units/gateway-api/index.js +2 -2
  41. package/dist/units/gateway-api/index.js.map +1 -1
  42. package/package.json +39 -13
  43. package/src/cluster.ts +30 -22
  44. package/src/config-map.ts +195 -57
  45. package/src/container.ts +5 -5
  46. package/src/cron-job.ts +403 -31
  47. package/src/deployment.ts +260 -120
  48. package/src/dns01-solver.ts +10 -0
  49. package/src/gateway/backend.ts +2 -2
  50. package/src/gateway/gateway.ts +383 -0
  51. package/src/gateway/http-route.ts +17 -24
  52. package/src/gateway/index.ts +1 -0
  53. package/src/helm.ts +83 -53
  54. package/src/impl/gateway-route.ts +155 -0
  55. package/src/impl/tls-certificate.ts +33 -0
  56. package/src/index.ts +22 -67
  57. package/src/job.ts +393 -28
  58. package/src/namespace.ts +236 -99
  59. package/src/network-policy.ts +216 -165
  60. package/src/network.ts +2 -2
  61. package/src/pvc.ts +266 -65
  62. package/src/rbac.ts +218 -0
  63. package/src/scripting/bundle.ts +9 -20
  64. package/src/scripting/container.ts +1 -1
  65. package/src/scripting/environment.ts +5 -5
  66. package/src/secret.ts +200 -62
  67. package/src/service.ts +288 -158
  68. package/src/shared.ts +94 -67
  69. package/src/stateful-set.ts +270 -117
  70. package/src/tls.ts +344 -0
  71. package/src/units/cert-manager/index.ts +2 -3
  72. package/src/units/dns01-issuer/index.ts +30 -14
  73. package/src/units/existing-cluster/index.ts +10 -7
  74. package/src/units/gateway-api/index.ts +2 -2
  75. package/src/worker.ts +26 -0
  76. package/src/workload.ts +275 -171
  77. package/dist/chunk-5C2BJGES.js.map +0 -1
  78. package/dist/chunk-5TLC5BXR.js +0 -256
  79. package/dist/chunk-5TLC5BXR.js.map +0 -1
  80. package/dist/chunk-BBIY3KUN.js +0 -1557
  81. package/dist/chunk-BBIY3KUN.js.map +0 -1
  82. package/dist/chunk-OFFSHGC6.js.map +0 -1
  83. package/dist/chunk-TZHOUJRC.js +0 -202
  84. package/dist/chunk-TZHOUJRC.js.map +0 -1
  85. package/dist/chunk-YWRJ4EZM.js +0 -192
  86. package/dist/chunk-YWRJ4EZM.js.map +0 -1
  87. package/dist/deployment-XK3CDJOE.js +0 -6
  88. package/dist/stateful-set-7CAQWTV2.js +0 -6
  89. package/dist/units/access-point/index.js +0 -21
  90. package/dist/units/access-point/index.js.map +0 -1
  91. package/src/access-point.ts +0 -191
  92. package/src/units/access-point/index.ts +0 -19
  93. package/src/units/dns01-issuer/solver.ts +0 -23
package/src/deployment.ts CHANGED
@@ -1,23 +1,30 @@
1
+ import type { AccessPointRoute } from "@highstate/common"
1
2
  import type { k8s } from "@highstate/library"
2
- import type { HttpRoute } from "./gateway"
3
- import type { Service } from "./service"
3
+ import type { Container } from "./container"
4
4
  import type { NetworkPolicy } from "./network-policy"
5
- import { output, type ComponentResourceOptions, Output, type Input } from "@highstate/pulumi"
6
- import { apps, types } from "@pulumi/kubernetes"
7
- import { omit } from "remeda"
8
- import { deepmerge } from "deepmerge-ts"
5
+ import type { Service } from "./service"
6
+ import { getOrCreate, type UnitTerminal } from "@highstate/contract"
9
7
  import {
10
- getProvider,
11
- mapMetadata,
12
- resourceIdToString,
13
- withPatchName,
14
- type ResourceId,
15
- } from "./shared"
8
+ type ComponentResourceOptions,
9
+ type Input,
10
+ type Inputs,
11
+ interpolate,
12
+ type Output,
13
+ output,
14
+ toPromise,
15
+ type Unwrap,
16
+ } from "@highstate/pulumi"
17
+ import { apps, type types } from "@pulumi/kubernetes"
18
+ import { deepmerge } from "deepmerge-ts"
19
+ import { omit } from "remeda"
20
+ import { Namespace } from "./namespace"
21
+ import { getProvider, mapMetadata } from "./shared"
16
22
  import {
17
- exposableWorkloadExtraArgs,
18
23
  ExposableWorkload,
19
24
  type ExposableWorkloadArgs,
25
+ exposableWorkloadExtraArgs,
20
26
  getExposableWorkloadComponents,
27
+ type WorkloadTerminalArgs,
21
28
  } from "./workload"
22
29
 
23
30
  export type DeploymentArgs = Omit<ExposableWorkloadArgs, "existing"> &
@@ -39,11 +46,19 @@ export abstract class Deployment extends ExposableWorkload {
39
46
  protected constructor(
40
47
  type: string,
41
48
  name: string,
42
- args: ExposableWorkloadArgs,
49
+ args: Inputs,
43
50
  opts: ComponentResourceOptions | undefined,
44
51
 
45
- cluster: Output<k8s.Cluster>,
52
+ apiVersion: Output<string>,
53
+ kind: Output<string>,
54
+ terminalArgs: Output<Unwrap<WorkloadTerminalArgs>>,
55
+ containers: Output<Container[]>,
56
+ namespace: Output<Namespace>,
46
57
  metadata: Output<types.output.meta.v1.ObjectMeta>,
58
+ networkPolicy: Output<NetworkPolicy | undefined>,
59
+
60
+ service: Output<Service | undefined>,
61
+ routes: Output<AccessPointRoute[]>,
47
62
 
48
63
  /**
49
64
  * The spec of the underlying Kubernetes deployment.
@@ -54,111 +69,199 @@ export abstract class Deployment extends ExposableWorkload {
54
69
  * The status of the underlying Kubernetes deployment.
55
70
  */
56
71
  readonly status: Output<types.output.apps.v1.DeploymentStatus>,
57
-
58
- networkPolicy: Output<NetworkPolicy | undefined>,
59
-
60
- service: Output<Service | undefined>,
61
- httpRoute: Output<HttpRoute | undefined>,
62
72
  ) {
63
73
  super(
64
74
  type,
65
75
  name,
66
76
  args,
67
77
  opts,
68
- "deployment",
69
- cluster,
78
+ apiVersion,
79
+ kind,
80
+ terminalArgs,
81
+ containers,
82
+ namespace,
70
83
  metadata,
71
84
  networkPolicy,
72
85
  service,
73
- httpRoute,
86
+ routes,
74
87
  )
75
88
  }
76
89
 
90
+ protected override getTerminalMeta(): Output<UnitTerminal["meta"]> {
91
+ return output({
92
+ title: "Deployment",
93
+ globalTitle: interpolate`Deployment | ${this.metadata.name}`,
94
+ description: "The shell inside the deployment.",
95
+ icon: "devicon:kubernetes",
96
+ })
97
+ }
98
+
77
99
  /**
78
100
  * The Highstate deployment entity.
79
101
  */
80
102
  get entity(): Output<k8s.Deployment> {
81
103
  return output({
82
- type: "k8s.deployment",
104
+ type: "deployment",
83
105
  clusterId: this.cluster.id,
106
+ clusterName: this.cluster.name,
84
107
  metadata: this.metadata,
85
108
  service: this._service.apply(service => service?.entity),
86
109
  })
87
110
  }
88
111
 
112
+ /**
113
+ * Creates a new deployment.
114
+ */
89
115
  static create(name: string, args: DeploymentArgs, opts?: ComponentResourceOptions): Deployment {
90
116
  return new CreatedDeployment(name, args, opts)
91
117
  }
92
118
 
119
+ /**
120
+ * Creates a new deployment or patches an existing one.
121
+ *
122
+ * @param name The name of the resource. May not be the same as the deployment name.
123
+ * @param args The arguments to create or patch the deployment with.
124
+ * @param opts Optional resource options.
125
+ */
93
126
  static createOrPatch(
94
127
  name: string,
95
128
  args: CreateOrGetDeploymentArgs,
96
129
  opts?: ComponentResourceOptions,
97
130
  ): Deployment {
98
- if (!args.existing) {
99
- return new CreatedDeployment(name, args, opts)
131
+ if (args.existing) {
132
+ return new DeploymentPatch(name, {
133
+ ...args,
134
+ name: output(args.existing).metadata.name,
135
+ namespace: Namespace.forResourceAsync(args.existing, output(args.namespace).cluster),
136
+ })
100
137
  }
101
138
 
102
- return new DeploymentPatch(
103
- name,
104
- {
105
- ...args,
106
- name: withPatchName("deployment", args.existing, args.cluster),
107
- namespace: output(args.existing).metadata.namespace,
108
- },
109
- opts,
110
- )
139
+ return new CreatedDeployment(name, args, opts)
140
+ }
141
+
142
+ /**
143
+ * Creates a new deployment or gets an existing one.
144
+ *
145
+ * @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.
146
+ * @param args The arguments to create or get the deployment with.
147
+ * @param opts Optional resource options.
148
+ */
149
+ static async createOrGet(
150
+ name: string,
151
+ args: CreateOrGetDeploymentArgs,
152
+ opts?: ComponentResourceOptions,
153
+ ): Promise<Deployment> {
154
+ if (args.existing) {
155
+ return await Deployment.forAsync(args.existing, output(args.namespace).cluster)
156
+ }
157
+
158
+ return new CreatedDeployment(name, args, opts)
111
159
  }
112
160
 
161
+ /**
162
+ * Patches an existing deployment.
163
+ *
164
+ * Will throw an error if the deployment does not exist.
165
+ *
166
+ * @param name The name of the resource. May not be the same as the deployment name.
167
+ * @param args The arguments to patch the deployment with.
168
+ * @param opts Optional resource options.
169
+ */
113
170
  static patch(name: string, args: DeploymentArgs, opts?: ComponentResourceOptions): Deployment {
114
171
  return new DeploymentPatch(name, args, opts)
115
172
  }
116
173
 
117
- static createOrGet(
174
+ /**
175
+ * Wraps an existing Kubernetes deployment.
176
+ */
177
+ static wrap(
118
178
  name: string,
119
- args: CreateOrGetDeploymentArgs,
179
+ args: WrappedDeploymentArgs,
120
180
  opts?: ComponentResourceOptions,
121
181
  ): Deployment {
122
- if (!args.existing) {
123
- return new CreatedDeployment(name, args, opts)
124
- }
125
-
126
- return new ExternalDeployment(name, output(args.existing).metadata, args.cluster, opts)
182
+ return new WrappedDeployment(name, args, opts)
127
183
  }
128
184
 
129
- static wrap(
185
+ /**
186
+ * Gets an existing deployment.
187
+ *
188
+ * Will throw an error if the deployment does not exist.
189
+ */
190
+ static get(
130
191
  name: string,
131
- deployment: Input<apps.v1.Deployment>,
132
- cluster: Input<k8s.Cluster>,
192
+ args: ExternalDeploymentArgs,
133
193
  opts?: ComponentResourceOptions,
134
194
  ): Deployment {
135
- return new WrappedDeployment(name, deployment, cluster, opts)
195
+ return new ExternalDeployment(name, args, opts)
196
+ }
197
+
198
+ private static readonly deploymentCache = new Map<string, Deployment>()
199
+
200
+ /**
201
+ * Gets an existing deployment for a given entity.
202
+ * Prefer this method over `get` when possible.
203
+ *
204
+ * It automatically names the resource with the following format: `{clusterName}.{namespace}.{name}.{clusterId}`.
205
+ *
206
+ * This method is idempotent and will return the same instance for the same entity.
207
+ *
208
+ * @param entity The entity to get the deployment for.
209
+ * @param cluster The cluster where the deployment is located.
210
+ */
211
+ static for(entity: k8s.Deployment, cluster: Input<k8s.Cluster>): Deployment {
212
+ return getOrCreate(
213
+ Deployment.deploymentCache,
214
+ `${entity.clusterName}.${entity.metadata.namespace}.${entity.metadata.name}.${entity.clusterId}`,
215
+ name => {
216
+ return Deployment.get(name, {
217
+ name: entity.metadata.name,
218
+ namespace: Namespace.forResource(entity, cluster),
219
+ })
220
+ },
221
+ )
222
+ }
223
+
224
+ /**
225
+ * Gets an existing deployment for a given entity.
226
+ * Prefer this method over `get` when possible.
227
+ *
228
+ * It automatically names the resource with the following format: `{clusterName}.{namespace}.{name}.{clusterId}`.
229
+ *
230
+ * This method is idempotent and will return the same instance for the same entity.
231
+ *
232
+ * @param entity The entity to get the deployment for.
233
+ * @param cluster The cluster where the deployment is located.
234
+ */
235
+ static async forAsync(
236
+ entity: Input<k8s.Deployment>,
237
+ cluster: Input<k8s.Cluster>,
238
+ ): Promise<Deployment> {
239
+ const resolvedEntity = await toPromise(entity)
240
+ return Deployment.for(resolvedEntity, cluster)
136
241
  }
137
242
  }
138
243
 
139
244
  class CreatedDeployment extends Deployment {
140
245
  constructor(name: string, args: DeploymentArgs, opts?: ComponentResourceOptions) {
141
- const { labels, podTemplate, networkPolicy, service, httpRoute } =
246
+ const { labels, podTemplate, networkPolicy, containers, service, routes } =
142
247
  getExposableWorkloadComponents(name, args, () => this, opts)
143
248
 
144
- const deployment = output({ args, podTemplate }).apply(async ({ args, podTemplate }) => {
249
+ const deployment = output(args.namespace).cluster.apply(cluster => {
145
250
  return new apps.v1.Deployment(
146
251
  name,
147
252
  {
148
253
  metadata: mapMetadata(args, name),
149
- spec: deepmerge(
150
- {
151
- template: podTemplate,
152
- selector: { matchLabels: labels },
153
- },
154
- omit(args, exposableWorkloadExtraArgs),
155
- ) as types.input.apps.v1.DeploymentSpec,
156
- },
157
- {
158
- ...opts,
159
- parent: this,
160
- provider: await getProvider(args.cluster),
254
+ spec: output({ args, podTemplate, labels }).apply(({ args, podTemplate, labels }) => {
255
+ return deepmerge(
256
+ {
257
+ template: podTemplate,
258
+ selector: { matchLabels: labels },
259
+ },
260
+ omit(args, exposableWorkloadExtraArgs),
261
+ ) as types.input.apps.v1.DeploymentSpec
262
+ }),
161
263
  },
264
+ { ...opts, parent: this, provider: getProvider(cluster) },
162
265
  )
163
266
  })
164
267
 
@@ -168,45 +271,47 @@ class CreatedDeployment extends Deployment {
168
271
  args,
169
272
  opts,
170
273
 
171
- output(args.cluster),
274
+ deployment.apiVersion,
275
+ deployment.kind,
276
+ output(args.terminal ?? {}),
277
+ containers,
278
+ output(args.namespace),
172
279
  deployment.metadata,
173
- deployment.spec,
174
- deployment.status,
175
-
176
280
  networkPolicy,
281
+
177
282
  service,
178
- httpRoute,
283
+ routes,
284
+
285
+ deployment.spec,
286
+ deployment.status,
179
287
  )
180
288
  }
181
289
  }
182
290
 
183
291
  class DeploymentPatch extends Deployment {
184
292
  constructor(name: string, args: DeploymentArgs, opts?: ComponentResourceOptions) {
185
- const { podSpec, networkPolicy, service, httpRoute } = getExposableWorkloadComponents(
186
- name,
187
- args,
188
- () => this,
189
- opts,
190
- )
293
+ const { labels, podTemplate, networkPolicy, containers, service, routes } =
294
+ getExposableWorkloadComponents(name, args, () => this, opts)
191
295
 
192
- const deployment = output({ args, podSpec }).apply(async ({ args, podSpec }) => {
296
+ const deployment = output(args.namespace).cluster.apply(cluster => {
193
297
  return new apps.v1.DeploymentPatch(
194
298
  name,
195
299
  {
196
300
  metadata: mapMetadata(args, name),
197
- spec: deepmerge(
198
- {
199
- template: {
200
- spec: podSpec,
301
+ spec: output({ args, podTemplate, labels }).apply(({ args, podTemplate, labels }) => {
302
+ return deepmerge(
303
+ {
304
+ template: podTemplate,
305
+ selector: { matchLabels: labels },
201
306
  },
202
- },
203
- omit(args, exposableWorkloadExtraArgs),
204
- ) as types.input.apps.v1.DeploymentSpec,
307
+ omit(args, exposableWorkloadExtraArgs),
308
+ ) as types.input.apps.v1.DeploymentSpec
309
+ }),
205
310
  },
206
311
  {
207
312
  ...opts,
208
313
  parent: this,
209
- provider: await getProvider(args.cluster),
314
+ provider: getProvider(cluster),
210
315
  },
211
316
  )
212
317
  })
@@ -217,71 +322,106 @@ class DeploymentPatch extends Deployment {
217
322
  args,
218
323
  opts,
219
324
 
220
- output(args.cluster),
325
+ deployment.apiVersion,
326
+ deployment.kind,
327
+ output(args.terminal ?? {}),
328
+ containers,
329
+ output(args.namespace),
221
330
  deployment.metadata,
222
- deployment.spec,
223
- deployment.status,
224
-
225
331
  networkPolicy,
332
+
226
333
  service,
227
- httpRoute,
334
+ routes,
335
+
336
+ deployment.spec,
337
+ deployment.status,
228
338
  )
229
339
  }
230
340
  }
231
341
 
232
- class ExternalDeployment extends Deployment {
233
- constructor(
234
- name: string,
235
- id: Input<ResourceId>,
236
- cluster: Input<k8s.Cluster>,
237
- opts?: ComponentResourceOptions,
238
- ) {
239
- const deployment = output(id).apply(async id => {
240
- return apps.v1.Deployment.get(name, resourceIdToString(id), {
241
- ...opts,
242
- parent: this,
243
- provider: await getProvider(cluster),
244
- })
245
- })
342
+ export type WrappedDeploymentArgs = {
343
+ /**
344
+ * The underlying Kubernetes deployment to wrap.
345
+ */
346
+ deployment: Input<apps.v1.Deployment>
347
+
348
+ /**
349
+ * The namespace where the deployment is located.
350
+ */
351
+ namespace: Input<Namespace>
352
+
353
+ /**
354
+ * The args for the terminal to use.
355
+ */
356
+ terminal?: Input<WorkloadTerminalArgs>
357
+ }
246
358
 
359
+ class WrappedDeployment extends Deployment {
360
+ constructor(name: string, args: WrappedDeploymentArgs, opts?: ComponentResourceOptions) {
247
361
  super(
248
- "highstate:k8s:ExternalDeployment",
362
+ "highstate:k8s:WrappedDeployment",
249
363
  name,
250
- { namespace: output(id).namespace, cluster },
364
+ args,
251
365
  opts,
252
- output(cluster),
253
- deployment.metadata,
254
- deployment.spec,
255
- deployment.status,
366
+
367
+ output(args.deployment).apiVersion,
368
+ output(args.deployment).kind,
369
+ output(args.terminal ?? {}),
370
+ output([]),
371
+ output(args.namespace),
372
+ output(args.deployment).metadata,
256
373
 
257
374
  output(undefined),
258
375
  output(undefined),
259
- output(undefined),
376
+ output([]),
377
+
378
+ output(args.deployment).spec,
379
+ output(args.deployment).status,
260
380
  )
261
381
  }
262
382
  }
263
383
 
264
- class WrappedDeployment extends Deployment {
265
- constructor(
266
- name: string,
267
- deployment: Input<apps.v1.Deployment>,
268
- cluster: Input<k8s.Cluster>,
269
- opts?: ComponentResourceOptions,
270
- ) {
384
+ export type ExternalDeploymentArgs = {
385
+ /**
386
+ * The name of the deployment to get.
387
+ */
388
+ name: Input<string>
389
+
390
+ /**
391
+ * The namespace where the deployment is located.
392
+ */
393
+ namespace: Input<Namespace>
394
+ }
395
+
396
+ class ExternalDeployment extends Deployment {
397
+ constructor(name: string, args: ExternalDeploymentArgs, opts?: ComponentResourceOptions) {
398
+ const deployment = output(args.namespace).cluster.apply(cluster => {
399
+ return apps.v1.Deployment.get(
400
+ name,
401
+ interpolate`${output(args.namespace).metadata.name}/${args.name}`,
402
+ { ...opts, parent: this, provider: getProvider(cluster) },
403
+ )
404
+ })
405
+
271
406
  super(
272
- "highstate:k8s:WrappedDeployment",
407
+ "highstate:k8s:ExternalDeployment",
273
408
  name,
274
- { namespace: output(deployment).metadata.namespace, cluster },
409
+ args,
275
410
  opts,
276
411
 
277
- output(cluster),
278
- output(deployment).metadata,
279
- output(deployment).spec,
280
- output(deployment).status,
412
+ deployment.apiVersion,
413
+ deployment.kind,
414
+ output({}),
415
+ output([]),
416
+ output(args.namespace),
417
+ deployment.metadata,
281
418
 
282
419
  output(undefined),
283
420
  output(undefined),
284
- output(undefined),
421
+ output([]),
422
+
423
+ deployment.spec,
424
+ deployment.status,
285
425
  )
286
426
  }
287
427
  }
@@ -0,0 +1,10 @@
1
+ import type { types } from "@highstate/cert-manager"
2
+ import { ImplementationMediator } from "@highstate/common"
3
+ import { z } from "@highstate/contract"
4
+ import type { Namespace } from "./namespace"
5
+
6
+ export const dns01SolverMediator = new ImplementationMediator(
7
+ "dns01-solver",
8
+ z.object({ namespace: z.custom<Namespace>() }),
9
+ z.custom<types.input.cert_manager.v1.ClusterIssuerSpecAcmeSolversDns01>(),
10
+ )
@@ -1,5 +1,5 @@
1
- import { core } from "@pulumi/kubernetes"
2
- import { type Input, output, Output, type Unwrap } from "@highstate/pulumi"
1
+ import type { core } from "@pulumi/kubernetes"
2
+ import { type Input, output, type Output, type Unwrap } from "@highstate/pulumi"
3
3
  import { Service } from "../service"
4
4
 
5
5
  export interface FullBackendRef {