@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.
- package/dist/chunk-2EEHJZPD.js +13 -0
- package/dist/chunk-2EEHJZPD.js.map +1 -0
- package/dist/{chunk-OFFSHGC6.js → chunk-4JGXGN2L.js} +66 -48
- package/dist/chunk-4JGXGN2L.js.map +1 -0
- package/dist/chunk-A3XGSDIW.js +306 -0
- package/dist/chunk-A3XGSDIW.js.map +1 -0
- package/dist/chunk-IMTXUK2U.js +244 -0
- package/dist/chunk-IMTXUK2U.js.map +1 -0
- package/dist/chunk-JYNXQ3I3.js +287 -0
- package/dist/chunk-JYNXQ3I3.js.map +1 -0
- package/dist/{chunk-5C2BJGES.js → chunk-KDD6XUWM.js} +30 -23
- package/dist/chunk-KDD6XUWM.js.map +1 -0
- package/dist/chunk-NOFJC3EM.js +236 -0
- package/dist/chunk-NOFJC3EM.js.map +1 -0
- package/dist/chunk-NXSYCA3V.js +337 -0
- package/dist/chunk-NXSYCA3V.js.map +1 -0
- package/dist/chunk-SBC3TUIN.js +1513 -0
- package/dist/chunk-SBC3TUIN.js.map +1 -0
- package/dist/chunk-SI7X6N46.js +338 -0
- package/dist/chunk-SI7X6N46.js.map +1 -0
- package/dist/chunk-WGMJCZSK.js +360 -0
- package/dist/chunk-WGMJCZSK.js.map +1 -0
- package/dist/deployment-752P6JIT.js +8 -0
- package/dist/{deployment-XK3CDJOE.js.map → deployment-752P6JIT.js.map} +1 -1
- package/dist/highstate.manifest.json +8 -7
- package/dist/impl/gateway-route.js +123 -0
- package/dist/impl/gateway-route.js.map +1 -0
- package/dist/impl/tls-certificate.js +32 -0
- package/dist/impl/tls-certificate.js.map +1 -0
- package/dist/index.js +736 -208
- package/dist/index.js.map +1 -1
- package/dist/stateful-set-N64YVKR7.js +8 -0
- package/dist/{stateful-set-7CAQWTV2.js.map → stateful-set-N64YVKR7.js.map} +1 -1
- package/dist/units/cert-manager/index.js +11 -10
- package/dist/units/cert-manager/index.js.map +1 -1
- package/dist/units/dns01-issuer/index.js +27 -23
- package/dist/units/dns01-issuer/index.js.map +1 -1
- package/dist/units/existing-cluster/index.js +11 -8
- package/dist/units/existing-cluster/index.js.map +1 -1
- package/dist/units/gateway-api/index.js +2 -2
- package/dist/units/gateway-api/index.js.map +1 -1
- package/package.json +39 -13
- package/src/cluster.ts +30 -22
- package/src/config-map.ts +195 -57
- package/src/container.ts +5 -5
- package/src/cron-job.ts +403 -31
- package/src/deployment.ts +260 -120
- package/src/dns01-solver.ts +10 -0
- package/src/gateway/backend.ts +2 -2
- package/src/gateway/gateway.ts +383 -0
- package/src/gateway/http-route.ts +17 -24
- package/src/gateway/index.ts +1 -0
- package/src/helm.ts +83 -53
- package/src/impl/gateway-route.ts +155 -0
- package/src/impl/tls-certificate.ts +33 -0
- package/src/index.ts +22 -67
- package/src/job.ts +393 -28
- package/src/namespace.ts +236 -99
- package/src/network-policy.ts +216 -165
- package/src/network.ts +2 -2
- package/src/pvc.ts +266 -65
- package/src/rbac.ts +218 -0
- package/src/scripting/bundle.ts +9 -20
- package/src/scripting/container.ts +1 -1
- package/src/scripting/environment.ts +5 -5
- package/src/secret.ts +200 -62
- package/src/service.ts +288 -158
- package/src/shared.ts +94 -67
- package/src/stateful-set.ts +270 -117
- package/src/tls.ts +344 -0
- package/src/units/cert-manager/index.ts +2 -3
- package/src/units/dns01-issuer/index.ts +30 -14
- package/src/units/existing-cluster/index.ts +10 -7
- package/src/units/gateway-api/index.ts +2 -2
- package/src/worker.ts +26 -0
- package/src/workload.ts +275 -171
- package/dist/chunk-5C2BJGES.js.map +0 -1
- package/dist/chunk-5TLC5BXR.js +0 -256
- package/dist/chunk-5TLC5BXR.js.map +0 -1
- package/dist/chunk-BBIY3KUN.js +0 -1557
- package/dist/chunk-BBIY3KUN.js.map +0 -1
- package/dist/chunk-OFFSHGC6.js.map +0 -1
- package/dist/chunk-TZHOUJRC.js +0 -202
- package/dist/chunk-TZHOUJRC.js.map +0 -1
- package/dist/chunk-YWRJ4EZM.js +0 -192
- package/dist/chunk-YWRJ4EZM.js.map +0 -1
- package/dist/deployment-XK3CDJOE.js +0 -6
- package/dist/stateful-set-7CAQWTV2.js +0 -6
- package/dist/units/access-point/index.js +0 -21
- package/dist/units/access-point/index.js.map +0 -1
- package/src/access-point.ts +0 -191
- package/src/units/access-point/index.ts +0 -19
- 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 {
|
3
|
-
import type { Service } from "./service"
|
3
|
+
import type { Container } from "./container"
|
4
4
|
import type { NetworkPolicy } from "./network-policy"
|
5
|
-
import
|
6
|
-
import {
|
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
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
type
|
15
|
-
|
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:
|
49
|
+
args: Inputs,
|
43
50
|
opts: ComponentResourceOptions | undefined,
|
44
51
|
|
45
|
-
|
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
|
-
|
69
|
-
|
78
|
+
apiVersion,
|
79
|
+
kind,
|
80
|
+
terminalArgs,
|
81
|
+
containers,
|
82
|
+
namespace,
|
70
83
|
metadata,
|
71
84
|
networkPolicy,
|
72
85
|
service,
|
73
|
-
|
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: "
|
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 (
|
99
|
-
return new
|
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
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
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
|
-
|
174
|
+
/**
|
175
|
+
* Wraps an existing Kubernetes deployment.
|
176
|
+
*/
|
177
|
+
static wrap(
|
118
178
|
name: string,
|
119
|
-
args:
|
179
|
+
args: WrappedDeploymentArgs,
|
120
180
|
opts?: ComponentResourceOptions,
|
121
181
|
): Deployment {
|
122
|
-
|
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
|
-
|
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
|
-
|
132
|
-
cluster: Input<k8s.Cluster>,
|
192
|
+
args: ExternalDeploymentArgs,
|
133
193
|
opts?: ComponentResourceOptions,
|
134
194
|
): Deployment {
|
135
|
-
return new
|
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,
|
246
|
+
const { labels, podTemplate, networkPolicy, containers, service, routes } =
|
142
247
|
getExposableWorkloadComponents(name, args, () => this, opts)
|
143
248
|
|
144
|
-
const deployment = output(
|
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:
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
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
|
-
|
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
|
-
|
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 {
|
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(
|
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:
|
198
|
-
|
199
|
-
|
200
|
-
|
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
|
-
|
204
|
-
)
|
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:
|
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
|
-
|
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
|
-
|
334
|
+
routes,
|
335
|
+
|
336
|
+
deployment.spec,
|
337
|
+
deployment.status,
|
228
338
|
)
|
229
339
|
}
|
230
340
|
}
|
231
341
|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
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:
|
362
|
+
"highstate:k8s:WrappedDeployment",
|
249
363
|
name,
|
250
|
-
|
364
|
+
args,
|
251
365
|
opts,
|
252
|
-
|
253
|
-
deployment.
|
254
|
-
deployment.
|
255
|
-
|
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(
|
376
|
+
output([]),
|
377
|
+
|
378
|
+
output(args.deployment).spec,
|
379
|
+
output(args.deployment).status,
|
260
380
|
)
|
261
381
|
}
|
262
382
|
}
|
263
383
|
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
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:
|
407
|
+
"highstate:k8s:ExternalDeployment",
|
273
408
|
name,
|
274
|
-
|
409
|
+
args,
|
275
410
|
opts,
|
276
411
|
|
277
|
-
|
278
|
-
|
279
|
-
output(
|
280
|
-
output(
|
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(
|
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
|
+
)
|
package/src/gateway/backend.ts
CHANGED
@@ -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 {
|