@highstate/k3s 0.9.16 → 0.9.18

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.
@@ -3,8 +3,6 @@ import { k3s } from '@highstate/library';
3
3
  import { forUnit, toPromise, output, interpolate, secret, fileFromString } from '@highstate/pulumi';
4
4
  import { KubeConfig } from '@kubernetes/client-node';
5
5
  import { Provider, core } from '@pulumi/kubernetes';
6
- import '@highstate/k8s';
7
- import '@highstate/contract';
8
6
  import { uniqueBy, isIncludedIn } from 'remeda';
9
7
 
10
8
  // src/cluster/index.ts
@@ -131,7 +129,7 @@ var cluster_default = outputs({
131
129
  $statusFields: {
132
130
  endpoints: endpoints.map(l3EndpointToString),
133
131
  apiEndpoints: apiEndpoints.map(l4EndpointToString)
134
- }
132
+ },
135
133
  // $pages: {
136
134
  // index: {
137
135
  // title: "K3s Cluster",
@@ -160,6 +158,15 @@ var cluster_default = outputs({
160
158
  // },
161
159
  // },
162
160
  // $files: [kubeconfigFile],
161
+ $workers: {
162
+ monitoring: {
163
+ image: "ghcr.io/highstate/k8s-monitor-worker:latest@sha256:90b5bb185370a959d92d13120738b879dc0a286dd4df602ecd7f675c9a3642eb",
164
+ params: {
165
+ kubeconfigSecretId: "",
166
+ resourceGroups: []
167
+ }
168
+ }
169
+ }
163
170
  });
164
171
 
165
172
  export { cluster_default as default };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cluster/index.ts"],"names":["env","kubeconfig"],"mappings":"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","file":"index.js","sourcesContent":["import {\n Command,\n filterEndpoints,\n l3EndpointToString,\n l3ToL4Endpoint,\n l4EndpointToString,\n parseL3Endpoint,\n} from \"@highstate/common\"\nimport { common, k3s } from \"@highstate/library\"\nimport {\n fileFromString,\n forUnit,\n interpolate,\n output,\n Resource,\n secret,\n toPromise,\n type InputMap,\n} from \"@highstate/pulumi\"\nimport { KubeConfig } from \"@kubernetes/client-node\"\nimport { core, Provider } from \"@pulumi/kubernetes\"\nimport { createK8sTerminal } from \"@highstate/k8s\"\nimport { text } from \"@highstate/contract\"\nimport { uniqueBy, isIncludedIn } from \"remeda\"\n\nconst { name, args, inputs, outputs } = forUnit(k3s.cluster)\n\nconst { masters, workers } = await toPromise(inputs)\n\nconst seed = masters[0]\n\nconst endpoints = uniqueBy(\n [...workers, ...masters].flatMap(server =>\n server.endpoints.map(endpoint => parseL3Endpoint(endpoint)),\n ),\n l3EndpointToString,\n)\n\nconst apiEndpoints = uniqueBy(\n masters.flatMap(server => server.endpoints.map(endpoint => l3ToL4Endpoint(endpoint, 6443))),\n l4EndpointToString,\n)\n\nconst config: Record<string, unknown> = {\n ...args.config,\n \"tls-san\": apiEndpoints.map(l4EndpointToString),\n disable: args.disabledComponents.filter(isIncludedIn(k3s.packagedComponents)),\n}\n\nfor (const disabledComponent of args.disabledComponents) {\n if (isIncludedIn(disabledComponent, k3s.internalComponents)) {\n config[`disable-${disabledComponent}`] = true\n }\n}\n\nif (args.cni === \"none\") {\n config[\"flannel-backend\"] = \"none\"\n}\n\nconst configContent = JSON.stringify(config, null, 2)\n\nconst seedInstallCommand = createNode(seed, \"server\", { K3S_CLUSTER_INIT: \"true\" })\n\nconst tokenCommand = Command.receiveTextFile(\n \"token\",\n {\n host: seed,\n path: \"/var/lib/rancher/k3s/server/node-token\",\n },\n { dependsOn: seedInstallCommand },\n)\n\nconst agentTokenCommand = Command.receiveTextFile(\n \"agent-token\",\n {\n host: seed,\n path: \"/var/lib/rancher/k3s/server/agent-token\",\n },\n { dependsOn: seedInstallCommand },\n)\n\nfor (const master of masters.slice(1)) {\n createNode(master, \"server\", {\n K3S_TOKEN: tokenCommand.stdout,\n K3S_URL: `https://${l4EndpointToString(apiEndpoints[0])}`,\n })\n}\n\nfor (const worker of workers) {\n createNode(worker, \"agent\", {\n K3S_TOKEN: agentTokenCommand.stdout,\n K3S_URL: `https://${l4EndpointToString(apiEndpoints[0])}`,\n })\n}\n\nfunction createNode(\n server: common.Server,\n type: \"server\" | \"agent\",\n env: InputMap<string>,\n dependsOn?: Resource,\n) {\n const configFileCommand = Command.createTextFile(`config-${server.hostname}`, {\n host: server,\n path: \"/etc/rancher/k3s/config.yaml\",\n content: configContent,\n })\n\n const registryConfigFileCommand = Command.createTextFile(`registry-config-${server.hostname}`, {\n host: server,\n path: \"/etc/rancher/k3s/registries.yaml\",\n content: JSON.stringify(args.registries ?? {}, null, 2),\n })\n\n const envString = output(env).apply(env => {\n return Object.entries(env)\n .map(([key, value]) => `${key}=${value}`)\n .join(\" \")\n })\n\n return new Command(\n `install-${server.hostname}`,\n {\n host: server,\n create: interpolate`curl -sfL https://raw.githubusercontent.com/k3s-io/k3s/refs/heads/master/install.sh | ${envString} sh -s - ${type}`,\n delete: \"/usr/local/bin/k3s-uninstall.sh\",\n },\n {\n dependsOn: [\n configFileCommand.command,\n registryConfigFileCommand.command,\n ...(dependsOn ? [dependsOn] : []),\n ],\n },\n )\n}\n\nconst kubeconfigResult = Command.receiveTextFile(\n \"kubeconfig\",\n {\n host: seed,\n path: \"/etc/rancher/k3s/k3s.yaml\",\n },\n { dependsOn: seedInstallCommand },\n)\n\nconst kubeconfig = await toPromise(\n kubeconfigResult.stdout.apply(kubeconfig =>\n kubeconfig.replace(\"127.0.0.1:6443\", l4EndpointToString(apiEndpoints[0])),\n ),\n)\n\nconst kubeConfig = new KubeConfig()\nkubeConfig.loadFromString(kubeconfig)\n\nconst provider = new Provider(name, { kubeconfig: secret(kubeconfig) })\nconst kubeSystem = core.v1.Namespace.get(\"kube-system\", \"kube-system\", { provider })\n\nconst kubeconfigFile = fileFromString(\"config\", kubeconfig, \"text/yaml\", true)\n\nexport default outputs({\n k8sCluster: {\n id: kubeSystem.metadata.uid,\n name,\n cni: \"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 externalServiceType: args.disabledComponents.includes(\"servicelb\")\n ? \"NodePort\"\n : \"LoadBalancer\",\n },\n\n kubeconfig: secret(kubeconfig),\n },\n\n endpoints,\n apiEndpoints,\n\n // $terminals: [createK8sTerminal(kubeconfig)],\n\n $statusFields: {\n endpoints: endpoints.map(l3EndpointToString),\n apiEndpoints: apiEndpoints.map(l4EndpointToString),\n },\n\n // $pages: {\n // index: {\n // title: \"K3s Cluster\",\n // content: [\n // {\n // type: \"markdown\",\n // content: text`\n // The cluster is up and running.\n\n // You can access the cluster via the terminal or by using the kubeconfig file.\n // `,\n // },\n // {\n // type: \"file\",\n // meta: kubeconfigFile.meta,\n // },\n // {\n // type: \"markdown\",\n // content: secret(text`\n // You can also copy the following content of the kubeconfig file and use it to access the cluster:\n\n // \\`\\`\\`yaml\n // ${kubeconfig}\n // \\`\\`\\`\n // `),\n // },\n // ],\n // },\n // },\n\n // $files: [kubeconfigFile],\n})\n"]}
