@highstate/k8s 0.6.2 → 0.7.1
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/assets/charts.json +8 -0
- package/dist/helm-wPTgVV1N.js +413 -0
- package/dist/index.d.ts +412 -52
- package/dist/index.js +518 -335
- package/dist/shared-Clzbl5K-.js +89 -0
- package/dist/units/cert-manager/index.js +25 -7
- package/dist/units/dns01-issuer/index.js +3 -5
- package/dist/units/existing-cluster/index.js +21 -5
- package/package.json +12 -8
- package/assets/cert-manager-v1.16.3.tgz +0 -0
- package/assets/gateway-api.yaml +0 -14974
- package/dist/shared-hajqPzR4.js +0 -64
@@ -0,0 +1,89 @@
|
|
1
|
+
import { output, toPromise } from '@highstate/pulumi';
|
2
|
+
import { Provider, core } from '@pulumi/kubernetes';
|
3
|
+
import { mergeDeep } from 'remeda';
|
4
|
+
|
5
|
+
const providers = /* @__PURE__ */ new Map();
|
6
|
+
function getProvider(cluster) {
|
7
|
+
const provider = output(cluster).apply((cluster2) => {
|
8
|
+
const existingProvider = providers.get(cluster2.info.id);
|
9
|
+
if (existingProvider) {
|
10
|
+
return existingProvider;
|
11
|
+
}
|
12
|
+
const provider2 = new Provider(cluster2.info.id, { kubeconfig: cluster2.kubeconfig });
|
13
|
+
providers.set(cluster2.info.id, provider2);
|
14
|
+
return provider2;
|
15
|
+
});
|
16
|
+
return toPromise(provider);
|
17
|
+
}
|
18
|
+
async function verifyProvider(provider, clusterInfo) {
|
19
|
+
if (!provider) {
|
20
|
+
throw new Error("The provider must be passed to the resource.");
|
21
|
+
}
|
22
|
+
const urn = await toPromise(provider.urn);
|
23
|
+
const [, , , resouceName] = urn.split("::");
|
24
|
+
const expectedId = await toPromise(output(clusterInfo).id);
|
25
|
+
if (resouceName !== expectedId) {
|
26
|
+
throw new Error(
|
27
|
+
"The Kubernetes cluster of the provider is different from the one where the resource is deployed."
|
28
|
+
);
|
29
|
+
}
|
30
|
+
}
|
31
|
+
function createNamespace(name, provider, args = {}) {
|
32
|
+
return new core.v1.Namespace(
|
33
|
+
name,
|
34
|
+
mergeDeep(args, {
|
35
|
+
metadata: {
|
36
|
+
name
|
37
|
+
}
|
38
|
+
}),
|
39
|
+
{ provider }
|
40
|
+
);
|
41
|
+
}
|
42
|
+
function getNamespace(name = "default", provider) {
|
43
|
+
return core.v1.Namespace.get(name, name, { provider });
|
44
|
+
}
|
45
|
+
const commonExtraArgs = ["name", "namespace", "metadata"];
|
46
|
+
function mapMetadata(args, fallbackName) {
|
47
|
+
return {
|
48
|
+
...args.metadata,
|
49
|
+
name: args.name ?? args.metadata?.name ?? fallbackName,
|
50
|
+
namespace: args.namespace ? mapNamespaceLikeToNamespaceName(args.namespace) : void 0
|
51
|
+
};
|
52
|
+
}
|
53
|
+
function mapSelectorLikeToSelector(selector) {
|
54
|
+
if ("matchLabels" in selector || "matchExpressions" in selector) {
|
55
|
+
return selector;
|
56
|
+
}
|
57
|
+
return {
|
58
|
+
matchLabels: selector
|
59
|
+
};
|
60
|
+
}
|
61
|
+
function mapNamespaceLikeToNamespaceName(namespace) {
|
62
|
+
return core.v1.Namespace.isInstance(namespace) ? namespace.metadata.name : output(namespace);
|
63
|
+
}
|
64
|
+
function mapNamespaceNameToSelector(namespace) {
|
65
|
+
return {
|
66
|
+
matchLabels: {
|
67
|
+
"kubernetes.io/metadata.name": namespace
|
68
|
+
}
|
69
|
+
};
|
70
|
+
}
|
71
|
+
function resourceIdToString(metadata) {
|
72
|
+
return output(metadata).apply((metadata2) => {
|
73
|
+
return metadata2.namespace ? `${metadata2.namespace}/${metadata2.name}` : metadata2.name;
|
74
|
+
});
|
75
|
+
}
|
76
|
+
function getAppName(resourceId) {
|
77
|
+
if (resourceId.namespace !== resourceId.name) {
|
78
|
+
return `${resourceId.namespace ?? "default"}-${resourceId.name}`;
|
79
|
+
}
|
80
|
+
return resourceId.name;
|
81
|
+
}
|
82
|
+
function getAppDisplayName(resourceId) {
|
83
|
+
if (resourceId.namespace !== resourceId.name) {
|
84
|
+
return `${resourceId.namespace ?? "default"}/${resourceId.name}`;
|
85
|
+
}
|
86
|
+
return resourceId.name;
|
87
|
+
}
|
88
|
+
|
89
|
+
export { mapSelectorLikeToSelector as a, mapNamespaceNameToSelector as b, commonExtraArgs as c, mapNamespaceLikeToNamespaceName as d, getAppName as e, getProvider as f, getAppDisplayName as g, createNamespace as h, getNamespace as i, mapMetadata as m, resourceIdToString as r, verifyProvider as v };
|
@@ -1,19 +1,37 @@
|
|
1
1
|
import { k8s } from '@highstate/library';
|
2
2
|
import { forUnit } from '@highstate/pulumi';
|
3
|
-
import {
|
4
|
-
import {
|
5
|
-
import '
|
6
|
-
import 'node:path';
|
3
|
+
import { f as getProvider, h as createNamespace } from '../../shared-Clzbl5K-.js';
|
4
|
+
import { C as Chart } from '../../helm-wPTgVV1N.js';
|
5
|
+
import '@pulumi/kubernetes';
|
7
6
|
import 'remeda';
|
7
|
+
import 'path';
|
8
|
+
import 'node:fs/promises';
|
9
|
+
import '@pulumi/pulumi';
|
10
|
+
import 'nano-spawn';
|
11
|
+
import 'crypto-hash';
|
12
|
+
import '@pulumi/command';
|
13
|
+
import 'glob';
|
14
|
+
import 'deepmerge-ts';
|
15
|
+
import '@highstate/gateway-api';
|
16
|
+
|
17
|
+
var charts = {
|
18
|
+
"cert-manager": {
|
19
|
+
repo: "https://charts.jetstack.io",
|
20
|
+
name: "cert-manager",
|
21
|
+
version: "v1.17.1",
|
22
|
+
sha256: "48707f6e8937290da96065dc7de8b4f5a95d9707798d4b5a0d560f78c12996f7"
|
23
|
+
}
|
24
|
+
};
|
8
25
|
|
9
26
|
const { inputs, outputs } = forUnit(k8s.certManager);
|
10
|
-
const provider = await
|
27
|
+
const provider = await getProvider(inputs.k8sCluster);
|
11
28
|
const namespace = createNamespace("cert-manager", provider);
|
12
|
-
new
|
29
|
+
new Chart(
|
13
30
|
"cert-manager",
|
14
31
|
{
|
15
32
|
namespace: namespace.metadata.name,
|
16
|
-
|
33
|
+
cluster: inputs.k8sCluster,
|
34
|
+
chart: charts["cert-manager"],
|
17
35
|
values: {
|
18
36
|
crds: {
|
19
37
|
enabled: true
|
@@ -1,10 +1,8 @@
|
|
1
1
|
import { k8s } from '@highstate/library';
|
2
2
|
import { toPromise, forUnit, unsecret } from '@highstate/pulumi';
|
3
3
|
import { cert_manager } from '@highstate/cert-manager';
|
4
|
-
import {
|
4
|
+
import { f as getProvider } from '../../shared-Clzbl5K-.js';
|
5
5
|
import { capitalize } from 'remeda';
|
6
|
-
import 'node:fs';
|
7
|
-
import 'node:path';
|
8
6
|
import '@pulumi/kubernetes';
|
9
7
|
|
10
8
|
async function createDns01Solver(dnsProviderInput, provider) {
|
@@ -16,7 +14,7 @@ async function createDns01Solver(dnsProviderInput, provider) {
|
|
16
14
|
}
|
17
15
|
|
18
16
|
const { name, inputs, outputs } = forUnit(k8s.dns01TlsIssuer);
|
19
|
-
const provider = await
|
17
|
+
const provider = await getProvider(inputs.k8sCluster);
|
20
18
|
const dns01Solver = await createDns01Solver(inputs.dnsProvider, provider);
|
21
19
|
new cert_manager.v1.ClusterIssuer(
|
22
20
|
name,
|
@@ -43,7 +41,7 @@ new cert_manager.v1.ClusterIssuer(
|
|
43
41
|
);
|
44
42
|
var index = outputs({
|
45
43
|
tlsIssuer: {
|
46
|
-
|
44
|
+
clusterInfo: unsecret(inputs.k8sCluster.info),
|
47
45
|
clusterIssuerName: name
|
48
46
|
}
|
49
47
|
});
|
@@ -1,15 +1,27 @@
|
|
1
1
|
import { text } from '@highstate/contract';
|
2
2
|
import { k8s } from '@highstate/library';
|
3
|
-
import { forUnit } from '@highstate/pulumi';
|
3
|
+
import { forUnit, toPromise } from '@highstate/pulumi';
|
4
|
+
import { Provider, apps, core } from '@pulumi/kubernetes';
|
4
5
|
|
5
6
|
const { name, secrets, outputs } = forUnit(k8s.existingCluster);
|
6
7
|
const kubeconfig = secrets.kubeconfig.apply(JSON.stringify);
|
8
|
+
const provider = new Provider(name, { kubeconfig });
|
9
|
+
let cni;
|
10
|
+
try {
|
11
|
+
await toPromise(apps.v1.DaemonSet.get("cilium", "kube-system/cilium", { provider }).id);
|
12
|
+
cni = "cilium";
|
13
|
+
} catch {
|
14
|
+
console.log("there is no cilium CNI");
|
15
|
+
}
|
16
|
+
const kubeSystem = core.v1.Namespace.get("kube-system", "kube-system", { provider });
|
7
17
|
var index = outputs({
|
8
18
|
cluster: {
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
19
|
+
info: {
|
20
|
+
id: kubeSystem.metadata.uid,
|
21
|
+
name,
|
22
|
+
cni
|
23
|
+
},
|
24
|
+
kubeconfig
|
13
25
|
},
|
14
26
|
$terminals: {
|
15
27
|
management: {
|
@@ -34,6 +46,10 @@ var index = outputs({
|
|
34
46
|
KUBECONFIG: "/kubeconfig"
|
35
47
|
}
|
36
48
|
}
|
49
|
+
},
|
50
|
+
$status: {
|
51
|
+
clusterId: kubeSystem.metadata.uid,
|
52
|
+
cni: cni ?? "unknown"
|
37
53
|
}
|
38
54
|
});
|
39
55
|
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@highstate/k8s",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.7.1",
|
4
4
|
"type": "module",
|
5
5
|
"module": "dist/index.js",
|
6
6
|
"types": "dist/index.d.ts",
|
@@ -23,19 +23,23 @@
|
|
23
23
|
},
|
24
24
|
"scripts": {
|
25
25
|
"build": "pkgroll --tsconfig=tsconfig.build.json",
|
26
|
-
"update-
|
26
|
+
"update-charts": "../../scripts/update-charts.sh ./assets/charts.json",
|
27
27
|
"generate-crds": "./scripts/generate-crds.sh"
|
28
28
|
},
|
29
29
|
"dependencies": {
|
30
|
-
"@highstate/cert-manager": "^0.
|
31
|
-
"@highstate/common": "^0.
|
32
|
-
"@highstate/contract": "^0.
|
33
|
-
"@highstate/gateway-api": "^0.
|
34
|
-
"@highstate/pulumi": "^0.
|
30
|
+
"@highstate/cert-manager": "^0.7.1",
|
31
|
+
"@highstate/common": "^0.7.1",
|
32
|
+
"@highstate/contract": "^0.7.1",
|
33
|
+
"@highstate/gateway-api": "^0.7.1",
|
34
|
+
"@highstate/pulumi": "^0.7.1",
|
35
35
|
"@pulumi/command": "^1.0.2",
|
36
36
|
"@pulumi/kubernetes": "^4.18.0",
|
37
37
|
"@pulumi/pulumi": "^3.152.0",
|
38
|
+
"crypto-hash": "^3.1.0",
|
38
39
|
"deepmerge-ts": "^7.1.5",
|
40
|
+
"glob": "^11.0.1",
|
41
|
+
"nano-spawn": "^0.2.0",
|
42
|
+
"parse-domain": "^8.2.2",
|
39
43
|
"remeda": "^2.21.0"
|
40
44
|
},
|
41
45
|
"peerDependencies": {
|
@@ -44,5 +48,5 @@
|
|
44
48
|
"devDependencies": {
|
45
49
|
"pkgroll": "^2.5.1"
|
46
50
|
},
|
47
|
-
"gitHead": "
|
51
|
+
"gitHead": "76c38ce5dbf7a710cf0e6339f52e86358537a99a"
|
48
52
|
}
|
Binary file
|