@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/dist/chunk-YWRJ4EZM.js
DELETED
@@ -1,192 +0,0 @@
|
|
1
|
-
import { ExposableWorkload, getExposableWorkloadComponents, exposableWorkloadExtraArgs } from './chunk-BBIY3KUN.js';
|
2
|
-
import { withPatchName, mapMetadata, getProvider, resourceIdToString } from './chunk-5TLC5BXR.js';
|
3
|
-
import { output } from '@highstate/pulumi';
|
4
|
-
import { apps } from '@pulumi/kubernetes';
|
5
|
-
import { omit } from 'remeda';
|
6
|
-
import { deepmerge } from 'deepmerge-ts';
|
7
|
-
|
8
|
-
var Deployment = class extends ExposableWorkload {
|
9
|
-
constructor(type, name, args, opts, cluster, metadata, spec, status, networkPolicy, service, httpRoute) {
|
10
|
-
super(
|
11
|
-
type,
|
12
|
-
name,
|
13
|
-
args,
|
14
|
-
opts,
|
15
|
-
"deployment",
|
16
|
-
cluster,
|
17
|
-
metadata,
|
18
|
-
networkPolicy,
|
19
|
-
service,
|
20
|
-
httpRoute
|
21
|
-
);
|
22
|
-
this.spec = spec;
|
23
|
-
this.status = status;
|
24
|
-
}
|
25
|
-
/**
|
26
|
-
* The Highstate deployment entity.
|
27
|
-
*/
|
28
|
-
get entity() {
|
29
|
-
return output({
|
30
|
-
type: "k8s.deployment",
|
31
|
-
clusterId: this.cluster.id,
|
32
|
-
metadata: this.metadata,
|
33
|
-
service: this._service.apply((service) => service?.entity)
|
34
|
-
});
|
35
|
-
}
|
36
|
-
static create(name, args, opts) {
|
37
|
-
return new CreatedDeployment(name, args, opts);
|
38
|
-
}
|
39
|
-
static createOrPatch(name, args, opts) {
|
40
|
-
if (!args.existing) {
|
41
|
-
return new CreatedDeployment(name, args, opts);
|
42
|
-
}
|
43
|
-
return new DeploymentPatch(
|
44
|
-
name,
|
45
|
-
{
|
46
|
-
...args,
|
47
|
-
name: withPatchName("deployment", args.existing, args.cluster),
|
48
|
-
namespace: output(args.existing).metadata.namespace
|
49
|
-
},
|
50
|
-
opts
|
51
|
-
);
|
52
|
-
}
|
53
|
-
static patch(name, args, opts) {
|
54
|
-
return new DeploymentPatch(name, args, opts);
|
55
|
-
}
|
56
|
-
static createOrGet(name, args, opts) {
|
57
|
-
if (!args.existing) {
|
58
|
-
return new CreatedDeployment(name, args, opts);
|
59
|
-
}
|
60
|
-
return new ExternalDeployment(name, output(args.existing).metadata, args.cluster, opts);
|
61
|
-
}
|
62
|
-
static wrap(name, deployment, cluster, opts) {
|
63
|
-
return new WrappedDeployment(name, deployment, cluster, opts);
|
64
|
-
}
|
65
|
-
};
|
66
|
-
var CreatedDeployment = class extends Deployment {
|
67
|
-
constructor(name, args, opts) {
|
68
|
-
const { labels, podTemplate, networkPolicy, service, httpRoute } = getExposableWorkloadComponents(name, args, () => this, opts);
|
69
|
-
const deployment = output({ args, podTemplate }).apply(async ({ args: args2, podTemplate: podTemplate2 }) => {
|
70
|
-
return new apps.v1.Deployment(
|
71
|
-
name,
|
72
|
-
{
|
73
|
-
metadata: mapMetadata(args2, name),
|
74
|
-
spec: deepmerge(
|
75
|
-
{
|
76
|
-
template: podTemplate2,
|
77
|
-
selector: { matchLabels: labels }
|
78
|
-
},
|
79
|
-
omit(args2, exposableWorkloadExtraArgs)
|
80
|
-
)
|
81
|
-
},
|
82
|
-
{
|
83
|
-
...opts,
|
84
|
-
parent: this,
|
85
|
-
provider: await getProvider(args2.cluster)
|
86
|
-
}
|
87
|
-
);
|
88
|
-
});
|
89
|
-
super(
|
90
|
-
"highstate:k8s:Deployment",
|
91
|
-
name,
|
92
|
-
args,
|
93
|
-
opts,
|
94
|
-
output(args.cluster),
|
95
|
-
deployment.metadata,
|
96
|
-
deployment.spec,
|
97
|
-
deployment.status,
|
98
|
-
networkPolicy,
|
99
|
-
service,
|
100
|
-
httpRoute
|
101
|
-
);
|
102
|
-
}
|
103
|
-
};
|
104
|
-
var DeploymentPatch = class extends Deployment {
|
105
|
-
constructor(name, args, opts) {
|
106
|
-
const { podSpec, networkPolicy, service, httpRoute } = getExposableWorkloadComponents(
|
107
|
-
name,
|
108
|
-
args,
|
109
|
-
() => this,
|
110
|
-
opts
|
111
|
-
);
|
112
|
-
const deployment = output({ args, podSpec }).apply(async ({ args: args2, podSpec: podSpec2 }) => {
|
113
|
-
return new apps.v1.DeploymentPatch(
|
114
|
-
name,
|
115
|
-
{
|
116
|
-
metadata: mapMetadata(args2, name),
|
117
|
-
spec: deepmerge(
|
118
|
-
{
|
119
|
-
template: {
|
120
|
-
spec: podSpec2
|
121
|
-
}
|
122
|
-
},
|
123
|
-
omit(args2, exposableWorkloadExtraArgs)
|
124
|
-
)
|
125
|
-
},
|
126
|
-
{
|
127
|
-
...opts,
|
128
|
-
parent: this,
|
129
|
-
provider: await getProvider(args2.cluster)
|
130
|
-
}
|
131
|
-
);
|
132
|
-
});
|
133
|
-
super(
|
134
|
-
"highstate:k8s:DeploymentPatch",
|
135
|
-
name,
|
136
|
-
args,
|
137
|
-
opts,
|
138
|
-
output(args.cluster),
|
139
|
-
deployment.metadata,
|
140
|
-
deployment.spec,
|
141
|
-
deployment.status,
|
142
|
-
networkPolicy,
|
143
|
-
service,
|
144
|
-
httpRoute
|
145
|
-
);
|
146
|
-
}
|
147
|
-
};
|
148
|
-
var ExternalDeployment = class extends Deployment {
|
149
|
-
constructor(name, id, cluster, opts) {
|
150
|
-
const deployment = output(id).apply(async (id2) => {
|
151
|
-
return apps.v1.Deployment.get(name, resourceIdToString(id2), {
|
152
|
-
...opts,
|
153
|
-
parent: this,
|
154
|
-
provider: await getProvider(cluster)
|
155
|
-
});
|
156
|
-
});
|
157
|
-
super(
|
158
|
-
"highstate:k8s:ExternalDeployment",
|
159
|
-
name,
|
160
|
-
{ namespace: output(id).namespace, cluster },
|
161
|
-
opts,
|
162
|
-
output(cluster),
|
163
|
-
deployment.metadata,
|
164
|
-
deployment.spec,
|
165
|
-
deployment.status,
|
166
|
-
output(void 0),
|
167
|
-
output(void 0),
|
168
|
-
output(void 0)
|
169
|
-
);
|
170
|
-
}
|
171
|
-
};
|
172
|
-
var WrappedDeployment = class extends Deployment {
|
173
|
-
constructor(name, deployment, cluster, opts) {
|
174
|
-
super(
|
175
|
-
"highstate:k8s:WrappedDeployment",
|
176
|
-
name,
|
177
|
-
{ namespace: output(deployment).metadata.namespace, cluster },
|
178
|
-
opts,
|
179
|
-
output(cluster),
|
180
|
-
output(deployment).metadata,
|
181
|
-
output(deployment).spec,
|
182
|
-
output(deployment).status,
|
183
|
-
output(void 0),
|
184
|
-
output(void 0),
|
185
|
-
output(void 0)
|
186
|
-
);
|
187
|
-
}
|
188
|
-
};
|
189
|
-
|
190
|
-
export { Deployment };
|
191
|
-
//# sourceMappingURL=chunk-YWRJ4EZM.js.map
|
192
|
-
//# sourceMappingURL=chunk-YWRJ4EZM.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../src/deployment.ts"],"names":["args","podTemplate","podSpec","id"],"mappings":"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","file":"chunk-YWRJ4EZM.js","sourcesContent":["import type { k8s } from \"@highstate/library\"\nimport type { HttpRoute } from \"./gateway\"\nimport type { Service } from \"./service\"\nimport type { NetworkPolicy } from \"./network-policy\"\nimport { output, type ComponentResourceOptions, Output, type Input } from \"@highstate/pulumi\"\nimport { apps, types } from \"@pulumi/kubernetes\"\nimport { omit } from \"remeda\"\nimport { deepmerge } from \"deepmerge-ts\"\nimport {\n getProvider,\n mapMetadata,\n resourceIdToString,\n withPatchName,\n type ResourceId,\n} from \"./shared\"\nimport {\n exposableWorkloadExtraArgs,\n ExposableWorkload,\n type ExposableWorkloadArgs,\n getExposableWorkloadComponents,\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: ExposableWorkloadArgs,\n opts: ComponentResourceOptions | undefined,\n\n cluster: Output<k8s.Cluster>,\n metadata: Output<types.output.meta.v1.ObjectMeta>,\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 networkPolicy: Output<NetworkPolicy | undefined>,\n\n service: Output<Service | undefined>,\n httpRoute: Output<HttpRoute | undefined>,\n ) {\n super(\n type,\n name,\n args,\n opts,\n \"deployment\",\n cluster,\n metadata,\n networkPolicy,\n service,\n httpRoute,\n )\n }\n\n /**\n * The Highstate deployment entity.\n */\n get entity(): Output<k8s.Deployment> {\n return output({\n type: \"k8s.deployment\",\n clusterId: this.cluster.id,\n metadata: this.metadata,\n service: this._service.apply(service => service?.entity),\n })\n }\n\n static create(name: string, args: DeploymentArgs, opts?: ComponentResourceOptions): Deployment {\n return new CreatedDeployment(name, args, opts)\n }\n\n static createOrPatch(\n name: string,\n args: CreateOrGetDeploymentArgs,\n opts?: ComponentResourceOptions,\n ): Deployment {\n if (!args.existing) {\n return new CreatedDeployment(name, args, opts)\n }\n\n return new DeploymentPatch(\n name,\n {\n ...args,\n name: withPatchName(\"deployment\", args.existing, args.cluster),\n namespace: output(args.existing).metadata.namespace,\n },\n opts,\n )\n }\n\n static patch(name: string, args: DeploymentArgs, opts?: ComponentResourceOptions): Deployment {\n return new DeploymentPatch(name, args, opts)\n }\n\n static createOrGet(\n name: string,\n args: CreateOrGetDeploymentArgs,\n opts?: ComponentResourceOptions,\n ): Deployment {\n if (!args.existing) {\n return new CreatedDeployment(name, args, opts)\n }\n\n return new ExternalDeployment(name, output(args.existing).metadata, args.cluster, opts)\n }\n\n static wrap(\n name: string,\n deployment: Input<apps.v1.Deployment>,\n cluster: Input<k8s.Cluster>,\n opts?: ComponentResourceOptions,\n ): Deployment {\n return new WrappedDeployment(name, deployment, cluster, opts)\n }\n}\n\nclass CreatedDeployment extends Deployment {\n constructor(name: string, args: DeploymentArgs, opts?: ComponentResourceOptions) {\n const { labels, podTemplate, networkPolicy, service, httpRoute } =\n getExposableWorkloadComponents(name, args, () => this, opts)\n\n const deployment = output({ args, podTemplate }).apply(async ({ args, podTemplate }) => {\n return new apps.v1.Deployment(\n name,\n {\n metadata: mapMetadata(args, name),\n spec: 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,\n parent: this,\n provider: await getProvider(args.cluster),\n },\n )\n })\n\n super(\n \"highstate:k8s:Deployment\",\n name,\n args,\n opts,\n\n output(args.cluster),\n deployment.metadata,\n deployment.spec,\n deployment.status,\n\n networkPolicy,\n service,\n httpRoute,\n )\n }\n}\n\nclass DeploymentPatch extends Deployment {\n constructor(name: string, args: DeploymentArgs, opts?: ComponentResourceOptions) {\n const { podSpec, networkPolicy, service, httpRoute } = getExposableWorkloadComponents(\n name,\n args,\n () => this,\n opts,\n )\n\n const deployment = output({ args, podSpec }).apply(async ({ args, podSpec }) => {\n return new apps.v1.DeploymentPatch(\n name,\n {\n metadata: mapMetadata(args, name),\n spec: deepmerge(\n {\n template: {\n spec: podSpec,\n },\n },\n omit(args, exposableWorkloadExtraArgs),\n ) as types.input.apps.v1.DeploymentSpec,\n },\n {\n ...opts,\n parent: this,\n provider: await getProvider(args.cluster),\n },\n )\n })\n\n super(\n \"highstate:k8s:DeploymentPatch\",\n name,\n args,\n opts,\n\n output(args.cluster),\n deployment.metadata,\n deployment.spec,\n deployment.status,\n\n networkPolicy,\n service,\n httpRoute,\n )\n }\n}\n\nclass ExternalDeployment extends Deployment {\n constructor(\n name: string,\n id: Input<ResourceId>,\n cluster: Input<k8s.Cluster>,\n opts?: ComponentResourceOptions,\n ) {\n const deployment = output(id).apply(async id => {\n return apps.v1.Deployment.get(name, resourceIdToString(id), {\n ...opts,\n parent: this,\n provider: await getProvider(cluster),\n })\n })\n\n super(\n \"highstate:k8s:ExternalDeployment\",\n name,\n { namespace: output(id).namespace, cluster },\n opts,\n output(cluster),\n deployment.metadata,\n deployment.spec,\n deployment.status,\n\n output(undefined),\n output(undefined),\n output(undefined),\n )\n }\n}\n\nclass WrappedDeployment extends Deployment {\n constructor(\n name: string,\n deployment: Input<apps.v1.Deployment>,\n cluster: Input<k8s.Cluster>,\n opts?: ComponentResourceOptions,\n ) {\n super(\n \"highstate:k8s:WrappedDeployment\",\n name,\n { namespace: output(deployment).metadata.namespace, cluster },\n opts,\n\n output(cluster),\n output(deployment).metadata,\n output(deployment).spec,\n output(deployment).status,\n\n output(undefined),\n output(undefined),\n output(undefined),\n )\n }\n}\n"]}
|
@@ -1,21 +0,0 @@
|
|
1
|
-
import '../../chunk-PZ5AY32C.js';
|
2
|
-
import { k8s } from '@highstate/library';
|
3
|
-
import { forUnit, toPromise } from '@highstate/pulumi';
|
4
|
-
|
5
|
-
var { inputs, outputs } = forUnit(k8s.accessPoint);
|
6
|
-
var { gateway, tlsIssuer } = await toPromise(inputs);
|
7
|
-
if (gateway.clusterId !== tlsIssuer.clusterId) {
|
8
|
-
throw new Error("Gateway and TLS issuer must be in the same cluster");
|
9
|
-
}
|
10
|
-
var access_point_default = outputs({
|
11
|
-
accessPoint: {
|
12
|
-
clusterId: gateway.clusterId,
|
13
|
-
dnsProviders: inputs.dnsProviders,
|
14
|
-
gateway: inputs.gateway,
|
15
|
-
tlsIssuer: inputs.tlsIssuer
|
16
|
-
}
|
17
|
-
});
|
18
|
-
|
19
|
-
export { access_point_default as default };
|
20
|
-
//# sourceMappingURL=index.js.map
|
21
|
-
//# sourceMappingURL=index.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/units/access-point/index.ts"],"names":[],"mappings":";;;;AAGA,IAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,OAAA,CAAQ,IAAI,WAAW,CAAA;AAEnD,IAAM,EAAE,OAAA,EAAS,SAAA,EAAU,GAAI,MAAM,UAAU,MAAM,CAAA;AAErD,IAAI,OAAA,CAAQ,SAAA,KAAc,SAAA,CAAU,SAAA,EAAW;AAC7C,EAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AACtE;AAEA,IAAO,uBAAQ,OAAA,CAAQ;AAAA,EACrB,WAAA,EAAa;AAAA,IACX,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,cAAc,MAAA,CAAO,YAAA;AAAA,IACrB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,WAAW,MAAA,CAAO;AAAA;AAEtB,CAAC","file":"index.js","sourcesContent":["import { k8s } from \"@highstate/library\"\nimport { forUnit, toPromise } from \"@highstate/pulumi\"\n\nconst { inputs, outputs } = forUnit(k8s.accessPoint)\n\nconst { gateway, tlsIssuer } = await toPromise(inputs)\n\nif (gateway.clusterId !== tlsIssuer.clusterId) {\n throw new Error(\"Gateway and TLS issuer must be in the same cluster\")\n}\n\nexport default outputs({\n accessPoint: {\n clusterId: gateway.clusterId,\n dnsProviders: inputs.dnsProviders,\n gateway: inputs.gateway,\n tlsIssuer: inputs.tlsIssuer,\n },\n})\n"]}
|
package/src/access-point.ts
DELETED
@@ -1,191 +0,0 @@
|
|
1
|
-
import type { k8s } from "@highstate/library"
|
2
|
-
import type { Provider } from "@pulumi/kubernetes"
|
3
|
-
import type { Namespace } from "./namespace"
|
4
|
-
import { DnsRecordSet, filterEndpoints, l3EndpointToString } from "@highstate/common"
|
5
|
-
import { gateway } from "@highstate/gateway-api"
|
6
|
-
import {
|
7
|
-
normalize,
|
8
|
-
Output,
|
9
|
-
output,
|
10
|
-
toPromise,
|
11
|
-
type Input,
|
12
|
-
type InputArray,
|
13
|
-
} from "@highstate/pulumi"
|
14
|
-
import { NetworkPolicy } from "./network-policy"
|
15
|
-
import { getProvider, mapNamespaceLikeToNamespaceName } from "./shared"
|
16
|
-
import { isFromCluster } from "./service"
|
17
|
-
|
18
|
-
export type UseAccessPointResult = {
|
19
|
-
/**
|
20
|
-
* The gateway instance created according to the access point.
|
21
|
-
*/
|
22
|
-
gateway: gateway.v1.Gateway
|
23
|
-
|
24
|
-
/**
|
25
|
-
* The DNS record sets associated created according to the access point and gateway.
|
26
|
-
*/
|
27
|
-
dnsRecordSets: DnsRecordSet[]
|
28
|
-
|
29
|
-
/**
|
30
|
-
* The network policies associated with the access point.
|
31
|
-
*/
|
32
|
-
networkPolicies: NetworkPolicy[]
|
33
|
-
}
|
34
|
-
|
35
|
-
export type UseAccessPointArgs = Omit<CreateGatewayArgs, "gateway"> & {
|
36
|
-
accessPoint: Input<k8s.AccessPoint>
|
37
|
-
}
|
38
|
-
|
39
|
-
export function useAccessPoint(args: UseAccessPointArgs): Promise<UseAccessPointResult> {
|
40
|
-
const result = output({ args, namespaceName: output(args.namespace).metadata.name }).apply(
|
41
|
-
({ args, namespaceName }) => {
|
42
|
-
if (args.accessPoint.clusterId !== args.cluster.id) {
|
43
|
-
throw new Error(
|
44
|
-
"The provided Kubernetes cluster is different from the one where the access point is deployed.",
|
45
|
-
)
|
46
|
-
}
|
47
|
-
|
48
|
-
const gateway = createGateway({
|
49
|
-
...args,
|
50
|
-
annotations: {
|
51
|
-
"cert-manager.io/cluster-issuer": args.accessPoint.tlsIssuer.clusterIssuerName,
|
52
|
-
},
|
53
|
-
gateway: args.accessPoint.gateway,
|
54
|
-
})
|
55
|
-
|
56
|
-
const dnsRecordSets = normalize(args.fqdn, args.fqdns).flatMap(fqdn => {
|
57
|
-
return DnsRecordSet.create(fqdn, {
|
58
|
-
providers: args.accessPoint.dnsProviders,
|
59
|
-
values: filterEndpoints(
|
60
|
-
args.accessPoint.gateway.endpoints.filter(endpoint => endpoint.type !== "hostname"),
|
61
|
-
),
|
62
|
-
})
|
63
|
-
})
|
64
|
-
|
65
|
-
const networkPolicies: Output<NetworkPolicy>[] = [
|
66
|
-
NetworkPolicy.create(
|
67
|
-
`allow-ingress-from-${l3EndpointToString(args.accessPoint.gateway.endpoints[0])}`,
|
68
|
-
{
|
69
|
-
namespace: args.namespace,
|
70
|
-
cluster: args.cluster,
|
71
|
-
|
72
|
-
description: `Allow ingress traffic from the gateway at "${l3EndpointToString(args.accessPoint.gateway.endpoints[0])}".`,
|
73
|
-
|
74
|
-
ingressRule: {
|
75
|
-
fromEndpoints: args.accessPoint.gateway.endpoints,
|
76
|
-
},
|
77
|
-
},
|
78
|
-
{ provider: args.provider },
|
79
|
-
),
|
80
|
-
]
|
81
|
-
|
82
|
-
if (isFromCluster(args.accessPoint.gateway.endpoints[0], args.cluster)) {
|
83
|
-
networkPolicies.push(
|
84
|
-
NetworkPolicy.create(
|
85
|
-
`allow-egress-to-${namespaceName}`,
|
86
|
-
{
|
87
|
-
namespace: args.accessPoint.gateway.endpoints[0].metadata.k8sService.namespace,
|
88
|
-
cluster: args.cluster,
|
89
|
-
|
90
|
-
selector: args.accessPoint.gateway.endpoints[0].metadata.k8sService.selector,
|
91
|
-
|
92
|
-
description: `Allow egress traffic to the namespace "${namespaceName}".`,
|
93
|
-
|
94
|
-
egressRule: {
|
95
|
-
toNamespace: args.namespace,
|
96
|
-
},
|
97
|
-
},
|
98
|
-
{ provider: args.provider },
|
99
|
-
),
|
100
|
-
)
|
101
|
-
}
|
102
|
-
|
103
|
-
return output({
|
104
|
-
gateway,
|
105
|
-
dnsRecordSets,
|
106
|
-
networkPolicies,
|
107
|
-
})
|
108
|
-
},
|
109
|
-
)
|
110
|
-
|
111
|
-
return toPromise(result)
|
112
|
-
}
|
113
|
-
|
114
|
-
export type StandardAccessPointArgs = {
|
115
|
-
appName: string
|
116
|
-
fqdn: string
|
117
|
-
}
|
118
|
-
|
119
|
-
export type StandardAccessPointInputs = {
|
120
|
-
accessPoint: Output<k8s.AccessPoint>
|
121
|
-
k8sCluster: Output<k8s.Cluster>
|
122
|
-
}
|
123
|
-
|
124
|
-
export async function useStandardAcessPoint(
|
125
|
-
namespace: Namespace,
|
126
|
-
args: StandardAccessPointArgs,
|
127
|
-
inputs: StandardAccessPointInputs,
|
128
|
-
): Promise<UseAccessPointResult> {
|
129
|
-
return await useAccessPoint({
|
130
|
-
name: args.appName,
|
131
|
-
namespace,
|
132
|
-
|
133
|
-
fqdn: args.fqdn,
|
134
|
-
|
135
|
-
accessPoint: inputs.accessPoint,
|
136
|
-
cluster: inputs.k8sCluster,
|
137
|
-
provider: await getProvider(inputs.k8sCluster),
|
138
|
-
})
|
139
|
-
}
|
140
|
-
|
141
|
-
export type CreateGatewayArgs = {
|
142
|
-
name: string
|
143
|
-
namespace: Input<Namespace>
|
144
|
-
annotations?: Input<Record<string, string>>
|
145
|
-
|
146
|
-
fqdn?: Input<string>
|
147
|
-
fqdns?: InputArray<string>
|
148
|
-
|
149
|
-
gateway: Input<k8s.Gateway>
|
150
|
-
cluster: Input<k8s.Cluster>
|
151
|
-
provider: Provider
|
152
|
-
}
|
153
|
-
|
154
|
-
export function createGateway(args: CreateGatewayArgs): Output<gateway.v1.Gateway> {
|
155
|
-
return output(args).apply(args => {
|
156
|
-
if (args.cluster.id !== args.gateway.clusterId) {
|
157
|
-
throw new Error(
|
158
|
-
"The provided Kubernetes cluster is different from the one where the gateway controller is deployed.",
|
159
|
-
)
|
160
|
-
}
|
161
|
-
|
162
|
-
return new gateway.v1.Gateway(
|
163
|
-
args.name,
|
164
|
-
{
|
165
|
-
metadata: {
|
166
|
-
name: args.name,
|
167
|
-
namespace: mapNamespaceLikeToNamespaceName(args.namespace),
|
168
|
-
annotations: args.annotations,
|
169
|
-
},
|
170
|
-
spec: {
|
171
|
-
gatewayClassName: output(args.gateway).gatewayClassName,
|
172
|
-
listeners: normalize(args.fqdn, args.fqdns).map(fqdn => {
|
173
|
-
const normalizedName = fqdn.replace(/\*/g, "wildcard")
|
174
|
-
|
175
|
-
return {
|
176
|
-
name: `https-${normalizedName}`,
|
177
|
-
port: output(args.gateway).httpsListenerPort,
|
178
|
-
protocol: "HTTPS",
|
179
|
-
hostname: fqdn,
|
180
|
-
tls: {
|
181
|
-
mode: "Terminate",
|
182
|
-
certificateRefs: [{ name: normalizedName }],
|
183
|
-
},
|
184
|
-
}
|
185
|
-
}),
|
186
|
-
},
|
187
|
-
},
|
188
|
-
{ provider: args.provider, deletedWith: args.namespace },
|
189
|
-
)
|
190
|
-
})
|
191
|
-
}
|
@@ -1,19 +0,0 @@
|
|
1
|
-
import { k8s } from "@highstate/library"
|
2
|
-
import { forUnit, toPromise } from "@highstate/pulumi"
|
3
|
-
|
4
|
-
const { inputs, outputs } = forUnit(k8s.accessPoint)
|
5
|
-
|
6
|
-
const { gateway, tlsIssuer } = await toPromise(inputs)
|
7
|
-
|
8
|
-
if (gateway.clusterId !== tlsIssuer.clusterId) {
|
9
|
-
throw new Error("Gateway and TLS issuer must be in the same cluster")
|
10
|
-
}
|
11
|
-
|
12
|
-
export default outputs({
|
13
|
-
accessPoint: {
|
14
|
-
clusterId: gateway.clusterId,
|
15
|
-
dnsProviders: inputs.dnsProviders,
|
16
|
-
gateway: inputs.gateway,
|
17
|
-
tlsIssuer: inputs.tlsIssuer,
|
18
|
-
},
|
19
|
-
})
|
@@ -1,23 +0,0 @@
|
|
1
|
-
import type { dns } from "@highstate/library"
|
2
|
-
import type { types } from "@highstate/cert-manager"
|
3
|
-
import type { Input } from "@pulumi/pulumi"
|
4
|
-
import type { Provider } from "@pulumi/kubernetes"
|
5
|
-
import { capitalize } from "remeda"
|
6
|
-
import { toPromise } from "@highstate/pulumi"
|
7
|
-
|
8
|
-
export async function createDns01Solver(
|
9
|
-
dnsProviderInput: Input<dns.Provider>,
|
10
|
-
provider: Provider,
|
11
|
-
): Promise<types.input.cert_manager.v1.ClusterIssuerSpecAcmeSolversDns01> {
|
12
|
-
const dnsProvider = await toPromise(dnsProviderInput)
|
13
|
-
|
14
|
-
const implName = `create${capitalize(dnsProvider.type)}Dns01Solver`
|
15
|
-
const implModule = (await import(`@highstate/${dnsProvider.type}`)) as Record<string, unknown>
|
16
|
-
|
17
|
-
const implFunction = implModule[implName] as (
|
18
|
-
dnsProvider: dns.Provider,
|
19
|
-
provider: Provider,
|
20
|
-
) => types.input.cert_manager.v1.ClusterIssuerSpecAcmeSolversDns01
|
21
|
-
|
22
|
-
return implFunction(dnsProvider, provider)
|
23
|
-
}
|