const homeDir = process.env.HOME;
if (!homeDir) {
throw new Error("HOME is not set");
}
const publicKey = (
await readFile(`${homeDir}/.ssh/id_ed25519.pub`, "utf8")
).trim();
const cloudInitUserData = [
"#cloud-config",
"users:",
" - name: user",
" sudo: ALL=(ALL) NOPASSWD:ALL",
" shell: /bin/bash",
" ssh_authorized_keys:",
" - " + publicKey,
].join("\n");
const nodeGroupService = new NodeGroupService(sdk);
const nodeGroupOperation = await nodeGroupService.create(
CreateNodeGroupRequest.create({
metadata: ResourceMetadata.create({
parentId: clusterId,
name: "quickstart-mk8s-nodes",
}),
spec: NodeGroupSpec.create({
size: {
$case: "fixedNodeCount",
fixedNodeCount: 2,
},
template: NodeTemplate.create({
resources: ResourcesSpec.create({
platform: "cpu-e2",
size: {
$case: "preset",
preset: "2vcpu-8gb",
},
}),
bootDisk: DiskSpec.create({
size: {
$case: "sizeBytes",
sizeBytes: 137438953472,
},
type: DiskSpec_DiskType.NETWORK_SSD,
}),
cloudInitUserData,
networkInterfaces: [
NetworkInterfaceTemplate.create({
publicIpAddress: PublicIPAddress.create({}),
subnetId: subnetId,
}),
],
}),
}),
}),
).result;
await nodeGroupOperation.wait();
const nodeGroupId = nodeGroupOperation.resourceId();
if (!nodeGroupId) {
throw new Error("node group ID is missing");
}