@highstate/proxmox 0.9.18 → 0.9.19

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.
@@ -1,6 +1,5 @@
1
1
  import { toPromise, output } from '@highstate/pulumi';
2
2
  import { Provider } from '@muhlba91/pulumi-proxmoxve';
3
- import '@highstate/library';
4
3
  import { l7EndpointToString } from '@highstate/common';
5
4
 
6
5
  // src/provider.ts
@@ -24,5 +23,5 @@ function createProvider(cluster) {
24
23
  }
25
24
 
26
25
  export { createProvider };
27
- //# sourceMappingURL=chunk-VN4CTUVY.js.map
28
- //# sourceMappingURL=chunk-VN4CTUVY.js.map
26
+ //# sourceMappingURL=chunk-PVR5CGXB.js.map
27
+ //# sourceMappingURL=chunk-PVR5CGXB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/provider.ts"],"names":["cluster"],"mappings":";;;;;AAKO,SAAS,eAAe,OAAA,EAAoD;AACjF,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,QAE7C,UAAUA,QAAAA,CAAQ,QAAA;AAAA,QAClB,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-PVR5CGXB.js","sourcesContent":["import { output, toPromise, type Input } from \"@highstate/pulumi\"\nimport { Provider } from \"@muhlba91/pulumi-proxmoxve\"\nimport type { proxmox } from \"@highstate/library\"\nimport { l7EndpointToString } from \"@highstate/common\"\n\nexport function createProvider(cluster: Input<proxmox.Cluster>): Promise<Provider> {\n return toPromise(\n output(cluster).apply(cluster => {\n return new Provider(\"proxmox\", {\n endpoint: l7EndpointToString(cluster.endpoint),\n\n insecure: cluster.insecure,\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,17 +1,17 @@
1
1
  import { proxmox } from '@highstate/library';
2
2
  import { forUnit, toPromise, output } from '@highstate/pulumi';
3
3
  import { Provider, cluster, storage } from '@muhlba91/pulumi-proxmoxve';
4
- import { parseL7Endpoint, createServerEntity } from '@highstate/common';
4
+ import { parseL7Endpoint, createServerBundle } from '@highstate/common';
5
5
 
6
6
  // src/connection/index.ts
7
- var { args, secrets, inputs, outputs } = forUnit(proxmox.connection);
7
+ var { name, args, secrets, inputs, outputs } = forUnit(proxmox.connection);
8
8
  var provider = await toPromise(
9
9
  output({ args, secrets }).apply(({ args: args2, secrets: secrets2 }) => {
10
10
  return new Provider("proxmox", {
11
11
  endpoint: args2.endpoint,
12
12
  insecure: args2.insecure,
13
13
  username: args2.username,
14
- password: secrets2.password,
14
+ password: secrets2.sshPassword,
15
15
  apiToken: secrets2.apiToken
16
16
  });
17
17
  })
@@ -22,29 +22,32 @@ if (nodes.names.length === 0) {
22
22
  }
23
23
  var nodeName = args.defaultNodeName ?? nodes.names[0];
24
24
  if (!nodes.names.includes(nodeName)) {
25
- throw new Error(`Node '${nodeName}' not found in the cluster`);
25
+ throw new Error(`Node "${nodeName}" not found in the cluster`);
26
26
  }
27
27
  var datastores = await storage.getDatastores({ nodeName }, { provider });
28
28
  if (datastores.datastoreIds.length === 0) {
29
- throw new Error(`No datastores found in the node '${nodeName}'`);
29
+ throw new Error(`No datastores found in the node "${nodeName}"`);
30
30
  }
31
31
  var datastoreId = args.defaultDatastoreId ?? datastores.datastoreIds[0];
32
32
  if (!datastores.datastoreIds.includes(datastoreId)) {
33
- throw new Error(`Datastore '${datastoreId}' not found in the node '${nodeName}'`);
33
+ throw new Error(`Datastore "${datastoreId}" not found in the node "${nodeName}"`);
34
34
  }
35
35
  var endpoint = parseL7Endpoint(args.endpoint);
36
+ var serverEntity;
36
37
  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
- );
38
+ var nodeTerminal;
39
+ if (inputs.sshKeyPair || secrets.sshPassword || secrets.sshPrivateKey) {
40
+ const { server, terminal } = await createServerBundle({
41
+ name,
42
+ endpoints: [endpoint],
43
+ sshArgs: args.ssh,
44
+ sshPassword: secrets.sshPassword,
45
+ sshPrivateKey: secrets.sshPrivateKey,
46
+ sshKeyPair: inputs.sshKeyPair
47
+ });
48
+ serverEntity = server;
47
49
  sshCredentials = server.ssh;
50
+ nodeTerminal = terminal;
48
51
  }
