@highstate/yandex 0.12.0 → 0.12.1

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.
@@ -0,0 +1,21 @@
1
+ import { toPromise, output } from '@highstate/pulumi';
2
+ import { Provider } from '@highstate/yandex-sdk';
3
+
4
+ // src/provider.ts
5
+ async function createProvider(connection) {
6
+ return await toPromise(
7
+ output(connection).apply((connection2) => {
8
+ return new Provider(connection2.cloudId, {
9
+ serviceAccountKeyFile: connection2.serviceAccountKeyFile,
10
+ cloudId: connection2.cloudId,
11
+ folderId: connection2.defaultFolderId,
12
+ zone: connection2.defaultZone,
13
+ regionId: connection2.regionId
14
+ });
15
+ })
16
+ );
17
+ }
18
+
19
+ export { createProvider };
20
+ //# sourceMappingURL=chunk-MK37EG4O.js.map
21
+ //# sourceMappingURL=chunk-MK37EG4O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/provider.ts"],"names":["connection"],"mappings":";;;;AAKA,eAAsB,eAAe,UAAA,EAAyD;AAC5F,EAAA,OAAO,MAAM,SAAA;AAAA,IACX,MAAA,CAAO,UAAU,CAAA,CAAE,KAAA,CAAM,CAAAA,WAAAA,KAAc;AACrC,MAAA,OAAO,IAAI,QAAA,CAASA,WAAAA,CAAW,OAAA,EAAS;AAAA,QACtC,uBAAuBA,WAAAA,CAAW,qBAAA;AAAA,QAClC,SAASA,WAAAA,CAAW,OAAA;AAAA,QACpB,UAAUA,WAAAA,CAAW,eAAA;AAAA,QACrB,MAAMA,WAAAA,CAAW,WAAA;AAAA,QACjB,UAAUA,WAAAA,CAAW;AAAA,OACtB,CAAA;AAAA,IACH,CAAC;AAAA,GACH;AACF","file":"chunk-MK37EG4O.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(connection: Input<yandex.Connection>): Promise<Provider> {\n return await toPromise(\n output(connection).apply(connection => {\n return new Provider(connection.cloudId, {\n serviceAccountKeyFile: connection.serviceAccountKeyFile,\n cloudId: connection.cloudId,\n folderId: connection.defaultFolderId,\n zone: connection.defaultZone,\n regionId: connection.regionId,\n })\n }),\n )\n}\n"]}
@@ -1,14 +1,15 @@
1
- import { createProvider } from '../chunk-YZYCDHZ3.js';
1
+ import { createProvider } from '../chunk-MK37EG4O.js';
2
2
  import { yandex } from '@highstate/library';
3
3
  import { forUnit, getResourceComment } from '@highstate/pulumi';
4
4
  import { ComputeDisk } from '@highstate/yandex-sdk';
5
5
 
6
6
  var { name, args, inputs, outputs } = forUnit(yandex.disk);
7
7
  var provider = await createProvider(inputs.connection);
