@highstate/yandex 0.11.7 → 0.12.0

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(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
@@ -0,0 +1 @@
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"]}
@@ -9,51 +9,38 @@ var keyFileData = JSON.parse(serviceAccountKeyFileString);
9
9
  var serviceAccountId = keyFileData.service_account_id;
10
10
  var provider = new Provider("yandex", {
11
11
  serviceAccountKeyFile: serviceAccountKeyFileString,
12
- zone: args.defaultZone,
13
- regionId: args.regionId
12
+ zone: args.region.defaultZone,
13
+ regionId: args.region.id
14
14
  });
15
15
  var serviceAccount = await getIamServiceAccount(
16
- {
17
- serviceAccountId
18
- },
19
- { provider }
20
- );
21
- var folder = await getResourcemanagerFolder(
22
- {
23
- folderId: serviceAccount.folderId
24
- },
16
+ { serviceAccountId },
25
17
  { provider }
26
18
  );
19
+ var folder = await getResourcemanagerFolder({ folderId: serviceAccount.folderId }, { provider });
27
20
  if (!folder.cloudId) {
28
21
  throw new Error("Could not determine cloud ID from folder");
29
22
  }
30
- var yandexCloud = output({
23
+ var connection = output({
31
24
  serviceAccountKeyFile: secrets.serviceAccountKeyFile,
32
25
  cloudId: folder.cloudId,
33
26
  defaultFolderId: serviceAccount.folderId,
34
- defaultZone: args.defaultZone,
35
- regionId: args.regionId
27
+ defaultZone: args.region.defaultZone,
28
+ regionId: args.region.id
36
29
  });
37
30
  var connection_default = outputs({
38
- yandexCloud,
31
+ connection,
39
32
  $statusFields: {
40
33
  cloudId: {
41
34
  meta: {
42
35
  icon: "mdi:cloud"
43
36
  },
44
- value: yandexCloud.cloudId
37
+ value: connection.cloudId
45
38
  },
46
39
  defaultFolderId: {
47
40
  meta: {
48
41
  icon: "mdi:folder"
49
42
  },
50
- value: yandexCloud.defaultFolderId
51
- },
52
- defaultZone: {
53
- meta: {
54
- icon: "mdi:map-marker"
55
- },
56
- value: yandexCloud.defaultZone
43
+ value: connection.defaultFolderId
57
44
  }
58
45
  }
59
46
  });
@@ -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 { 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
+ {"version":3,"sources":["../../src/connection/index.ts"],"names":[],"mappings":";;;;;AAKA,IAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAQ,GAAI,OAAA,CAAQ,OAAO,UAAU,CAAA;AAO5D,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,IAAA,EAAM,KAAK,MAAA,CAAO,WAAA;AAAA,EAClB,QAAA,EAAU,KAAK,MAAA,CAAO;AACxB,CAAC,CAAA;AAGD,IAAM,iBAAiB,MAAM,oBAAA;AAAA,EAC3B,EAAE,gBAAA,EAAmC;AAAA,EACrC,EAAE,QAAA;AACJ,CAAA;AAGA,IAAM,MAAA,GAAS,MAAM,wBAAA,CAAyB,EAAE,QAAA,EAAU,eAAe,QAAA,EAAS,EAAG,EAAE,QAAA,EAAU,CAAA;AACjG,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,EAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAC5D;AAEA,IAAM,aAAwC,MAAA,CAAO;AAAA,EACnD,uBAAuB,OAAA,CAAQ,qBAAA;AAAA,EAC/B,SAAS,MAAA,CAAO,OAAA;AAAA,EAChB,iBAAiB,cAAA,CAAe,QAAA;AAAA,EAChC,WAAA,EAAa,KAAK,MAAA,CAAO,WAAA;AAAA,EACzB,QAAA,EAAU,KAAK,MAAA,CAAO;AACxB,CAAC,CAAA;AAED,IAAO,qBAAQ,OAAA,CAAQ;AAAA,EACrB,UAAA;AAAA,EAEA,aAAA,EAAe;AAAA,IACb,OAAA,EAAS;AAAA,MACP,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM;AAAA,OACR;AAAA,MACA,OAAO,UAAA,CAAW;AAAA,KACpB;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM;AAAA,OACR;AAAA,MACA,OAAO,UAAA,CAAW;AAAA;AACpB;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\ntype ServiceAccountKeyFile = {\n service_account_id: 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.region.defaultZone,\n regionId: args.region.id,\n})\n\n// auto-discover service account details to get folder and cloud\nconst serviceAccount = await getIamServiceAccount(\n { serviceAccountId: serviceAccountId },\n { provider },\n)\n\n// auto-discover cloud ID from folder\nconst folder = await getResourcemanagerFolder({ folderId: serviceAccount.folderId }, { provider })\nif (!folder.cloudId) {\n throw new Error(\"Could not determine cloud ID from folder\")\n}\n\nconst connection: Output<yandex.Connection> = output({\n serviceAccountKeyFile: secrets.serviceAccountKeyFile,\n cloudId: folder.cloudId,\n defaultFolderId: serviceAccount.folderId,\n defaultZone: args.region.defaultZone,\n regionId: args.region.id,\n})\n\nexport default outputs({\n connection,\n\n $statusFields: {\n cloudId: {\n meta: {\n icon: \"mdi:cloud\",\n },\n value: connection.cloudId,\n },\n defaultFolderId: {\n meta: {\n icon: \"mdi:folder\",\n },\n value: connection.defaultFolderId,\n },\n },\n})\n"]}
@@ -0,0 +1,30 @@
1
+ import { createProvider } from '../chunk-YZYCDHZ3.js';
2
+ import { yandex } from '@highstate/library';
3
+ import { forUnit, getResourceComment } from '@highstate/pulumi';
4
+ import { ComputeDisk } from '@highstate/yandex-sdk';
5
+
6
+ var { name, args, inputs, outputs } = forUnit(yandex.disk);
7
+ var provider = await createProvider(inputs.connection);
8
+ var disk = new ComputeDisk(
9
+ args.diskName ?? name,
10
+ {
11
+ name: args.diskName ?? name,
12
+ description: getResourceComment(),
13
+ type: args.type,
14
+ size: args.size,
15
+ allowRecreate: false
16
+ },
17
+ { provider, protect: true }
18
+ );
19
+ var disk_default = outputs({
20
+ disk: {
21
+ id: disk.id
22
+ },
23
+ $statusFields: {
24
+ id: disk.id
25
+ }
26
+ });
27
+
28
+ export { disk_default as default };
29
+ //# sourceMappingURL=index.js.map
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,20 @@
1
+ import { createProvider } from '../chunk-YZYCDHZ3.js';
2
+ import { yandex } from '@highstate/library';
3
+ import { forUnit } from '@highstate/pulumi';
4
+ import { getComputeImage } from '@highstate/yandex-sdk';
5
+
6
+ var { args, inputs, outputs } = forUnit(yandex.existingImage);
7
+ var provider = await createProvider(inputs.connection);
8
+ var image = await getComputeImage({ imageId: args.id }, { provider });
9
+ var existing_image_default = outputs({
10
+ image: {
11
+ id: image.id
12
+ },
13
+ $statusFields: {
14
+ name: image.name
15
+ }
16
+ });
17
+
18
+ export { existing_image_default as default };
19
+ //# sourceMappingURL=index.js.map
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/existing-image/index.ts"],"names":[],"mappings":";;;;;AAKA,IAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAQ,GAAI,OAAA,CAAQ,OAAO,aAAa,CAAA;AAE9D,IAAM,QAAA,GAAW,MAAM,cAAA,CAAe,MAAA,CAAO,UAAU,CAAA;AAEvD,IAAM,KAAA,GAAQ,MAAM,eAAA,CAAgB,EAAE,OAAA,EAAS,KAAK,EAAA,EAAG,EAAG,EAAE,QAAA,EAAU,CAAA;AAEtE,IAAO,yBAAQ,OAAA,CAAQ;AAAA,EACrB,KAAA,EAAO;AAAA,IACL,IAAI,KAAA,CAAM;AAAA,GACZ;AAAA,EACA,aAAA,EAAe;AAAA,IACb,MAAM,KAAA,CAAM;AAAA;AAEhB,CAAC","file":"index.js","sourcesContent":["import { yandex } from \"@highstate/library\"\nimport { forUnit } from \"@highstate/pulumi\"\nimport { getComputeImage } from \"@highstate/yandex-sdk\"\nimport { createProvider } from \"../provider\"\n\nconst { args, inputs, outputs } = forUnit(yandex.existingImage)\n\nconst provider = await createProvider(inputs.connection)\n\nconst image = await getComputeImage({ imageId: args.id }, { provider })\n\nexport default outputs({\n image: {\n id: image.id,\n },\n $statusFields: {\n name: image.name,\n },\n})\n"]}
@@ -1,6 +1,8 @@
1
1
  {
2
2
  "sourceHashes": {
3
- "./dist/connection/index.js": 3747103172,
4
- "./dist/virtual-machine/index.js": 3181809809
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
5
7
  }
6
8
  }
@@ -1,48 +1,27 @@
1
+ import { createProvider } from '../chunk-YZYCDHZ3.js';
1
2
  import { sshPrivateKeyToKeyPair, generateSshPrivateKey, generatePassword, parseL3Endpoint, createServerBundle, l3EndpointToString } from '@highstate/common';
3
+ import { trimIndentation } from '@highstate/contract';
2
4
  import { yandex } from '@highstate/library';
3
- import { forUnit, toPromise, interpolate, getResourceComment, output } from '@highstate/pulumi';
4
- import { getComputeImage, getVpcSubnet, ComputeDisk, ComputeInstance, Provider } from '@highstate/yandex-sdk';
5
+ import { forUnit, toPromise, interpolate, getResourceComment } from '@highstate/pulumi';
6
+ import { getVpcSubnet, ComputeDisk, ComputeInstance } from '@highstate/yandex-sdk';
5
7
 
6
- // src/virtual-machine/index.ts
7
- async function createProvider(cloud) {
8
- return await toPromise(
9
- output(cloud).apply((cloudConfig) => {
10
- return new Provider("yandex", {
11
- token: cloudConfig.token,
12
- serviceAccountKeyFile: cloudConfig.serviceAccountKeyFile,
13
- cloudId: cloudConfig.cloudId,
14
- folderId: cloudConfig.defaultFolderId,
15
- zone: cloudConfig.defaultZone,
16
- regionId: cloudConfig.regionId
17
- });
18
- })
19
- );
20
- }
21
-
22
- // src/virtual-machine/index.ts
23
8
  var { name, args, getSecret, inputs, outputs } = forUnit(yandex.virtualMachine);
24
- var provider = await createProvider(inputs.yandexCloud);
9
+ var provider = await createProvider(inputs.connection);
25
10
  var sshKeyPair = inputs.sshKeyPair ?? sshPrivateKeyToKeyPair(getSecret("sshPrivateKey", generateSshPrivateKey));
26
11
  var rootPassword = getSecret("rootPassword", generatePassword);
27
- var image = await getComputeImage(
28
- {
29
- family: args.disk.imageFamily
30
- },
31
- { provider }
32
- );
33
12
  var subnetId = args.network.subnetId;
34
13
  if (!subnetId) {
35
- const defaultSubnetName = await toPromise(interpolate`default-${inputs.yandexCloud.defaultZone}`);
14
+ const defaultSubnetName = await toPromise(interpolate`default-${inputs.connection.defaultZone}`);
36
15
  const subnet = await getVpcSubnet(
37
16
  {
38
- folderId: await toPromise(inputs.yandexCloud.defaultFolderId),
17
+ folderId: await toPromise(inputs.connection.defaultFolderId),
39
18
  name: defaultSubnetName
40
19
  },
41
20
  { provider }
42
21
  );
43
22
  if (!subnet.id) {
44
23
  throw new Error(
45
- `Could not find default subnet '${defaultSubnetName}' in zone ${inputs.yandexCloud.defaultZone}`
24
+ `Could not find default subnet '${defaultSubnetName}' in zone ${inputs.connection.defaultZone}`
46
25
  );
47
26
  }
48
27
  subnetId = subnet.id;
@@ -50,37 +29,32 @@ if (!subnetId) {
50
29
  var disk = new ComputeDisk(
51
30
  name,
52
31
  {
53
- name: `${name}-disk`,
54
- type: args.disk.type,
55
- size: args.disk.size,
56
- imageId: image.id,
32
+ name: args.vmName ?? name,
33
+ type: args.bootDisk.type,
34
+ size: args.bootDisk.size,
35
+ imageId: inputs.image.id,
57
36
  allowRecreate: false,
58
- folderId: inputs.yandexCloud.defaultFolderId,
59
- zone: inputs.yandexCloud.defaultZone
37
+ folderId: inputs.connection.defaultFolderId,
38
+ zone: inputs.connection.defaultZone
60
39
  },
61
40
  { provider, ignoreChanges: ["imageId"] }
62
41
  );
63
- var userData = interpolate`#cloud-config
64
- users:
65
- - name: root
66
- ssh-authorized-keys:
67
- - ${sshKeyPair.publicKey}
68
- sudo: ALL=(ALL) NOPASSWD:ALL
69
- ${Object.keys(args.metadata).length > 0 ? `
70
- write_files:
71
- ${Object.entries(args.metadata).map(
72
- ([key, value]) => ` - path: /tmp/${key}
73
- content: |
74
- ${value}`
75
- ).join("\n")}` : ""}
76
- `;
42
+ var userData = interpolate`
43
+ #cloud-config
44
+ hostname: ${args.vmName ?? name}
45
+ users:
46
+ - name: root
47
+ ssh-authorized-keys:
48
+ - ${sshKeyPair.publicKey}
49
+ sudo: ALL=(ALL) NOPASSWD:ALL
50
+ `.apply(trimIndentation);
77
51
  var instance = new ComputeInstance(
78
52
  name,
79
53
  {
80
- name,
54
+ name: args.vmName ?? name,
81
55
  description: getResourceComment(),
82
- folderId: inputs.yandexCloud.defaultFolderId,
83
- zone: inputs.yandexCloud.defaultZone,
56
+ folderId: inputs.connection.defaultFolderId,
57
+ zone: inputs.connection.defaultZone,
84
58
  platformId: args.platformId,
85
59
  resources: {
86
60
  cores: args.resources.cores,
@@ -117,13 +91,13 @@ var { server, terminal } = await createServerBundle({
117
91
  endpoints: [endpoint],
118
92
  sshArgs: args.ssh,
119
93
  sshPassword: rootPassword,
120
- sshPrivateKey: sshKeyPair.privateKey,
121
94
  sshKeyPair
122
95
  });
123
96
  var virtual_machine_default = outputs({
124
97
  server,
125
98
  endpoints: [endpoint],
126
99
  $statusFields: {
100
+ id: instance.id,
127
101
  endpoints: [l3EndpointToString(endpoint)],
128
102
  hostname: server.hostname
129
103
  },
@@ -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 allowRecreate: false,\n folderId: inputs.yandexCloud.defaultFolderId,\n zone: inputs.yandexCloud.defaultZone,\n },\n { provider, ignoreChanges: [\"imageId\"] },\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"]}
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"]}
package/package.json CHANGED
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "name": "@highstate/yandex",
3
- "version": "0.11.7",
3
+ "version": "0.12.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
7
7
  ],
8
8
  "exports": {
9
9
  "./connection": "./dist/connection/index.js",
10
+ "./disk": "./dist/disk/index.js",
11
+ "./existing-image": "./dist/existing-image/index.js",
10
12
  "./virtual-machine": "./dist/virtual-machine/index.js"
11
13
  },
12
14
  "publishConfig": {
@@ -14,6 +16,7 @@
14
16
  },
15
17
  "dependencies": {
16
18
  "@highstate/common": "^0.10.0",
19
+ "@highstate/contract": "^0.10.0",
17
20
  "@highstate/library": "^0.10.0",
18
21
  "@highstate/pulumi": "^0.10.0",
19
22
  "@highstate/yandex-sdk": "^0.10.0",