49
52
  var proxmoxCluster = output({
50
53
  endpoint,
@@ -52,12 +55,14 @@ var proxmoxCluster = output({
52
55
  username: args.username,
53
56
  defaultNodeName: nodeName,
54
57
  defaultDatastoreId: datastoreId,
55
- password: secrets.password,
58
+ password: secrets.sshPassword,
56
59
  apiToken: secrets.apiToken,
57
60
  ssh: sshCredentials
58
61
  });
59
62
  var connection_default = outputs({
60
63
  proxmoxCluster,
64
+ server: serverEntity,
65
+ $terminals: [nodeTerminal],
61
66
  $statusFields: {
62
67
  defaultNodeName: {
63
68
  meta: {
@@ -1 +1 @@
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
+ {"version":3,"sources":["../../src/connection/index.ts"],"names":["args","secrets"],"mappings":"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","file":"index.js","sourcesContent":["import type { Output } from \"@highstate/pulumi\"\nimport type { UnitTerminal } from \"@highstate/contract\"\nimport { common, proxmox, type ssh } from \"@highstate/library\"\nimport { forUnit, output, toPromise } from \"@highstate/pulumi\"\nimport { cluster, storage, Provider } from \"@muhlba91/pulumi-proxmoxve\"\nimport { createServerBundle, parseL7Endpoint } from \"@highstate/common\"\n\nconst { name, 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.sshPassword,\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 serverEntity: Output<common.Server> | undefined\nlet sshCredentials: Output<ssh.Connection | undefined> | undefined\nlet nodeTerminal: Output<UnitTerminal> | undefined\n\nif (inputs.sshKeyPair || secrets.sshPassword || secrets.sshPrivateKey) {\n const { server, terminal } = await createServerBundle({\n name,\n endpoints: [endpoint],\n sshArgs: args.ssh,\n sshPassword: secrets.sshPassword,\n sshPrivateKey: secrets.sshPrivateKey,\n sshKeyPair: inputs.sshKeyPair,\n })\n\n serverEntity = server\n sshCredentials = server.ssh\n nodeTerminal = terminal\n}\n\nconst proxmoxCluster: Output<proxmox.Cluster> = output({\n endpoint,\n insecure: args.insecure,\n username: args.username,\n defaultNodeName: nodeName,\n defaultDatastoreId: datastoreId,\n password: secrets.sshPassword,\n apiToken: secrets.apiToken,\n ssh: sshCredentials,\n})\n\nexport default outputs({\n proxmoxCluster,\n server: serverEntity,\n\n $terminals: [nodeTerminal],\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,4 +1,4 @@
1
- import { createProvider } from '../chunk-VN4CTUVY.js';
1
+ import { createProvider } from '../chunk-PVR5CGXB.js';
2
2
  import { proxmox } from '@highstate/library';
3
3
  import { forUnit } from '@highstate/pulumi';
4
4
  import { storage } from '@muhlba91/pulumi-proxmoxve';
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "sourceHashes": {
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
3
+ "./dist/connection/index.js": 3615286183,
4
+ "./dist/virtual-machine/index.js": 3172787816,
5
+ "./dist/existing-image/index.js": 1849217347,
6
+ "./dist/image/index.js": 3024074690
7
7
  }
8
8
  }
@@ -1,4 +1,4 @@
1
- import { createProvider } from '../chunk-VN4CTUVY.js';
1
+ import { createProvider } from '../chunk-PVR5CGXB.js';
2
2
  import { proxmox } from '@highstate/library';
3
3
  import { forUnit, toPromise, output } from '@highstate/pulumi';
4
4
  import { download } from '@muhlba91/pulumi-proxmoxve';
@@ -38,8 +38,11 @@ var file = new download.File(
38
38
  { provider }
39
39
  );
40
40
  function getNameByUrl(url2) {
41
- const fullName = url2.split("/").pop().split("?")[0];
42
- const parts = fullName.split(".");
41
+ const fullName = url2.split("/").pop()?.split("?")[0];
42
+ const parts = fullName?.split(".");
43
+ if (!parts || parts.length < 2) {
44
+ throw new Error(`Cannot extract file name and extension from URL: ${url2}`);
45
+ }
43
46
  const name2 = parts.slice(0, parts.length - 1).join(".");
44
47
  const extension = parts[parts.length - 1];
45
48
  return [name2, extension];
@@ -1 +1 @@
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
+ {"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,EAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA;AACnD,EAAA,MAAM,KAAA,GAAQ,QAAA,EAAU,KAAA,CAAM,GAAG,CAAA;AAEjC,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC9B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iDAAA,EAAoDA,IAAG,CAAA,CAAE,CAAA;AAAA,EAC3E;AAEA,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 { type 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 if (!parts || parts.length < 2) {\n throw new Error(`Cannot extract file name and extension from URL: ${url}`)\n }\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,35 +1,37 @@
1
- import { createProvider } from '../chunk-VN4CTUVY.js';
1
+ import { createProvider } from '../chunk-PVR5CGXB.js';
2
+ import { sshPrivateKeyToKeyPair, generateSshPrivateKey, generatePassword, parseL3Endpoint, createServerBundle, l3EndpointToString } from '@highstate/common';
2
3
  import { proxmox } from '@highstate/library';
3
- import { forUnit, toPromise, output } from '@highstate/pulumi';
4
+ import { forUnit, toPromise, getResourceComment, output } from '@highstate/pulumi';
4
5
  import { vm, storage } from '@muhlba91/pulumi-proxmoxve';
5
- import { parseL3Endpoint, createServerEntity, createSshTerminal, l3EndpointToString } from '@highstate/common';
6
6
 
7
- var { name, args, inputs, secrets, outputs } = forUnit(proxmox.virtualMachine);
7
+ var { name, args, getSecret, inputs, outputs } = forUnit(proxmox.virtualMachine);
8
8
  var provider = await createProvider(inputs.proxmoxCluster);
9
9
  var nodeName = args.nodeName ?? inputs.proxmoxCluster.defaultNodeName;
10
10
  var datastoreId = args.datastoreId ?? inputs.proxmoxCluster.defaultDatastoreId;
11
- var sshKeyPair = await toPromise(inputs.sshKeyPair);
12
11
  var inputVendorData = await toPromise(inputs.vendorData);
12
+ var sshKeyPair = inputs.sshKeyPair ?? sshPrivateKeyToKeyPair(getSecret("sshPrivateKey", generateSshPrivateKey));
13
+ var rootPassword = getSecret("rootPassword", generatePassword);
13
14
  var machine = new vm.VirtualMachine(
14
15
  name,
15
16
  {
16
17
  name,
17
18
  nodeName,
19
+ description: getResourceComment(),
18
20
  agent: {
19
21
  enabled: true
20
22
  },
21
23
  cpu: {
22
- cores: args.cores,
23
- sockets: args.sockets,
24
+ cores: args.resources.cores,
25
+ sockets: args.resources.sockets,
24
26
  type: args.cpuType
25
27
  },
26
28
  memory: {
27
- dedicated: args.memory
29
+ dedicated: args.resources.memory
28
30
  },
29
31
  disks: [
30
32
  {
31
33
  interface: "virtio0",
32
- size: args.diskSize,
34
+ size: args.resources.diskSize,
33
35
  iothread: true,
34
36
  discard: "on",
35
37
  datastoreId,
@@ -38,25 +40,25 @@ var machine = new vm.VirtualMachine(
38
40
  ],
39
41
  networkDevices: [
40
42
  {
41
- bridge: args.bridge
43
+ bridge: args.network.bridge
42
44
  }
43
45
  ],
44
- initialization: output(inputs).apply(createCloudInit)
46
+ initialization: createCloudInit()
45
47
  },
46
48
  { provider, ignoreChanges: ["disks", "cdrom"] }
47
49
  );
48
- function findNotLocalHostIpV4(ips) {
50
+ function findNonLocalHostIpV4(ips) {
49
51
  for (const ip of ips) {
50
- if (ip[0] && ip[0] !== "127.0.0.1") {
52
+ if (ip[0] && ip[0] !== "127.0.0.1" && ip[0] !== "::1") {
51
53
  return ip[0];
52
54
  }
53
55
  }
54
56
  throw new Error("No non-local host IP found");
55
57
  }
56
58
  function deriveIpV4Gateway(ip) {
57
- return ip.split(".").slice(0, 3).join(".") + ".1";
59
+ return `${ip.split(".").slice(0, 3).join(".")}.1`;
58
60
  }
59
- function createCloudInit(resolvedInputs) {
61
+ function createCloudInit() {
60
62
  let vendorDataFileId;
61
63
  if (args.vendorData || inputVendorData) {
62
64
  let vendorData = args.vendorData;
@@ -84,11 +86,11 @@ function createCloudInit(resolvedInputs) {
84
86
  return {
85
87
  datastoreId,
86
88
  interface: "ide2",
87
- ipConfigs: args.ipv4 ? [
89
+ ipConfigs: args.ipv4.type === "static" ? [
88
90
  {
89
91
  ipv4: {
90
- address: args.ipv4,
91
- gateway: args.ipv4Gateway ?? deriveIpV4Gateway(args.ipv4)
92
+ address: `${args.ipv4.address}/${args.ipv4.prefix}`,
93
+ gateway: args.ipv4.gateway ?? deriveIpV4Gateway(args.ipv4.address)
92
94
  }
93
95
  }
94
96
  ] : [
@@ -98,27 +100,26 @@ function createCloudInit(resolvedInputs) {
98
100
  }
99
101
  }
100
102
  ],
101
- dns: args.dns ? { servers: args.dns } : void 0,
102
- userAccount: resolvedInputs.sshKeyPair ? output({
103
- keys: [resolvedInputs.sshKeyPair.publicKey],
104
- username: args.sshUser ?? "root",
105
- password: secrets.sshPassword
106
- }) : void 0,
103
+ dns: args.network.dns.length > 0 ? { servers: args.network.dns } : void 0,
104
+ userAccount: output({
105
+ keys: [sshKeyPair.publicKey],
106
+ username: "root",
107
+ password: rootPassword
108
+ }),
107
109
  vendorDataFileId
108
110
  };
109
111
  }
110
112
  var ipv4Addresses = await toPromise(machine.ipv4Addresses);
111
- var nonLocalHostIpV4 = findNotLocalHostIpV4(ipv4Addresses);
113
+ var nonLocalHostIpV4 = findNonLocalHostIpV4(ipv4Addresses);
112
114
  var endpoint = parseL3Endpoint(nonLocalHostIpV4);
113
- var server = createServerEntity(
115
+ var { server, terminal } = await createServerBundle({
114
116
  name,
115
- endpoint,
116
- args.sshPort,
117
- args.sshUser,
118
- secrets.sshPassword,
119
- inputs.sshKeyPair?.privateKey,
120
- !!sshKeyPair
121
- );
117
+ endpoints: [endpoint],
118
+ sshArgs: args.ssh,
119
+ sshPassword: rootPassword,
120
+ sshPrivateKey: sshKeyPair.privateKey,
121
+ sshKeyPair
122
+ });
122
123
  var virtual_machine_default = outputs({
123
124
  server,
124
125
  endpoints: [endpoint],
@@ -126,7 +127,7 @@ var virtual_machine_default = outputs({
126
127
  endpoints: [l3EndpointToString(endpoint)],
127
128
  hostname: name
128
129
  },
129
- $terminals: [createSshTerminal(server.ssh)]
130
+ $terminals: [terminal]
130
131
  });
131
132
 
132
133
  export { virtual_machine_default as default };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/virtual-machine/index.ts"],"names":[],"mappings":";;;;;;AAYA,IAAM,EAAE,MAAM,IAAA,EAAM,MAAA,EAAQ,SAAS,OAAA,EAAQ,GAAI,OAAA,CAAQ,OAAA,CAAQ,cAAc,CAAA;AAE/E,IAAM,QAAA,GAAW,MAAM,cAAA,CAAe,MAAA,CAAO,cAAc,CAAA;AAE3D,IAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,MAAA,CAAO,cAAA,CAAe,eAAA;AACxD,IAAM,WAAA,GAAc,IAAA,CAAK,WAAA,IAAe,MAAA,CAAO,cAAA,CAAe,kBAAA;AAC9D,IAAM,UAAA,GAAa,MAAM,SAAA,CAAU,MAAA,CAAO,UAAU,CAAA;AACpD,IAAM,eAAA,GAAkB,MAAM,SAAA,CAAU,MAAA,CAAO,UAAU,CAAA;AAEzD,IAAM,OAAA,GAAU,IAAI,EAAA,CAAG,cAAA;AAAA,EACrB,IAAA;AAAA,EACA;AAAA,IACE,IAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA,EAAO;AAAA,MACL,OAAA,EAAS;AAAA,KACX;AAAA,IACA,GAAA,EAAK;AAAA,MACH,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,MAAM,IAAA,CAAK;AAAA,KACb;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,WAAW,IAAA,CAAK;AAAA,KAClB;AAAA,IACA,KAAA,EAAO;AAAA,MACL;AAAA,QACE,SAAA,EAAW,SAAA;AAAA,QACX,MAAM,IAAA,CAAK,QAAA;AAAA,QACX,QAAA,EAAU,IAAA;AAAA,QACV,OAAA,EAAS,IAAA;AAAA,QACT,WAAA;AAAA,QACA,MAAA,EAAQ,OAAO,KAAA,CAAM;AAAA;AACvB,KACF;AAAA,IACA,cAAA,EAAgB;AAAA,MACd;AAAA,QACE,QAAQ,IAAA,CAAK;AAAA;AACf,KACF;AAAA,IACA,cAAA,EAAgB,MAAA,CAAO,MAAM,CAAA,CAAE,MAAM,eAAe;AAAA,GACtD;AAAA,EACA,EAAE,QAAA,EAAU,aAAA,EAAe,CAAC,OAAA,EAAS,OAAO,CAAA;AAC9C,CAAA;AAEA,SAAS,qBAAqB,GAAA,EAAyB;AACrD,EAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,IAAA,IAAI,GAAG,CAAC,CAAA,IAAK,EAAA,CAAG,CAAC,MAAM,WAAA,EAAa;AAClC,MAAA,OAAO,GAAG,CAAC,CAAA;AAAA,IACb;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAC9C;AAEA,SAAS,kBAAkB,EAAA,EAAoB;AAC7C,EAAA,OAAO,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,CAAE,KAAA,CAAM,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,GAAI,IAAA;AAC/C;AAEA,SAAS,gBAAgB,cAAA,EAAwE;AAC/F,EAAA,IAAI,gBAAA;AAEJ,EAAA,IAAI,IAAA,CAAK,cAAc,eAAA,EAAiB;AACtC,IAAA,IAAI,aAAiC,IAAA,CAAK,UAAA;AAE1C,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,IAAI,eAAA,CAAiB,OAAA,CAAQ,IAAA,KAAS,UAAA,EAAY;AAChD,QAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA,MACxE;AAEA,MAAA,UAAA,GAAa,gBAAiB,OAAA,CAAQ,KAAA;AAAA,IACxC;AAEA,IAAA,MAAM,IAAA,GAAO,IAAI,OAAA,CAAQ,IAAA;AAAA,MACvB,aAAA;AAAA,MACA;AAAA,QACE,WAAA;AAAA,QACA,QAAA;AAAA,QACA,WAAA,EAAa,UAAA;AAAA,QACb,SAAA,EAAW;AAAA,UACT,QAAA,EAAU,GAAG,IAAI,CAAA,iBAAA,CAAA;AAAA,UACjB,IAAA,EAAM;AAAA;AACR,OACF;AAAA,MACA,EAAE,QAAA;AAAS,KACb;AAEA,IAAA,gBAAA,GAAmB,IAAA,CAAK,EAAA;AAAA,EAC1B;AAEA,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,SAAA,EAAW,MAAA;AAAA,IAEX,SAAA,EAAW,KAAK,IAAA,GACZ;AAAA,MACE;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,SAAS,IAAA,CAAK,IAAA;AAAA,UACd,OAAA,EAAS,IAAA,CAAK,WAAA,IAAe,iBAAA,CAAkB,KAAK,IAAI;AAAA;AAC1D;AACF,KACF,GACA;AAAA,MACE;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,OAAA,EAAS;AAAA;AACX;AACF,KACF;AAAA,IAEJ,KAAK,IAAA,CAAK,GAAA,GAAM,EAAE,OAAA,EAAS,IAAA,CAAK,KAAI,GAAI,MAAA;AAAA,IAExC,WAAA,EAAa,cAAA,CAAe,UAAA,GACxB,MAAA,CAAO;AAAA,MACL,IAAA,EAAM,CAAC,cAAA,CAAe,UAAA,CAAW,SAAS,CAAA;AAAA,MAC1C,QAAA,EAAU,KAAK,OAAA,IAAW,MAAA;AAAA,MAC1B,UAAU,OAAA,CAAQ;AAAA,KACnB,CAAA,GACD,MAAA;AAAA,IAEJ;AAAA,GACF;AACF;AAEA,IAAM,aAAA,GAAgB,MAAM,SAAA,CAAU,OAAA,CAAQ,aAAa,CAAA;AAC3D,IAAM,gBAAA,GAAmB,qBAAqB,aAAa,CAAA;AAE3D,IAAM,QAAA,GAAW,gBAAgB,gBAAgB,CAAA;AAEjD,IAAM,MAAA,GAAS,kBAAA;AAAA,EACb,IAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA,CAAK,OAAA;AAAA,EACL,IAAA,CAAK,OAAA;AAAA,EACL,OAAA,CAAQ,WAAA;AAAA,EACR,OAAO,UAAA,EAAY,UAAA;AAAA,EACnB,CAAC,CAAC;AACJ,CAAA;AAEA,IAAO,0BAAQ,OAAA,CAAQ;AAAA,EACrB,MAAA;AAAA,EACA,SAAA,EAAW,CAAC,QAAQ,CAAA;AAAA,EAEpB,aAAA,EAAe;AAAA,IACb,SAAA,EAAW,CAAC,kBAAA,CAAmB,QAAQ,CAAC,CAAA;AAAA,IACxC,QAAA,EAAU;AAAA,GACZ;AAAA,EAEA,UAAA,EAAY,CAAC,iBAAA,CAAkB,MAAA,CAAO,GAAG,CAAC;AAC5C,CAAC","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"]}
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 {\n createServerBundle,\n generatePassword,\n generateSshPrivateKey,\n l3EndpointToString,\n parseL3Endpoint,\n sshPrivateKeyToKeyPair,\n} from \"@highstate/common\"\nimport { proxmox } from \"@highstate/library\"\nimport { forUnit, getResourceComment, type Input, output, toPromise } from \"@highstate/pulumi\"\nimport { storage, vm } from \"@muhlba91/pulumi-proxmoxve\"\nimport { createProvider } from \"../provider\"\n\nconst { name, args, getSecret, inputs, 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 inputVendorData = await toPromise(inputs.vendorData)\n\nconst sshKeyPair =\n inputs.sshKeyPair ?? sshPrivateKeyToKeyPair(getSecret(\"sshPrivateKey\", generateSshPrivateKey))\n\nconst rootPassword = getSecret(\"rootPassword\", generatePassword)\n\nconst machine = new vm.VirtualMachine(\n name,\n {\n name,\n nodeName,\n description: getResourceComment(),\n agent: {\n enabled: true,\n },\n cpu: {\n cores: args.resources.cores,\n sockets: args.resources.sockets,\n type: args.cpuType,\n },\n memory: {\n dedicated: args.resources.memory,\n },\n disks: [\n {\n interface: \"virtio0\",\n size: args.resources.diskSize,\n iothread: true,\n discard: \"on\",\n datastoreId,\n fileId: inputs.image.id,\n },\n ],\n networkDevices: [\n {\n bridge: args.network.bridge,\n },\n ],\n initialization: createCloudInit(),\n },\n { provider, ignoreChanges: [\"disks\", \"cdrom\"] },\n)\n\nfunction findNonLocalHostIpV4(ips: string[][]): string {\n for (const ip of ips) {\n if (ip[0] && ip[0] !== \"127.0.0.1\" && ip[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(): 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 // biome-ignore lint/style/noNonNullAssertion: ts moment\n if (inputVendorData!.content.type !== \"embedded\") {\n throw new Error(\"For now, only the embedded vendor data is supported.\")\n }\n\n // biome-ignore lint/style/noNonNullAssertion: ts moment\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:\n args.ipv4.type === \"static\"\n ? [\n {\n ipv4: {\n address: `${args.ipv4.address}/${args.ipv4.prefix}`,\n gateway: args.ipv4.gateway ?? deriveIpV4Gateway(args.ipv4.address),\n },\n },\n ]\n : [\n {\n ipv4: {\n address: \"dhcp\",\n },\n },\n ],\n\n dns: args.network.dns.length > 0 ? { servers: args.network.dns } : undefined,\n\n userAccount: output({\n keys: [sshKeyPair.publicKey],\n username: \"root\",\n password: rootPassword,\n }),\n\n vendorDataFileId,\n }\n}\n\nconst ipv4Addresses = await toPromise(machine.ipv4Addresses)\nconst nonLocalHostIpV4 = findNonLocalHostIpV4(ipv4Addresses)\n\nconst endpoint = parseL3Endpoint(nonLocalHostIpV4)\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: name,\n },\n\n $terminals: [terminal],\n})\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@highstate/proxmox",
3
- "version": "0.9.18",
3
+ "version": "0.9.19",
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.18",
22
- "@highstate/contract": "^0.9.18",
23
- "@highstate/library": "^0.9.18",
24
- "@highstate/pulumi": "^0.9.18",
21
+ "@highstate/common": "^0.9.19",
22
+ "@highstate/contract": "^0.9.19",
23
+ "@highstate/library": "^0.9.19",
24
+ "@highstate/pulumi": "^0.9.19",
25
25
  "@muhlba91/pulumi-proxmoxve": "^6.17.1"
26
26
  },
27
27
  "devDependencies": {
28
- "@highstate/cli": "^0.9.18"
28
+ "@highstate/cli": "^0.9.19"
29
29
  },
30
- "gitHead": "9ebcd7da56b00b8ca08bf52cc8438f527338cd64"
30
+ "gitHead": "e77d292335556c6e5b6275acda1a3d1609d786a1"
31
31
  }
@@ -1 +0,0 @@
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"]}