8
+ var diskName = args.diskName ?? name;
8
9
  var disk = new ComputeDisk(
9
- args.diskName ?? name,
10
+ "disk",
10
11
  {
11
- name: args.diskName ?? name,
12
+ name: diskName,
12
13
  description: getResourceComment(),
13
14
  type: args.type,
14
15
  size: args.size,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/disk/index.ts"],"names":[],"mappings":";;;;;AAKA,IAAM,EAAE,MAAM,IAAA,EAAM,MAAA,EAAQ,SAAQ,GAAI,OAAA,CAAQ,OAAO,IAAI,CAAA;AAE3D,IAAM,QAAA,GAAW,MAAM,cAAA,CAAe,MAAA,CAAO,UAAU,CAAA;AAEvD,IAAM,OAAO,IAAI,WAAA;AAAA,EACf,KAAK,QAAA,IAAY,IAAA;AAAA,EACjB;AAAA,IACE,IAAA,EAAM,KAAK,QAAA,IAAY,IAAA;AAAA,IACvB,aAAa,kBAAA,EAAmB;AAAA,IAChC,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,EAAE,QAAA,EAAU,OAAA,EAAS,IAAA;AACvB,CAAA;AAEA,IAAO,eAAQ,OAAA,CAAQ;AAAA,EACrB,IAAA,EAAM;AAAA,IACJ,IAAI,IAAA,CAAK;AAAA,GACX;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAI,IAAA,CAAK;AAAA;AAEb,CAAC","file":"index.js","sourcesContent":["import { yandex } from \"@highstate/library\"\nimport { forUnit, getResourceComment } from \"@highstate/pulumi\"\nimport { ComputeDisk } from \"@highstate/yandex-sdk\"\nimport { createProvider } from \"../provider\"\n\nconst { name, args, inputs, outputs } = forUnit(yandex.disk)\n\nconst provider = await createProvider(inputs.connection)\n\nconst disk = new ComputeDisk(\n args.diskName ?? name,\n {\n name: args.diskName ?? name,\n description: getResourceComment(),\n type: args.type,\n size: args.size,\n allowRecreate: false,\n },\n { provider, protect: true },\n)\n\nexport default outputs({\n disk: {\n id: disk.id,\n },\n $statusFields: {\n id: disk.id,\n },\n})\n"]}
1
+ {"version":3,"sources":["../../src/disk/index.ts"],"names":[],"mappings":";;;;;AAKA,IAAM,EAAE,MAAM,IAAA,EAAM,MAAA,EAAQ,SAAQ,GAAI,OAAA,CAAQ,OAAO,IAAI,CAAA;AAE3D,IAAM,QAAA,GAAW,MAAM,cAAA,CAAe,MAAA,CAAO,UAAU,CAAA;AAEvD,IAAM,QAAA,GAAW,KAAK,QAAA,IAAY,IAAA;AAElC,IAAM,OAAO,IAAI,WAAA;AAAA,EACf,MAAA;AAAA,EACA;AAAA,IACE,IAAA,EAAM,QAAA;AAAA,IACN,aAAa,kBAAA,EAAmB;AAAA,IAChC,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,EAAE,QAAA,EAAU,OAAA,EAAS,IAAA;AACvB,CAAA;AAEA,IAAO,eAAQ,OAAA,CAAQ;AAAA,EACrB,IAAA,EAAM;AAAA,IACJ,IAAI,IAAA,CAAK;AAAA,GACX;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAI,IAAA,CAAK;AAAA;AAEb,CAAC","file":"index.js","sourcesContent":["import { yandex } from \"@highstate/library\"\nimport { forUnit, getResourceComment } from \"@highstate/pulumi\"\nimport { ComputeDisk } from \"@highstate/yandex-sdk\"\nimport { createProvider } from \"../provider\"\n\nconst { name, args, inputs, outputs } = forUnit(yandex.disk)\n\nconst provider = await createProvider(inputs.connection)\n\nconst diskName = args.diskName ?? name\n\nconst disk = new ComputeDisk(\n \"disk\",\n {\n name: diskName,\n description: getResourceComment(),\n type: args.type,\n size: args.size,\n allowRecreate: false,\n },\n { provider, protect: true },\n)\n\nexport default outputs({\n disk: {\n id: disk.id,\n },\n $statusFields: {\n id: disk.id,\n },\n})\n"]}
@@ -1,4 +1,4 @@
1
- import { createProvider } from '../chunk-YZYCDHZ3.js';
1
+ import { createProvider } from '../chunk-MK37EG4O.js';
2
2
  import { yandex } from '@highstate/library';
3
3
  import { forUnit } from '@highstate/pulumi';
4
4
  import { getComputeImage } from '@highstate/yandex-sdk';
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "sourceHashes": {
3
- "./dist/connection/index.js": 2645222240,
4
- "./dist/disk/index.js": 318522219,
5
- "./dist/existing-image/index.js": 1842053063,
6
- "./dist/virtual-machine/index.js": 2609713897
3
+ "./dist/connection/index.js": 1919699404,
4
+ "./dist/disk/index.js": 2143346297,
5
+ "./dist/existing-image/index.js": 3556777208,
6
+ "./dist/virtual-machine/index.js": 2177041071
7
7
  }
