@highstate/yandex 0.9.20 → 0.9.21

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 +1 @@
1
- {"version":3,"sources":["../../src/connection/index.ts"],"names":[],"mappings":";;;;;AAKA,IAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAQ,GAAI,OAAA,CAAQ,OAAO,UAAU,CAAA;AAY5D,IAAM,2BAAA,GAA8B,MAAM,SAAA,CAAU,OAAA,CAAQ,qBAAqB,CAAA;AACjF,IAAM,WAAA,GAAqC,IAAA,CAAK,KAAA,CAAM,2BAA2B,CAAA;AACjF,IAAM,mBAAmB,WAAA,CAAY,kBAAA;AAGrC,IAAM,QAAA,GAAW,IAAI,QAAA,CAAS,QAAA,EAAU;AAAA,EACtC,qBAAA,EAAuB,2BAAA;AAAA,EACvB,MAAM,IAAA,CAAK,WAAA;AAAA,EACX,UAAU,IAAA,CAAK;AACjB,CAAC,CAAA;AAGD,IAAM,iBAAiB,MAAM,oBAAA;AAAA,EAC3B;AAAA,IACE;AAAA,GACF;AAAA,EACA,EAAE,QAAA;AACJ,CAAA;AAGA,IAAM,SAAS,MAAM,wBAAA;AAAA,EACnB;AAAA,IACE,UAAU,cAAA,CAAe;AAAA,GAC3B;AAAA,EACA,EAAE,QAAA;AACJ,CAAA;AAEA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,EAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAC5D;AAEA,IAAM,cAAoC,MAAA,CAAO;AAAA,EAC/C,uBAAuB,OAAA,CAAQ,qBAAA;AAAA,EAC/B,SAAS,MAAA,CAAO,OAAA;AAAA,EAChB,iBAAiB,cAAA,CAAe,QAAA;AAAA,EAChC,aAAa,IAAA,CAAK,WAAA;AAAA,EAClB,UAAU,IAAA,CAAK;AACjB,CAAC,CAAA;AAED,IAAO,qBAAQ,OAAA,CAAQ;AAAA,EACrB,WAAA;AAAA,EAEA,aAAA,EAAe;AAAA,IACb,OAAA,EAAS;AAAA,MACP,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM;AAAA,OACR;AAAA,MACA,OAAO,WAAA,CAAY;AAAA,KACrB;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM;AAAA,OACR;AAAA,MACA,OAAO,WAAA,CAAY;AAAA,KACrB;AAAA,IACA,WAAA,EAAa;AAAA,MACX,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM;AAAA,OACR;AAAA,MACA,OAAO,WAAA,CAAY;AAAA;AACrB;AAEJ,CAAC","file":"index.js","sourcesContent":["import type { Output } from \"@highstate/pulumi\"\nimport { yandex } from \"@highstate/library\"\nimport { forUnit, output, toPromise } from \"@highstate/pulumi\"\nimport { Provider, getIamServiceAccount, getResourcemanagerFolder } from \"@highstate/yandex-sdk\"\n\nconst { args, secrets, outputs } = forUnit(yandex.connection)\n\n// parse service account key file to extract service account ID\ninterface ServiceAccountKeyFile {\n id: string\n service_account_id: string\n created_at: string\n key_algorithm: string\n public_key: string\n private_key: string\n}\n\nconst serviceAccountKeyFileString = await toPromise(secrets.serviceAccountKeyFile)\nconst keyFileData: ServiceAccountKeyFile = JSON.parse(serviceAccountKeyFileString)\nconst serviceAccountId = keyFileData.service_account_id\n\n// create provider for auto-discovery\nconst provider = new Provider(\"yandex\", {\n serviceAccountKeyFile: serviceAccountKeyFileString,\n zone: args.defaultZone,\n regionId: args.regionId,\n})\n\n// auto-discover service account details to get folder and cloud\nconst serviceAccount = await getIamServiceAccount(\n {\n serviceAccountId: serviceAccountId,\n },\n { provider },\n)\n\n// auto-discover cloud ID from folder\nconst folder = await getResourcemanagerFolder(\n {\n folderId: serviceAccount.folderId,\n },\n { provider },\n)\n\nif (!folder.cloudId) {\n throw new Error(\"Could not determine cloud ID from folder\")\n}\n\nconst yandexCloud: Output<yandex.Cloud> = output({\n serviceAccountKeyFile: secrets.serviceAccountKeyFile,\n cloudId: folder.cloudId,\n defaultFolderId: serviceAccount.folderId,\n defaultZone: args.defaultZone,\n regionId: args.regionId,\n})\n\nexport default outputs({\n yandexCloud,\n\n $statusFields: {\n cloudId: {\n meta: {\n icon: \"mdi:cloud\",\n },\n value: yandexCloud.cloudId,\n },\n defaultFolderId: {\n meta: {\n icon: \"mdi:folder\",\n },\n value: yandexCloud.defaultFolderId,\n },\n defaultZone: {\n meta: {\n icon: \"mdi:map-marker\",\n },\n value: yandexCloud.defaultZone,\n },\n },\n})\n"]}
1
+ {"version":3,"sources":["../../src/connection/index.ts"],"names":[],"mappings":";;;;;AAKA,IAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAQ,GAAI,OAAA,CAAQ,OAAO,UAAU,CAAA;AAY5D,IAAM,2BAAA,GAA8B,MAAM,SAAA,CAAU,OAAA,CAAQ,qBAAqB,CAAA;AACjF,IAAM,WAAA,GAAqC,IAAA,CAAK,KAAA,CAAM,2BAA2B,CAAA;AACjF,IAAM,mBAAmB,WAAA,CAAY,kBAAA;AAGrC,IAAM,QAAA,GAAW,IAAI,QAAA,CAAS,QAAA,EAAU;AAAA,EACtC,qBAAA,EAAuB,2BAAA;AAAA,EACvB,MAAM,IAAA,CAAK,WAAA;AAAA,EACX,UAAU,IAAA,CAAK;AACjB,CAAC,CAAA;AAGD,IAAM,iBAAiB,MAAM,oBAAA;AAAA,EAC3B;AAAA,IACE;AAAA,GACF;AAAA,EACA,EAAE,QAAA;AACJ,CAAA;AAGA,IAAM,SAAS,MAAM,wBAAA;AAAA,EACnB;AAAA,IACE,UAAU,cAAA,CAAe;AAAA,GAC3B;AAAA,EACA,EAAE,QAAA;AACJ,CAAA;AAEA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,EAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAC5D;AAEA,IAAM,cAAoC,MAAA,CAAO;AAAA,EAC/C,uBAAuB,OAAA,CAAQ,qBAAA;AAAA,EAC/B,SAAS,MAAA,CAAO,OAAA;AAAA,EAChB,iBAAiB,cAAA,CAAe,QAAA;AAAA,EAChC,aAAa,IAAA,CAAK,WAAA;AAAA,EAClB,UAAU,IAAA,CAAK;AACjB,CAAC,CAAA;AAED,IAAO,qBAAQ,OAAA,CAAQ;AAAA,EACrB,WAAA;AAAA,EAEA,aAAA,EAAe;AAAA,IACb,OAAA,EAAS;AAAA,MACP,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM;AAAA,OACR;AAAA,MACA,OAAO,WAAA,CAAY;AAAA,KACrB;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM;AAAA,OACR;AAAA,MACA,OAAO,WAAA,CAAY;AAAA,KACrB;AAAA,IACA,WAAA,EAAa;AAAA,MACX,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM;AAAA,OACR;AAAA,MACA,OAAO,WAAA,CAAY;AAAA;AACrB;AAEJ,CAAC","file":"index.js","sourcesContent":["import type { Output } from \"@highstate/pulumi\"\nimport { yandex } from \"@highstate/library\"\nimport { forUnit, output, toPromise } from \"@highstate/pulumi\"\nimport { getIamServiceAccount, getResourcemanagerFolder, Provider } from \"@highstate/yandex-sdk\"\n\nconst { args, secrets, outputs } = forUnit(yandex.connection)\n\n// parse service account key file to extract service account ID\ninterface ServiceAccountKeyFile {\n id: string\n service_account_id: string\n created_at: string\n key_algorithm: string\n public_key: string\n private_key: string\n}\n\nconst serviceAccountKeyFileString = await toPromise(secrets.serviceAccountKeyFile)\nconst keyFileData: ServiceAccountKeyFile = JSON.parse(serviceAccountKeyFileString)\nconst serviceAccountId = keyFileData.service_account_id\n\n// create provider for auto-discovery\nconst provider = new Provider(\"yandex\", {\n serviceAccountKeyFile: serviceAccountKeyFileString,\n zone: args.defaultZone,\n regionId: args.regionId,\n})\n\n// auto-discover service account details to get folder and cloud\nconst serviceAccount = await getIamServiceAccount(\n {\n serviceAccountId: serviceAccountId,\n },\n { provider },\n)\n\n// auto-discover cloud ID from folder\nconst folder = await getResourcemanagerFolder(\n {\n folderId: serviceAccount.folderId,\n },\n { provider },\n)\n\nif (!folder.cloudId) {\n throw new Error(\"Could not determine cloud ID from folder\")\n}\n\nconst yandexCloud: Output<yandex.Cloud> = output({\n serviceAccountKeyFile: secrets.serviceAccountKeyFile,\n cloudId: folder.cloudId,\n defaultFolderId: serviceAccount.folderId,\n defaultZone: args.defaultZone,\n regionId: args.regionId,\n})\n\nexport default outputs({\n yandexCloud,\n\n $statusFields: {\n cloudId: {\n meta: {\n icon: \"mdi:cloud\",\n },\n value: yandexCloud.cloudId,\n },\n defaultFolderId: {\n meta: {\n icon: \"mdi:folder\",\n },\n value: yandexCloud.defaultFolderId,\n },\n defaultZone: {\n meta: {\n icon: \"mdi:map-marker\",\n },\n value: yandexCloud.defaultZone,\n },\n },\n})\n"]}
@@ -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 { Provider } from \"@highstate/yandex-sdk\"\nimport type { yandex } from \"@highstate/library\"\nimport type { Input } from \"@highstate/pulumi\"\nimport { output, toPromise } from \"@highstate/pulumi\"\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 { ComputeInstance, ComputeDisk, 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: {\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@highstate/yandex",
3
- "version": "0.9.20",
3
+ "version": "0.9.21",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
@@ -14,17 +14,20 @@
14
14
  },
