@highstate/proxmox 0.9.14 → 0.9.16

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,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,OACmB,EAAA;AACnB,EAAO,OAAA,SAAA;AAAA,IACL,MAAO,CAAA,OAAO,CAAE,CAAA,KAAA,CAAM,CAAAA,QAAW,KAAA;AAC/B,MAAO,OAAA,IAAI,SAAS,SAAW,EAAA;AAAA,QAC7B,QAAA,EAAU,kBAAmBA,CAAAA,QAAAA,CAAQ,QAAQ,CAAA;AAAA,QAC7C,UAAUA,QAAQ,CAAA,QAAA;AAAA,QAElB,UAAUA,QAAQ,CAAA,QAAA;AAAA,QAClB,UAAUA,QAAQ,CAAA,QAAA;AAAA,QAElB,UAAUA,QAAQ,CAAA,QAAA;AAAA,QAElB,GAAA,EAAKA,SAAQ,GACT,GAAA;AAAA,UACE,UAAA,EAAYA,QAAQ,CAAA,GAAA,CAAI,OAAS,EAAA,UAAA;AAAA,UACjC,QAAA,EAAUA,SAAQ,GAAI,CAAA,IAAA;AAAA,UACtB,QAAA,EAAUA,SAAQ,GAAI,CAAA;AAAA,SAExB,GAAA;AAAA,OACL,CAAA;AAAA,KACF;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"]}
@@ -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: args.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
- sshKeyPair: inputs.sshKeyPair
57
+ ssh: sshCredentials
42
58
  });