8
8
  }
@@ -1,11 +1,12 @@
1
- import { createProvider } from '../chunk-YZYCDHZ3.js';
1
+ import { createProvider } from '../chunk-MK37EG4O.js';
2
2
  import { sshPrivateKeyToKeyPair, generateSshPrivateKey, generatePassword, parseL3Endpoint, createServerBundle, l3EndpointToString } from '@highstate/common';
3
3
  import { trimIndentation } from '@highstate/contract';
4
4
  import { yandex } from '@highstate/library';
5
5
  import { forUnit, toPromise, interpolate, getResourceComment } from '@highstate/pulumi';
6
- import { getVpcSubnet, ComputeDisk, ComputeInstance } from '@highstate/yandex-sdk';
6
+ import { getVpcSubnet, ComputeDisk, VpcAddress, ComputeInstance } from '@highstate/yandex-sdk';
7
7
 
8
8
  var { name, args, getSecret, inputs, outputs } = forUnit(yandex.virtualMachine);
9
+ var vmName = args.vmName ?? name;
9
10
  var provider = await createProvider(inputs.connection);
10
11
  var sshKeyPair = inputs.sshKeyPair ?? sshPrivateKeyToKeyPair(getSecret("sshPrivateKey", generateSshPrivateKey));
11
12
  var rootPassword = getSecret("rootPassword", generatePassword);
@@ -27,9 +28,9 @@ if (!subnetId) {
27
28
  subnetId = subnet.id;
28
29
  }
