@highstate/talos 0.9.4 → 0.9.6
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/cluster/index.js +46 -29
- package/dist/cluster/index.js.map +1 -1
- package/dist/highstate.manifest.json +1 -1
- package/package.json +11 -10
package/dist/cluster/index.js
CHANGED
@@ -1,14 +1,21 @@
|
|
1
1
|
// src/cluster/index.ts
|
2
2
|
import { readFile } from "node:fs/promises";
|
3
|
-
import { all, forUnit,
|
3
|
+
import { all, forUnit, output, toPromise } from "@highstate/pulumi";
|
4
4
|
import { talos } from "@highstate/library";
|
5
5
|
import { cluster, machine } from "@pulumiverse/talos";
|
6
6
|
import { text } from "@highstate/contract";
|
7
|
-
import {
|
7
|
+
import { RenderedChart } from "@highstate/k8s";
|
8
8
|
import { core, Provider } from "@pulumi/kubernetes";
|
9
|
-
import {
|
9
|
+
import {
|
10
|
+
filterEndpoints,
|
11
|
+
l3EndpointToString,
|
12
|
+
l3ToL4Endpoint,
|
13
|
+
l4EndpointToString
|
14
|
+
} from "@highstate/common";
|
10
15
|
import { KubeConfig } from "@kubernetes/client-node";
|
16
|
+
import { uniqueBy } from "remeda";
|
11
17
|
var { name, args, inputs, outputs } = forUnit(talos.cluster);
|
18
|
+
var { masters, workers } = await toPromise(inputs);
|
12
19
|
var cni = args.cni ?? "cilium";
|
13
20
|
var csi = args.csi ?? "local-path-provisioner";
|
14
21
|
var inlineManifests = [];
|
@@ -28,10 +35,11 @@ if (cni === "cilium") {
|
|
28
35
|
"securityContext.capabilities.ciliumAgent": "{CHOWN,KILL,NET_ADMIN,NET_RAW,IPC_LOCK,SYS_ADMIN,SYS_RESOURCE,DAC_OVERRIDE,FOWNER,SETGID,SETUID}",
|
29
36
|
"securityContext.capabilities.cleanCiliumState": "{NET_ADMIN,SYS_ADMIN,SYS_RESOURCE}",
|
30
37
|
"cgroup.autoMount.enabled": "false",
|
31
|
-
"cgroup.hostRoot": "/sys/fs/cgroup"
|
38
|
+
"cgroup.hostRoot": "/sys/fs/cgroup",
|
32
39
|
// "k8sServiceHost": "localhost",
|
33
40
|
// "k8sServicePort": "7445",
|
34
41
|
// "bpf.lbExternalClusterIP": "true",
|
42
|
+
"dnsProxy.dnsRejectResponseCode": "nameError"
|
35
43
|
}
|
36
44
|
});
|
37
45
|
inlineManifests.push({
|
@@ -69,23 +77,21 @@ var globalConfigPatch = output({
|
|
69
77
|
}
|
70
78
|
},
|
71
79
|
cluster: {
|
72
|
-
allowSchedulingOnMasters:
|
73
|
-
(length) => length === 0 || args.scheduleOnMasters
|
74
|
-
),
|
80
|
+
allowSchedulingOnMasters: args.scheduleOnMastersPolicy === "when-no-workers" ? workers.length === 0 : args.scheduleOnMastersPolicy === "always",
|
75
81
|
inlineManifests,
|
76
82
|
network: cni !== "flannel" ? { cni: { name: "none" } } : void 0
|
77
83
|
// proxy: cni === "cilium" ? { disabled: true } : undefined,
|
78
84
|
}
|
79
85
|
}).apply(JSON.stringify);
|
80
86
|
var secrets = new machine.Secrets("secrets", { talosVersion: "v1.8.3" });
|
81
|
-
var
|
87
|
+
var apiEndpoint = `https://${l3EndpointToString(masters[0].endpoints[0])}:6443`;
|
82
88
|
var masterConfig = getConfiguration("controlplane");
|
83
89
|
var workerConfig = getConfiguration("worker");
|
84
|
-
var masterApplies = inputs.masters.apply((
|
85
|
-
if (!
|
90
|
+
var masterApplies = inputs.masters.apply((masters2) => {
|
91
|
+
if (!masters2.length) {
|
86
92
|
throw new Error("At least one master node is required.");
|
87
93
|
}
|
88
|
-
return
|
94
|
+
return masters2.map((master) => {
|
89
95
|
return new machine.ConfigurationApply(
|
90
96
|
master.hostname,
|
91
97
|
getConfigurationApplyArgs(master, masterConfig.machineConfiguration)
|
@@ -100,8 +106,8 @@ var bootstrap = new machine.Bootstrap(
|
|
100
106
|
},
|
101
107
|
{ dependsOn: masterApplies }
|
102
108
|
);
|
103
|
-
var workerApplies = inputs.workers.apply((
|
104
|
-
return
|
109
|
+
var workerApplies = inputs.workers.apply((workers2) => {
|
110
|
+
return workers2.map((worker) => {
|
105
111
|
return new machine.ConfigurationApply(
|
106
112
|
worker.hostname,
|
107
113
|
getConfigurationApplyArgs(worker, workerConfig.machineConfiguration),
|
@@ -145,7 +151,7 @@ function getConfiguration(machineType) {
|
|
145
151
|
configPatches.push(JSON.stringify(args.workerConfigPatch));
|
146
152
|
}
|
147
153
|
return machine.getConfigurationOutput({
|
148
|
-
clusterEndpoint,
|
154
|
+
clusterEndpoint: apiEndpoint,
|
149
155
|
machineSecrets: secrets.machineSecrets,
|
150
156
|
clusterName,
|
151
157
|
machineType,
|
@@ -154,10 +160,14 @@ function getConfiguration(machineType) {
|
|
154
160
|
});
|
155
161
|
}
|
156
162
|
function getConfigurationApplyArgs(node, machineConfiguration) {
|
163
|
+
const ipEndpoint = node.endpoints.find((endpoint) => endpoint.type !== "hostname");
|
164
|
+
if (!ipEndpoint) {
|
165
|
+
throw new Error(`No IP endpoint found for node ${node.hostname}`);
|
166
|
+
}
|
157
167
|
return {
|
158
168
|
clientConfiguration: secrets.clientConfiguration,
|
159
169
|
machineConfigurationInput: machineConfiguration,
|
160
|
-
node:
|
170
|
+
node: l3EndpointToString(ipEndpoint),
|
161
171
|
configPatches: [
|
162
172
|
JSON.stringify({
|
163
173
|
machine: { network: { hostname: node.hostname } }
|
@@ -169,22 +179,23 @@ var provider = new Provider(name, { kubeconfig });
|
|
169
179
|
var kubeSystem = core.v1.Namespace.get("kube-system", "kube-system", { provider });
|
170
180
|
var kubeConfig = new KubeConfig();
|
171
181
|
kubeConfig.loadFromString(await toPromise(kubeconfig));
|
172
|
-
var
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
182
|
+
var endpoints = uniqueBy(
|
183
|
+
[...workers, ...masters].flatMap((server) => server.endpoints),
|
184
|
+
l3EndpointToString
|
185
|
+
);
|
186
|
+
var apiEndpoints = uniqueBy(
|
187
|
+
masters.flatMap((server) => server.endpoints.map((endpoint) => l3ToL4Endpoint(endpoint, 6443))),
|
188
|
+
l4EndpointToString
|
189
|
+
);
|
180
190
|
var cluster_default = outputs({
|
181
191
|
k8sCluster: {
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
192
|
+
id: kubeSystem.metadata.uid,
|
193
|
+
name: clusterName,
|
194
|
+
cni: cni === "cilium" ? "cilium" : "other",
|
195
|
+
externalIps: filterEndpoints(endpoints, ["public", "external"]).filter((endpoint) => endpoint.type !== "hostname").map(l3EndpointToString),
|
196
|
+
endpoints,
|
197
|
+
apiEndpoints,
|
198
|
+
quirks: {
|
188
199
|
tunDevicePolicy: {
|
189
200
|
type: "plugin",
|
190
201
|
resourceName: "squat.ai/tun",
|
@@ -197,6 +208,8 @@ var cluster_default = outputs({
|
|
197
208
|
clientConfiguration,
|
198
209
|
machineSecrets
|
199
210
|
},
|
211
|
+
endpoints,
|
212
|
+
apiEndpoints,
|
200
213
|
$terminals: {
|
201
214
|
management: {
|
202
215
|
title: "Cluster Management",
|
@@ -222,6 +235,10 @@ var cluster_default = outputs({
|
|
222
235
|
TALOSCONFIG: "/talosconfig"
|
223
236
|
}
|
224
237
|
}
|
238
|
+
},
|
239
|
+
$status: {
|
240
|
+
endpoints: endpoints.map(l3EndpointToString),
|
241
|
+
apiEndpoints: apiEndpoints.map(l4EndpointToString)
|
225
242
|
}
|
226
243
|
});
|
227
244
|
export {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/cluster/index.ts"],"sourcesContent":["import type { EntityValue, Input } from \"@highstate/pulumi\"\nimport { readFile } from \"node:fs/promises\"\nimport { all, forUnit, interpolate, output, Output, toPromise } from \"@highstate/pulumi\"\nimport { common, talos } from \"@highstate/library\"\nimport { cluster, machine } from \"@pulumiverse/talos\"\nimport { text } from \"@highstate/contract\"\nimport { detectExternalIps, RenderedChart } from \"@highstate/k8s\"\nimport { core, Provider } from \"@pulumi/kubernetes\"\nimport { DnsRecord } from \"@highstate/common\"\nimport { KubeConfig } from \"@kubernetes/client-node\"\n\nconst { name, args, inputs, outputs } = forUnit(talos.cluster)\n\nconst cni = args.cni ?? \"cilium\"\nconst csi = args.csi ?? \"local-path-provisioner\"\n\ninterface InlineManifest {\n name: string\n contents: Input<string>\n}\n\ninterface ExtraMount {\n destination: string\n type: string\n source: string\n options: string[]\n}\n\nconst inlineManifests: InlineManifest[] = []\nconst extraMounts: ExtraMount[] = []\n\nif (cni === \"cilium\") {\n const { chart } = await import(\"@highstate/cilium\")\n\n const cilium = new RenderedChart(\"cilium\", {\n namespace: \"kube-system\",\n chart,\n\n values: {\n \"ipam.mode\": \"kubernetes\",\n // \"kubeProxyReplacement\": \"true\",\n kubeProxyReplacement: \"false\",\n \"operator.replicas\": \"1\",\n \"hubble.relay.enabled\": \"true\",\n \"hubble.ui.enabled\": \"true\",\n \"securityContext.capabilities.ciliumAgent\":\n \"{CHOWN,KILL,NET_ADMIN,NET_RAW,IPC_LOCK,SYS_ADMIN,SYS_RESOURCE,DAC_OVERRIDE,FOWNER,SETGID,SETUID}\",\n \"securityContext.capabilities.cleanCiliumState\": \"{NET_ADMIN,SYS_ADMIN,SYS_RESOURCE}\",\n \"cgroup.autoMount.enabled\": \"false\",\n \"cgroup.hostRoot\": \"/sys/fs/cgroup\",\n // \"k8sServiceHost\": \"localhost\",\n // \"k8sServicePort\": \"7445\",\n // \"bpf.lbExternalClusterIP\": \"true\",\n },\n })\n\n inlineManifests.push({\n name: \"cilium\",\n contents: cilium.manifest,\n })\n}\n\nif (csi === \"local-path-provisioner\") {\n extraMounts.push({\n destination: \"/var/lib/local-path-provisioner\",\n type: \"bind\",\n source: \"/var/lib/local-path-provisioner\",\n options: [\"bind\", \"rshared\", \"rw\"],\n })\n\n inlineManifests.push({\n name: \"local-path-provisioner\",\n contents: await readFile(\"../../assets/local-path-provisioner.yaml\", \"utf-8\"),\n })\n}\n\nif (args.enableTunDevicePlugin) {\n inlineManifests.push({\n name: \"tun-device-plugin\",\n contents: await readFile(\"../../assets/tun-device-plugin.yaml\", \"utf-8\"),\n })\n}\n\nconst clusterName = args.clusterName ?? name\n\nconst globalConfigPatch = output({\n machine: {\n install: {\n image: \"ghcr.io/siderolabs/installer:v1.8.3\",\n extensions: [{ image: \"ghcr.io/siderolabs/qemu-guest-agent:9.1.0\" }],\n },\n kubelet: {\n extraMounts,\n },\n },\n cluster: {\n allowSchedulingOnMasters: inputs.workers.length.apply(\n length => length === 0 || args.scheduleOnMasters,\n ),\n inlineManifests,\n network: cni !== \"flannel\" ? { cni: { name: \"none\" } } : undefined,\n // proxy: cni === \"cilium\" ? { disabled: true } : undefined,\n },\n}).apply(JSON.stringify)\n\nconst secrets = new machine.Secrets(\"secrets\", { talosVersion: \"v1.8.3\" })\n\nconst clusterEndpoint = args.endpoint ?? interpolate`https://${inputs.masters[0].endpoint}:6443`\n\nconst masterConfig = getConfiguration(\"controlplane\")\nconst workerConfig = getConfiguration(\"worker\")\n\nconst masterApplies = inputs.masters.apply(masters => {\n if (!masters.length) {\n throw new Error(\"At least one master node is required.\")\n }\n\n return masters.map(master => {\n return new machine.ConfigurationApply(\n master.hostname,\n getConfigurationApplyArgs(master, masterConfig.machineConfiguration),\n )\n })\n})\n\nconst bootstrap = new machine.Bootstrap(\n \"bootstrap\",\n {\n clientConfiguration: secrets.clientConfiguration,\n node: masterApplies[0].node,\n },\n { dependsOn: masterApplies },\n)\n\nconst workerApplies = inputs.workers.apply(workers => {\n return workers.map(worker => {\n return new machine.ConfigurationApply(\n worker.hostname,\n getConfigurationApplyArgs(worker, workerConfig.machineConfiguration),\n { dependsOn: bootstrap },\n )\n })\n})\n\n// Check the health of the cluster and export the kubeconfig\nconst kubeconfig = all([\n cluster.getKubeconfigOutput({\n clientConfiguration: secrets.clientConfiguration,\n node: masterApplies[0].node,\n }),\n cluster.getHealthOutput({\n clientConfiguration: secrets.clientConfiguration,\n endpoints: masterApplies.apply(masterApplies => masterApplies.map(x => x.node)),\n controlPlaneNodes: masterApplies.apply(masterApplies => masterApplies.map(x => x.node)),\n workerNodes: workerApplies.apply(workerApplies => workerApplies.map(x => x.node)),\n }),\n]).apply(([kubeconfig]) => kubeconfig.kubeconfigRaw)\n\nconst clientConfiguration = output({\n context: clusterName,\n contexts: {\n [clusterName]: {\n endpoints: masterApplies.apply(masterApplies => masterApplies.map(x => x.node)),\n ca: secrets.clientConfiguration.caCertificate,\n crt: secrets.clientConfiguration.clientCertificate,\n key: secrets.clientConfiguration.clientKey,\n },\n },\n}).apply(JSON.stringify)\n\nconst machineSecrets = secrets.machineSecrets.apply(JSON.stringify)\n\nfunction getConfiguration(machineType: string) {\n const configPatches: Input<string>[] = [globalConfigPatch]\n\n if (args.sharedConfigPatch && Object.keys(args.sharedConfigPatch).length > 0) {\n configPatches.push(JSON.stringify(args.sharedConfigPatch))\n }\n\n if (\n machineType === \"controlplane\" &&\n args.masterConfigPatch &&\n Object.keys(args.masterConfigPatch).length > 0\n ) {\n configPatches.push(JSON.stringify(args.masterConfigPatch))\n }\n\n if (\n machineType === \"worker\" &&\n args.workerConfigPatch &&\n Object.keys(args.workerConfigPatch).length > 0\n ) {\n configPatches.push(JSON.stringify(args.workerConfigPatch))\n }\n\n return machine.getConfigurationOutput({\n clusterEndpoint,\n machineSecrets: secrets.machineSecrets,\n clusterName,\n machineType,\n talosVersion: \"v1.8.3\",\n configPatches,\n })\n}\n\nfunction getConfigurationApplyArgs(\n node: EntityValue<typeof common.serverEntity>,\n machineConfiguration: Output<string>,\n): machine.ConfigurationApplyArgs {\n return {\n clientConfiguration: secrets.clientConfiguration,\n machineConfigurationInput: machineConfiguration,\n node: node.endpoint,\n configPatches: [\n JSON.stringify({\n machine: { network: { hostname: node.hostname } },\n }),\n ],\n }\n}\n\nconst provider = new Provider(name, { kubeconfig })\nconst kubeSystem = core.v1.Namespace.get(\"kube-system\", \"kube-system\", { provider })\n\nconst kubeConfig = new KubeConfig()\nkubeConfig.loadFromString(await toPromise(kubeconfig))\n\nconst externalIps =\n args.externalIps ?? (await detectExternalIps(kubeConfig, args.internalIpsPolicy))\n\nif (args.registerFqdn && args.fqdn) {\n DnsRecord.createSet(args.fqdn, {\n providers: inputs.dnsProviders,\n type: \"A\",\n value: externalIps[0],\n })\n}\n\nexport default outputs({\n k8sCluster: {\n info: {\n id: kubeSystem.metadata.uid,\n name: clusterName,\n cni: cni === \"none\" ? undefined : cni,\n externalIps,\n fqdn: args.fqdn,\n tunDevicePolicy: {\n type: \"plugin\",\n resourceName: \"squat.ai/tun\",\n resourceValue: \"1\",\n },\n },\n kubeconfig,\n },\n talosCluster: {\n clientConfiguration,\n machineSecrets,\n },\n\n $terminals: {\n management: {\n title: \"Cluster Management\",\n image: \"ghcr.io/exeteres/highstate/terminal-talosctl\",\n command: [\"bash\", \"/welcome.sh\"],\n files: {\n \"/kubeconfig\": kubeconfig,\n \"/talosconfig\": clientConfiguration,\n \"/secrets\": machineSecrets,\n\n \"/welcome.sh\": text`\n echo \"Connecting to the cluster...\"\n kubectl cluster-info\n\n echo \"Use 'kubectl' and 'helm' to manage the cluster.\"\n echo \"Use 'talosctl' to manage the Talos side of the cluster.\"\n echo\n\n exec bash\n `,\n },\n env: {\n KUBECONFIG: \"/kubeconfig\",\n TALOSCONFIG: \"/talosconfig\",\n },\n },\n },\n})\n"],"mappings":"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","names":["masterApplies","workerApplies","kubeconfig"]}
|
1
|
+
{"version":3,"sources":["../../src/cluster/index.ts"],"sourcesContent":["import type { EntityValue, Input } from \"@highstate/pulumi\"\nimport { readFile } from \"node:fs/promises\"\nimport { all, forUnit, output, Output, toPromise } from \"@highstate/pulumi\"\nimport { common, talos } from \"@highstate/library\"\nimport { cluster, machine } from \"@pulumiverse/talos\"\nimport { text } from \"@highstate/contract\"\nimport { RenderedChart } from \"@highstate/k8s\"\nimport { core, Provider } from \"@pulumi/kubernetes\"\nimport {\n filterEndpoints,\n l3EndpointToString,\n l3ToL4Endpoint,\n l4EndpointToString,\n} from \"@highstate/common\"\nimport { KubeConfig } from \"@kubernetes/client-node\"\nimport { uniqueBy } from \"remeda\"\n\nconst { name, args, inputs, outputs } = forUnit(talos.cluster)\n\nconst { masters, workers } = await toPromise(inputs)\n\nconst cni = args.cni ?? \"cilium\"\nconst csi = args.csi ?? \"local-path-provisioner\"\n\ninterface InlineManifest {\n name: string\n contents: Input<string>\n}\n\ninterface ExtraMount {\n destination: string\n type: string\n source: string\n options: string[]\n}\n\nconst inlineManifests: InlineManifest[] = []\nconst extraMounts: ExtraMount[] = []\n\nif (cni === \"cilium\") {\n const { chart } = await import(\"@highstate/cilium\")\n\n const cilium = new RenderedChart(\"cilium\", {\n namespace: \"kube-system\",\n chart,\n\n values: {\n \"ipam.mode\": \"kubernetes\",\n // \"kubeProxyReplacement\": \"true\",\n kubeProxyReplacement: \"false\",\n \"operator.replicas\": \"1\",\n \"hubble.relay.enabled\": \"true\",\n \"hubble.ui.enabled\": \"true\",\n \"securityContext.capabilities.ciliumAgent\":\n \"{CHOWN,KILL,NET_ADMIN,NET_RAW,IPC_LOCK,SYS_ADMIN,SYS_RESOURCE,DAC_OVERRIDE,FOWNER,SETGID,SETUID}\",\n \"securityContext.capabilities.cleanCiliumState\": \"{NET_ADMIN,SYS_ADMIN,SYS_RESOURCE}\",\n \"cgroup.autoMount.enabled\": \"false\",\n \"cgroup.hostRoot\": \"/sys/fs/cgroup\",\n // \"k8sServiceHost\": \"localhost\",\n // \"k8sServicePort\": \"7445\",\n // \"bpf.lbExternalClusterIP\": \"true\",\n \"dnsProxy.dnsRejectResponseCode\": \"nameError\",\n },\n })\n\n inlineManifests.push({\n name: \"cilium\",\n contents: cilium.manifest,\n })\n}\n\nif (csi === \"local-path-provisioner\") {\n extraMounts.push({\n destination: \"/var/lib/local-path-provisioner\",\n type: \"bind\",\n source: \"/var/lib/local-path-provisioner\",\n options: [\"bind\", \"rshared\", \"rw\"],\n })\n\n inlineManifests.push({\n name: \"local-path-provisioner\",\n contents: await readFile(\"../../assets/local-path-provisioner.yaml\", \"utf-8\"),\n })\n}\n\nif (args.enableTunDevicePlugin) {\n inlineManifests.push({\n name: \"tun-device-plugin\",\n contents: await readFile(\"../../assets/tun-device-plugin.yaml\", \"utf-8\"),\n })\n}\n\nconst clusterName = args.clusterName ?? name\n\nconst globalConfigPatch = output({\n machine: {\n install: {\n image: \"ghcr.io/siderolabs/installer:v1.8.3\",\n extensions: [{ image: \"ghcr.io/siderolabs/qemu-guest-agent:9.1.0\" }],\n },\n kubelet: {\n extraMounts,\n },\n },\n cluster: {\n allowSchedulingOnMasters:\n args.scheduleOnMastersPolicy === \"when-no-workers\"\n ? workers.length === 0\n : args.scheduleOnMastersPolicy === \"always\",\n inlineManifests,\n network: cni !== \"flannel\" ? { cni: { name: \"none\" } } : undefined,\n // proxy: cni === \"cilium\" ? { disabled: true } : undefined,\n },\n}).apply(JSON.stringify)\n\nconst secrets = new machine.Secrets(\"secrets\", { talosVersion: \"v1.8.3\" })\n\nconst apiEndpoint = `https://${l3EndpointToString(masters[0].endpoints[0])}:6443`\n\nconst masterConfig = getConfiguration(\"controlplane\")\nconst workerConfig = getConfiguration(\"worker\")\n\nconst masterApplies = inputs.masters.apply(masters => {\n if (!masters.length) {\n throw new Error(\"At least one master node is required.\")\n }\n\n return masters.map(master => {\n return new machine.ConfigurationApply(\n master.hostname,\n getConfigurationApplyArgs(master, masterConfig.machineConfiguration),\n )\n })\n})\n\nconst bootstrap = new machine.Bootstrap(\n \"bootstrap\",\n {\n clientConfiguration: secrets.clientConfiguration,\n node: masterApplies[0].node,\n },\n { dependsOn: masterApplies },\n)\n\nconst workerApplies = inputs.workers.apply(workers => {\n return workers.map(worker => {\n return new machine.ConfigurationApply(\n worker.hostname,\n getConfigurationApplyArgs(worker, workerConfig.machineConfiguration),\n { dependsOn: bootstrap },\n )\n })\n})\n\n// Check the health of the cluster and export the kubeconfig\nconst kubeconfig = all([\n cluster.getKubeconfigOutput({\n clientConfiguration: secrets.clientConfiguration,\n node: masterApplies[0].node,\n }),\n cluster.getHealthOutput({\n clientConfiguration: secrets.clientConfiguration,\n endpoints: masterApplies.apply(masterApplies => masterApplies.map(x => x.node)),\n controlPlaneNodes: masterApplies.apply(masterApplies => masterApplies.map(x => x.node)),\n workerNodes: workerApplies.apply(workerApplies => workerApplies.map(x => x.node)),\n }),\n]).apply(([kubeconfig]) => kubeconfig.kubeconfigRaw)\n\nconst clientConfiguration = output({\n context: clusterName,\n contexts: {\n [clusterName]: {\n endpoints: masterApplies.apply(masterApplies => masterApplies.map(x => x.node)),\n ca: secrets.clientConfiguration.caCertificate,\n crt: secrets.clientConfiguration.clientCertificate,\n key: secrets.clientConfiguration.clientKey,\n },\n },\n}).apply(JSON.stringify)\n\nconst machineSecrets = secrets.machineSecrets.apply(JSON.stringify)\n\nfunction getConfiguration(machineType: string) {\n const configPatches: Input<string>[] = [globalConfigPatch]\n\n if (args.sharedConfigPatch && Object.keys(args.sharedConfigPatch).length > 0) {\n configPatches.push(JSON.stringify(args.sharedConfigPatch))\n }\n\n if (\n machineType === \"controlplane\" &&\n args.masterConfigPatch &&\n Object.keys(args.masterConfigPatch).length > 0\n ) {\n configPatches.push(JSON.stringify(args.masterConfigPatch))\n }\n\n if (\n machineType === \"worker\" &&\n args.workerConfigPatch &&\n Object.keys(args.workerConfigPatch).length > 0\n ) {\n configPatches.push(JSON.stringify(args.workerConfigPatch))\n }\n\n return machine.getConfigurationOutput({\n clusterEndpoint: apiEndpoint,\n machineSecrets: secrets.machineSecrets,\n clusterName,\n machineType,\n talosVersion: \"v1.8.3\",\n configPatches,\n })\n}\n\nfunction getConfigurationApplyArgs(\n node: EntityValue<typeof common.serverEntity>,\n machineConfiguration: Output<string>,\n): machine.ConfigurationApplyArgs {\n const ipEndpoint = node.endpoints.find(endpoint => endpoint.type !== \"hostname\")\n if (!ipEndpoint) {\n throw new Error(`No IP endpoint found for node ${node.hostname}`)\n }\n\n return {\n clientConfiguration: secrets.clientConfiguration,\n machineConfigurationInput: machineConfiguration,\n node: l3EndpointToString(ipEndpoint),\n configPatches: [\n JSON.stringify({\n machine: { network: { hostname: node.hostname } },\n }),\n ],\n }\n}\n\nconst provider = new Provider(name, { kubeconfig })\nconst kubeSystem = core.v1.Namespace.get(\"kube-system\", \"kube-system\", { provider })\n\nconst kubeConfig = new KubeConfig()\nkubeConfig.loadFromString(await toPromise(kubeconfig))\n\nconst endpoints = uniqueBy(\n [...workers, ...masters].flatMap(server => server.endpoints),\n l3EndpointToString,\n)\n\nconst apiEndpoints = uniqueBy(\n masters.flatMap(server => server.endpoints.map(endpoint => l3ToL4Endpoint(endpoint, 6443))),\n l4EndpointToString,\n)\n\nexport default outputs({\n k8sCluster: {\n id: kubeSystem.metadata.uid,\n name: clusterName,\n cni: cni === \"cilium\" ? \"cilium\" : \"other\",\n\n externalIps: filterEndpoints(endpoints, [\"public\", \"external\"])\n .filter(endpoint => endpoint.type !== \"hostname\")\n .map(l3EndpointToString),\n\n endpoints,\n apiEndpoints,\n\n quirks: {\n tunDevicePolicy: {\n type: \"plugin\",\n resourceName: \"squat.ai/tun\",\n resourceValue: \"1\",\n },\n },\n\n kubeconfig,\n },\n\n talosCluster: {\n clientConfiguration,\n machineSecrets,\n },\n\n endpoints,\n apiEndpoints,\n\n $terminals: {\n management: {\n title: \"Cluster Management\",\n image: \"ghcr.io/exeteres/highstate/terminal-talosctl\",\n command: [\"bash\", \"/welcome.sh\"],\n files: {\n \"/kubeconfig\": kubeconfig,\n \"/talosconfig\": clientConfiguration,\n \"/secrets\": machineSecrets,\n\n \"/welcome.sh\": text`\n echo \"Connecting to the cluster...\"\n kubectl cluster-info\n\n echo \"Use 'kubectl' and 'helm' to manage the cluster.\"\n echo \"Use 'talosctl' to manage the Talos side of the cluster.\"\n echo\n\n exec bash\n `,\n },\n env: {\n KUBECONFIG: \"/kubeconfig\",\n TALOSCONFIG: \"/talosconfig\",\n },\n },\n },\n\n $status: {\n endpoints: endpoints.map(l3EndpointToString),\n apiEndpoints: apiEndpoints.map(l4EndpointToString),\n },\n})\n"],"mappings":"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","names":["masters","workers","masterApplies","workerApplies","kubeconfig"]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@highstate/talos",
|
3
|
-
"version": "0.9.
|
3
|
+
"version": "0.9.6",
|
4
4
|
"type": "module",
|
5
5
|
"files": [
|
6
6
|
"assets",
|
@@ -17,19 +17,20 @@
|
|
17
17
|
"update-assets": "./scripts/update-assets.sh"
|
18
18
|
},
|
19
19
|
"dependencies": {
|
20
|
-
"@highstate/cilium": "^0.9.
|
21
|
-
"@highstate/common": "^0.9.
|
22
|
-
"@highstate/contract": "^0.9.
|
23
|
-
"@highstate/k8s": "^0.9.
|
24
|
-
"@highstate/library": "^0.9.
|
25
|
-
"@highstate/pulumi": "^0.9.
|
20
|
+
"@highstate/cilium": "^0.9.6",
|
21
|
+
"@highstate/common": "^0.9.6",
|
22
|
+
"@highstate/contract": "^0.9.6",
|
23
|
+
"@highstate/k8s": "^0.9.6",
|
24
|
+
"@highstate/library": "^0.9.6",
|
25
|
+
"@highstate/pulumi": "^0.9.6",
|
26
26
|
"@kubernetes/client-node": "^1.1.0",
|
27
27
|
"@pulumi/command": "^1.0.2",
|
28
28
|
"@pulumi/kubernetes": "^4.18.0",
|
29
|
-
"@pulumiverse/talos": "^0.4.1"
|
29
|
+
"@pulumiverse/talos": "^0.4.1",
|
30
|
+
"remeda": "^2.21.0"
|
30
31
|
},
|
31
32
|
"devDependencies": {
|
32
|
-
"@highstate/cli": "^0.9.
|
33
|
+
"@highstate/cli": "^0.9.6"
|
33
34
|
},
|
34
|
-
"gitHead": "
|
35
|
+
"gitHead": "3c7e8883ef6cbc3e3f7c2c5529115767aae5c96a"
|
35
36
|
}
|