@highstate/yandex 0.9.26 → 0.9.27

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "sourceHashes": {
3
- "./dist/connection/index.js": 1022037108,
4
- "./dist/virtual-machine/index.js": 2616618533
3
+ "./dist/connection/index.js": 3330349674,
4
+ "./dist/virtual-machine/index.js": 2813923488
5
5
  }
6
6
  }
@@ -123,24 +123,8 @@ var virtual_machine_default = outputs({
123
123
  server,
124
124
  endpoints: [endpoint],
125
125
  $statusFields: {
126
- endpoints: {
127
- value: [l3EndpointToString(endpoint)]
128
- },
129
- hostname: {
130
- value: server.hostname
131
- },
132
- platformId: {
133
- meta: {
134
- icon: "mdi:chip"
135
- },
136
- value: args.platformId
137
- },
138
- resources: {
139
- meta: {
140
- icon: "mdi:memory"
141
- },
142
- value: `${args.resources.cores} cores, ${args.resources.memory}GB RAM`
143
- }
126
+ endpoints: [l3EndpointToString(endpoint)],
127
+ hostname: server.hostname
144
128
  },
145
129
  $terminals: [terminal]
146
130
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/provider.ts","../../src/virtual-machine/index.ts"],"names":["toPromise"],"mappings":"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","file":"index.js","sourcesContent":["import type { yandex } from \"@highstate/library\"\nimport type { Input } from \"@highstate/pulumi\"\nimport { output, toPromise } from \"@highstate/pulumi\"\nimport { Provider } from \"@highstate/yandex-sdk\"\n\nexport async function createProvider(cloud: Input<yandex.Cloud>): Promise<Provider> {\n return await toPromise(\n output(cloud).apply(cloudConfig => {\n return new Provider(\"yandex\", {\n token: cloudConfig.token,\n serviceAccountKeyFile: cloudConfig.serviceAccountKeyFile,\n cloudId: cloudConfig.cloudId,\n folderId: cloudConfig.defaultFolderId,\n zone: cloudConfig.defaultZone,\n regionId: cloudConfig.regionId,\n })\n }),\n )\n}\n","import {\n createServerBundle,\n generatePassword,\n generateSshPrivateKey,\n l3EndpointToString,\n parseL3Endpoint,\n sshPrivateKeyToKeyPair,\n} from \"@highstate/common\"\nimport { yandex } from \"@highstate/library\"\nimport { forUnit, getResourceComment, interpolate, toPromise } from \"@highstate/pulumi\"\nimport { ComputeDisk, ComputeInstance, getComputeImage, getVpcSubnet } from \"@highstate/yandex-sdk\"\nimport { createProvider } from \"../provider\"\n\nconst { name, args, getSecret, inputs, outputs } = forUnit(yandex.virtualMachine)\n\nconst provider = await createProvider(inputs.yandexCloud)\n\nconst sshKeyPair =\n inputs.sshKeyPair ?? sshPrivateKeyToKeyPair(getSecret(\"sshPrivateKey\", generateSshPrivateKey))\n\nconst rootPassword = getSecret(\"rootPassword\", generatePassword)\n\n// get the image\nconst image = await getComputeImage(\n {\n family: args.disk.imageFamily,\n },\n { provider },\n)\n\n// auto-discover subnet if not specified\nlet subnetId = args.network.subnetId\nif (!subnetId) {\n const defaultSubnetName = await toPromise(interpolate`default-${inputs.yandexCloud.defaultZone}`)\n const subnet = await getVpcSubnet(\n {\n folderId: await toPromise(inputs.yandexCloud.defaultFolderId),\n name: defaultSubnetName,\n },\n { provider },\n )\n\n if (!subnet.id) {\n throw new Error(\n `Could not find default subnet '${defaultSubnetName}' in zone ${inputs.yandexCloud.defaultZone}`,\n )\n }\n\n subnetId = subnet.id\n}\n\n// create the disk\nconst disk = new ComputeDisk(\n name,\n {\n name: `${name}-disk`,\n type: args.disk.type,\n size: args.disk.size,\n imageId: image.id,\n folderId: inputs.yandexCloud.defaultFolderId,\n zone: inputs.yandexCloud.defaultZone,\n },\n { provider },\n)\n\n// create cloud-init user data\nconst userData = interpolate`#cloud-config\nusers:\n - name: root\n ssh-authorized-keys:\n - ${sshKeyPair.publicKey}\n sudo: ALL=(ALL) NOPASSWD:ALL\n${\n Object.keys(args.metadata).length > 0\n ? `\nwrite_files:\n${Object.entries(args.metadata)\n .map(\n ([key, value]) =>\n ` - path: /tmp/${key}\n content: |\n ${value}`,\n )\n .join(\"\\n\")}`\n : \"\"\n}\n`\n\n// create the instance\nconst instance = new ComputeInstance(\n name,\n {\n name,\n description: getResourceComment(),\n folderId: inputs.yandexCloud.defaultFolderId,\n zone: inputs.yandexCloud.defaultZone,\n platformId: args.platformId,\n\n resources: {\n cores: args.resources.cores,\n memory: args.resources.memory,\n coreFraction: args.resources.coreFraction,\n },\n\n bootDisk: {\n diskId: disk.id,\n },\n\n networkInterfaces: [\n {\n subnetId: subnetId,\n nat: args.network.assignPublicIp,\n },\n ],\n\n metadata: {\n \"user-data\": userData,\n },\n },\n { provider, ignoreChanges: [\"bootDisk\"] },\n)\n\n// get the IP address\nconst publicIp = await toPromise(\n instance.networkInterfaces.apply(ni => {\n const firstInterface = ni[0]\n return args.network.assignPublicIp ? firstInterface?.natIpAddress : firstInterface?.ipAddress\n }),\n)\n\nif (!publicIp) {\n throw new Error(\"No IP address assigned to instance\")\n}\n\nconst endpoint = parseL3Endpoint(publicIp)\n\nconst { server, terminal } = await createServerBundle({\n name,\n endpoints: [endpoint],\n sshArgs: args.ssh,\n sshPassword: rootPassword,\n sshPrivateKey: sshKeyPair.privateKey,\n sshKeyPair,\n})\n\nexport default outputs({\n server,\n endpoints: [endpoint],\n\n $statusFields: {\n endpoints: {\n value: [l3EndpointToString(endpoint)],\n },\n hostname: {\n value: server.hostname,\n },\n platformId: {\n meta: {\n icon: \"mdi:chip\",\n },\n value: args.platformId,\n },\n resources: {\n meta: {\n icon: \"mdi:memory\",\n },\n value: `${args.resources.cores} cores, ${args.resources.memory}GB RAM`,\n },\n },\n\n $terminals: [terminal],\n})\n"]}
1
+ {"version":3,"sources":["../../src/provider.ts","../../src/virtual-machine/index.ts"],"names":["toPromise"],"mappings":"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","file":"index.js","sourcesContent":["import type { yandex } from \"@highstate/library\"\nimport type { Input } from \"@highstate/pulumi\"\nimport { output, toPromise } from \"@highstate/pulumi\"\nimport { Provider } from \"@highstate/yandex-sdk\"\n\nexport async function createProvider(cloud: Input<yandex.Cloud>): Promise<Provider> {\n return await toPromise(\n output(cloud).apply(cloudConfig => {\n return new Provider(\"yandex\", {\n token: cloudConfig.token,\n serviceAccountKeyFile: cloudConfig.serviceAccountKeyFile,\n cloudId: cloudConfig.cloudId,\n folderId: cloudConfig.defaultFolderId,\n zone: cloudConfig.defaultZone,\n regionId: cloudConfig.regionId,\n })\n }),\n )\n}\n","import {\n createServerBundle,\n generatePassword,\n generateSshPrivateKey,\n l3EndpointToString,\n parseL3Endpoint,\n sshPrivateKeyToKeyPair,\n} from \"@highstate/common\"\nimport { yandex } from \"@highstate/library\"\nimport { forUnit, getResourceComment, interpolate, toPromise } from \"@highstate/pulumi\"\nimport { ComputeDisk, ComputeInstance, getComputeImage, getVpcSubnet } from \"@highstate/yandex-sdk\"\nimport { createProvider } from \"../provider\"\n\nconst { name, args, getSecret, inputs, outputs } = forUnit(yandex.virtualMachine)\n\nconst provider = await createProvider(inputs.yandexCloud)\n\nconst sshKeyPair =\n inputs.sshKeyPair ?? sshPrivateKeyToKeyPair(getSecret(\"sshPrivateKey\", generateSshPrivateKey))\n\nconst rootPassword = getSecret(\"rootPassword\", generatePassword)\n\n// get the image\nconst image = await getComputeImage(\n {\n family: args.disk.imageFamily,\n },\n { provider },\n)\n\n// auto-discover subnet if not specified\nlet subnetId = args.network.subnetId\nif (!subnetId) {\n const defaultSubnetName = await toPromise(interpolate`default-${inputs.yandexCloud.defaultZone}`)\n const subnet = await getVpcSubnet(\n {\n folderId: await toPromise(inputs.yandexCloud.defaultFolderId),\n name: defaultSubnetName,\n },\n { provider },\n )\n\n if (!subnet.id) {\n throw new Error(\n `Could not find default subnet '${defaultSubnetName}' in zone ${inputs.yandexCloud.defaultZone}`,\n )\n }\n\n subnetId = subnet.id\n}\n\n// create the disk\nconst disk = new ComputeDisk(\n name,\n {\n name: `${name}-disk`,\n type: args.disk.type,\n size: args.disk.size,\n imageId: image.id,\n folderId: inputs.yandexCloud.defaultFolderId,\n zone: inputs.yandexCloud.defaultZone,\n },\n { provider },\n)\n\n// create cloud-init user data\nconst userData = interpolate`#cloud-config\nusers:\n - name: root\n ssh-authorized-keys:\n - ${sshKeyPair.publicKey}\n sudo: ALL=(ALL) NOPASSWD:ALL\n${\n Object.keys(args.metadata).length > 0\n ? `\nwrite_files:\n${Object.entries(args.metadata)\n .map(\n ([key, value]) =>\n ` - path: /tmp/${key}\n content: |\n ${value}`,\n )\n .join(\"\\n\")}`\n : \"\"\n}\n`\n\n// create the instance\nconst instance = new ComputeInstance(\n name,\n {\n name,\n description: getResourceComment(),\n folderId: inputs.yandexCloud.defaultFolderId,\n zone: inputs.yandexCloud.defaultZone,\n platformId: args.platformId,\n\n resources: {\n cores: args.resources.cores,\n memory: args.resources.memory,\n coreFraction: args.resources.coreFraction,\n },\n\n bootDisk: {\n diskId: disk.id,\n },\n\n networkInterfaces: [\n {\n subnetId: subnetId,\n nat: args.network.assignPublicIp,\n },\n ],\n\n metadata: {\n \"user-data\": userData,\n },\n },\n { provider, ignoreChanges: [\"bootDisk\"] },\n)\n\n// get the IP address\nconst publicIp = await toPromise(\n instance.networkInterfaces.apply(ni => {\n const firstInterface = ni[0]\n return args.network.assignPublicIp ? firstInterface?.natIpAddress : firstInterface?.ipAddress\n }),\n)\n\nif (!publicIp) {\n throw new Error(\"No IP address assigned to instance\")\n}\n\nconst endpoint = parseL3Endpoint(publicIp)\n\nconst { server, terminal } = await createServerBundle({\n name,\n endpoints: [endpoint],\n sshArgs: args.ssh,\n sshPassword: rootPassword,\n sshPrivateKey: sshKeyPair.privateKey,\n sshKeyPair,\n})\n\nexport default outputs({\n server,\n endpoints: [endpoint],\n\n $statusFields: {\n endpoints: [l3EndpointToString(endpoint)],\n hostname: server.hostname,\n },\n\n $terminals: [terminal],\n})\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@highstate/yandex",
3
- "version": "0.9.26",
3
+ "version": "0.9.27",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
@@ -20,14 +20,14 @@
20
20
  "generate-sdks": "./scripts/generate-sdks.sh"
21
21
  },
22
22
  "dependencies": {
23
- "@highstate/common": "^0.9.26",
24
- "@highstate/library": "^0.9.26",
25
- "@highstate/pulumi": "^0.9.26",
26
- "@highstate/yandex-sdk": "^0.9.26",
23
+ "@highstate/common": "^0.9.27",
24
+ "@highstate/library": "^0.9.27",
25
+ "@highstate/pulumi": "^0.9.27",
26
+ "@highstate/yandex-sdk": "^0.9.27",
27
27
  "@pulumi/pulumi": "^3.197.0"
28
28
  },
29
29
  "devDependencies": {
30
- "@highstate/cli": "^0.9.26"
30
+ "@highstate/cli": "^0.9.27"
31
31
  },
32
- "gitHead": "64e8a656a17dfcce88727c24969f9a3b73539ac9"
32
+ "gitHead": "e4dfdb6c1394a6739591f9881c4f5f11d9daa0ba"
33
33
  }