29
30
  var disk = new ComputeDisk(
30
- name,
31
+ "disk",
31
32
  {
32
- name: args.vmName ?? name,
33
+ name: vmName,
33
34
  type: args.bootDisk.type,
34
35
  size: args.bootDisk.size,
35
36
  imageId: inputs.image.id,
@@ -41,21 +42,36 @@ var disk = new ComputeDisk(
41
42
  );
42
43
  var userData = interpolate`
43
44
  #cloud-config
44
- hostname: ${args.vmName ?? name}
45
+ hostname: ${vmName}
45
46
  users:
46
47
  - name: root
47
48
  ssh-authorized-keys:
48
49
  - ${sshKeyPair.publicKey}
49
50
  sudo: ALL=(ALL) NOPASSWD:ALL
50
51
  `.apply(trimIndentation);
52
+ var address;
53
+ if (args.network.assignPublicIp && args.network.reservePublicIp) {
54
+ address = new VpcAddress(
55
+ "address",
56
+ {
57
+ name: vmName,
58
+ description: getResourceComment(),
59
+ externalIpv4Address: {
60
+ zoneId: inputs.connection.defaultZone
61
+ }
62
+ },
63
+ { provider }
64
+ );
65
+ }
51
66
  var instance = new ComputeInstance(
52
- name,
67
+ "virtual-machine",
53
68
  {
54
- name: args.vmName ?? name,
69
+ name: vmName,
55
70
  description: getResourceComment(),
56
71
  folderId: inputs.connection.defaultFolderId,
57
72
  zone: inputs.connection.defaultZone,
58
73
  platformId: args.platformId,
74
+ allowStoppingForUpdate: true,
59
75
  resources: {
60
76
  cores: args.resources.cores,
61
77
  memory: args.resources.memory,
@@ -67,7 +83,8 @@ var instance = new ComputeInstance(
67
83
  networkInterfaces: [
68
84
  {
69
85
  subnetId,
70
- nat: args.network.assignPublicIp
86
+ nat: args.network.assignPublicIp,
87
+ natIpAddress: address ? address.externalIpv4Address.apply((a) => a.address) : void 0
71
88
  }
72
89
  ],
73
90
  metadata: {
@@ -87,7 +104,7 @@ if (!publicIp) {
87
104
  }
88
105
  var endpoint = parseL3Endpoint(publicIp);
89
106
  var { server, terminal } = await createServerBundle({
90
- name,
107
+ name: vmName,
91
108
  endpoints: [endpoint],
92
109
  sshArgs: args.ssh,
93
110
  sshPassword: rootPassword,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/virtual-machine/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import {\n createServerBundle,\n generatePassword,\n generateSshPrivateKey,\n l3EndpointToString,\n parseL3Endpoint,\n sshPrivateKeyToKeyPair,\n} from \"@highstate/common\"\nimport { trimIndentation } from \"@highstate/contract\"\nimport { yandex } from \"@highstate/library\"\nimport { forUnit, getResourceComment, interpolate, toPromise } from \"@highstate/pulumi\"\nimport { ComputeDisk, ComputeInstance, 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.connection)\n\nconst sshKeyPair =\n inputs.sshKeyPair ?? sshPrivateKeyToKeyPair(getSecret(\"sshPrivateKey\", generateSshPrivateKey))\n\nconst rootPassword = getSecret(\"rootPassword\", generatePassword)\n\n// auto-discover subnet if not specified\nlet subnetId = args.network.subnetId\nif (!subnetId) {\n const defaultSubnetName = await toPromise(interpolate`default-${inputs.connection.defaultZone}`)\n const subnet = await getVpcSubnet(\n {\n folderId: await toPromise(inputs.connection.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.connection.defaultZone}`,\n )\n }\n\n subnetId = subnet.id\n}\n\n// create the disk\nconst disk = new ComputeDisk(\n name,\n {\n name: args.vmName ?? name,\n type: args.bootDisk.type,\n size: args.bootDisk.size,\n imageId: inputs.image.id,\n allowRecreate: false,\n folderId: inputs.connection.defaultFolderId,\n zone: inputs.connection.defaultZone,\n },\n { provider, ignoreChanges: [\"imageId\"] },\n)\n\n// create cloud-init user data\nconst userData = interpolate`\n #cloud-config\n hostname: ${args.vmName ?? name}\n users:\n - name: root\n ssh-authorized-keys:\n - ${sshKeyPair.publicKey}\n sudo: ALL=(ALL) NOPASSWD:ALL\n`.apply(trimIndentation)\n\n// create the instance\nconst instance = new ComputeInstance(\n name,\n {\n name: args.vmName ?? name,\n description: getResourceComment(),\n folderId: inputs.connection.defaultFolderId,\n zone: inputs.connection.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 sshKeyPair,\n})\n\nexport default outputs({\n server,\n endpoints: [endpoint],\n\n $statusFields: {\n id: instance.id,\n endpoints: [l3EndpointToString(endpoint)],\n hostname: server.hostname,\n },\n\n $terminals: [terminal],\n})\n"]}
1
+ {"version":3,"sources":["../../src/virtual-machine/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import {\n createServerBundle,\n generatePassword,\n generateSshPrivateKey,\n l3EndpointToString,\n parseL3Endpoint,\n sshPrivateKeyToKeyPair,\n} from \"@highstate/common\"\nimport { trimIndentation } from \"@highstate/contract\"\nimport { yandex } from \"@highstate/library\"\nimport { forUnit, getResourceComment, interpolate, toPromise } from \"@highstate/pulumi\"\nimport { ComputeDisk, ComputeInstance, getVpcSubnet, VpcAddress } from \"@highstate/yandex-sdk\"\nimport { createProvider } from \"../provider\"\n\nconst { name, args, getSecret, inputs, outputs } = forUnit(yandex.virtualMachine)\n\nconst vmName = args.vmName ?? name\n\nconst provider = await createProvider(inputs.connection)\n\nconst sshKeyPair =\n inputs.sshKeyPair ?? sshPrivateKeyToKeyPair(getSecret(\"sshPrivateKey\", generateSshPrivateKey))\n\nconst rootPassword = getSecret(\"rootPassword\", generatePassword)\n\n// auto-discover subnet if not specified\nlet subnetId = args.network.subnetId\nif (!subnetId) {\n const defaultSubnetName = await toPromise(interpolate`default-${inputs.connection.defaultZone}`)\n const subnet = await getVpcSubnet(\n {\n folderId: await toPromise(inputs.connection.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.connection.defaultZone}`,\n )\n }\n\n subnetId = subnet.id\n}\n\n// create the disk\nconst disk = new ComputeDisk(\n \"disk\",\n {\n name: vmName,\n type: args.bootDisk.type,\n size: args.bootDisk.size,\n imageId: inputs.image.id,\n allowRecreate: false,\n folderId: inputs.connection.defaultFolderId,\n zone: inputs.connection.defaultZone,\n },\n { provider, ignoreChanges: [\"imageId\"] },\n)\n\n// create cloud-init user data\nconst userData = interpolate`\n #cloud-config\n hostname: ${vmName}\n users:\n - name: root\n ssh-authorized-keys:\n - ${sshKeyPair.publicKey}\n sudo: ALL=(ALL) NOPASSWD:ALL\n`.apply(trimIndentation)\n\nlet address: VpcAddress | undefined\n\nif (args.network.assignPublicIp && args.network.reservePublicIp) {\n address = new VpcAddress(\n \"address\",\n {\n name: vmName,\n description: getResourceComment(),\n externalIpv4Address: {\n zoneId: inputs.connection.defaultZone,\n },\n },\n { provider },\n )\n}\n\n// create the instance\nconst instance = new ComputeInstance(\n \"virtual-machine\",\n {\n name: vmName,\n description: getResourceComment(),\n folderId: inputs.connection.defaultFolderId,\n zone: inputs.connection.defaultZone,\n platformId: args.platformId,\n allowStoppingForUpdate: true,\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 natIpAddress: address ? address.externalIpv4Address.apply(a => a!.address) : undefined,\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: vmName,\n endpoints: [endpoint],\n sshArgs: args.ssh,\n sshPassword: rootPassword,\n sshKeyPair,\n})\n\nexport default outputs({\n server,\n endpoints: [endpoint],\n\n $statusFields: {\n id: instance.id,\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.12.0",
3
+ "version": "0.12.1",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
@@ -1,21 +0,0 @@
1
- import { toPromise, output } from '@highstate/pulumi';
2
- import { Provider } from '@highstate/yandex-sdk';
3
-
4
- // src/provider.ts
5
- async function createProvider(cloud) {
6
- return await toPromise(
7
- output(cloud).apply((cloudConfig) => {
8
- return new Provider("yandex", {
9
- serviceAccountKeyFile: cloudConfig.serviceAccountKeyFile,
10
- cloudId: cloudConfig.cloudId,
11
- folderId: cloudConfig.defaultFolderId,
12
- zone: cloudConfig.defaultZone,
13
- regionId: cloudConfig.regionId
14
- });
15
- })
16
- );
17
- }
18
-
19
- export { createProvider };
20
- //# sourceMappingURL=chunk-YZYCDHZ3.js.map
21
- //# sourceMappingURL=chunk-YZYCDHZ3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/provider.ts"],"names":[],"mappings":";;;;AAKA,eAAsB,eAAe,KAAA,EAAoD;AACvF,EAAA,OAAO,MAAM,SAAA;AAAA,IACX,MAAA,CAAO,KAAK,CAAA,CAAE,KAAA,CAAM,CAAA,WAAA,KAAe;AACjC,MAAA,OAAO,IAAI,SAAS,QAAA,EAAU;AAAA,QAC5B,uBAAuB,WAAA,CAAY,qBAAA;AAAA,QACnC,SAAS,WAAA,CAAY,OAAA;AAAA,QACrB,UAAU,WAAA,CAAY,eAAA;AAAA,QACtB,MAAM,WAAA,CAAY,WAAA;AAAA,QAClB,UAAU,WAAA,CAAY;AAAA,OACvB,CAAA;AAAA,IACH,CAAC;AAAA,GACH;AACF","file":"chunk-YZYCDHZ3.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.Connection>): Promise<Provider> {\n return await toPromise(\n output(cloud).apply(cloudConfig => {\n return new Provider(\"yandex\", {\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"]}