@highstate/k8s 0.4.5
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/index.d.ts +676 -0
- package/dist/index.js +950 -0
- package/dist/shared-hajqPzR4.js +64 -0
- package/dist/units/access-point/index.js +13 -0
- package/dist/units/cert-manager/index.js +34 -0
- package/dist/units/dns01-issuer/index.js +51 -0
- package/dist/units/existing-cluster/index.js +38 -0
- package/package.json +47 -0
@@ -0,0 +1,64 @@
|
|
1
|
+
import { readdirSync } from 'node:fs';
|
2
|
+
import { resolve } from 'node:path';
|
3
|
+
import { output, toPromise, resolvePackagePath } from '@highstate/pulumi';
|
4
|
+
import { Provider, core } from '@pulumi/kubernetes';
|
5
|
+
import { mergeDeep } from 'remeda';
|
6
|
+
|
7
|
+
function createProvider(cluster) {
|
8
|
+
const provider = output(cluster).apply((cluster2) => {
|
9
|
+
return new Provider(cluster2.name, {
|
10
|
+
kubeconfig: cluster2.kubeconfig
|
11
|
+
});
|
12
|
+
});
|
13
|
+
return toPromise(provider);
|
14
|
+
}
|
15
|
+
function createNamespace(name, provider, args = {}) {
|
16
|
+
return new core.v1.Namespace(
|
17
|
+
name,
|
18
|
+
mergeDeep(args, {
|
19
|
+
metadata: {
|
20
|
+
name
|
21
|
+
}
|
22
|
+
}),
|
23
|
+
{ provider }
|
24
|
+
);
|
25
|
+
}
|
26
|
+
const commonExtraArgs = ["name", "namespace", "metadata"];
|
27
|
+
function mapMetadata(args, fallbackName) {
|
28
|
+
return {
|
29
|
+
...args.metadata,
|
30
|
+
name: args.name ?? args.metadata?.name ?? fallbackName,
|
31
|
+
namespace: args.namespace ? mapNamespaceLikeToNamespaceName(args.namespace) : void 0
|
32
|
+
};
|
33
|
+
}
|
34
|
+
function resolveChartPath(packageName, chartName, parent) {
|
35
|
+
const resolvedChartsPath = resolvePackagePath(packageName, "assets", parent);
|
36
|
+
const files = readdirSync(resolvedChartsPath).filter((file) => file.startsWith(chartName));
|
37
|
+
if (files.length === 0) {
|
38
|
+
throw new Error(`No chart found for ${chartName}`);
|
39
|
+
}
|
40
|
+
if (files.length > 1) {
|
41
|
+
throw new Error(`Multiple charts found for ${chartName}`);
|
42
|
+
}
|
43
|
+
return resolve(resolvedChartsPath, files[0]);
|
44
|
+
}
|
45
|
+
function mapSelectorLikeToSelector(selector) {
|
46
|
+
if ("matchLabels" in selector || "matchExpressions" in selector) {
|
47
|
+
return selector;
|
48
|
+
}
|
49
|
+
return {
|
50
|
+
matchLabels: selector
|
51
|
+
};
|
52
|
+
}
|
53
|
+
function mapNamespaceLikeToNamespaceName(namespace) {
|
54
|
+
return core.v1.Namespace.isInstance(namespace) ? namespace.metadata.name : output(namespace);
|
55
|
+
}
|
56
|
+
function mapNamespaceNameToSelector(namespace) {
|
57
|
+
return {
|
58
|
+
matchLabels: {
|
59
|
+
"kubernetes.io/metadata.name": namespace
|
60
|
+
}
|
61
|
+
};
|
62
|
+
}
|
63
|
+
|
64
|
+
export { mapSelectorLikeToSelector as a, mapNamespaceNameToSelector as b, commonExtraArgs as c, mapNamespaceLikeToNamespaceName as d, createProvider as e, createNamespace as f, mapMetadata as m, resolveChartPath as r };
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { k8s } from '@highstate/library';
|
2
|
+
import { forUnit } from '@highstate/pulumi';
|
3
|
+
|
4
|
+
const { inputs, outputs } = forUnit(k8s.accessPoint);
|
5
|
+
var index = outputs({
|
6
|
+
accessPoint: {
|
7
|
+
dnsProvider: inputs.dnsProvider,
|
8
|
+
gateway: inputs.gateway,
|
9
|
+
tlsIssuer: inputs.tlsIssuer
|
10
|
+
}
|
11
|
+
});
|
12
|
+
|
13
|
+
export { index as default };
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import { k8s } from '@highstate/library';
|
2
|
+
import { forUnit } from '@highstate/pulumi';
|
3
|
+
import { helm } from '@pulumi/kubernetes';
|
4
|
+
import { e as createProvider, f as createNamespace, r as resolveChartPath } from '../../shared-hajqPzR4.js';
|
5
|
+
import 'node:fs';
|
6
|
+
import 'node:path';
|
7
|
+
import 'remeda';
|
8
|
+
|
9
|
+
const { inputs, outputs } = forUnit(k8s.certManager);
|
10
|
+
const provider = await createProvider(inputs.k8sCluster);
|
11
|
+
const namespace = createNamespace("cert-manager", provider);
|
12
|
+
new helm.v4.Chart(
|
13
|
+
"cert-manager",
|
14
|
+
{
|
15
|
+
namespace: namespace.metadata.name,
|
16
|
+
chart: resolveChartPath("@highstate/k8s", "cert-manager", import.meta.url),
|
17
|
+
values: {
|
18
|
+
crds: {
|
19
|
+
enabled: true
|
20
|
+
},
|
21
|
+
config: {
|
22
|
+
apiVersion: "controller.config.cert-manager.io/v1alpha1",
|
23
|
+
kind: "ControllerConfiguration",
|
24
|
+
enableGatewayAPI: true
|
25
|
+
}
|
26
|
+
}
|
27
|
+
},
|
28
|
+
{ provider }
|
29
|
+
);
|
30
|
+
var index = outputs({
|
31
|
+
k8sCluster: inputs.k8sCluster
|
32
|
+
});
|
33
|
+
|
34
|
+
export { index as default };
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import { k8s } from '@highstate/library';
|
2
|
+
import { toPromise, forUnit, unsecret } from '@highstate/pulumi';
|
3
|
+
import { cert_manager } from '@highstate/cert-manager';
|
4
|
+
import { e as createProvider } from '../../shared-hajqPzR4.js';
|
5
|
+
import { capitalize } from 'remeda';
|
6
|
+
import 'node:fs';
|
7
|
+
import 'node:path';
|
8
|
+
import '@pulumi/kubernetes';
|
9
|
+
|
10
|
+
async function createDns01Solver(dnsProviderInput, provider) {
|
11
|
+
const dnsProvider = await toPromise(dnsProviderInput);
|
12
|
+
const implName = `create${capitalize(dnsProvider.type)}Dns01Solver`;
|
13
|
+
const implModule = await import(`@highstate/${dnsProvider.type}`);
|
14
|
+
const implFunction = implModule[implName];
|
15
|
+
return implFunction(dnsProvider, provider);
|
16
|
+
}
|
17
|
+
|
18
|
+
const { name, inputs, outputs } = forUnit(k8s.dns01TlsIssuer);
|
19
|
+
const provider = await createProvider(inputs.k8sCluster);
|
20
|
+
const dns01Solver = await createDns01Solver(inputs.dnsProvider, provider);
|
21
|
+
new cert_manager.v1.ClusterIssuer(
|
22
|
+
name,
|
23
|
+
{
|
24
|
+
metadata: {
|
25
|
+
name
|
26
|
+
},
|
27
|
+
spec: {
|
28
|
+
acme: {
|
29
|
+
server: "https://acme-v02.api.letsencrypt.org/directory",
|
30
|
+
solvers: [
|
31
|
+
{
|
32
|
+
dns01: dns01Solver,
|
33
|
+
selector: { dnsZones: [inputs.dnsProvider.domain] }
|
34
|
+
}
|
35
|
+
],
|
36
|
+
privateKeySecretRef: {
|
37
|
+
name
|
38
|
+
}
|
39
|
+
}
|
40
|
+
}
|
41
|
+
},
|
42
|
+
{ provider }
|
43
|
+
);
|
44
|
+
var index = outputs({
|
45
|
+
tlsIssuer: {
|
46
|
+
clusterName: unsecret(inputs.k8sCluster.name),
|
47
|
+
clusterIssuerName: name
|
48
|
+
}
|
49
|
+
});
|
50
|
+
|
51
|
+
export { index as default };
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import { text } from '@highstate/contract';
|
2
|
+
import { k8s } from '@highstate/library';
|
3
|
+
import { forUnit } from '@highstate/pulumi';
|
4
|
+
|
5
|
+
const { name, secrets, outputs } = forUnit(k8s.existingCluster);
|
6
|
+
const kubeconfig = secrets.kubeconfig.apply(JSON.stringify);
|
7
|
+
var index = outputs({
|
8
|
+
cluster: {
|
9
|
+
name,
|
10
|
+
kubeconfig,
|
11
|
+
// TODO: detect CNI
|
12
|
+
cni: "unknown"
|
13
|
+
},
|
14
|
+
$terminals: {
|
15
|
+
management: {
|
16
|
+
title: "Cluster Management",
|
17
|
+
image: "ghcr.io/exeteres/highstate/terminal-kubectl",
|
18
|
+
command: ["bash", "/welcome.sh"],
|
19
|
+
files: {
|
20
|
+
"/kubeconfig": kubeconfig,
|
21
|
+
"/welcome.sh": text`
|
22
|
+
echo "Connecting to the cluster..."
|
23
|
+
kubectl cluster-info
|
24
|
+
|
25
|
+
echo "Use 'kubectl' and 'helm' to manage the cluster."
|
26
|
+
echo
|
27
|
+
|
28
|
+
exec script -q -c bash /dev/null
|
29
|
+
`
|
30
|
+
},
|
31
|
+
env: {
|
32
|
+
KUBECONFIG: "/kubeconfig"
|
33
|
+
}
|
34
|
+
}
|
35
|
+
}
|
36
|
+
});
|
37
|
+
|
38
|
+
export { index as default };
|
package/package.json
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
{
|
2
|
+
"name": "@highstate/k8s",
|
3
|
+
"version": "0.4.5",
|
4
|
+
"type": "module",
|
5
|
+
"module": "dist/index.js",
|
6
|
+
"types": "dist/index.d.ts",
|
7
|
+
"files": [
|
8
|
+
"dist"
|
9
|
+
],
|
10
|
+
"exports": {
|
11
|
+
".": {
|
12
|
+
"default": "./dist/index.js",
|
13
|
+
"types": "./dist/index.d.ts"
|
14
|
+
},
|
15
|
+
"./access-point": "./dist/units/access-point/index.js",
|
16
|
+
"./cert-manager": "./dist/units/cert-manager/index.js",
|
17
|
+
"./dns01-issuer": "./dist/units/dns01-issuer/index.js",
|
18
|
+
"./existing-cluster": "./dist/units/existing-cluster/index.js"
|
19
|
+
},
|
20
|
+
"publishConfig": {
|
21
|
+
"access": "public"
|
22
|
+
},
|
23
|
+
"scripts": {
|
24
|
+
"build": "pkgroll --tsconfig=tsconfig.build.json",
|
25
|
+
"update-assets": "./scripts/update-assets.sh",
|
26
|
+
"generate-crds": "./scripts/generate-crds.sh"
|
27
|
+
},
|
28
|
+
"dependencies": {
|
29
|
+
"@highstate/cert-manager": "^0.4.5",
|
30
|
+
"@highstate/common": "^0.4.5",
|
31
|
+
"@highstate/contract": "^0.4.5",
|
32
|
+
"@highstate/gateway-api": "^0.4.5",
|
33
|
+
"@highstate/pulumi": "^0.4.5",
|
34
|
+
"@pulumi/command": "^1.0.2",
|
35
|
+
"@pulumi/kubernetes": "^4.18.0",
|
36
|
+
"@pulumi/pulumi": "^3.152.0",
|
37
|
+
"deepmerge-ts": "^7.1.5",
|
38
|
+
"remeda": "^2.21.0"
|
39
|
+
},
|
40
|
+
"peerDependencies": {
|
41
|
+
"@highstate/library": "workspace:^0.4.4"
|
42
|
+
},
|
43
|
+
"devDependencies": {
|
44
|
+
"pkgroll": "^2.5.1"
|
45
|
+
},
|
46
|
+
"gitHead": "afd601fdade1bcf31af58072eea3c08ee26349b8"
|
47
|
+
}
|