@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.
- package/dist/chunk-YZYCDHZ3.js +21 -0
- package/dist/chunk-YZYCDHZ3.js.map +1 -0
- package/dist/connection/index.js +10 -23
- package/dist/connection/index.js.map +1 -1
- package/dist/disk/index.js +30 -0
- package/dist/disk/index.js.map +1 -0
- package/dist/existing-image/index.js +20 -0
- package/dist/existing-image/index.js.map +1 -0
- package/dist/highstate.manifest.json +4 -2
- package/dist/virtual-machine/index.js +27 -53
- package/dist/virtual-machine/index.js.map +1 -1
- package/package.json +4 -1
|
@@ -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"]}
|
package/dist/connection/index.js
CHANGED
|
@@ -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.
|
|
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
|
|
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.
|
|
27
|
+
defaultZone: args.region.defaultZone,
|
|
28
|
+
regionId: args.region.id
|
|
36
29
|
});
|
|
37
30
|
var connection_default = outputs({
|
|
38
|
-
|
|
31
|
+
connection,
|
|
39
32
|
$statusFields: {
|
|
40
33
|
cloudId: {
|
|
41
34
|
meta: {
|
|
42
35
|
icon: "mdi:cloud"
|
|
43
36
|
},
|
|
44
|
-
value:
|
|
37
|
+
value: connection.cloudId
|
|
45
38
|
},
|
|
46
39
|
defaultFolderId: {
|
|
47
40
|
meta: {
|
|
48
41
|
icon: "mdi:folder"
|
|
49
42
|
},
|
|
50
|
-
value:
|
|
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;
|
|
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":
|
|
4
|
-
"./dist/
|
|
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
|
|
4
|
-
import {
|
|
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.
|
|
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.
|
|
14
|
+
const defaultSubnetName = await toPromise(interpolate`default-${inputs.connection.defaultZone}`);
|
|
36
15
|
const subnet = await getVpcSubnet(
|
|
37
16
|
{
|
|
38
|
-
folderId: await toPromise(inputs.
|
|
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.
|
|
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:
|
|
54
|
-
type: args.
|
|
55
|
-
size: args.
|
|
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.
|
|
59
|
-
zone: inputs.
|
|
37
|
+
folderId: inputs.connection.defaultFolderId,
|
|
38
|
+
zone: inputs.connection.defaultZone
|
|
60
39
|
},
|
|
61
40
|
{ provider, ignoreChanges: ["imageId"] }
|
|
62
41
|
);
|
|
63
|
-
var userData = interpolate
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
${
|
|
70
|
-
|
|
71
|
-
|
|
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.
|
|
83
|
-
zone: inputs.
|
|
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/
|
|
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.
|
|
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",
|