@highstate/proxmox 0.9.15 → 0.9.18
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-VN4CTUVY.js +28 -0
- package/dist/chunk-VN4CTUVY.js.map +1 -0
- package/dist/connection/index.js +31 -9
- package/dist/connection/index.js.map +1 -1
- package/dist/existing-image/index.js +7 -10
- package/dist/existing-image/index.js.map +1 -1
- package/dist/highstate.manifest.json +4 -4
- package/dist/image/index.js +32 -16
- package/dist/image/index.js.map +1 -1
- package/dist/virtual-machine/index.js +29 -20
- package/dist/virtual-machine/index.js.map +1 -1
- package/package.json +7 -7
- package/dist/chunk-GX5AZIC4.js +0 -26
- package/dist/chunk-GX5AZIC4.js.map +0 -1
@@ -0,0 +1,28 @@
|
|
1
|
+
import { toPromise, output } from '@highstate/pulumi';
|
2
|
+
import { Provider } from '@muhlba91/pulumi-proxmoxve';
|
3
|
+
import '@highstate/library';
|
4
|
+
import { l7EndpointToString } from '@highstate/common';
|
5
|
+
|
6
|
+
// src/provider.ts
|
7
|
+
function createProvider(cluster) {
|
8
|
+
return toPromise(
|
9
|
+
output(cluster).apply((cluster2) => {
|
10
|
+
return new Provider("proxmox", {
|
11
|
+
endpoint: l7EndpointToString(cluster2.endpoint),
|
12
|
+
insecure: cluster2.insecure,
|
13
|
+
username: cluster2.username,
|
14
|
+
password: cluster2.password,
|
15
|
+
apiToken: cluster2.apiToken,
|
16
|
+
ssh: cluster2.ssh ? {
|
17
|
+
privateKey: cluster2.ssh.keyPair?.privateKey,
|
18
|
+
username: cluster2.ssh.user,
|
19
|
+
password: cluster2.ssh.password
|
20
|
+
} : void 0
|
21
|
+
});
|
22
|
+
})
|
23
|
+
);
|
24
|
+
}
|
25
|
+
|
26
|
+
export { createProvider };
|
27
|
+
//# sourceMappingURL=chunk-VN4CTUVY.js.map
|
28
|
+
//# sourceMappingURL=chunk-VN4CTUVY.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/provider.ts"],"names":["cluster"],"mappings":";;;;;;AAKO,SAAS,eACd,OAAA,EACmB;AACnB,EAAA,OAAO,SAAA;AAAA,IACL,MAAA,CAAO,OAAO,CAAA,CAAE,KAAA,CAAM,CAAAA,QAAAA,KAAW;AAC/B,MAAA,OAAO,IAAI,SAAS,SAAA,EAAW;AAAA,QAC7B,QAAA,EAAU,kBAAA,CAAmBA,QAAAA,CAAQ,QAAQ,CAAA;AAAA,QAC7C,UAAUA,QAAAA,CAAQ,QAAA;AAAA,QAElB,UAAUA,QAAAA,CAAQ,QAAA;AAAA,QAClB,UAAUA,QAAAA,CAAQ,QAAA;AAAA,QAElB,UAAUA,QAAAA,CAAQ,QAAA;AAAA,QAElB,GAAA,EAAKA,SAAQ,GAAA,GACT;AAAA,UACE,UAAA,EAAYA,QAAAA,CAAQ,GAAA,CAAI,OAAA,EAAS,UAAA;AAAA,UACjC,QAAA,EAAUA,SAAQ,GAAA,CAAI,IAAA;AAAA,UACtB,QAAA,EAAUA,SAAQ,GAAA,CAAI;AAAA,SACxB,GACA;AAAA,OACL,CAAA;AAAA,IACH,CAAC;AAAA,GACH;AACF","file":"chunk-VN4CTUVY.js","sourcesContent":["import { output, toPromise, type EntityInput } from \"@highstate/pulumi\"\nimport { Provider } from \"@muhlba91/pulumi-proxmoxve\"\nimport { proxmox } from \"@highstate/library\"\nimport { l7EndpointToString } from \"@highstate/common\"\n\nexport function createProvider(\n cluster: EntityInput<typeof proxmox.clusterEntity>,\n): Promise<Provider> {\n return toPromise(\n output(cluster).apply(cluster => {\n return new Provider(\"proxmox\", {\n endpoint: l7EndpointToString(cluster.endpoint),\n insecure: cluster.insecure,\n\n username: cluster.username,\n password: cluster.password,\n\n apiToken: cluster.apiToken,\n\n ssh: cluster.ssh\n ? {\n privateKey: cluster.ssh.keyPair?.privateKey,\n username: cluster.ssh.user,\n password: cluster.ssh.password,\n }\n : undefined,\n })\n }),\n )\n}\n"]}
|
package/dist/connection/index.js
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
+
import { proxmox } from '@highstate/library';
|
2
|
+
import { forUnit, toPromise, output } from '@highstate/pulumi';
|
3
|
+
import { Provider, cluster, storage } from '@muhlba91/pulumi-proxmoxve';
|
4
|
+
import { parseL7Endpoint, createServerEntity } from '@highstate/common';
|
5
|
+
|
1
6
|
// src/connection/index.ts
|
2
|
-
import { proxmox } from "@highstate/library";
|
3
|
-
import { forUnit, output, toPromise } from "@highstate/pulumi";
|
4
|
-
import { cluster, storage, Provider } from "@muhlba91/pulumi-proxmoxve";
|
5
7
|
var { args, secrets, inputs, outputs } = forUnit(proxmox.connection);
|
6
8
|
var provider = await toPromise(
|
7
9
|
output({ args, secrets }).apply(({ args: args2, secrets: secrets2 }) => {
|
@@ -30,28 +32,48 @@ var datastoreId = args.defaultDatastoreId ?? datastores.datastoreIds[0];
|
|
30
32
|
if (!datastores.datastoreIds.includes(datastoreId)) {
|
31
33
|
throw new Error(`Datastore '${datastoreId}' not found in the node '${nodeName}'`);
|
32
34
|
}
|
35
|
+
var endpoint = parseL7Endpoint(args.endpoint);
|
36
|
+
var sshCredentials;
|
37
|
+
if (inputs.sshKeyPair || secrets.sshPassword) {
|
38
|
+
const server = createServerEntity(
|
39
|
+
"",
|
40
|
+
endpoint,
|
41
|
+
args.sshPort,
|
42
|
+
args.sshUser,
|
43
|
+
secrets.sshPassword,
|
44
|
+
inputs.sshKeyPair?.privateKey,
|
45
|
+
true
|
46
|
+
);
|
47
|
+
sshCredentials = server.ssh;
|
48
|
+
}
|
33
49
|
var proxmoxCluster = output({
|
34
|
-
endpoint
|
50
|
+
endpoint,
|
35
51
|
insecure: args.insecure,
|
36
52
|
username: args.username,
|
37
53
|
defaultNodeName: nodeName,
|
38
54
|
defaultDatastoreId: datastoreId,
|
39
55
|
password: secrets.password,
|
40
56
|
apiToken: secrets.apiToken,
|
41
|
-
|
57
|
+
ssh: sshCredentials
|
42
58
|
});
|
43
59
|
var connection_default = outputs({
|
44
60
|
proxmoxCluster,
|
45
|
-
$
|
61
|
+
$statusFields: {
|
46
62
|
defaultNodeName: {
|
63
|
+
meta: {
|
64
|
+
icon: "mdi:server"
|
65
|
+
},
|
47
66
|
value: proxmoxCluster.defaultNodeName
|
48
67
|
},
|
49
68
|
defaultDatastoreId: {
|
69
|
+
meta: {
|
70
|
+
icon: "mdi:database"
|
71
|
+
},
|
50
72
|
value: proxmoxCluster.defaultDatastoreId
|
51
73
|
}
|
52
74
|
}
|
53
75
|
});
|
54
|
-
|
55
|
-
|
56
|
-
|
76
|
+
|
77
|
+
export { connection_default as default };
|
78
|
+
//# sourceMappingURL=index.js.map
|
57
79
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/connection/index.ts"],"sourcesContent":["import type { EntityValue, Output } from \"@highstate/pulumi\"\nimport { proxmox } from \"@highstate/library\"\nimport { forUnit, output, toPromise } from \"@highstate/pulumi\"\nimport { cluster, storage, Provider } from \"@muhlba91/pulumi-proxmoxve\"\n\nconst { args, secrets, inputs, outputs } = forUnit(proxmox.connection)\n\nconst provider = await toPromise(\n output({ args, secrets }).apply(({ args, secrets }) => {\n return new Provider(\"proxmox\", {\n endpoint: args.endpoint,\n insecure: args.insecure,\n\n username: args.username,\n password: secrets.password,\n\n apiToken: secrets.apiToken,\n })\n }),\n)\n\nconst nodes = await cluster.getNodes({ provider })\nif (nodes.names.length === 0) {\n throw new Error(\"No nodes found\")\n}\n\nconst nodeName = args.defaultNodeName ?? nodes.names[0]\nif (!nodes.names.includes(nodeName)) {\n throw new Error(`Node '${nodeName}' not found in the cluster`)\n}\n\nconst datastores = await storage.getDatastores({ nodeName }, { provider })\nif (datastores.datastoreIds.length === 0) {\n throw new Error(`No datastores found in the node '${nodeName}'`)\n}\n\nconst datastoreId = args.defaultDatastoreId ?? datastores.datastoreIds[0]\nif (!datastores.datastoreIds.includes(datastoreId)) {\n throw new Error(`Datastore '${datastoreId}' not found in the node '${nodeName}'`)\n}\n\nconst proxmoxCluster: Output<EntityValue<typeof proxmox.clusterEntity>> = output({\n endpoint
|
1
|
+
{"version":3,"sources":["../../src/connection/index.ts"],"names":["args","secrets"],"mappings":"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","file":"index.js","sourcesContent":["import type { EntityValue, Input, Output } from \"@highstate/pulumi\"\nimport { proxmox, ssh } from \"@highstate/library\"\nimport { forUnit, output, toPromise } from \"@highstate/pulumi\"\nimport { cluster, storage, Provider } from \"@muhlba91/pulumi-proxmoxve\"\nimport { createServerEntity, parseL7Endpoint } from \"@highstate/common\"\n\nconst { args, secrets, inputs, outputs } = forUnit(proxmox.connection)\n\nconst provider = await toPromise(\n output({ args, secrets }).apply(({ args, secrets }) => {\n return new Provider(\"proxmox\", {\n endpoint: args.endpoint,\n insecure: args.insecure,\n\n username: args.username,\n password: secrets.password,\n\n apiToken: secrets.apiToken,\n })\n }),\n)\n\nconst nodes = await cluster.getNodes({ provider })\nif (nodes.names.length === 0) {\n throw new Error(\"No nodes found\")\n}\n\nconst nodeName = args.defaultNodeName ?? nodes.names[0]\nif (!nodes.names.includes(nodeName)) {\n throw new Error(`Node '${nodeName}' not found in the cluster`)\n}\n\nconst datastores = await storage.getDatastores({ nodeName }, { provider })\nif (datastores.datastoreIds.length === 0) {\n throw new Error(`No datastores found in the node '${nodeName}'`)\n}\n\nconst datastoreId = args.defaultDatastoreId ?? datastores.datastoreIds[0]\nif (!datastores.datastoreIds.includes(datastoreId)) {\n throw new Error(`Datastore '${datastoreId}' not found in the node '${nodeName}'`)\n}\n\nconst endpoint = parseL7Endpoint(args.endpoint)\n\nlet sshCredentials: Input<ssh.Credentials | undefined> | undefined\nif (inputs.sshKeyPair || secrets.sshPassword) {\n const server = createServerEntity(\n \"\",\n endpoint,\n args.sshPort,\n args.sshUser,\n secrets.sshPassword,\n inputs.sshKeyPair?.privateKey,\n true,\n )\n\n sshCredentials = server.ssh\n}\n\nconst proxmoxCluster: Output<EntityValue<typeof proxmox.clusterEntity>> = output({\n endpoint,\n insecure: args.insecure,\n username: args.username,\n defaultNodeName: nodeName,\n defaultDatastoreId: datastoreId,\n password: secrets.password,\n apiToken: secrets.apiToken,\n ssh: sshCredentials,\n})\n\nexport default outputs({\n proxmoxCluster,\n\n $statusFields: {\n defaultNodeName: {\n meta: {\n icon: \"mdi:server\",\n },\n value: proxmoxCluster.defaultNodeName,\n },\n defaultDatastoreId: {\n meta: {\n icon: \"mdi:database\",\n },\n value: proxmoxCluster.defaultDatastoreId,\n },\n },\n})\n"]}
|
@@ -1,11 +1,8 @@
|
|
1
|
-
import {
|
2
|
-
|
3
|
-
} from
|
1
|
+
import { createProvider } from '../chunk-VN4CTUVY.js';
|
2
|
+
import { proxmox } from '@highstate/library';
|
3
|
+
import { forUnit } from '@highstate/pulumi';
|
4
|
+
import { storage } from '@muhlba91/pulumi-proxmoxve';
|
4
5
|
|
5
|
-
// src/existing-image/index.ts
|
6
|
-
import { proxmox } from "@highstate/library";
|
7
|
-
import { forUnit } from "@highstate/pulumi";
|
8
|
-
import { storage } from "@muhlba91/pulumi-proxmoxve";
|
9
6
|
var { name, args, inputs, outputs } = forUnit(proxmox.existingImage);
|
10
7
|
var provider = await createProvider(inputs.proxmoxCluster);
|
11
8
|
var image = storage.File.get(
|
@@ -22,7 +19,7 @@ var existing_image_default = outputs({
|
|
22
19
|
id: image.id
|
23
20
|
}
|
24
21
|
});
|
25
|
-
|
26
|
-
|
27
|
-
|
22
|
+
|
23
|
+
export { existing_image_default as default };
|
24
|
+
//# sourceMappingURL=index.js.map
|
28
25
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/existing-image/index.ts"],"sourcesContent":["import { proxmox } from \"@highstate/library\"\nimport { forUnit } from \"@highstate/pulumi\"\nimport { storage } from \"@muhlba91/pulumi-proxmoxve\"\nimport { createProvider } from \"../provider\"\n\nconst { name, args, inputs, outputs } = forUnit(proxmox.existingImage)\n\nconst provider = await createProvider(inputs.proxmoxCluster)\n\nconst image = storage.File.get(\n name,\n args.id,\n {\n datastoreId: inputs.proxmoxCluster.defaultDatastoreId,\n nodeName: inputs.proxmoxCluster.defaultNodeName,\n },\n { provider },\n)\n\nexport default outputs({\n image: {\n id: image.id,\n },\n})\n"]
|
1
|
+
{"version":3,"sources":["../../src/existing-image/index.ts"],"names":[],"mappings":";;;;;AAKA,IAAM,EAAE,MAAM,IAAA,EAAM,MAAA,EAAQ,SAAQ,GAAI,OAAA,CAAQ,QAAQ,aAAa,CAAA;AAErE,IAAM,QAAA,GAAW,MAAM,cAAA,CAAe,MAAA,CAAO,cAAc,CAAA;AAE3D,IAAM,KAAA,GAAQ,QAAQ,IAAA,CAAK,GAAA;AAAA,EACzB,IAAA;AAAA,EACA,IAAA,CAAK,EAAA;AAAA,EACL;AAAA,IACE,WAAA,EAAa,OAAO,cAAA,CAAe,kBAAA;AAAA,IACnC,QAAA,EAAU,OAAO,cAAA,CAAe;AAAA,GAClC;AAAA,EACA,EAAE,QAAA;AACJ,CAAA;AAEA,IAAO,yBAAQ,OAAA,CAAQ;AAAA,EACrB,KAAA,EAAO;AAAA,IACL,IAAI,KAAA,CAAM;AAAA;AAEd,CAAC","file":"index.js","sourcesContent":["import { proxmox } from \"@highstate/library\"\nimport { forUnit } from \"@highstate/pulumi\"\nimport { storage } from \"@muhlba91/pulumi-proxmoxve\"\nimport { createProvider } from \"../provider\"\n\nconst { name, args, inputs, outputs } = forUnit(proxmox.existingImage)\n\nconst provider = await createProvider(inputs.proxmoxCluster)\n\nconst image = storage.File.get(\n name,\n args.id,\n {\n datastoreId: inputs.proxmoxCluster.defaultDatastoreId,\n nodeName: inputs.proxmoxCluster.defaultNodeName,\n },\n { provider },\n)\n\nexport default outputs({\n image: {\n id: image.id,\n },\n})\n"]}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
{
|
2
2
|
"sourceHashes": {
|
3
|
-
"./dist/connection/index.js":
|
4
|
-
"./dist/virtual-machine/index.js":
|
5
|
-
"./dist/existing-image/index.js":
|
6
|
-
"./dist/image/index.js":
|
3
|
+
"./dist/connection/index.js": 789317085,
|
4
|
+
"./dist/virtual-machine/index.js": 3326669560,
|
5
|
+
"./dist/existing-image/index.js": 1885431589,
|
6
|
+
"./dist/image/index.js": 259700982
|
7
7
|
}
|
8
8
|
}
|
package/dist/image/index.js
CHANGED
@@ -1,28 +1,44 @@
|
|
1
|
-
import {
|
2
|
-
|
3
|
-
} from
|
1
|
+
import { createProvider } from '../chunk-VN4CTUVY.js';
|
2
|
+
import { proxmox } from '@highstate/library';
|
3
|
+
import { forUnit, toPromise, output } from '@highstate/pulumi';
|
4
|
+
import { download } from '@muhlba91/pulumi-proxmoxve';
|
5
|
+
import { l7EndpointToString } from '@highstate/common';
|
4
6
|
|
5
|
-
// src/image/index.ts
|
6
|
-
import { proxmox } from "@highstate/library";
|
7
|
-
import { forUnit, output } from "@highstate/pulumi";
|
8
|
-
import { download } from "@muhlba91/pulumi-proxmoxve";
|
9
7
|
var { name, args, inputs, outputs } = forUnit(proxmox.image);
|
10
8
|
var provider = await createProvider(inputs.proxmoxCluster);
|
9
|
+
var url = args.url;
|
10
|
+
var checksum = args.checksum;
|
11
|
+
if (!url) {
|
12
|
+
const file2 = await toPromise(inputs.file);
|
13
|
+
if (!file2) {
|
14
|
+
throw new Error("No file provided and no URL specified.");
|
15
|
+
}
|
16
|
+
if (file2.content.type !== "remote") {
|
17
|
+
throw new Error(`For now only "remote" files are supported, got "${file2.content.type}".`);
|
18
|
+
}
|
19
|
+
url = l7EndpointToString(file2.content.endpoint);
|
20
|
+
checksum = file2.content.checksum;
|
21
|
+
}
|
11
22
|
var file = new download.File(
|
12
23
|
name,
|
13
24
|
{
|
14
25
|
contentType: "iso",
|
15
|
-
checksumAlgorithm:
|
16
|
-
checksum:
|
26
|
+
checksumAlgorithm: checksum?.algorithm,
|
27
|
+
checksum: checksum?.value,
|
17
28
|
datastoreId: args.datastoreId ?? inputs.proxmoxCluster.defaultDatastoreId,
|
18
|
-
url
|
29
|
+
url,
|
19
30
|
nodeName: args.nodeName ?? inputs.proxmoxCluster.defaultNodeName,
|
20
|
-
fileName: output(
|
31
|
+
fileName: output(url).apply(getNameByUrl).apply(([name2, extension]) => {
|
32
|
+
if (checksum) {
|
33
|
+
return `${name2}-${checksum.value}.${extension}`;
|
34
|
+
}
|
35
|
+
return `${name2}.${extension}`;
|
36
|
+
})
|
21
37
|
},
|
22
38
|
{ provider }
|
23
39
|
);
|
24
|
-
function getNameByUrl(
|
25
|
-
const fullName =
|
40
|
+
function getNameByUrl(url2) {
|
41
|
+
const fullName = url2.split("/").pop().split("?")[0];
|
26
42
|
const parts = fullName.split(".");
|
27
43
|
const name2 = parts.slice(0, parts.length - 1).join(".");
|
28
44
|
const extension = parts[parts.length - 1];
|
@@ -33,7 +49,7 @@ var image_default = outputs({
|
|
33
49
|
id: file.id
|
34
50
|
}
|
35
51
|
});
|
36
|
-
|
37
|
-
|
38
|
-
|
52
|
+
|
53
|
+
export { image_default as default };
|
54
|
+
//# sourceMappingURL=index.js.map
|
39
55
|
//# sourceMappingURL=index.js.map
|
package/dist/image/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/image/index.ts"],"sourcesContent":["import { proxmox } from \"@highstate/library\"\nimport { forUnit, output } from \"@highstate/pulumi\"\nimport { download } from \"@muhlba91/pulumi-proxmoxve\"\nimport { createProvider } from \"../provider\"\n\nconst { name, args, inputs, outputs } = forUnit(proxmox.image)\n\nconst provider = await createProvider(inputs.proxmoxCluster)\n\nconst file = new download.File(\n name,\n {\n contentType: \"iso\",\n checksumAlgorithm:
|
1
|
+
{"version":3,"sources":["../../src/image/index.ts"],"names":["file","name","url"],"mappings":";;;;;;AAMA,IAAM,EAAE,MAAM,IAAA,EAAM,MAAA,EAAQ,SAAQ,GAAI,OAAA,CAAQ,QAAQ,KAAK,CAAA;AAE7D,IAAM,QAAA,GAAW,MAAM,cAAA,CAAe,MAAA,CAAO,cAAc,CAAA;AAE3D,IAAI,MAA0B,IAAA,CAAK,GAAA;AACnC,IAAI,WAAwC,IAAA,CAAK,QAAA;AAEjD,IAAI,CAAC,GAAA,EAAK;AACR,EAAA,MAAMA,KAAAA,GAAO,MAAM,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA;AACxC,EAAA,IAAI,CAACA,KAAAA,EAAM;AACT,IAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,EAC1D;AAEA,EAAA,IAAIA,KAAAA,CAAK,OAAA,CAAQ,IAAA,KAAS,QAAA,EAAU;AAClC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gDAAA,EAAmDA,KAAAA,CAAK,OAAA,CAAQ,IAAI,CAAA,EAAA,CAAI,CAAA;AAAA,EAC1F;AAEA,EAAA,GAAA,GAAM,kBAAA,CAAmBA,KAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAC9C,EAAA,QAAA,GAAWA,MAAK,OAAA,CAAQ,QAAA;AAC1B;AAEA,IAAM,IAAA,GAAO,IAAI,QAAA,CAAS,IAAA;AAAA,EACxB,IAAA;AAAA,EACA;AAAA,IACE,WAAA,EAAa,KAAA;AAAA,IACb,mBAAmB,QAAA,EAAU,SAAA;AAAA,IAC7B,UAAU,QAAA,EAAU,KAAA;AAAA,IAEpB,WAAA,EAAa,IAAA,CAAK,WAAA,IAAe,MAAA,CAAO,cAAA,CAAe,kBAAA;AAAA,IAEvD,GAAA;AAAA,IACA,QAAA,EAAU,IAAA,CAAK,QAAA,IAAY,MAAA,CAAO,cAAA,CAAe,eAAA;AAAA,IAEjD,QAAA,EAAU,MAAA,CAAO,GAAG,CAAA,CACjB,KAAA,CAAM,YAAY,CAAA,CAClB,KAAA,CAAM,CAAC,CAACC,KAAAA,EAAM,SAAS,CAAA,KAAM;AAC5B,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,OAAO,GAAGA,KAAI,CAAA,CAAA,EAAI,QAAA,CAAS,KAAK,IAAI,SAAS,CAAA,CAAA;AAAA,MAC/C;AAEA,MAAA,OAAO,CAAA,EAAGA,KAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA,IAC7B,CAAC;AAAA,GACL;AAAA,EACA,EAAE,QAAA;AACJ,CAAA;AAEA,SAAS,aAAaC,IAAAA,EAAgD;AACpE,EAAA,MAAM,QAAA,GAAWA,IAAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,KAAI,CAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA;AACnD,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA;AAEhC,EAAA,MAAMD,KAAAA,GAAO,MAAM,KAAA,CAAM,CAAA,EAAG,MAAM,MAAA,GAAS,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AACtD,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAExC,EAAA,OAAO,CAACA,OAAM,SAAS,CAAA;AACzB;AAEA,IAAO,gBAAQ,OAAA,CAAQ;AAAA,EACrB,KAAA,EAAO;AAAA,IACL,IAAI,IAAA,CAAK;AAAA;AAEb,CAAC","file":"index.js","sourcesContent":["import { common, proxmox } from \"@highstate/library\"\nimport { forUnit, output, toPromise } from \"@highstate/pulumi\"\nimport { download } from \"@muhlba91/pulumi-proxmoxve\"\nimport { l7EndpointToString } from \"@highstate/common\"\nimport { createProvider } from \"../provider\"\n\nconst { name, args, inputs, outputs } = forUnit(proxmox.image)\n\nconst provider = await createProvider(inputs.proxmoxCluster)\n\nlet url: string | undefined = args.url\nlet checksum: common.Checksum | undefined = args.checksum\n\nif (!url) {\n const file = await toPromise(inputs.file)\n if (!file) {\n throw new Error(\"No file provided and no URL specified.\")\n }\n\n if (file.content.type !== \"remote\") {\n throw new Error(`For now only \"remote\" files are supported, got \"${file.content.type}\".`)\n }\n\n url = l7EndpointToString(file.content.endpoint)\n checksum = file.content.checksum\n}\n\nconst file = new download.File(\n name,\n {\n contentType: \"iso\",\n checksumAlgorithm: checksum?.algorithm,\n checksum: checksum?.value,\n\n datastoreId: args.datastoreId ?? inputs.proxmoxCluster.defaultDatastoreId,\n\n url,\n nodeName: args.nodeName ?? inputs.proxmoxCluster.defaultNodeName,\n\n fileName: output(url)\n .apply(getNameByUrl)\n .apply(([name, extension]) => {\n if (checksum) {\n return `${name}-${checksum.value}.${extension}`\n }\n\n return `${name}.${extension}`\n }),\n },\n { provider },\n)\n\nfunction getNameByUrl(url: string): [name: string, extension: string] {\n const fullName = url.split(\"/\").pop()!.split(\"?\")[0]\n const parts = fullName.split(\".\")\n\n const name = parts.slice(0, parts.length - 1).join(\".\")\n const extension = parts[parts.length - 1]\n\n return [name, extension]\n}\n\nexport default outputs({\n image: {\n id: file.id,\n },\n})\n"]}
|
@@ -1,22 +1,15 @@
|
|
1
|
-
import {
|
2
|
-
|
3
|
-
} from
|
1
|
+
import { createProvider } from '../chunk-VN4CTUVY.js';
|
2
|
+
import { proxmox } from '@highstate/library';
|
3
|
+
import { forUnit, toPromise, output } from '@highstate/pulumi';
|
4
|
+
import { vm, storage } from '@muhlba91/pulumi-proxmoxve';
|
5
|
+
import { parseL3Endpoint, createServerEntity, createSshTerminal, l3EndpointToString } from '@highstate/common';
|
4
6
|
|
5
|
-
// src/virtual-machine/index.ts
|
6
|
-
import { proxmox } from "@highstate/library";
|
7
|
-
import { forUnit, output, toPromise } from "@highstate/pulumi";
|
8
|
-
import { vm, storage } from "@muhlba91/pulumi-proxmoxve";
|
9
|
-
import {
|
10
|
-
createServerEntity,
|
11
|
-
createSshTerminal,
|
12
|
-
l3EndpointToString,
|
13
|
-
parseL3Endpoint
|
14
|
-
} from "@highstate/common";
|
15
7
|
var { name, args, inputs, secrets, outputs } = forUnit(proxmox.virtualMachine);
|
16
8
|
var provider = await createProvider(inputs.proxmoxCluster);
|
17
9
|
var nodeName = args.nodeName ?? inputs.proxmoxCluster.defaultNodeName;
|
18
10
|
var datastoreId = args.datastoreId ?? inputs.proxmoxCluster.defaultDatastoreId;
|
19
11
|
var sshKeyPair = await toPromise(inputs.sshKeyPair);
|
12
|
+
var inputVendorData = await toPromise(inputs.vendorData);
|
20
13
|
var machine = new vm.VirtualMachine(
|
21
14
|
name,
|
22
15
|
{
|
@@ -65,14 +58,24 @@ function deriveIpV4Gateway(ip) {
|
|
65
58
|
}
|
66
59
|
function createCloudInit(resolvedInputs) {
|
67
60
|
let vendorDataFileId;
|
68
|
-
if (args.vendorData) {
|
61
|
+
if (args.vendorData || inputVendorData) {
|
62
|
+
let vendorData = args.vendorData;
|
63
|
+
if (!vendorData) {
|
64
|
+
if (inputVendorData.content.type !== "embedded") {
|
65
|
+
throw new Error("For now, only the embedded vendor data is supported.");
|
66
|
+
}
|
67
|
+
vendorData = inputVendorData.content.value;
|
68
|
+
}
|
69
69
|
const file = new storage.File(
|
70
70
|
"vendor-data",
|
71
71
|
{
|
72
72
|
datastoreId,
|
73
73
|
nodeName,
|
74
74
|
contentType: "snippets",
|
75
|
-
sourceRaw: {
|
75
|
+
sourceRaw: {
|
76
|
+
fileName: `${name}-vendor-data.yaml`,
|
77
|
+
data: vendorData
|
78
|
+
}
|
76
79
|
},
|
77
80
|
{ provider }
|
78
81
|
);
|
@@ -88,7 +91,13 @@ function createCloudInit(resolvedInputs) {
|
|
88
91
|
gateway: args.ipv4Gateway ?? deriveIpV4Gateway(args.ipv4)
|
89
92
|
}
|
90
93
|
}
|
91
|
-
] :
|
94
|
+
] : [
|
95
|
+
{
|
96
|
+
ipv4: {
|
97
|
+
address: "dhcp"
|
98
|
+
}
|
99
|
+
}
|
100
|
+
],
|
92
101
|
dns: args.dns ? { servers: args.dns } : void 0,
|
93
102
|
userAccount: resolvedInputs.sshKeyPair ? output({
|
94
103
|
keys: [resolvedInputs.sshKeyPair.publicKey],
|
@@ -113,13 +122,13 @@ var server = createServerEntity(
|
|
113
122
|
var virtual_machine_default = outputs({
|
114
123
|
server,
|
115
124
|
endpoints: [endpoint],
|
116
|
-
$
|
125
|
+
$statusFields: {
|
117
126
|
endpoints: [l3EndpointToString(endpoint)],
|
118
127
|
hostname: name
|
119
128
|
},
|
120
129
|
$terminals: [createSshTerminal(server.ssh)]
|
121
130
|
});
|
122
|
-
|
123
|
-
|
124
|
-
|
131
|
+
|
132
|
+
export { virtual_machine_default as default };
|
133
|
+
//# sourceMappingURL=index.js.map
|
125
134
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/virtual-machine/index.ts"],"sourcesContent":["import type { VM } from \"@muhlba91/pulumi-proxmoxve/types/input\"\nimport { proxmox } from \"@highstate/library\"\nimport { forUnit, output, toPromise, type Input, type Unwrap } from \"@highstate/pulumi\"\nimport { vm, storage } from \"@muhlba91/pulumi-proxmoxve\"\nimport {\n createServerEntity,\n createSshTerminal,\n l3EndpointToString,\n parseL3Endpoint,\n} from \"@highstate/common\"\nimport { createProvider } from \"../provider\"\n\nconst { name, args, inputs, secrets, outputs } = forUnit(proxmox.virtualMachine)\n\nconst provider = await createProvider(inputs.proxmoxCluster)\n\nconst nodeName = args.nodeName ?? inputs.proxmoxCluster.defaultNodeName\nconst datastoreId = args.datastoreId ?? inputs.proxmoxCluster.defaultDatastoreId\nconst sshKeyPair = await toPromise(inputs.sshKeyPair)\n\nconst machine = new vm.VirtualMachine(\n name,\n {\n name,\n nodeName,\n agent: {\n enabled: true,\n },\n cpu: {\n cores: args.cores,\n sockets: args.sockets,\n type: args.cpuType,\n },\n memory: {\n dedicated: args.memory,\n },\n disks: [\n {\n interface: \"virtio0\",\n size: args.diskSize,\n iothread: true,\n discard: \"on\",\n datastoreId,\n fileId: inputs.image.id,\n },\n ],\n networkDevices: [\n {\n bridge: args.bridge,\n },\n ],\n initialization: output(inputs).apply(createCloudInit),\n },\n { provider, ignoreChanges: [\"disks\", \"cdrom\"] },\n)\n\nfunction findNotLocalHostIpV4(ips: string[][]): string {\n for (const ip of ips) {\n if (ip[0] && ip[0] !== \"127.0.0.1\") {\n return ip[0]\n }\n }\n\n throw new Error(\"No non-local host IP found\")\n}\n\nfunction deriveIpV4Gateway(ip: string): string {\n return ip.split(\".\").slice(0, 3).join(\".\") + \".1\"\n}\n\nfunction createCloudInit(resolvedInputs: Unwrap<typeof inputs>): VM.VirtualMachineInitialization {\n let vendorDataFileId: Input<string> | undefined\n\n if (args.vendorData) {\n const file = new storage.File(\n \"vendor-data\",\n {\n datastoreId,\n nodeName,\n contentType: \"snippets\",\n sourceRaw: {
|
1
|
+
{"version":3,"sources":["../../src/virtual-machine/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { VM } from \"@muhlba91/pulumi-proxmoxve/types/input\"\nimport { proxmox } from \"@highstate/library\"\nimport { forUnit, output, toPromise, type Input, type Unwrap } from \"@highstate/pulumi\"\nimport { vm, storage } from \"@muhlba91/pulumi-proxmoxve\"\nimport {\n createServerEntity,\n createSshTerminal,\n l3EndpointToString,\n parseL3Endpoint,\n} from \"@highstate/common\"\nimport { createProvider } from \"../provider\"\n\nconst { name, args, inputs, secrets, outputs } = forUnit(proxmox.virtualMachine)\n\nconst provider = await createProvider(inputs.proxmoxCluster)\n\nconst nodeName = args.nodeName ?? inputs.proxmoxCluster.defaultNodeName\nconst datastoreId = args.datastoreId ?? inputs.proxmoxCluster.defaultDatastoreId\nconst sshKeyPair = await toPromise(inputs.sshKeyPair)\nconst inputVendorData = await toPromise(inputs.vendorData)\n\nconst machine = new vm.VirtualMachine(\n name,\n {\n name,\n nodeName,\n agent: {\n enabled: true,\n },\n cpu: {\n cores: args.cores,\n sockets: args.sockets,\n type: args.cpuType,\n },\n memory: {\n dedicated: args.memory,\n },\n disks: [\n {\n interface: \"virtio0\",\n size: args.diskSize,\n iothread: true,\n discard: \"on\",\n datastoreId,\n fileId: inputs.image.id,\n },\n ],\n networkDevices: [\n {\n bridge: args.bridge,\n },\n ],\n initialization: output(inputs).apply(createCloudInit),\n },\n { provider, ignoreChanges: [\"disks\", \"cdrom\"] },\n)\n\nfunction findNotLocalHostIpV4(ips: string[][]): string {\n for (const ip of ips) {\n if (ip[0] && ip[0] !== \"127.0.0.1\") {\n return ip[0]\n }\n }\n\n throw new Error(\"No non-local host IP found\")\n}\n\nfunction deriveIpV4Gateway(ip: string): string {\n return ip.split(\".\").slice(0, 3).join(\".\") + \".1\"\n}\n\nfunction createCloudInit(resolvedInputs: Unwrap<typeof inputs>): VM.VirtualMachineInitialization {\n let vendorDataFileId: Input<string> | undefined\n\n if (args.vendorData || inputVendorData) {\n let vendorData: string | undefined = args.vendorData\n\n if (!vendorData) {\n if (inputVendorData!.content.type !== \"embedded\") {\n throw new Error(\"For now, only the embedded vendor data is supported.\")\n }\n\n vendorData = inputVendorData!.content.value\n }\n\n const file = new storage.File(\n \"vendor-data\",\n {\n datastoreId,\n nodeName,\n contentType: \"snippets\",\n sourceRaw: {\n fileName: `${name}-vendor-data.yaml`,\n data: vendorData,\n },\n },\n { provider },\n )\n\n vendorDataFileId = file.id\n }\n\n return {\n datastoreId,\n interface: \"ide2\",\n\n ipConfigs: args.ipv4\n ? [\n {\n ipv4: {\n address: args.ipv4,\n gateway: args.ipv4Gateway ?? deriveIpV4Gateway(args.ipv4),\n },\n },\n ]\n : [\n {\n ipv4: {\n address: \"dhcp\",\n },\n },\n ],\n\n dns: args.dns ? { servers: args.dns } : undefined,\n\n userAccount: resolvedInputs.sshKeyPair\n ? output({\n keys: [resolvedInputs.sshKeyPair.publicKey],\n username: args.sshUser ?? \"root\",\n password: secrets.sshPassword,\n })\n : undefined,\n\n vendorDataFileId,\n }\n}\n\nconst ipv4Addresses = await toPromise(machine.ipv4Addresses)\nconst nonLocalHostIpV4 = findNotLocalHostIpV4(ipv4Addresses)\n\nconst endpoint = parseL3Endpoint(nonLocalHostIpV4)\n\nconst server = createServerEntity(\n name,\n endpoint,\n args.sshPort,\n args.sshUser,\n secrets.sshPassword,\n inputs.sshKeyPair?.privateKey,\n !!sshKeyPair,\n)\n\nexport default outputs({\n server,\n endpoints: [endpoint],\n\n $statusFields: {\n endpoints: [l3EndpointToString(endpoint)],\n hostname: name,\n },\n\n $terminals: [createSshTerminal(server.ssh)],\n})\n"]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@highstate/proxmox",
|
3
|
-
"version": "0.9.
|
3
|
+
"version": "0.9.18",
|
4
4
|
"type": "module",
|
5
5
|
"files": [
|
6
6
|
"dist"
|
@@ -18,14 +18,14 @@
|
|
18
18
|
"build": "highstate build"
|
19
19
|
},
|
20
20
|
"dependencies": {
|
21
|
-
"@highstate/common": "^0.9.
|
22
|
-
"@highstate/contract": "^0.9.
|
23
|
-
"@highstate/library": "^0.9.
|
24
|
-
"@highstate/pulumi": "^0.9.
|
21
|
+
"@highstate/common": "^0.9.18",
|
22
|
+
"@highstate/contract": "^0.9.18",
|
23
|
+
"@highstate/library": "^0.9.18",
|
24
|
+
"@highstate/pulumi": "^0.9.18",
|
25
25
|
"@muhlba91/pulumi-proxmoxve": "^6.17.1"
|
26
26
|
},
|
27
27
|
"devDependencies": {
|
28
|
-
"@highstate/cli": "^0.9.
|
28
|
+
"@highstate/cli": "^0.9.18"
|
29
29
|
},
|
30
|
-
"gitHead": "
|
30
|
+
"gitHead": "9ebcd7da56b00b8ca08bf52cc8438f527338cd64"
|
31
31
|
}
|
package/dist/chunk-GX5AZIC4.js
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
// src/provider.ts
|
2
|
-
import { output, toPromise } from "@highstate/pulumi";
|
3
|
-
import { Provider } from "@muhlba91/pulumi-proxmoxve";
|
4
|
-
import "@highstate/library";
|
5
|
-
function createProvider(cluster) {
|
6
|
-
return toPromise(
|
7
|
-
output(cluster).apply((cluster2) => {
|
8
|
-
return new Provider("proxmox", {
|
9
|
-
endpoint: cluster2.endpoint,
|
10
|
-
insecure: cluster2.insecure,
|
11
|
-
username: cluster2.username,
|
12
|
-
password: cluster2.password,
|
13
|
-
apiToken: cluster2.apiToken,
|
14
|
-
ssh: cluster2.sshKeyPair ? {
|
15
|
-
privateKey: cluster2.sshKeyPair.privateKey,
|
16
|
-
username: cluster2.username
|
17
|
-
} : void 0
|
18
|
-
});
|
19
|
-
})
|
20
|
-
);
|
21
|
-
}
|
22
|
-
|
23
|
-
export {
|
24
|
-
createProvider
|
25
|
-
};
|
26
|
-
//# sourceMappingURL=chunk-GX5AZIC4.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../src/provider.ts"],"sourcesContent":["import { output, toPromise, type EntityInput } from \"@highstate/pulumi\"\nimport { Provider } from \"@muhlba91/pulumi-proxmoxve\"\nimport { proxmox } from \"@highstate/library\"\n\nexport function createProvider(\n cluster: EntityInput<typeof proxmox.clusterEntity>,\n): Promise<Provider> {\n return toPromise(\n output(cluster).apply(cluster => {\n return new Provider(\"proxmox\", {\n endpoint: cluster.endpoint,\n insecure: cluster.insecure,\n\n username: cluster.username,\n password: cluster.password,\n\n apiToken: cluster.apiToken,\n\n ssh: cluster.sshKeyPair\n ? {\n privateKey: cluster.sshKeyPair.privateKey,\n username: cluster.username,\n }\n : undefined,\n })\n }),\n )\n}\n"],"mappings":";AAAA,SAAS,QAAQ,iBAAmC;AACpD,SAAS,gBAAgB;AACzB,OAAwB;AAEjB,SAAS,eACd,SACmB;AACnB,SAAO;AAAA,IACL,OAAO,OAAO,EAAE,MAAM,CAAAA,aAAW;AAC/B,aAAO,IAAI,SAAS,WAAW;AAAA,QAC7B,UAAUA,SAAQ;AAAA,QAClB,UAAUA,SAAQ;AAAA,QAElB,UAAUA,SAAQ;AAAA,QAClB,UAAUA,SAAQ;AAAA,QAElB,UAAUA,SAAQ;AAAA,QAElB,KAAKA,SAAQ,aACT;AAAA,UACE,YAAYA,SAAQ,WAAW;AAAA,UAC/B,UAAUA,SAAQ;AAAA,QACpB,IACA;AAAA,MACN,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;","names":["cluster"]}
|