43
59
  var connection_default = outputs({
44
60
  proxmoxCluster,
45
- $status: {
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
- export {
55
- connection_default as default
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: args.endpoint,\n insecure: args.insecure,\n username: args.username,\n defaultNodeName: nodeName,\n defaultDatastoreId: datastoreId,\n password: secrets.password,\n apiToken: secrets.apiToken,\n sshKeyPair: inputs.sshKeyPair,\n})\n\nexport default outputs({\n proxmoxCluster,\n $status: {\n defaultNodeName: {\n value: proxmoxCluster.defaultNodeName,\n },\n defaultDatastoreId: {\n value: proxmoxCluster.defaultDatastoreId,\n },\n },\n})\n"],"mappings":";AACA,SAAS,eAAe;AACxB,SAAS,SAAS,QAAQ,iBAAiB;AAC3C,SAAS,SAAS,SAAS,gBAAgB;AAE3C,IAAM,EAAE,MAAM,SAAS,QAAQ,QAAQ,IAAI,QAAQ,QAAQ,UAAU;AAErE,IAAM,WAAW,MAAM;AAAA,EACrB,OAAO,EAAE,MAAM,QAAQ,CAAC,EAAE,MAAM,CAAC,EAAE,MAAAA,OAAM,SAAAC,SAAQ,MAAM;AACrD,WAAO,IAAI,SAAS,WAAW;AAAA,MAC7B,UAAUD,MAAK;AAAA,MACf,UAAUA,MAAK;AAAA,MAEf,UAAUA,MAAK;AAAA,MACf,UAAUC,SAAQ;AAAA,MAElB,UAAUA,SAAQ;AAAA,IACpB,CAAC;AAAA,EACH,CAAC;AACH;AAEA,IAAM,QAAQ,MAAM,QAAQ,SAAS,EAAE,SAAS,CAAC;AACjD,IAAI,MAAM,MAAM,WAAW,GAAG;AAC5B,QAAM,IAAI,MAAM,gBAAgB;AAClC;AAEA,IAAM,WAAW,KAAK,mBAAmB,MAAM,MAAM,CAAC;AACtD,IAAI,CAAC,MAAM,MAAM,SAAS,QAAQ,GAAG;AACnC,QAAM,IAAI,MAAM,SAAS,QAAQ,4BAA4B;AAC/D;AAEA,IAAM,aAAa,MAAM,QAAQ,cAAc,EAAE,SAAS,GAAG,EAAE,SAAS,CAAC;AACzE,IAAI,WAAW,aAAa,WAAW,GAAG;AACxC,QAAM,IAAI,MAAM,oCAAoC,QAAQ,GAAG;AACjE;AAEA,IAAM,cAAc,KAAK,sBAAsB,WAAW,aAAa,CAAC;AACxE,IAAI,CAAC,WAAW,aAAa,SAAS,WAAW,GAAG;AAClD,QAAM,IAAI,MAAM,cAAc,WAAW,4BAA4B,QAAQ,GAAG;AAClF;AAEA,IAAM,iBAAoE,OAAO;AAAA,EAC/E,UAAU,KAAK;AAAA,EACf,UAAU,KAAK;AAAA,EACf,UAAU,KAAK;AAAA,EACf,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,UAAU,QAAQ;AAAA,EAClB,UAAU,QAAQ;AAAA,EAClB,YAAY,OAAO;AACrB,CAAC;AAED,IAAO,qBAAQ,QAAQ;AAAA,EACrB;AAAA,EACA,SAAS;AAAA,IACP,iBAAiB;AAAA,MACf,OAAO,eAAe;AAAA,IACxB;AAAA,IACA,oBAAoB;AAAA,MAClB,OAAO,eAAe;AAAA,IACxB;AAAA,EACF;AACF,CAAC;","names":["args","secrets"]}
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
- createProvider
3
- } from "../chunk-GX5AZIC4.js";
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
- export {
26
- existing_image_default as default
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"],"mappings":";;;;;AAAA,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,eAAe;AAGxB,IAAM,EAAE,MAAM,MAAM,QAAQ,QAAQ,IAAI,QAAQ,QAAQ,aAAa;AAErE,IAAM,WAAW,MAAM,eAAe,OAAO,cAAc;AAE3D,IAAM,QAAQ,QAAQ,KAAK;AAAA,EACzB;AAAA,EACA,KAAK;AAAA,EACL;AAAA,IACE,aAAa,OAAO,eAAe;AAAA,IACnC,UAAU,OAAO,eAAe;AAAA,EAClC;AAAA,EACA,EAAE,SAAS;AACb;AAEA,IAAO,yBAAQ,QAAQ;AAAA,EACrB,OAAO;AAAA,IACL,IAAI,MAAM;AAAA,EACZ;AACF,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../src/existing-image/index.ts"],"names":[],"mappings":";;;;;AAKA,IAAM,EAAE,MAAM,IAAM,EAAA,MAAA,EAAQ,SAAY,GAAA,OAAA,CAAQ,QAAQ,aAAa,CAAA;AAErE,IAAM,QAAW,GAAA,MAAM,cAAe,CAAA,MAAA,CAAO,cAAc,CAAA;AAE3D,IAAM,KAAA,GAAQ,QAAQ,IAAK,CAAA,GAAA;AAAA,EACzB,IAAA;AAAA,EACA,IAAK,CAAA,EAAA;AAAA,EACL;AAAA,IACE,WAAA,EAAa,OAAO,cAAe,CAAA,kBAAA;AAAA,IACnC,QAAA,EAAU,OAAO,cAAe,CAAA;AAAA,GAClC;AAAA,EACA,EAAE,QAAS;AACb,CAAA;AAEA,IAAO,yBAAQ,OAAQ,CAAA;AAAA,EACrB,KAAO,EAAA;AAAA,IACL,IAAI,KAAM,CAAA;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": "b6497ddc1e62d9d45e41fdf9777244abc2adae5e044731bc070d688a6f39cc8b",
4
- "./dist/virtual-machine/index.js": "74947d8a9143db61a823276b4144397bbedf2a6f73aee75247dbddf2112aca5f",
5
- "./dist/existing-image/index.js": "c10c825e510edfb315cfa9823167da79bc68934aec6e2b24c339746f7adf43ac",
6
- "./dist/image/index.js": "bb7dab6bcb671543a88bddbdd2a98dcdd8e74d02d19b96aabb13176a264a093d"
3
+ "./dist/connection/index.js": 1541633582,
4
+ "./dist/virtual-machine/index.js": 2426907695,
5
+ "./dist/existing-image/index.js": 982344139,
6
+ "./dist/image/index.js": 1502996001
7
7
  }
8
8
  }
@@ -1,28 +1,44 @@
1
- import {
2
- createProvider
3
- } from "../chunk-GX5AZIC4.js";
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: "sha256",
16
- checksum: args.sha256,
26
+ checksumAlgorithm: checksum?.algorithm,
27
+ checksum: checksum?.value,
17
28
  datastoreId: args.datastoreId ?? inputs.proxmoxCluster.defaultDatastoreId,
