@highstate/k8s 0.9.14 → 0.9.16
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-QLQ3QVGT.js → chunk-5C2BJGES.js} +17 -17
- package/dist/chunk-5C2BJGES.js.map +1 -0
- package/dist/{chunk-Y3LZSX7I.js → chunk-5TLC5BXR.js} +33 -31
- package/dist/chunk-5TLC5BXR.js.map +1 -0
- package/dist/chunk-BBIY3KUN.js +1557 -0
- package/dist/chunk-BBIY3KUN.js.map +1 -0
- package/dist/{chunk-5S4JPM4M.js → chunk-OFFSHGC6.js} +43 -32
- package/dist/chunk-OFFSHGC6.js.map +1 -0
- package/dist/chunk-PZ5AY32C.js +9 -0
- package/dist/chunk-PZ5AY32C.js.map +1 -0
- package/dist/{chunk-VL7Z5FJQ.js → chunk-TZHOUJRC.js} +29 -20
- package/dist/chunk-TZHOUJRC.js.map +1 -0
- package/dist/{chunk-6L67WIZW.js → chunk-YWRJ4EZM.js} +29 -20
- package/dist/chunk-YWRJ4EZM.js.map +1 -0
- package/dist/deployment-XK3CDJOE.js +6 -0
- package/dist/deployment-XK3CDJOE.js.map +1 -0
- package/dist/highstate.manifest.json +8 -8
- package/dist/index.js +39 -138
- package/dist/index.js.map +1 -1
- package/dist/stateful-set-7CAQWTV2.js +6 -0
- package/dist/stateful-set-7CAQWTV2.js.map +1 -0
- package/dist/units/access-point/index.js +7 -6
- package/dist/units/access-point/index.js.map +1 -1
- package/dist/units/cert-manager/index.js +11 -14
- package/dist/units/cert-manager/index.js.map +1 -1
- package/dist/units/cluster-dns/index.js +9 -8
- package/dist/units/cluster-dns/index.js.map +1 -1
- package/dist/units/cluster-patch/index.js +9 -8
- package/dist/units/cluster-patch/index.js.map +1 -1
- package/dist/units/dns01-issuer/index.js +9 -14
- package/dist/units/dns01-issuer/index.js.map +1 -1
- package/dist/units/existing-cluster/index.js +12 -19
- package/dist/units/existing-cluster/index.js.map +1 -1
- package/dist/units/gateway-api/index.js +8 -10
- package/dist/units/gateway-api/index.js.map +1 -1
- package/package.json +19 -10
- package/src/cluster.ts +14 -9
- package/src/deployment.ts +34 -0
- package/src/helm.ts +38 -2
- package/src/network-policy.ts +2 -5
- package/src/shared.ts +17 -0
- package/src/stateful-set.ts +34 -0
- package/src/units/cluster-dns/index.ts +1 -1
- package/src/units/cluster-patch/index.ts +1 -1
- package/src/units/existing-cluster/index.ts +1 -1
- package/src/workload.ts +22 -3
- package/dist/chunk-5S4JPM4M.js.map +0 -1
- package/dist/chunk-6L67WIZW.js.map +0 -1
- package/dist/chunk-QLQ3QVGT.js.map +0 -1
- package/dist/chunk-SARVLQZY.js +0 -876
- package/dist/chunk-SARVLQZY.js.map +0 -1
- package/dist/chunk-VL7Z5FJQ.js.map +0 -1
- package/dist/chunk-WEKIQRCZ.js +0 -792
- package/dist/chunk-WEKIQRCZ.js.map +0 -1
- package/dist/chunk-Y3LZSX7I.js.map +0 -1
- package/dist/deployment-QTPBNKO5.js +0 -10
- package/dist/deployment-QTPBNKO5.js.map +0 -1
- package/dist/stateful-set-K4GV7ZTK.js +0 -10
- package/dist/stateful-set-K4GV7ZTK.js.map +0 -1
- package/src/custom.ts +0 -104
@@ -1,14 +1,11 @@
|
|
1
|
-
import {
|
2
|
-
|
3
|
-
|
4
|
-
import
|
5
|
-
import {
|
6
|
-
|
7
|
-
} from
|
8
|
-
|
9
|
-
// src/units/cert-manager/index.ts
|
10
|
-
import { k8s } from "@highstate/library";
|
11
|
-
import { forUnit } from "@highstate/pulumi";
|
1
|
+
import { Chart } from '../../chunk-OFFSHGC6.js';
|
2
|
+
import '../../chunk-TZHOUJRC.js';
|
3
|
+
import '../../chunk-YWRJ4EZM.js';
|
4
|
+
import '../../chunk-BBIY3KUN.js';
|
5
|
+
import { Namespace } from '../../chunk-5TLC5BXR.js';
|
6
|
+
import '../../chunk-PZ5AY32C.js';
|
7
|
+
import { k8s } from '@highstate/library';
|
8
|
+
import { forUnit } from '@highstate/pulumi';
|
12
9
|
|
13
10
|
// assets/charts.json
|
14
11
|
var charts_default = {
|
@@ -41,7 +38,7 @@ new Chart("cert-manager", {
|
|
41
38
|
var cert_manager_default = outputs({
|
42
39
|
k8sCluster: inputs.k8sCluster
|
43
40
|
});
|
44
|
-
|
45
|
-
|
46
|
-
|
41
|
+
|
42
|
+
export { cert_manager_default as default };
|
43
|
+
//# sourceMappingURL=index.js.map
|
47
44
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/units/cert-manager/index.ts","
|
1
|
+
{"version":3,"sources":["../../../assets/charts.json","../../../src/units/cert-manager/index.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,IAAA,cAAA,GAAA;AAAA,EACE,cAAgB,EAAA;AAAA,IACd,IAAQ,EAAA,4BAAA;AAAA,IACR,IAAQ,EAAA,cAAA;AAAA,IACR,OAAW,EAAA,SAAA;AAAA,IACX,MAAU,EAAA;AAAA;AAEd,CAAA;;;ACDA,IAAM,EAAE,MAAQ,EAAA,OAAA,EAAY,GAAA,OAAA,CAAQ,IAAI,WAAW,CAAA;AAEnD,IAAM,SAAA,GAAY,UAAU,MAAO,CAAA,cAAA,EAAgB,EAAE,OAAS,EAAA,MAAA,CAAO,YAAY,CAAA;AAEjF,IAAI,MAAM,cAAgB,EAAA;AAAA,EACxB,SAAS,MAAO,CAAA,UAAA;AAAA,EAChB,SAAA;AAAA,EAEA,KAAA,EAAO,eAAO,cAAc,CAAA;AAAA,EAE5B,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA;AAAA,MACJ,OAAS,EAAA;AAAA,KACX;AAAA,IAEA,MAAQ,EAAA;AAAA,MACN,UAAY,EAAA,4CAAA;AAAA,MACZ,IAAM,EAAA,yBAAA;AAAA,MACN,gBAAkB,EAAA;AAAA;AACpB;AAEJ,CAAC,CAAA;AAED,IAAO,uBAAQ,OAAQ,CAAA;AAAA,EACrB,YAAY,MAAO,CAAA;AACrB,CAAC","file":"index.js","sourcesContent":["{\n \"cert-manager\": {\n \"repo\": \"https://charts.jetstack.io\",\n \"name\": \"cert-manager\",\n \"version\": \"v1.17.1\",\n \"sha256\": \"48707f6e8937290da96065dc7de8b4f5a95d9707798d4b5a0d560f78c12996f7\"\n }\n}\n","import { k8s } from \"@highstate/library\"\nimport { forUnit } from \"@highstate/pulumi\"\nimport { Chart } from \"../../helm\"\nimport charts from \"../../../assets/charts.json\"\nimport { Namespace } from \"../../namespace\"\n\nconst { inputs, outputs } = forUnit(k8s.certManager)\n\nconst namespace = Namespace.create(\"cert-manager\", { cluster: inputs.k8sCluster })\n\nnew Chart(\"cert-manager\", {\n cluster: inputs.k8sCluster,\n namespace,\n\n chart: charts[\"cert-manager\"],\n\n values: {\n crds: {\n enabled: true,\n },\n\n config: {\n apiVersion: \"controller.config.cert-manager.io/v1alpha1\",\n kind: \"ControllerConfiguration\",\n enableGatewayAPI: true,\n },\n },\n})\n\nexport default outputs({\n k8sCluster: inputs.k8sCluster,\n})\n"]}
|
@@ -1,7 +1,8 @@
|
|
1
|
-
|
2
|
-
import {
|
3
|
-
import { k8s } from
|
4
|
-
import { forUnit } from
|
1
|
+
import '../../chunk-PZ5AY32C.js';
|
2
|
+
import { updateEndpointsWithFqdn, l4EndpointToString, l3EndpointToString } from '@highstate/common';
|
3
|
+
import { k8s } from '@highstate/library';
|
4
|
+
import { forUnit } from '@highstate/pulumi';
|
5
|
+
|
5
6
|
var { args, inputs, outputs } = forUnit(k8s.clusterDns);
|
6
7
|
var { endpoints } = await updateEndpointsWithFqdn(
|
7
8
|
inputs.k8sCluster.endpoints,
|
@@ -25,12 +26,12 @@ var cluster_dns_default = outputs({
|
|
25
26
|
})),
|
26
27
|
endpoints,
|
27
28
|
apiEndpoints,
|
28
|
-
$
|
29
|
+
$statusFields: {
|
29
30
|
endpoints: endpoints.map(l3EndpointToString),
|
30
31
|
apiEndpoints: apiEndpoints.map(l4EndpointToString)
|
31
32
|
}
|
32
33
|
});
|
33
|
-
|
34
|
-
|
35
|
-
|
34
|
+
|
35
|
+
export { cluster_dns_default as default };
|
36
|
+
//# sourceMappingURL=index.js.map
|
36
37
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/units/cluster-dns/index.ts"],"sourcesContent":["import { l3EndpointToString, l4EndpointToString, updateEndpointsWithFqdn } from \"@highstate/common\"\nimport { k8s } from \"@highstate/library\"\nimport { forUnit } from \"@highstate/pulumi\"\n\nconst { args, inputs, outputs } = forUnit(k8s.clusterDns)\n\nconst { endpoints } = await updateEndpointsWithFqdn(\n inputs.k8sCluster.endpoints,\n args.fqdn,\n args.endpointFilter,\n args.patchMode,\n inputs.dnsProviders,\n)\n\nconst { endpoints: apiEndpoints } = await updateEndpointsWithFqdn(\n inputs.k8sCluster.apiEndpoints,\n args.apiFqdn,\n args.apiEndpointFilter,\n args.apiPatchMode,\n inputs.dnsProviders,\n)\n\nexport default outputs({\n k8sCluster: inputs.k8sCluster.apply(k8sCluster => ({\n ...k8sCluster,\n endpoints,\n apiEndpoints,\n })),\n\n endpoints,\n apiEndpoints,\n\n $
|
1
|
+
{"version":3,"sources":["../../../src/units/cluster-dns/index.ts"],"names":[],"mappings":";;;;;AAIA,IAAM,EAAE,IAAM,EAAA,MAAA,EAAQ,SAAY,GAAA,OAAA,CAAQ,IAAI,UAAU,CAAA;AAExD,IAAM,EAAE,SAAU,EAAA,GAAI,MAAM,uBAAA;AAAA,EAC1B,OAAO,UAAW,CAAA,SAAA;AAAA,EAClB,IAAK,CAAA,IAAA;AAAA,EACL,IAAK,CAAA,cAAA;AAAA,EACL,IAAK,CAAA,SAAA;AAAA,EACL,MAAO,CAAA;AACT,CAAA;AAEA,IAAM,EAAE,SAAA,EAAW,YAAa,EAAA,GAAI,MAAM,uBAAA;AAAA,EACxC,OAAO,UAAW,CAAA,YAAA;AAAA,EAClB,IAAK,CAAA,OAAA;AAAA,EACL,IAAK,CAAA,iBAAA;AAAA,EACL,IAAK,CAAA,YAAA;AAAA,EACL,MAAO,CAAA;AACT,CAAA;AAEA,IAAO,sBAAQ,OAAQ,CAAA;AAAA,EACrB,UAAY,EAAA,MAAA,CAAO,UAAW,CAAA,KAAA,CAAM,CAAe,UAAA,MAAA;AAAA,IACjD,GAAG,UAAA;AAAA,IACH,SAAA;AAAA,IACA;AAAA,GACA,CAAA,CAAA;AAAA,EAEF,SAAA;AAAA,EACA,YAAA;AAAA,EAEA,aAAe,EAAA;AAAA,IACb,SAAA,EAAW,SAAU,CAAA,GAAA,CAAI,kBAAkB,CAAA;AAAA,IAC3C,YAAA,EAAc,YAAa,CAAA,GAAA,CAAI,kBAAkB;AAAA;AAErD,CAAC","file":"index.js","sourcesContent":["import { l3EndpointToString, l4EndpointToString, updateEndpointsWithFqdn } from \"@highstate/common\"\nimport { k8s } from \"@highstate/library\"\nimport { forUnit } from \"@highstate/pulumi\"\n\nconst { args, inputs, outputs } = forUnit(k8s.clusterDns)\n\nconst { endpoints } = await updateEndpointsWithFqdn(\n inputs.k8sCluster.endpoints,\n args.fqdn,\n args.endpointFilter,\n args.patchMode,\n inputs.dnsProviders,\n)\n\nconst { endpoints: apiEndpoints } = await updateEndpointsWithFqdn(\n inputs.k8sCluster.apiEndpoints,\n args.apiFqdn,\n args.apiEndpointFilter,\n args.apiPatchMode,\n inputs.dnsProviders,\n)\n\nexport default outputs({\n k8sCluster: inputs.k8sCluster.apply(k8sCluster => ({\n ...k8sCluster,\n endpoints,\n apiEndpoints,\n })),\n\n endpoints,\n apiEndpoints,\n\n $statusFields: {\n endpoints: endpoints.map(l3EndpointToString),\n apiEndpoints: apiEndpoints.map(l4EndpointToString),\n },\n})\n"]}
|
@@ -1,7 +1,8 @@
|
|
1
|
-
|
2
|
-
import {
|
3
|
-
import { k8s } from
|
4
|
-
import { forUnit } from
|
1
|
+
import '../../chunk-PZ5AY32C.js';
|
2
|
+
import { updateEndpoints, l4EndpointToString, l3EndpointToString } from '@highstate/common';
|
3
|
+
import { k8s } from '@highstate/library';
|
4
|
+
import { forUnit } from '@highstate/pulumi';
|
5
|
+
|
5
6
|
var { args, inputs, outputs } = forUnit(k8s.clusterPatch);
|
6
7
|
var endpoints = await updateEndpoints(
|
7
8
|
inputs.k8sCluster.endpoints,
|
@@ -23,12 +24,12 @@ var cluster_patch_default = outputs({
|
|
23
24
|
})),
|
24
25
|
endpoints,
|
25
26
|
apiEndpoints,
|
26
|
-
$
|
27
|
+
$statusFields: {
|
27
28
|
endpoints: endpoints.map(l3EndpointToString),
|
28
29
|
apiEndpoints: apiEndpoints.map(l4EndpointToString)
|
29
30
|
}
|
30
31
|
});
|
31
|
-
|
32
|
-
|
33
|
-
|
32
|
+
|
33
|
+
export { cluster_patch_default as default };
|
34
|
+
//# sourceMappingURL=index.js.map
|
34
35
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/units/cluster-patch/index.ts"],"sourcesContent":["import { l3EndpointToString, l4EndpointToString, updateEndpoints } from \"@highstate/common\"\nimport { k8s } from \"@highstate/library\"\nimport { forUnit } from \"@highstate/pulumi\"\n\nconst { args, inputs, outputs } = forUnit(k8s.clusterPatch)\n\nconst endpoints = await updateEndpoints(\n inputs.k8sCluster.endpoints,\n args.endpoints,\n inputs.endpoints,\n args.endpointsPatchMode,\n)\n\nconst apiEndpoints = await updateEndpoints(\n inputs.k8sCluster.apiEndpoints,\n args.apiEndpoints,\n inputs.apiEndpoints,\n args.apiEndpointsPatchMode,\n)\n\nexport default outputs({\n k8sCluster: inputs.k8sCluster.apply(k8sCluster => ({\n ...k8sCluster,\n endpoints,\n apiEndpoints,\n })),\n\n endpoints,\n apiEndpoints,\n\n $
|
1
|
+
{"version":3,"sources":["../../../src/units/cluster-patch/index.ts"],"names":[],"mappings":";;;;;AAIA,IAAM,EAAE,IAAM,EAAA,MAAA,EAAQ,SAAY,GAAA,OAAA,CAAQ,IAAI,YAAY,CAAA;AAE1D,IAAM,YAAY,MAAM,eAAA;AAAA,EACtB,OAAO,UAAW,CAAA,SAAA;AAAA,EAClB,IAAK,CAAA,SAAA;AAAA,EACL,MAAO,CAAA,SAAA;AAAA,EACP,IAAK,CAAA;AACP,CAAA;AAEA,IAAM,eAAe,MAAM,eAAA;AAAA,EACzB,OAAO,UAAW,CAAA,YAAA;AAAA,EAClB,IAAK,CAAA,YAAA;AAAA,EACL,MAAO,CAAA,YAAA;AAAA,EACP,IAAK,CAAA;AACP,CAAA;AAEA,IAAO,wBAAQ,OAAQ,CAAA;AAAA,EACrB,UAAY,EAAA,MAAA,CAAO,UAAW,CAAA,KAAA,CAAM,CAAe,UAAA,MAAA;AAAA,IACjD,GAAG,UAAA;AAAA,IACH,SAAA;AAAA,IACA;AAAA,GACA,CAAA,CAAA;AAAA,EAEF,SAAA;AAAA,EACA,YAAA;AAAA,EAEA,aAAe,EAAA;AAAA,IACb,SAAA,EAAW,SAAU,CAAA,GAAA,CAAI,kBAAkB,CAAA;AAAA,IAC3C,YAAA,EAAc,YAAa,CAAA,GAAA,CAAI,kBAAkB;AAAA;AAErD,CAAC","file":"index.js","sourcesContent":["import { l3EndpointToString, l4EndpointToString, updateEndpoints } from \"@highstate/common\"\nimport { k8s } from \"@highstate/library\"\nimport { forUnit } from \"@highstate/pulumi\"\n\nconst { args, inputs, outputs } = forUnit(k8s.clusterPatch)\n\nconst endpoints = await updateEndpoints(\n inputs.k8sCluster.endpoints,\n args.endpoints,\n inputs.endpoints,\n args.endpointsPatchMode,\n)\n\nconst apiEndpoints = await updateEndpoints(\n inputs.k8sCluster.apiEndpoints,\n args.apiEndpoints,\n inputs.apiEndpoints,\n args.apiEndpointsPatchMode,\n)\n\nexport default outputs({\n k8sCluster: inputs.k8sCluster.apply(k8sCluster => ({\n ...k8sCluster,\n endpoints,\n apiEndpoints,\n })),\n\n endpoints,\n apiEndpoints,\n\n $statusFields: {\n endpoints: endpoints.map(l3EndpointToString),\n apiEndpoints: apiEndpoints.map(l4EndpointToString),\n },\n})\n"]}
|
@@ -1,15 +1,10 @@
|
|
1
|
-
import {
|
2
|
-
|
3
|
-
} from
|
1
|
+
import { getProvider } from '../../chunk-5TLC5BXR.js';
|
2
|
+
import '../../chunk-PZ5AY32C.js';
|
3
|
+
import { k8s } from '@highstate/library';
|
4
|
+
import { forUnit, unsecret, toPromise } from '@highstate/pulumi';
|
5
|
+
import { cert_manager } from '@highstate/cert-manager';
|
6
|
+
import { capitalize } from 'remeda';
|
4
7
|
|
5
|
-
// src/units/dns01-issuer/index.ts
|
6
|
-
import { k8s } from "@highstate/library";
|
7
|
-
import { forUnit, unsecret } from "@highstate/pulumi";
|
8
|
-
import { cert_manager } from "@highstate/cert-manager";
|
9
|
-
|
10
|
-
// src/units/dns01-issuer/solver.ts
|
11
|
-
import { capitalize } from "remeda";
|
12
|
-
import { toPromise } from "@highstate/pulumi";
|
13
8
|
async function createDns01Solver(dnsProviderInput, provider2) {
|
14
9
|
const dnsProvider = await toPromise(dnsProviderInput);
|
15
10
|
const implName = `create${capitalize(dnsProvider.type)}Dns01Solver`;
|
@@ -52,7 +47,7 @@ var dns01_issuer_default = outputs({
|
|
52
47
|
clusterIssuerName: name
|
53
48
|
}
|
54
49
|
});
|
55
|
-
|
56
|
-
|
57
|
-
|
50
|
+
|
51
|
+
export { dns01_issuer_default as default };
|
52
|
+
//# sourceMappingURL=index.js.map
|
58
53
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/units/dns01-issuer/
|
1
|
+
{"version":3,"sources":["../../../src/units/dns01-issuer/solver.ts","../../../src/units/dns01-issuer/index.ts"],"names":["provider"],"mappings":";;;;;;;AAOA,eAAsB,iBAAA,CACpB,kBACAA,SACwE,EAAA;AACxE,EAAM,MAAA,WAAA,GAAc,MAAM,SAAA,CAAU,gBAAgB,CAAA;AAEpD,EAAA,MAAM,QAAW,GAAA,CAAA,MAAA,EAAS,UAAW,CAAA,WAAA,CAAY,IAAI,CAAC,CAAA,WAAA,CAAA;AACtD,EAAA,MAAM,UAAc,GAAA,MAAM,OAAO,CAAA,WAAA,EAAc,YAAY,IAAI,CAAA,CAAA,CAAA;AAE/D,EAAM,MAAA,YAAA,GAAe,WAAW,QAAQ,CAAA;AAKxC,EAAO,OAAA,YAAA,CAAa,aAAaA,SAAQ,CAAA;AAC3C;;;AChBA,IAAM,EAAE,IAAM,EAAA,MAAA,EAAQ,SAAY,GAAA,OAAA,CAAQ,IAAI,cAAc,CAAA;AAE5D,IAAM,QAAW,GAAA,MAAM,WAAY,CAAA,MAAA,CAAO,UAAU,CAAA;AAEpD,IAAI,aAAa,EAAG,CAAA,aAAA;AAAA,EAClB,IAAA;AAAA,EACA;AAAA,IACE,QAAU,EAAA;AAAA,MACR;AAAA,KACF;AAAA,IACA,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA;AAAA,QACJ,MAAQ,EAAA,gDAAA;AAAA,QACR,OAAA,EAAS,OAAO,YAAa,CAAA,KAAA;AAAA,UAAM,CAAA,YAAA,KACjC,YAAa,CAAA,GAAA,CAAI,CAAe,WAAA,KAAA;AAC9B,YAAO,OAAA;AAAA,cACL,KAAA,EAAO,iBAAkB,CAAA,WAAA,EAAa,QAAQ,CAAA;AAAA,cAC9C,UAAU,EAAE,QAAA,EAAU,CAAC,WAAA,CAAY,MAAM,CAAE;AAAA,aAC7C;AAAA,WACD;AAAA,SACH;AAAA,QACA,mBAAqB,EAAA;AAAA,UACnB;AAAA;AACF;AACF;AACF,GACF;AAAA,EACA,EAAE,QAAS;AACb,CAAA;AAEA,IAAO,uBAAQ,OAAQ,CAAA;AAAA,EACrB,SAAW,EAAA;AAAA,IACT,SAAW,EAAA,QAAA,CAAS,MAAO,CAAA,UAAA,CAAW,EAAE,CAAA;AAAA,IACxC,iBAAmB,EAAA;AAAA;AAEvB,CAAC","file":"index.js","sourcesContent":["import type { dns } from \"@highstate/library\"\nimport type { types } from \"@highstate/cert-manager\"\nimport type { Input } from \"@pulumi/pulumi\"\nimport type { Provider } from \"@pulumi/kubernetes\"\nimport { capitalize } from \"remeda\"\nimport { toPromise } from \"@highstate/pulumi\"\n\nexport async function createDns01Solver(\n dnsProviderInput: Input<dns.Provider>,\n provider: Provider,\n): Promise<types.input.cert_manager.v1.ClusterIssuerSpecAcmeSolversDns01> {\n const dnsProvider = await toPromise(dnsProviderInput)\n\n const implName = `create${capitalize(dnsProvider.type)}Dns01Solver`\n const implModule = (await import(`@highstate/${dnsProvider.type}`)) as Record<string, unknown>\n\n const implFunction = implModule[implName] as (\n dnsProvider: dns.Provider,\n provider: Provider,\n ) => types.input.cert_manager.v1.ClusterIssuerSpecAcmeSolversDns01\n\n return implFunction(dnsProvider, provider)\n}\n","import { k8s } from \"@highstate/library\"\nimport { forUnit, unsecret } from \"@highstate/pulumi\"\nimport { cert_manager } from \"@highstate/cert-manager\"\nimport { getProvider } from \"../../shared\"\nimport { createDns01Solver } from \"./solver\"\n\nconst { name, inputs, outputs } = forUnit(k8s.dns01TlsIssuer)\n\nconst provider = await getProvider(inputs.k8sCluster)\n\nnew cert_manager.v1.ClusterIssuer(\n name,\n {\n metadata: {\n name,\n },\n spec: {\n acme: {\n server: \"https://acme-v02.api.letsencrypt.org/directory\",\n solvers: inputs.dnsProviders.apply(dnsProviders =>\n dnsProviders.map(dnsProvider => {\n return {\n dns01: createDns01Solver(dnsProvider, provider),\n selector: { dnsZones: [dnsProvider.domain] },\n }\n }),\n ),\n privateKeySecretRef: {\n name,\n },\n },\n },\n },\n { provider },\n)\n\nexport default outputs({\n tlsIssuer: {\n clusterId: unsecret(inputs.k8sCluster.id),\n clusterIssuerName: name,\n },\n})\n"]}
|
@@ -1,19 +1,12 @@
|
|
1
|
-
import {
|
2
|
-
|
3
|
-
|
4
|
-
} from
|
1
|
+
import { detectExternalIps, createK8sTerminal } from '../../chunk-5C2BJGES.js';
|
2
|
+
import '../../chunk-5TLC5BXR.js';
|
3
|
+
import '../../chunk-PZ5AY32C.js';
|
4
|
+
import { k8s } from '@highstate/library';
|
5
|
+
import { forUnit, toPromise, secret } from '@highstate/pulumi';
|
6
|
+
import { Provider, core } from '@pulumi/kubernetes';
|
7
|
+
import { KubeConfig, AppsV1Api } from '@kubernetes/client-node';
|
8
|
+
import { parseL3Endpoint, parseL4Endpoint, l4EndpointToString, l3EndpointToString } from '@highstate/common';
|
5
9
|
|
6
|
-
// src/units/existing-cluster/index.ts
|
7
|
-
import { k8s } from "@highstate/library";
|
8
|
-
import { forUnit, secret, toPromise } from "@highstate/pulumi";
|
9
|
-
import { core, Provider } from "@pulumi/kubernetes";
|
10
|
-
import { KubeConfig, AppsV1Api } from "@kubernetes/client-node";
|
11
|
-
import {
|
12
|
-
l3EndpointToString,
|
13
|
-
l4EndpointToString,
|
14
|
-
parseL3Endpoint,
|
15
|
-
parseL4Endpoint
|
16
|
-
} from "@highstate/common";
|
17
10
|
var { name, args, secrets, outputs } = forUnit(k8s.existingCluster);
|
18
11
|
var kubeconfigContent = await toPromise(secrets.kubeconfig.apply(JSON.stringify));
|
19
12
|
var provider = new Provider(name, { kubeconfig: kubeconfigContent });
|
@@ -43,14 +36,14 @@ var existing_cluster_default = outputs({
|
|
43
36
|
endpoints,
|
44
37
|
apiEndpoints,
|
45
38
|
$terminals: [createK8sTerminal(kubeconfigContent)],
|
46
|
-
$
|
39
|
+
$statusFields: {
|
47
40
|
clusterId: kubeSystem.metadata.uid,
|
48
41
|
cni,
|
49
42
|
endpoints: endpoints.map(l3EndpointToString),
|
50
43
|
apiEndpoints: apiEndpoints.map(l4EndpointToString)
|
51
44
|
}
|
52
45
|
});
|
53
|
-
|
54
|
-
|
55
|
-
|
46
|
+
|
47
|
+
export { existing_cluster_default as default };
|
48
|
+
//# sourceMappingURL=index.js.map
|
56
49
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/units/existing-cluster/index.ts"],"sourcesContent":["import { k8s } from \"@highstate/library\"\nimport { forUnit, secret, toPromise } from \"@highstate/pulumi\"\nimport { core, Provider } from \"@pulumi/kubernetes\"\nimport { KubeConfig, AppsV1Api } from \"@kubernetes/client-node\"\nimport {\n l3EndpointToString,\n l4EndpointToString,\n parseL3Endpoint,\n parseL4Endpoint,\n} from \"@highstate/common\"\nimport { createK8sTerminal, detectExternalIps } from \"../../cluster\"\n\nconst { name, args, secrets, outputs } = forUnit(k8s.existingCluster)\n\nconst kubeconfigContent = await toPromise(secrets.kubeconfig.apply(JSON.stringify))\n\nconst provider = new Provider(name, { kubeconfig: kubeconfigContent })\n\nlet cni: k8s.CNI = \"other\"\n\nconst kubeConfig = new KubeConfig()\nkubeConfig.loadFromString(kubeconfigContent)\n\nconst appsApi = kubeConfig.makeApiClient(AppsV1Api)\n\nconst isCilium = await appsApi\n .readNamespacedDaemonSet({ name: \"cilium\", namespace: \"kube-system\" })\n .then(() => true)\n .catch(() => false)\n\nif (isCilium) {\n cni = \"cilium\"\n}\n\nconst externalIps =\n args.externalIps ?? (await detectExternalIps(kubeConfig, args.internalIpsPolicy))\n\nconst endpoints = externalIps.map(parseL3Endpoint)\nconst apiEndpoints = [parseL4Endpoint(kubeConfig.clusters[0].server.replace(\"https://\", \"\"))]\n\nconst kubeSystem = core.v1.Namespace.get(\"kube-system\", \"kube-system\", { provider })\n\nexport default outputs({\n k8sCluster: {\n id: kubeSystem.metadata.uid,\n name,\n cni,\n externalIps,\n endpoints,\n apiEndpoints,\n quirks: args.quirks,\n kubeconfig: secret(kubeconfigContent),\n },\n\n endpoints,\n apiEndpoints,\n\n $terminals: [createK8sTerminal(kubeconfigContent)],\n\n $
|
1
|
+
{"version":3,"sources":["../../../src/units/existing-cluster/index.ts"],"names":[],"mappings":";;;;;;;;;AAYA,IAAM,EAAE,MAAM,IAAM,EAAA,OAAA,EAAS,SAAY,GAAA,OAAA,CAAQ,IAAI,eAAe,CAAA;AAEpE,IAAM,iBAAA,GAAoB,MAAM,SAAU,CAAA,OAAA,CAAQ,WAAW,KAAM,CAAA,IAAA,CAAK,SAAS,CAAC,CAAA;AAElF,IAAM,WAAW,IAAI,QAAA,CAAS,MAAM,EAAE,UAAA,EAAY,mBAAmB,CAAA;AAErE,IAAI,GAAe,GAAA,OAAA;AAEnB,IAAM,UAAA,GAAa,IAAI,UAAW,EAAA;AAClC,UAAA,CAAW,eAAe,iBAAiB,CAAA;AAE3C,IAAM,OAAA,GAAU,UAAW,CAAA,aAAA,CAAc,SAAS,CAAA;AAElD,IAAM,WAAW,MAAM,OAAA,CACpB,uBAAwB,CAAA,EAAE,MAAM,QAAU,EAAA,SAAA,EAAW,aAAc,EAAC,EACpE,IAAK,CAAA,MAAM,IAAI,CACf,CAAA,KAAA,CAAM,MAAM,KAAK,CAAA;AAEpB,IAAI,QAAU,EAAA;AACZ,EAAM,GAAA,GAAA,QAAA;AACR;AAEA,IAAM,cACJ,IAAK,CAAA,WAAA,IAAgB,MAAM,iBAAkB,CAAA,UAAA,EAAY,KAAK,iBAAiB,CAAA;AAEjF,IAAM,SAAA,GAAY,WAAY,CAAA,GAAA,CAAI,eAAe,CAAA;AACjD,IAAM,YAAe,GAAA,CAAC,eAAgB,CAAA,UAAA,CAAW,QAAS,CAAA,CAAC,CAAE,CAAA,MAAA,CAAO,OAAQ,CAAA,UAAA,EAAY,EAAE,CAAC,CAAC,CAAA;AAE5F,IAAM,UAAA,GAAa,KAAK,EAAG,CAAA,SAAA,CAAU,IAAI,aAAe,EAAA,aAAA,EAAe,EAAE,QAAA,EAAU,CAAA;AAEnF,IAAO,2BAAQ,OAAQ,CAAA;AAAA,EACrB,UAAY,EAAA;AAAA,IACV,EAAA,EAAI,WAAW,QAAS,CAAA,GAAA;AAAA,IACxB,IAAA;AAAA,IACA,GAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAQ,IAAK,CAAA,MAAA;AAAA,IACb,UAAA,EAAY,OAAO,iBAAiB;AAAA,GACtC;AAAA,EAEA,SAAA;AAAA,EACA,YAAA;AAAA,EAEA,UAAY,EAAA,CAAC,iBAAkB,CAAA,iBAAiB,CAAC,CAAA;AAAA,EAEjD,aAAe,EAAA;AAAA,IACb,SAAA,EAAW,WAAW,QAAS,CAAA,GAAA;AAAA,IAC/B,GAAA;AAAA,IACA,SAAA,EAAW,SAAU,CAAA,GAAA,CAAI,kBAAkB,CAAA;AAAA,IAC3C,YAAA,EAAc,YAAa,CAAA,GAAA,CAAI,kBAAkB;AAAA;AAErD,CAAC","file":"index.js","sourcesContent":["import { k8s } from \"@highstate/library\"\nimport { forUnit, secret, toPromise } from \"@highstate/pulumi\"\nimport { core, Provider } from \"@pulumi/kubernetes\"\nimport { KubeConfig, AppsV1Api } from \"@kubernetes/client-node\"\nimport {\n l3EndpointToString,\n l4EndpointToString,\n parseL3Endpoint,\n parseL4Endpoint,\n} from \"@highstate/common\"\nimport { createK8sTerminal, detectExternalIps } from \"../../cluster\"\n\nconst { name, args, secrets, outputs } = forUnit(k8s.existingCluster)\n\nconst kubeconfigContent = await toPromise(secrets.kubeconfig.apply(JSON.stringify))\n\nconst provider = new Provider(name, { kubeconfig: kubeconfigContent })\n\nlet cni: k8s.CNI = \"other\"\n\nconst kubeConfig = new KubeConfig()\nkubeConfig.loadFromString(kubeconfigContent)\n\nconst appsApi = kubeConfig.makeApiClient(AppsV1Api)\n\nconst isCilium = await appsApi\n .readNamespacedDaemonSet({ name: \"cilium\", namespace: \"kube-system\" })\n .then(() => true)\n .catch(() => false)\n\nif (isCilium) {\n cni = \"cilium\"\n}\n\nconst externalIps =\n args.externalIps ?? (await detectExternalIps(kubeConfig, args.internalIpsPolicy))\n\nconst endpoints = externalIps.map(parseL3Endpoint)\nconst apiEndpoints = [parseL4Endpoint(kubeConfig.clusters[0].server.replace(\"https://\", \"\"))]\n\nconst kubeSystem = core.v1.Namespace.get(\"kube-system\", \"kube-system\", { provider })\n\nexport default outputs({\n k8sCluster: {\n id: kubeSystem.metadata.uid,\n name,\n cni,\n externalIps,\n endpoints,\n apiEndpoints,\n quirks: args.quirks,\n kubeconfig: secret(kubeconfigContent),\n },\n\n endpoints,\n apiEndpoints,\n\n $terminals: [createK8sTerminal(kubeconfigContent)],\n\n $statusFields: {\n clusterId: kubeSystem.metadata.uid,\n cni,\n endpoints: endpoints.map(l3EndpointToString),\n apiEndpoints: apiEndpoints.map(l4EndpointToString),\n },\n})\n"]}
|
@@ -1,11 +1,9 @@
|
|
1
|
-
import {
|
2
|
-
|
3
|
-
} from
|
1
|
+
import { getProvider } from '../../chunk-5TLC5BXR.js';
|
2
|
+
import '../../chunk-PZ5AY32C.js';
|
3
|
+
import { k8s } from '@highstate/library';
|
4
|
+
import { forUnit } from '@highstate/pulumi';
|
5
|
+
import { yaml } from '@pulumi/kubernetes';
|
4
6
|
|
5
|
-
// src/units/gateway-api/index.ts
|
6
|
-
import { k8s } from "@highstate/library";
|
7
|
-
import { forUnit } from "@highstate/pulumi";
|
8
|
-
import { yaml } from "@pulumi/kubernetes";
|
9
7
|
var { inputs, outputs } = forUnit(k8s.gatewayApi);
|
10
8
|
var provider = await getProvider(inputs.k8sCluster);
|
11
9
|
new yaml.v2.ConfigFile(
|
@@ -18,7 +16,7 @@ new yaml.v2.ConfigFile(
|
|
18
16
|
var gateway_api_default = outputs({
|
19
17
|
k8sCluster: inputs.k8sCluster
|
20
18
|
});
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
|
20
|
+
export { gateway_api_default as default };
|
21
|
+
//# sourceMappingURL=index.js.map
|
24
22
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/units/gateway-api/index.ts"],"sourcesContent":["import { k8s } from \"@highstate/library\"\nimport { forUnit } from \"@highstate/pulumi\"\nimport { yaml } from \"@pulumi/kubernetes\"\nimport { getProvider } from \"../../shared\"\n\nconst { inputs, outputs } = forUnit(k8s.gatewayApi)\n\nconst provider = await getProvider(inputs.k8sCluster)\n\nnew yaml.v2.ConfigFile(\n \"gateway-api\",\n {\n file: \"https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/standard-install.yaml\",\n },\n { provider },\n)\n\nexport default outputs({\n k8sCluster: inputs.k8sCluster,\n})\n"]
|
1
|
+
{"version":3,"sources":["../../../src/units/gateway-api/index.ts"],"names":[],"mappings":";;;;;;AAKA,IAAM,EAAE,MAAQ,EAAA,OAAA,EAAY,GAAA,OAAA,CAAQ,IAAI,UAAU,CAAA;AAElD,IAAM,QAAW,GAAA,MAAM,WAAY,CAAA,MAAA,CAAO,UAAU,CAAA;AAEpD,IAAI,KAAK,EAAG,CAAA,UAAA;AAAA,EACV,aAAA;AAAA,EACA;AAAA,IACE,IAAM,EAAA;AAAA,GACR;AAAA,EACA,EAAE,QAAS;AACb,CAAA;AAEA,IAAO,sBAAQ,OAAQ,CAAA;AAAA,EACrB,YAAY,MAAO,CAAA;AACrB,CAAC","file":"index.js","sourcesContent":["import { k8s } from \"@highstate/library\"\nimport { forUnit } from \"@highstate/pulumi\"\nimport { yaml } from \"@pulumi/kubernetes\"\nimport { getProvider } from \"../../shared\"\n\nconst { inputs, outputs } = forUnit(k8s.gatewayApi)\n\nconst provider = await getProvider(inputs.k8sCluster)\n\nnew yaml.v2.ConfigFile(\n \"gateway-api\",\n {\n file: \"https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/standard-install.yaml\",\n },\n { provider },\n)\n\nexport default outputs({\n k8sCluster: inputs.k8sCluster,\n})\n"]}
|
package/package.json
CHANGED
@@ -1,11 +1,19 @@
|
|
1
1
|
{
|
2
2
|
"name": "@highstate/k8s",
|
3
|
-
"version": "0.9.
|
3
|
+
"version": "0.9.16",
|
4
4
|
"type": "module",
|
5
5
|
"files": [
|
6
6
|
"dist",
|
7
7
|
"src"
|
8
8
|
],
|
9
|
+
"highstate": {
|
10
|
+
"sourceHash": {
|
11
|
+
".": {
|
12
|
+
"mode": "manual",
|
13
|
+
"version": "1"
|
14
|
+
}
|
15
|
+
}
|
16
|
+
},
|
9
17
|
"exports": {
|
10
18
|
".": {
|
11
19
|
"types": "./src/index.ts",
|
@@ -25,19 +33,20 @@
|
|
25
33
|
"scripts": {
|
26
34
|
"build": "highstate build",
|
27
35
|
"update-charts": "../../scripts/update-charts.sh ./assets/charts.json",
|
36
|
+
"update-images": "../../scripts/update-images.sh ./assets/images.json",
|
28
37
|
"generate-crds": "./scripts/generate-crds.sh"
|
29
38
|
},
|
30
39
|
"dependencies": {
|
31
|
-
"@highstate/cert-manager": "^0.9.
|
32
|
-
"@highstate/common": "^0.9.
|
33
|
-
"@highstate/contract": "^0.9.
|
34
|
-
"@highstate/gateway-api": "^0.9.
|
35
|
-
"@highstate/library": "^0.9.
|
36
|
-
"@highstate/pulumi": "^0.9.
|
40
|
+
"@highstate/cert-manager": "^0.9.16",
|
41
|
+
"@highstate/common": "^0.9.16",
|
42
|
+
"@highstate/contract": "^0.9.16",
|
43
|
+
"@highstate/gateway-api": "^0.9.16",
|
44
|
+
"@highstate/library": "^0.9.16",
|
45
|
+
"@highstate/pulumi": "^0.9.16",
|
37
46
|
"@kubernetes/client-node": "^1.1.0",
|
38
47
|
"@pulumi/command": "^1.0.2",
|
39
48
|
"@pulumi/kubernetes": "^4.18.0",
|
40
|
-
"@pulumi/pulumi": "^3.
|
49
|
+
"@pulumi/pulumi": "^3.181.0",
|
41
50
|
"crypto-hash": "^3.1.0",
|
42
51
|
"deepmerge-ts": "^7.1.5",
|
43
52
|
"glob": "^11.0.1",
|
@@ -46,7 +55,7 @@
|
|
46
55
|
"remeda": "^2.21.0"
|
47
56
|
},
|
48
57
|
"devDependencies": {
|
49
|
-
"@highstate/cli": "^0.9.
|
58
|
+
"@highstate/cli": "^0.9.16"
|
50
59
|
},
|
51
|
-
"gitHead": "
|
60
|
+
"gitHead": "458d6f1f9f6d4aec0ba75a2b2c4c01408cb9c8df"
|
52
61
|
}
|
package/src/cluster.ts
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
import type { k8s } from "@highstate/library"
|
2
2
|
import { text } from "@highstate/contract"
|
3
|
-
import {
|
3
|
+
import { secret, type Input, type InstanceTerminal } from "@highstate/pulumi"
|
4
4
|
import { CoreV1Api, type KubeConfig } from "@kubernetes/client-node"
|
5
|
+
import { images } from "./shared"
|
5
6
|
|
6
7
|
function isPrivateIp(ip: string) {
|
7
8
|
const privateIpRegex = /^(10|172\.16|192\.168)\./
|
@@ -41,23 +42,27 @@ export async function detectExternalIps(
|
|
41
42
|
export function createK8sTerminal(kubeconfig: Input<string>): InstanceTerminal {
|
42
43
|
return {
|
43
44
|
name: "management",
|
44
|
-
title:
|
45
|
+
title: "Cluster Management",
|
45
46
|
description: "Manage the cluster using kubectl and helm",
|
46
|
-
|
47
|
+
icon: "devicon:kubernetes",
|
48
|
+
|
49
|
+
image: images["terminal-kubectl"].image,
|
47
50
|
command: ["bash", "/welcome.sh"],
|
51
|
+
|
48
52
|
files: {
|
49
53
|
"/kubeconfig": secret(kubeconfig),
|
50
54
|
|
51
55
|
"/welcome.sh": text`
|
52
|
-
|
53
|
-
|
56
|
+
echo "Connecting to the cluster..."
|
57
|
+
kubectl cluster-info
|
54
58
|
|
55
|
-
|
56
|
-
|
59
|
+
echo "Use 'kubectl' and 'helm' to manage the cluster."
|
60
|
+
echo
|
57
61
|
|
58
|
-
|
59
|
-
|
62
|
+
exec bash
|
63
|
+
`,
|
60
64
|
},
|
65
|
+
|
61
66
|
env: {
|
62
67
|
KUBECONFIG: "/kubeconfig",
|
63
68
|
},
|
package/src/deployment.ts
CHANGED
@@ -125,6 +125,15 @@ export abstract class Deployment extends ExposableWorkload {
|
|
125
125
|
|
126
126
|
return new ExternalDeployment(name, output(args.existing).metadata, args.cluster, opts)
|
127
127
|
}
|
128
|
+
|
129
|
+
static wrap(
|
130
|
+
name: string,
|
131
|
+
deployment: Input<apps.v1.Deployment>,
|
132
|
+
cluster: Input<k8s.Cluster>,
|
133
|
+
opts?: ComponentResourceOptions,
|
134
|
+
): Deployment {
|
135
|
+
return new WrappedDeployment(name, deployment, cluster, opts)
|
136
|
+
}
|
128
137
|
}
|
129
138
|
|
130
139
|
class CreatedDeployment extends Deployment {
|
@@ -251,3 +260,28 @@ class ExternalDeployment extends Deployment {
|
|
251
260
|
)
|
252
261
|
}
|
253
262
|
}
|
263
|
+
|
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
|
+
) {
|
271
|
+
super(
|
272
|
+
"highstate:k8s:WrappedDeployment",
|
273
|
+
name,
|
274
|
+
{ namespace: output(deployment).metadata.namespace, cluster },
|
275
|
+
opts,
|
276
|
+
|
277
|
+
output(cluster),
|
278
|
+
output(deployment).metadata,
|
279
|
+
output(deployment).spec,
|
280
|
+
output(deployment).status,
|
281
|
+
|
282
|
+
output(undefined),
|
283
|
+
output(undefined),
|
284
|
+
output(undefined),
|
285
|
+
)
|
286
|
+
}
|
287
|
+
}
|
package/src/helm.ts
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
import type { k8s } from "@highstate/library"
|
2
|
+
import type { Workload } from "./workload"
|
2
3
|
import { resolve } from "node:path"
|
3
4
|
import { mkdir, readFile, unlink } from "node:fs/promises"
|
4
|
-
import { normalize, toPromise, type InputMap } from "@highstate/pulumi"
|
5
|
-
import { core, helm, types } from "@pulumi/kubernetes"
|
5
|
+
import { normalize, toPromise, type InputMap, type InstanceTerminal } from "@highstate/pulumi"
|
6
|
+
import { apps, core, helm, types } from "@pulumi/kubernetes"
|
6
7
|
import {
|
7
8
|
ComponentResource,
|
8
9
|
output,
|
@@ -19,6 +20,8 @@ import { NetworkPolicy, type NetworkPolicyArgs } from "./network-policy"
|
|
19
20
|
import { HttpRoute, type HttpRouteArgs } from "./gateway"
|
20
21
|
import { getProvider, mapNamespaceLikeToNamespaceName, type NamespaceLike } from "./shared"
|
21
22
|
import { getServiceType, Service, type ServiceArgs } from "./service"
|
23
|
+
import { Deployment } from "./deployment"
|
24
|
+
import { StatefulSet } from "./stateful-set"
|
22
25
|
|
23
26
|
export type ChartArgs = Omit<
|
24
27
|
helm.v4.ChartArgs,
|
@@ -85,6 +88,11 @@ export class Chart extends ComponentResource {
|
|
85
88
|
*/
|
86
89
|
public readonly networkPolicies: Output<NetworkPolicy[]>
|
87
90
|
|
91
|
+
/**
|
92
|
+
* All workloads created by the chart.
|
93
|
+
*/
|
94
|
+
public readonly workloads: Output<Workload[]>
|
95
|
+
|
88
96
|
constructor(
|
89
97
|
private readonly name: string,
|
90
98
|
private readonly args: ChartArgs,
|
@@ -185,12 +193,40 @@ export class Chart extends ComponentResource {
|
|
185
193
|
}),
|
186
194
|
)
|
187
195
|
})
|
196
|
+
|
197
|
+
this.workloads = output(this.chart).apply(chart => {
|
198
|
+
return output(
|
199
|
+
chart.resources.apply(resources => {
|
200
|
+
return resources
|
201
|
+
.map(resource => {
|
202
|
+
if (apps.v1.Deployment.isInstance(resource)) {
|
203
|
+
return resource.metadata.name.apply(name => {
|
204
|
+
return Deployment.wrap(name, resource, this.args.cluster, this.opts)
|
205
|
+
})
|
206
|
+
}
|
207
|
+
|
208
|
+
if (apps.v1.StatefulSet.isInstance(resource)) {
|
209
|
+
return resource.metadata.name.apply(name => {
|
210
|
+
return StatefulSet.wrap(name, resource, this.args.cluster, this.opts)
|
211
|
+
})
|
212
|
+
}
|
213
|
+
|
214
|
+
return undefined
|
215
|
+
})
|
216
|
+
.filter(workload => workload !== undefined) as Output<Workload>[]
|
217
|
+
}),
|
218
|
+
)
|
219
|
+
})
|
188
220
|
}
|
189
221
|
|
190
222
|
get service(): Output<Service> {
|
191
223
|
return this.getServiceOutput(undefined)
|
192
224
|
}
|
193
225
|
|
226
|
+
get terminals(): Output<InstanceTerminal[]> {
|
227
|
+
return this.workloads.apply(workloads => output(workloads.map(workload => workload.terminal)))
|
228
|
+
}
|
229
|
+
|
194
230
|
private readonly services = new Map<string, Service>()
|
195
231
|
|
196
232
|
getServiceOutput(name: string | undefined): Output<Service> {
|
package/src/network-policy.ts
CHANGED
@@ -434,10 +434,7 @@ export abstract class NetworkPolicy extends ComponentResource {
|
|
434
434
|
allowKubeApiServer: args.allowKubeApiServer ?? false,
|
435
435
|
|
436
436
|
ingressRules: ingressRules.flatMap(rule => {
|
437
|
-
const endpoints = normalize(
|
438
|
-
args.ingressRule?.fromEndpoint,
|
439
|
-
args.ingressRule?.fromEndpoints,
|
440
|
-
)
|
437
|
+
const endpoints = normalize(rule?.fromEndpoint, rule?.fromEndpoints)
|
441
438
|
const parsedEndpoints = endpoints.map(parseL34Endpoint)
|
442
439
|
|
443
440
|
const endpointsNamespaces = groupBy(parsedEndpoints, endpoint => {
|
@@ -475,7 +472,7 @@ export abstract class NetworkPolicy extends ComponentResource {
|
|
475
472
|
|
476
473
|
egressRules: egressRules
|
477
474
|
.flatMap(rule => {
|
478
|
-
const endpoints = normalize(
|
475
|
+
const endpoints = normalize(rule?.toEndpoint, rule?.toEndpoints)
|
479
476
|
const parsedEndpoints = endpoints.map(parseL34Endpoint)
|
480
477
|
|
481
478
|
const endpointsByPortsAnsNamespaces = groupBy(parsedEndpoints, endpoint => {
|
package/src/shared.ts
CHANGED
@@ -2,6 +2,7 @@ import type { PartialKeys } from "@highstate/contract"
|
|
2
2
|
import type { k8s } from "@highstate/library"
|
3
3
|
import { interpolate, Output, output, toPromise, type Input, type Unwrap } from "@highstate/pulumi"
|
4
4
|
import { core, Provider, types } from "@pulumi/kubernetes"
|
5
|
+
import * as images from "../assets/images.json"
|
5
6
|
import { Namespace } from "./namespace"
|
6
7
|
|
7
8
|
const providers = new Map<string, Provider>()
|
@@ -24,6 +25,20 @@ export function getProvider(cluster: Input<k8s.Cluster>): Promise<Provider> {
|
|
24
25
|
return toPromise(provider)
|
25
26
|
}
|
26
27
|
|
28
|
+
export function getProviderSync(cluster: k8s.Cluster): Provider {
|
29
|
+
const existingProvider = providers.get(cluster.id)
|
30
|
+
if (existingProvider) {
|
31
|
+
return existingProvider
|
32
|
+
}
|
33
|
+
|
34
|
+
const provider = new Provider(`${cluster.name}-${cluster.id}`, {
|
35
|
+
kubeconfig: cluster.kubeconfig,
|
36
|
+
})
|
37
|
+
providers.set(cluster.id, provider)
|
38
|
+
|
39
|
+
return provider
|
40
|
+
}
|
41
|
+
|
27
42
|
export type NamespaceLike = core.v1.Namespace | Namespace | string
|
28
43
|
|
29
44
|
export type CommonArgs = {
|
@@ -127,3 +142,5 @@ export function withPatchName(
|
|
127
142
|
return resource.metadata.name
|
128
143
|
})
|
129
144
|
}
|
145
|
+
|
146
|
+
export { images }
|
package/src/stateful-set.ts
CHANGED
@@ -125,6 +125,15 @@ export abstract class StatefulSet extends ExposableWorkload {
|
|
125
125
|
|
126
126
|
return new ExternalStatefulSet(name, output(args.existing).metadata, args.cluster, opts)
|
127
127
|
}
|
128
|
+
|
129
|
+
static wrap(
|
130
|
+
name: string,
|
131
|
+
statefulSet: Input<apps.v1.StatefulSet>,
|
132
|
+
cluster: Input<k8s.Cluster>,
|
133
|
+
opts?: ComponentResourceOptions,
|
134
|
+
): StatefulSet {
|
135
|
+
return new WrappedStatefulSet(name, statefulSet, cluster, opts)
|
136
|
+
}
|
128
137
|
}
|
129
138
|
|
130
139
|
class CreatedStatefulSet extends StatefulSet {
|
@@ -262,3 +271,28 @@ class ExternalStatefulSet extends StatefulSet {
|
|
262
271
|
)
|
263
272
|
}
|
264
273
|
}
|
274
|
+
|
275
|
+
class WrappedStatefulSet extends StatefulSet {
|
276
|
+
constructor(
|
277
|
+
name: string,
|
278
|
+
statefulSet: Input<apps.v1.StatefulSet>,
|
279
|
+
cluster: Input<k8s.Cluster>,
|
280
|
+
opts?: ComponentResourceOptions,
|
281
|
+
) {
|
282
|
+
super(
|
283
|
+
"highstate:k8s:WrappedStatefulSet",
|
284
|
+
name,
|
285
|
+
{ namespace: output(statefulSet).metadata.namespace, cluster },
|
286
|
+
opts,
|
287
|
+
|
288
|
+
output(cluster),
|
289
|
+
output(statefulSet).metadata,
|
290
|
+
output(statefulSet).spec,
|
291
|
+
output(statefulSet).status,
|
292
|
+
|
293
|
+
output(undefined),
|
294
|
+
output(undefined),
|
295
|
+
output(undefined),
|
296
|
+
)
|
297
|
+
}
|
298
|
+
}
|