1
+ {"version":3,"sources":["../../src/cluster/index.ts"],"names":["env","kubeconfig"],"mappings":"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","file":"index.js","sourcesContent":["import {\n Command,\n filterEndpoints,\n l3EndpointToString,\n l3ToL4Endpoint,\n l4EndpointToString,\n parseL3Endpoint,\n} from \"@highstate/common\"\nimport { common, k3s, k8s } from \"@highstate/library\"\nimport {\n fileFromString,\n forUnit,\n interpolate,\n output,\n Resource,\n secret,\n toPromise,\n type InputMap,\n} from \"@highstate/pulumi\"\nimport { KubeConfig } from \"@kubernetes/client-node\"\nimport { core, Provider } from \"@pulumi/kubernetes\"\nimport { uniqueBy, isIncludedIn } from \"remeda\"\n\nconst { name, args, inputs, outputs } = forUnit(k3s.cluster)\n\nconst { masters, workers } = await toPromise(inputs)\n\nconst seed = masters[0]\n\nconst endpoints = uniqueBy(\n [...workers, ...masters].flatMap(server =>\n server.endpoints.map(endpoint => parseL3Endpoint(endpoint)),\n ),\n l3EndpointToString,\n)\n\nconst apiEndpoints = uniqueBy(\n masters.flatMap(server => server.endpoints.map(endpoint => l3ToL4Endpoint(endpoint, 6443))),\n l4EndpointToString,\n)\n\nconst config: Record<string, unknown> = {\n ...args.config,\n \"tls-san\": apiEndpoints.map(l4EndpointToString),\n disable: args.disabledComponents.filter(isIncludedIn(k3s.packagedComponents)),\n}\n\nfor (const disabledComponent of args.disabledComponents) {\n if (isIncludedIn(disabledComponent, k3s.internalComponents)) {\n config[`disable-${disabledComponent}`] = true\n }\n}\n\nif (args.cni === \"none\") {\n config[\"flannel-backend\"] = \"none\"\n}\n\nconst configContent = JSON.stringify(config, null, 2)\n\nconst seedInstallCommand = createNode(seed, \"server\", { K3S_CLUSTER_INIT: \"true\" })\n\nconst tokenCommand = Command.receiveTextFile(\n \"token\",\n {\n host: seed,\n path: \"/var/lib/rancher/k3s/server/node-token\",\n },\n { dependsOn: seedInstallCommand },\n)\n\nconst agentTokenCommand = Command.receiveTextFile(\n \"agent-token\",\n {\n host: seed,\n path: \"/var/lib/rancher/k3s/server/agent-token\",\n },\n { dependsOn: seedInstallCommand },\n)\n\nfor (const master of masters.slice(1)) {\n createNode(master, \"server\", {\n K3S_TOKEN: tokenCommand.stdout,\n K3S_URL: `https://${l4EndpointToString(apiEndpoints[0])}`,\n })\n}\n\nfor (const worker of workers) {\n createNode(worker, \"agent\", {\n K3S_TOKEN: agentTokenCommand.stdout,\n K3S_URL: `https://${l4EndpointToString(apiEndpoints[0])}`,\n })\n}\n\nfunction createNode(\n server: common.Server,\n type: \"server\" | \"agent\",\n env: InputMap<string>,\n dependsOn?: Resource,\n) {\n const configFileCommand = Command.createTextFile(`config-${server.hostname}`, {\n host: server,\n path: \"/etc/rancher/k3s/config.yaml\",\n content: configContent,\n })\n\n const registryConfigFileCommand = Command.createTextFile(`registry-config-${server.hostname}`, {\n host: server,\n path: \"/etc/rancher/k3s/registries.yaml\",\n content: JSON.stringify(args.registries ?? {}, null, 2),\n })\n\n const envString = output(env).apply(env => {\n return Object.entries(env)\n .map(([key, value]) => `${key}=${value}`)\n .join(\" \")\n })\n\n return new Command(\n `install-${server.hostname}`,\n {\n host: server,\n create: interpolate`curl -sfL https://raw.githubusercontent.com/k3s-io/k3s/refs/heads/master/install.sh | ${envString} sh -s - ${type}`,\n delete: \"/usr/local/bin/k3s-uninstall.sh\",\n },\n {\n dependsOn: [\n configFileCommand.command,\n registryConfigFileCommand.command,\n ...(dependsOn ? [dependsOn] : []),\n ],\n },\n )\n}\n\nconst kubeconfigResult = Command.receiveTextFile(\n \"kubeconfig\",\n {\n host: seed,\n path: \"/etc/rancher/k3s/k3s.yaml\",\n },\n { dependsOn: seedInstallCommand },\n)\n\nconst kubeconfig = await toPromise(\n kubeconfigResult.stdout.apply(kubeconfig =>\n kubeconfig.replace(\"127.0.0.1:6443\", l4EndpointToString(apiEndpoints[0])),\n ),\n)\n\nconst kubeConfig = new KubeConfig()\nkubeConfig.loadFromString(kubeconfig)\n\nconst provider = new Provider(name, { kubeconfig: secret(kubeconfig) })\nconst kubeSystem = core.v1.Namespace.get(\"kube-system\", \"kube-system\", { provider })\n\nconst kubeconfigFile = fileFromString(\"config\", kubeconfig, \"text/yaml\", true)\n\nexport default outputs({\n k8sCluster: {\n id: kubeSystem.metadata.uid,\n name,\n cni: \"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 externalServiceType: args.disabledComponents.includes(\"servicelb\")\n ? \"NodePort\"\n : \"LoadBalancer\",\n },\n\n kubeconfig: secret(kubeconfig),\n },\n\n endpoints,\n apiEndpoints,\n\n // $terminals: [createK8sTerminal(kubeconfig)],\n\n $statusFields: {\n endpoints: endpoints.map(l3EndpointToString),\n apiEndpoints: apiEndpoints.map(l4EndpointToString),\n },\n\n // $pages: {\n // index: {\n // title: \"K3s Cluster\",\n // content: [\n // {\n // type: \"markdown\",\n // content: text`\n // The cluster is up and running.\n\n // You can access the cluster via the terminal or by using the kubeconfig file.\n // `,\n // },\n // {\n // type: \"file\",\n // meta: kubeconfigFile.meta,\n // },\n // {\n // type: \"markdown\",\n // content: secret(text`\n // You can also copy the following content of the kubeconfig file and use it to access the cluster:\n\n // \\`\\`\\`yaml\n // ${kubeconfig}\n // \\`\\`\\`\n // `),\n // },\n // ],\n // },\n // },\n\n // $files: [kubeconfigFile],\n\n $workers: {\n monitoring: {\n image:\n \"ghcr.io/highstate/k8s-monitor-worker:latest@sha256:90b5bb185370a959d92d13120738b879dc0a286dd4df602ecd7f675c9a3642eb\",\n params: {\n kubeconfigSecretId: \"\",\n resourceGroups: [],\n } satisfies k8s.MonitorWorkerParams,\n },\n },\n})\n"]}
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "sourceHashes": {
3
- "./dist/cluster/index.js": 3411498878
3
+ "./dist/cluster/index.js": 711750365
4
4
  }
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@highstate/k3s",
3
- "version": "0.9.16",
3
+ "version": "0.9.18",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
@@ -15,18 +15,18 @@
15
15
  "build": "highstate build"
16
16
  },
17
17
  "dependencies": {
18
- "@highstate/common": "^0.9.16",
19
- "@highstate/contract": "^0.9.16",
20
- "@highstate/k8s": "^0.9.16",
21
- "@highstate/library": "^0.9.16",
22
- "@highstate/pulumi": "^0.9.16",
18
+ "@highstate/common": "^0.9.18",
19
+ "@highstate/contract": "^0.9.18",
20
+ "@highstate/k8s": "^0.9.18",
21
+ "@highstate/library": "^0.9.18",
22
+ "@highstate/pulumi": "^0.9.18",
23
23
  "@kubernetes/client-node": "^1.1.0",
24
24
  "@pulumi/command": "^1.0.2",
25
25
  "@pulumi/kubernetes": "^4.18.0",
26
26
  "remeda": "^2.21.0"
27
27
  },
28
28
  "devDependencies": {
29
- "@highstate/cli": "^0.9.16"
29
+ "@highstate/cli": "^0.9.18"
30
30
  },
31
- "gitHead": "458d6f1f9f6d4aec0ba75a2b2c4c01408cb9c8df"
31
+ "gitHead": "9ebcd7da56b00b8ca08bf52cc8438f527338cd64"
32
32
  }