18
- url: args.url,
29
+ url,
19
30
  nodeName: args.nodeName ?? inputs.proxmoxCluster.defaultNodeName,
20
- fileName: output(args.url).apply(getNameByUrl).apply(([name2, extension]) => `${name2}-${args.sha256}.${extension}`)
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(url) {
25
- const fullName = url.split("/").pop().split("?")[0];
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
- export {
37
- image_default as default
38
- };
52
+
53
+ export { image_default as default };
54
+ //# sourceMappingURL=index.js.map
39
55
  //# sourceMappingURL=index.js.map
@@ -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: \"sha256\",\n checksum: args.sha256,\n\n datastoreId: args.datastoreId ?? inputs.proxmoxCluster.defaultDatastoreId,\n\n url: args.url,\n nodeName: args.nodeName ?? inputs.proxmoxCluster.defaultNodeName,\n\n fileName: output(args.url)\n .apply(getNameByUrl)\n .apply(([name, extension]) => `${name}-${args.sha256}.${extension}`),\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"],"mappings":";;;;;AAAA,SAAS,eAAe;AACxB,SAAS,SAAS,cAAc;AAChC,SAAS,gBAAgB;AAGzB,IAAM,EAAE,MAAM,MAAM,QAAQ,QAAQ,IAAI,QAAQ,QAAQ,KAAK;AAE7D,IAAM,WAAW,MAAM,eAAe,OAAO,cAAc;AAE3D,IAAM,OAAO,IAAI,SAAS;AAAA,EACxB;AAAA,EACA;AAAA,IACE,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,UAAU,KAAK;AAAA,IAEf,aAAa,KAAK,eAAe,OAAO,eAAe;AAAA,IAEvD,KAAK,KAAK;AAAA,IACV,UAAU,KAAK,YAAY,OAAO,eAAe;AAAA,IAEjD,UAAU,OAAO,KAAK,GAAG,EACtB,MAAM,YAAY,EAClB,MAAM,CAAC,CAACA,OAAM,SAAS,MAAM,GAAGA,KAAI,IAAI,KAAK,MAAM,IAAI,SAAS,EAAE;AAAA,EACvE;AAAA,EACA,EAAE,SAAS;AACb;AAEA,SAAS,aAAa,KAAgD;AACpE,QAAM,WAAW,IAAI,MAAM,GAAG,EAAE,IAAI,EAAG,MAAM,GAAG,EAAE,CAAC;AACnD,QAAM,QAAQ,SAAS,MAAM,GAAG;AAEhC,QAAMA,QAAO,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,EAAE,KAAK,GAAG;AACtD,QAAM,YAAY,MAAM,MAAM,SAAS,CAAC;AAExC,SAAO,CAACA,OAAM,SAAS;AACzB;AAEA,IAAO,gBAAQ,QAAQ;AAAA,EACrB,OAAO;AAAA,IACL,IAAI,KAAK;AAAA,EACX;AACF,CAAC;","names":["name"]}
1
+ {"version":3,"sources":["../../src/image/index.ts"],"names":["file","name","url"],"mappings":";;;;;;AAMA,IAAM,EAAE,MAAM,IAAM,EAAA,MAAA,EAAQ,SAAY,GAAA,OAAA,CAAQ,QAAQ,KAAK,CAAA;AAE7D,IAAM,QAAW,GAAA,MAAM,cAAe,CAAA,MAAA,CAAO,cAAc,CAAA;AAE3D,IAAI,MAA0B,IAAK,CAAA,GAAA;AACnC,IAAI,WAAwC,IAAK,CAAA,QAAA;AAEjD,IAAI,CAAC,GAAK,EAAA;AACR,EAAA,MAAMA,KAAO,GAAA,MAAM,SAAU,CAAA,MAAA,CAAO,IAAI,CAAA;AACxC,EAAA,IAAI,CAACA,KAAM,EAAA;AACT,IAAM,MAAA,IAAI,MAAM,wCAAwC,CAAA;AAAA;AAG1D,EAAIA,IAAAA,KAAAA,CAAK,OAAQ,CAAA,IAAA,KAAS,QAAU,EAAA;AAClC,IAAA,MAAM,IAAI,KAAM,CAAA,CAAA,gDAAA,EAAmDA,KAAK,CAAA,OAAA,CAAQ,IAAI,CAAI,EAAA,CAAA,CAAA;AAAA;AAG1F,EAAM,GAAA,GAAA,kBAAA,CAAmBA,KAAK,CAAA,OAAA,CAAQ,QAAQ,CAAA;AAC9C,EAAA,QAAA,GAAWA,MAAK,OAAQ,CAAA,QAAA;AAC1B;AAEA,IAAM,IAAA,GAAO,IAAI,QAAS,CAAA,IAAA;AAAA,EACxB,IAAA;AAAA,EACA;AAAA,IACE,WAAa,EAAA,KAAA;AAAA,IACb,mBAAmB,QAAU,EAAA,SAAA;AAAA,IAC7B,UAAU,QAAU,EAAA,KAAA;AAAA,IAEpB,WAAa,EAAA,IAAA,CAAK,WAAe,IAAA,MAAA,CAAO,cAAe,CAAA,kBAAA;AAAA,IAEvD,GAAA;AAAA,IACA,QAAU,EAAA,IAAA,CAAK,QAAY,IAAA,MAAA,CAAO,cAAe,CAAA,eAAA;AAAA,IAEjD,QAAU,EAAA,MAAA,CAAO,GAAG,CAAA,CACjB,KAAM,CAAA,YAAY,CAClB,CAAA,KAAA,CAAM,CAAC,CAACC,KAAM,EAAA,SAAS,CAAM,KAAA;AAC5B,MAAA,IAAI,QAAU,EAAA;AACZ,QAAA,OAAO,GAAGA,KAAI,CAAA,CAAA,EAAI,QAAS,CAAA,KAAK,IAAI,SAAS,CAAA,CAAA;AAAA;AAG/C,MAAO,OAAA,CAAA,EAAGA,KAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA,KAC5B;AAAA,GACL;AAAA,EACA,EAAE,QAAS;AACb,CAAA;AAEA,SAAS,aAAaC,IAAgD,EAAA;AACpE,EAAM,MAAA,QAAA,GAAWA,IAAI,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,KAAO,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA;AACnD,EAAM,MAAA,KAAA,GAAQ,QAAS,CAAA,KAAA,CAAM,GAAG,CAAA;AAEhC,EAAMD,MAAAA,KAAAA,GAAO,MAAM,KAAM,CAAA,CAAA,EAAG,MAAM,MAAS,GAAA,CAAC,CAAE,CAAA,IAAA,CAAK,GAAG,CAAA;AACtD,EAAA,MAAM,SAAY,GAAA,KAAA,CAAM,KAAM,CAAA,MAAA,GAAS,CAAC,CAAA;AAExC,EAAO,OAAA,CAACA,OAAM,SAAS,CAAA;AACzB;AAEA,IAAO,gBAAQ,OAAQ,CAAA;AAAA,EACrB,KAAO,EAAA;AAAA,IACL,IAAI,IAAK,CAAA;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,21 +1,15 @@
1
- import {
2
- createProvider
3
- } from "../chunk-GX5AZIC4.js";
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;
11
+ var sshKeyPair = await toPromise(inputs.sshKeyPair);
12
+ var inputVendorData = await toPromise(inputs.vendorData);
19
13
  var machine = new vm.VirtualMachine(
20
14
  name,
21
15
  {
@@ -32,11 +26,6 @@ var machine = new vm.VirtualMachine(
32
26
  memory: {
33
27
  dedicated: args.memory
34
28
  },
35
- // cdrom: {
36
- // enabled: true,
37
- // interface: "ide1",
38
- // fileId: inputs.image.id,
39
- // },
40
29
  disks: [
41
30
  {
42
31
  interface: "virtio0",
@@ -53,9 +42,8 @@ var machine = new vm.VirtualMachine(
53
42
  }
54
43
  ],
55
44
  initialization: output(inputs).apply(createCloudInit)
56
- // bootOrders: ["scsi0", "ide1"],
57
45
  },
58
- { provider, ignoreChanges: ["disks"] }
46
+ { provider, ignoreChanges: ["disks", "cdrom"] }
59
47
  );
60
48
  function findNotLocalHostIpV4(ips) {
61
49
  for (const ip of ips) {
@@ -70,14 +58,24 @@ function deriveIpV4Gateway(ip) {
70
58
  }
71
59
  function createCloudInit(resolvedInputs) {
72
60
  let vendorDataFileId;
73
- 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
+ }
74
69
  const file = new storage.File(
75
70
  "vendor-data",
76
71
  {
77
72
  datastoreId,
78
73
  nodeName,
79
74
  contentType: "snippets",
80
- sourceRaw: { fileName: `${name}-vendor-data.yaml`, data: args.vendorData }
75
+ sourceRaw: {
76
+ fileName: `${name}-vendor-data.yaml`,
77
+ data: vendorData
78
+ }
81
79
  },
82
80
  { provider }
83
81
  );
@@ -93,7 +91,13 @@ function createCloudInit(resolvedInputs) {
93
91
  gateway: args.ipv4Gateway ?? deriveIpV4Gateway(args.ipv4)
94
92
  }
95
93
  }
96
- ] : void 0,
94
+ ] : [
95
+ {
96
+ ipv4: {
97
+ address: "dhcp"
98
+ }
99
+ }
100
+ ],
97
101
  dns: args.dns ? { servers: args.dns } : void 0,
98
102
  userAccount: resolvedInputs.sshKeyPair ? output({
99
103
  keys: [resolvedInputs.sshKeyPair.publicKey],
@@ -112,18 +116,19 @@ var server = createServerEntity(
112
116
  args.sshPort,
113
117
  args.sshUser,
114
118
  secrets.sshPassword,
115
- inputs.sshKeyPair?.privateKey
119
+ inputs.sshKeyPair?.privateKey,
120
+ !!sshKeyPair
116
121
  );
117
122
  var virtual_machine_default = outputs({
118
123
  server,
119
124
  endpoints: [endpoint],
120
- $status: {
125
+ $statusFields: {
121
126
  endpoints: [l3EndpointToString(endpoint)],
122
127
  hostname: name
123
128
  },
124
129
  $terminals: [createSshTerminal(server.ssh)]
125
130
  });
126
- export {
127
- virtual_machine_default as default
128
- };
131
+
132
+ export { virtual_machine_default as default };
133
+ //# sourceMappingURL=index.js.map
129
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\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 // cdrom: {\n // enabled: true,\n // interface: \"ide1\",\n // fileId: inputs.image.id,\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 // bootOrders: [\"scsi0\", \"ide1\"],\n },\n { provider, ignoreChanges: [\"disks\"] },\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: { fileName: `${name}-vendor-data.yaml`, data: args.vendorData },\n },\n { provider },\n )\n\n vendorDataFileId = file.id\n }\n\n return {\n datastoreId,\n interface: \"ide2\",\n ipConfigs: args.ipv4\n ? [\n {\n ipv4: {\n address: args.ipv4,\n gateway: args.ipv4Gateway ?? deriveIpV4Gateway(args.ipv4),\n },\n },\n ]\n : undefined,\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)\n\nexport default outputs({\n server,\n endpoints: [endpoint],\n\n $status: {\n endpoints: [l3EndpointToString(endpoint)],\n hostname: name,\n },\n\n $terminals: [createSshTerminal(server.ssh)],\n})\n"],"mappings":"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","names":[]}
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.14",
3
+ "version": "0.9.16",
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.14",
22
- "@highstate/contract": "^0.9.14",
23
- "@highstate/library": "^0.9.14",
24
- "@highstate/pulumi": "^0.9.14",
21
+ "@highstate/common": "^0.9.16",
22
+ "@highstate/contract": "^0.9.16",
23
+ "@highstate/library": "^0.9.16",
24
+ "@highstate/pulumi": "^0.9.16",
25
25
  "@muhlba91/pulumi-proxmoxve": "^6.17.1"
26
26
  },
27
27
  "devDependencies": {
28
- "@highstate/cli": "^0.9.14"
28
+ "@highstate/cli": "^0.9.16"
29
29
  },
30
- "gitHead": "8b5d1079961cc5bf9cf8ea3c10f7313384e3a2ff"
30
+ "gitHead": "458d6f1f9f6d4aec0ba75a2b2c4c01408cb9c8df"
31
31
  }
@@ -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"]}