15
15
  "scripts": {
16
16
  "build": "highstate build",
17
+ "typecheck": "tsgo --noEmit --skipLibCheck",
18
+ "biome": "biome check --write --unsafe --error-on-warnings",
19
+ "biome:check": "biome check --error-on-warnings",
17
20
  "generate-sdks": "./scripts/generate-sdks.sh"
18
21
  },
19
22
  "dependencies": {
20
- "@highstate/common": "^0.9.20",
21
- "@highstate/library": "^0.9.20",
22
- "@highstate/pulumi": "^0.9.20",
23
- "@highstate/yandex-sdk": "^0.9.20",
23
+ "@highstate/common": "^0.9.21",
24
+ "@highstate/library": "^0.9.21",
25
+ "@highstate/pulumi": "^0.9.21",
26
+ "@highstate/yandex-sdk": "^0.9.21",
24
27
  "@pulumi/pulumi": "^3.184.0"
25
28
  },
26
29
  "devDependencies": {
27
- "@highstate/cli": "^0.9.20"
30
+ "@highstate/cli": "^0.9.21"
28
31
  },
29
- "gitHead": "4bf9183450c2c6f51d6a99d77efc379ff5c7b7ef"
32
+ "gitHead": "390ff15c0e0076822a682f9d4e19260942a8d6c2"
30
33
  }