@forgezero/agent 0.1.47 → 0.1.49

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.
@@ -749,7 +749,7 @@ async function postSignedNode(options, path, body) {
749
749
  }
750
750
 
751
751
  // src/version.ts
752
- var VERSION3 = "0.1.47";
752
+ var VERSION3 = "0.1.49";
753
753
 
754
754
  // src/agent-heartbeat.ts
755
755
  var unquote = (value) => value.replace(/^['"]|['"]$/g, "");
package/dist/bootstrap.js CHANGED
@@ -1207,7 +1207,7 @@ var UPDATE_RETRY_BASE_MS = 5 * 60000;
1207
1207
  var UPDATE_RETRY_MAX_MS = 24 * 60 * 60000;
1208
1208
 
1209
1209
  // src/version.ts
1210
- var VERSION = "0.1.47";
1210
+ var VERSION = "0.1.49";
1211
1211
 
1212
1212
  // src/software.ts
1213
1213
  var PINNED_BUN_VERSION = "1.3.14";
package/dist/fz-agent.js CHANGED
@@ -7000,7 +7000,7 @@ function assertSupportedGuestImage(imageKey) {
7000
7000
  }
7001
7001
 
7002
7002
  // src/version.ts
7003
- var VERSION = "0.1.47";
7003
+ var VERSION = "0.1.49";
7004
7004
 
7005
7005
  // src/ssh-bootstrap.ts
7006
7006
  class SshBootstrapError extends Error {
package/dist/fz.js CHANGED
@@ -4830,7 +4830,7 @@ var UPDATE_RETRY_BASE_MS = 5 * 60000;
4830
4830
  var UPDATE_RETRY_MAX_MS = 24 * 60 * 60000;
4831
4831
 
4832
4832
  // src/version.ts
4833
- var VERSION2 = "0.1.47";
4833
+ var VERSION2 = "0.1.49";
4834
4834
 
4835
4835
  // src/software.ts
4836
4836
  var PINNED_BUN_VERSION = "1.3.14";
@@ -14146,6 +14146,14 @@ async function applyMetalBootstrap(config, options) {
14146
14146
  "forgezero-metal-agent-egress.service",
14147
14147
  "forgezero-metal-agent.service"
14148
14148
  ]);
14149
+ await runChecked(exec, [
14150
+ "/usr/bin/systemctl",
14151
+ "restart",
14152
+ "forgezero-agent-update-helper.service",
14153
+ "forgezero-metal-helper.service",
14154
+ "forgezero-metal-agent-egress.service",
14155
+ "forgezero-metal-agent.service"
14156
+ ]);
14149
14157
  for (let attempt = 0;attempt < 100 && (!socketReady(HELPER_SOCKET) || !socketReady(UPDATE_SOCKET)); attempt += 1) {
14150
14158
  await Bun.sleep(100);
14151
14159
  }
@@ -14638,6 +14646,23 @@ var remote = async (exec, request, knownHosts, argv2, label, secret = false, std
14638
14646
  argv2.forEach(safeRemoteArg);
14639
14647
  return checked4(exec, ["ssh", ...sshOptions(request, knownHosts), destination2(request.target), "--", ...argv2], label, { secret, stdin });
14640
14648
  };
14649
+ var remoteRegularFileExists = async (exec, request, knownHosts, path) => {
14650
+ safeRemoteArg(path);
14651
+ const result = await exec([
14652
+ "ssh",
14653
+ ...sshOptions(request, knownHosts),
14654
+ destination2(request.target),
14655
+ "--",
14656
+ "/usr/bin/test",
14657
+ "-f",
14658
+ path
14659
+ ]);
14660
+ if (result.exitCode === 0)
14661
+ return true;
14662
+ if (result.exitCode === 1)
14663
+ return false;
14664
+ throw new Error(`remote initialized-state probe failed${result.output ? `: ${result.output.trim()}` : ""}`);
14665
+ };
14641
14666
  var copy = async (exec, request, knownHosts, local, remotePath, secret = false) => {
14642
14667
  safeRemoteArg(remotePath);
14643
14668
  await checked4(exec, [
@@ -14812,12 +14837,13 @@ async function applyOperatorMetalBootstrap(request, mode, options = {}) {
14812
14837
  await copy(exec, request, knownHosts, join10(directory, name), `${remoteTemp}/${name}`, true);
14813
14838
  for (const name of ["metal-config.json", ...staged.files])
14814
14839
  await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/install", "-m", "0600", `${remoteTemp}/${name}`, `${REMOTE_STAGE}/${name}`], "remote metal handoff", true);
14840
+ const initialized = await remoteRegularFileExists(exec, request, knownHosts, "/etc/forgezero/metal.initialized.json");
14815
14841
  const output = await remote(exec, request, knownHosts, [
14816
14842
  "/usr/bin/sudo",
14817
14843
  "-n",
14818
14844
  "/usr/local/bin/fz",
14819
14845
  "bootstrap",
14820
- "metal",
14846
+ initialized ? "repair" : "metal",
14821
14847
  "--bootstrap-config",
14822
14848
  `${REMOTE_STAGE}/metal-config.json`,
14823
14849
  "--apply"
@@ -292,7 +292,7 @@ function systemdAgentEgressDirectives(loopbackTcpPorts = []) {
292
292
  }
293
293
 
294
294
  // src/version.ts
295
- var VERSION = "0.1.47";
295
+ var VERSION = "0.1.49";
296
296
 
297
297
  // src/otel-collector.ts
298
298
  var FORGEZERO_OTEL_COLLECTOR_UNIT = "forgezero-otel-collector.service";
@@ -978,6 +978,14 @@ async function applyMetalBootstrap(config, options) {
978
978
  "forgezero-metal-agent-egress.service",
979
979
  "forgezero-metal-agent.service"
980
980
  ]);
981
+ await runChecked(exec, [
982
+ "/usr/bin/systemctl",
983
+ "restart",
984
+ "forgezero-agent-update-helper.service",
985
+ "forgezero-metal-helper.service",
986
+ "forgezero-metal-agent-egress.service",
987
+ "forgezero-metal-agent.service"
988
+ ]);
981
989
  for (let attempt = 0;attempt < 100 && (!socketReady(HELPER_SOCKET) || !socketReady(UPDATE_SOCKET)); attempt += 1) {
982
990
  await Bun.sleep(100);
983
991
  }
@@ -1207,7 +1207,7 @@ var UPDATE_RETRY_BASE_MS = 5 * 60000;
1207
1207
  var UPDATE_RETRY_MAX_MS = 24 * 60 * 60000;
1208
1208
 
1209
1209
  // src/version.ts
1210
- var VERSION = "0.1.47";
1210
+ var VERSION = "0.1.49";
1211
1211
 
1212
1212
  // src/software.ts
1213
1213
  var PINNED_BUN_VERSION = "1.3.14";
@@ -5050,6 +5050,14 @@ async function applyMetalBootstrap(config, options) {
5050
5050
  "forgezero-metal-agent-egress.service",
5051
5051
  "forgezero-metal-agent.service"
5052
5052
  ]);
5053
+ await runChecked(exec, [
5054
+ "/usr/bin/systemctl",
5055
+ "restart",
5056
+ "forgezero-agent-update-helper.service",
5057
+ "forgezero-metal-helper.service",
5058
+ "forgezero-metal-agent-egress.service",
5059
+ "forgezero-metal-agent.service"
5060
+ ]);
5053
5061
  for (let attempt = 0;attempt < 100 && (!socketReady(HELPER_SOCKET) || !socketReady(UPDATE_SOCKET)); attempt += 1) {
5054
5062
  await Bun.sleep(100);
5055
5063
  }
@@ -5542,6 +5550,23 @@ var remote = async (exec, request, knownHosts, argv, label, secret = false, stdi
5542
5550
  argv.forEach(safeRemoteArg);
5543
5551
  return checked4(exec, ["ssh", ...sshOptions(request, knownHosts), destination2(request.target), "--", ...argv], label, { secret, stdin });
5544
5552
  };
5553
+ var remoteRegularFileExists = async (exec, request, knownHosts, path) => {
5554
+ safeRemoteArg(path);
5555
+ const result = await exec([
5556
+ "ssh",
5557
+ ...sshOptions(request, knownHosts),
5558
+ destination2(request.target),
5559
+ "--",
5560
+ "/usr/bin/test",
5561
+ "-f",
5562
+ path
5563
+ ]);
5564
+ if (result.exitCode === 0)
5565
+ return true;
5566
+ if (result.exitCode === 1)
5567
+ return false;
5568
+ throw new Error(`remote initialized-state probe failed${result.output ? `: ${result.output.trim()}` : ""}`);
5569
+ };
5545
5570
  var copy = async (exec, request, knownHosts, local, remotePath, secret = false) => {
5546
5571
  safeRemoteArg(remotePath);
5547
5572
  await checked4(exec, [
@@ -5716,12 +5741,13 @@ async function applyOperatorMetalBootstrap(request, mode, options = {}) {
5716
5741
  await copy(exec, request, knownHosts, join6(directory, name), `${remoteTemp}/${name}`, true);
5717
5742
  for (const name of ["metal-config.json", ...staged.files])
5718
5743
  await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/install", "-m", "0600", `${remoteTemp}/${name}`, `${REMOTE_STAGE}/${name}`], "remote metal handoff", true);
5744
+ const initialized = await remoteRegularFileExists(exec, request, knownHosts, "/etc/forgezero/metal.initialized.json");
5719
5745
  const output = await remote(exec, request, knownHosts, [
5720
5746
  "/usr/bin/sudo",
5721
5747
  "-n",
5722
5748
  "/usr/local/bin/fz",
5723
5749
  "bootstrap",
5724
- "metal",
5750
+ initialized ? "repair" : "metal",
5725
5751
  "--bootstrap-config",
5726
5752
  `${REMOTE_STAGE}/metal-config.json`,
5727
5753
  "--apply"
@@ -1697,7 +1697,7 @@ function requestSoftware(requirements, socketPath = DEFAULT_SOFTWARE_HELPER_SOCK
1697
1697
  }
1698
1698
 
1699
1699
  // src/version.ts
1700
- var VERSION3 = "0.1.47";
1700
+ var VERSION3 = "0.1.49";
1701
1701
 
1702
1702
  // src/egress-policy.ts
1703
1703
  import { realpathSync as realpathSync2 } from "node:fs";
package/dist/provision.js CHANGED
@@ -1697,7 +1697,7 @@ function requestSoftware(requirements, socketPath = DEFAULT_SOFTWARE_HELPER_SOCK
1697
1697
  }
1698
1698
 
1699
1699
  // src/version.ts
1700
- var VERSION3 = "0.1.47";
1700
+ var VERSION3 = "0.1.49";
1701
1701
 
1702
1702
  // src/egress-policy.ts
1703
1703
  import { realpathSync as realpathSync2 } from "node:fs";
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  /** One package version shared by both public binaries. Pinned to package.json by tests. */
2
- export declare const VERSION = "0.1.47";
2
+ export declare const VERSION = "0.1.49";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgezero/agent",
3
- "version": "0.1.47",
3
+ "version": "0.1.49",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "check": "tsc --noEmit",