@omnitron-dev/omnitron 0.3.0 → 0.3.1
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/README.md +4 -0
- package/dist/BUILD.json +2 -2
- package/dist/cli/omnitron.js +26 -2
- package/dist/cli/omnitron.js.map +1 -1
- package/dist/cluster/mesh-link.js +1 -1
- package/dist/cluster/slave-connector.d.ts +2 -2
- package/dist/cluster/slave-connector.js +1 -1
- package/dist/commands/deploy.d.ts +4 -4
- package/dist/commands/deploy.js +4 -4
- package/dist/commands/discover.d.ts +2 -2
- package/dist/commands/discover.js +2 -2
- package/dist/commands/fleet-asking.d.ts +2 -2
- package/dist/commands/fleet-asking.js +2 -2
- package/dist/commands/fleet-recover.d.ts +2 -0
- package/dist/commands/fleet-recover.d.ts.map +1 -0
- package/dist/commands/fleet-recover.js +30 -0
- package/dist/commands/fleet-recover.js.map +1 -0
- package/dist/commands/host-ingress.d.ts +3 -0
- package/dist/commands/host-ingress.d.ts.map +1 -0
- package/dist/commands/host-ingress.js +31 -0
- package/dist/commands/host-ingress.js.map +1 -0
- package/dist/commands/infra.d.ts +2 -2
- package/dist/commands/infra.js +7 -7
- package/dist/commands/infra.js.map +1 -1
- package/dist/commands/logs.d.ts +1 -1
- package/dist/commands/logs.js +3 -3
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/node.d.ts +2 -14
- package/dist/commands/node.d.ts.map +1 -1
- package/dist/commands/node.js +33 -22
- package/dist/commands/node.js.map +1 -1
- package/dist/commands/pipeline.d.ts.map +1 -1
- package/dist/commands/pipeline.js +8 -1
- package/dist/commands/pipeline.js.map +1 -1
- package/dist/commands/project.d.ts +2 -2
- package/dist/commands/project.js +2 -2
- package/dist/commands/release.d.ts +1 -1
- package/dist/commands/release.js +4 -4
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/remote.d.ts +3 -3
- package/dist/commands/remote.js +3 -3
- package/dist/commands/tor.d.ts +1 -1
- package/dist/commands/tor.js +2 -2
- package/dist/config/types.d.ts +9 -6
- package/dist/config/types.d.ts.map +1 -1
- package/dist/daemon/daemon-entry.js +1 -1
- package/dist/daemon/daemon-entry.js.map +1 -1
- package/dist/daemon/daemon.d.ts +5 -19
- package/dist/daemon/daemon.d.ts.map +1 -1
- package/dist/daemon/daemon.js +54 -51
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/daemon.module.d.ts.map +1 -1
- package/dist/daemon/daemon.module.js +3 -5
- package/dist/daemon/daemon.module.js.map +1 -1
- package/dist/daemon/daemon.rpc-service.d.ts +2 -2
- package/dist/daemon/daemon.rpc-service.js +6 -6
- package/dist/daemon/daemon.rpc-service.js.map +1 -1
- package/dist/execution/data-channel.d.ts +1 -1
- package/dist/execution/data-channel.js +1 -1
- package/dist/execution/execution.service.d.ts +10 -3
- package/dist/execution/execution.service.d.ts.map +1 -1
- package/dist/execution/execution.service.js +101 -44
- package/dist/execution/execution.service.js.map +1 -1
- package/dist/infrastructure/bare-metal-plan.js +1 -1
- package/dist/infrastructure/bare-metal-plan.js.map +1 -1
- package/dist/infrastructure/config-payload.d.ts +4 -4
- package/dist/infrastructure/config-payload.js +4 -4
- package/dist/infrastructure/container-runtime.d.ts +2 -10
- package/dist/infrastructure/container-runtime.d.ts.map +1 -1
- package/dist/infrastructure/container-runtime.js +41 -20
- package/dist/infrastructure/container-runtime.js.map +1 -1
- package/dist/infrastructure/gateway-redis-db.d.ts +2 -2
- package/dist/infrastructure/gateway-redis-db.js +2 -2
- package/dist/infrastructure/host-ingress-config.d.ts +12 -0
- package/dist/infrastructure/host-ingress-config.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-config.js +197 -0
- package/dist/infrastructure/host-ingress-config.js.map +1 -0
- package/dist/infrastructure/host-ingress-lock.d.ts +4 -0
- package/dist/infrastructure/host-ingress-lock.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-lock.js +36 -0
- package/dist/infrastructure/host-ingress-lock.js.map +1 -0
- package/dist/infrastructure/host-ingress-runtime.d.ts +25 -0
- package/dist/infrastructure/host-ingress-runtime.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-runtime.js +114 -0
- package/dist/infrastructure/host-ingress-runtime.js.map +1 -0
- package/dist/infrastructure/host-ingress-takeover.d.ts +18 -0
- package/dist/infrastructure/host-ingress-takeover.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-takeover.js +142 -0
- package/dist/infrastructure/host-ingress-takeover.js.map +1 -0
- package/dist/infrastructure/host-ingress-types.d.ts +173 -0
- package/dist/infrastructure/host-ingress-types.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-types.js +2 -0
- package/dist/infrastructure/host-ingress-types.js.map +1 -0
- package/dist/infrastructure/host-ingress.service.d.ts +47 -0
- package/dist/infrastructure/host-ingress.service.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress.service.js +514 -0
- package/dist/infrastructure/host-ingress.service.js.map +1 -0
- package/dist/infrastructure/infrastructure.service.d.ts +21 -5
- package/dist/infrastructure/infrastructure.service.d.ts.map +1 -1
- package/dist/infrastructure/infrastructure.service.js +91 -10
- package/dist/infrastructure/infrastructure.service.js.map +1 -1
- package/dist/infrastructure/orphan-containers.d.ts +7 -7
- package/dist/infrastructure/orphan-containers.js +6 -6
- package/dist/infrastructure/presets/minio.js +1 -1
- package/dist/infrastructure/presets/minio.js.map +1 -1
- package/dist/infrastructure/provisioning-outcome.d.ts +1 -1
- package/dist/infrastructure/provisioning-outcome.js +1 -1
- package/dist/infrastructure/service-binding.js +1 -1
- package/dist/infrastructure/service-resolver.d.ts +10 -4
- package/dist/infrastructure/service-resolver.d.ts.map +1 -1
- package/dist/infrastructure/service-resolver.js +88 -45
- package/dist/infrastructure/service-resolver.js.map +1 -1
- package/dist/infrastructure/shipped-config.js +4 -4
- package/dist/infrastructure/stack-infra-manager.d.ts +10 -1
- package/dist/infrastructure/stack-infra-manager.d.ts.map +1 -1
- package/dist/infrastructure/stack-infra-manager.js +53 -43
- package/dist/infrastructure/stack-infra-manager.js.map +1 -1
- package/dist/infrastructure/types.d.ts +8 -6
- package/dist/infrastructure/types.d.ts.map +1 -1
- package/dist/monitoring/log-line.d.ts +3 -3
- package/dist/monitoring/log-line.js +3 -3
- package/dist/monitoring/log-manager.d.ts +3 -3
- package/dist/monitoring/log-manager.js +3 -3
- package/dist/operations.d.ts +16 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/operations.js +13 -0
- package/dist/operations.js.map +1 -0
- package/dist/orchestrator/app-handle.d.ts +3 -3
- package/dist/orchestrator/app-handle.js +3 -3
- package/dist/orchestrator/bootstrap-loader.d.ts +2 -2
- package/dist/orchestrator/bootstrap-loader.js +3 -3
- package/dist/orchestrator/bootstrap-loader.js.map +1 -1
- package/dist/orchestrator/bootstrap-process.d.ts +1 -1
- package/dist/orchestrator/bootstrap-process.d.ts.map +1 -1
- package/dist/orchestrator/bootstrap-process.js +3 -2
- package/dist/orchestrator/bootstrap-process.js.map +1 -1
- package/dist/orchestrator/build-service.d.ts +6 -12
- package/dist/orchestrator/build-service.d.ts.map +1 -1
- package/dist/orchestrator/build-service.js +120 -83
- package/dist/orchestrator/build-service.js.map +1 -1
- package/dist/orchestrator/call-exposed-service.js +1 -1
- package/dist/orchestrator/classic-launcher.d.ts.map +1 -1
- package/dist/orchestrator/classic-launcher.js +6 -1
- package/dist/orchestrator/classic-launcher.js.map +1 -1
- package/dist/orchestrator/file-watcher.d.ts +1 -0
- package/dist/orchestrator/file-watcher.d.ts.map +1 -1
- package/dist/orchestrator/file-watcher.js +14 -3
- package/dist/orchestrator/file-watcher.js.map +1 -1
- package/dist/orchestrator/http-routes.d.ts +4 -0
- package/dist/orchestrator/http-routes.d.ts.map +1 -0
- package/dist/orchestrator/http-routes.js +19 -0
- package/dist/orchestrator/http-routes.js.map +1 -0
- package/dist/orchestrator/orchestrator.service.d.ts +18 -4
- package/dist/orchestrator/orchestrator.service.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.service.js +151 -110
- package/dist/orchestrator/orchestrator.service.js.map +1 -1
- package/dist/orchestrator/service-router.d.ts +1 -1
- package/dist/orchestrator/service-router.js +1 -1
- package/dist/orchestrator/topology-query.d.ts +1 -1
- package/dist/orchestrator/topology-query.js +1 -1
- package/dist/project/artifact-builder.js +2 -2
- package/dist/project/artifact-builder.js.map +1 -1
- package/dist/project/build-decision.d.ts +1 -1
- package/dist/project/build-decision.js +1 -1
- package/dist/project/config-resolver.js +1 -1
- package/dist/project/config-resolver.js.map +1 -1
- package/dist/project/declared-config.d.ts +2 -2
- package/dist/project/declared-config.js +2 -2
- package/dist/project/deploy-phases.d.ts +1 -1
- package/dist/project/deploy-phases.js +1 -1
- package/dist/project/exec-in-group.d.ts +1 -1
- package/dist/project/exec-in-group.js +1 -1
- package/dist/project/node-app-config.d.ts +2 -2
- package/dist/project/node-app-config.js +2 -2
- package/dist/project/node-app-config.js.map +1 -1
- package/dist/project/node-app-health.d.ts +1 -1
- package/dist/project/node-app-health.js +1 -1
- package/dist/project/operator-account.d.ts +9 -3
- package/dist/project/operator-account.d.ts.map +1 -1
- package/dist/project/operator-account.js +9 -9
- package/dist/project/operator-account.js.map +1 -1
- package/dist/project/registry.d.ts.map +1 -1
- package/dist/project/registry.js +4 -22
- package/dist/project/registry.js.map +1 -1
- package/dist/project/stack-env.d.ts +1 -1
- package/dist/project/stack-env.js +1 -1
- package/dist/project/stand-containers.d.ts +9 -2
- package/dist/project/stand-containers.d.ts.map +1 -1
- package/dist/project/stand-containers.js +17 -17
- package/dist/project/stand-containers.js.map +1 -1
- package/dist/release/artifact-store.d.ts +1 -1
- package/dist/release/artifact-store.d.ts.map +1 -1
- package/dist/release/artifact-store.js +1 -1
- package/dist/release/artifact-store.js.map +1 -1
- package/dist/release/attest-on-node.d.ts +3 -2
- package/dist/release/attest-on-node.d.ts.map +1 -1
- package/dist/release/attest-on-node.js +6 -6
- package/dist/release/attest-on-node.js.map +1 -1
- package/dist/release/attest.d.ts +3 -3
- package/dist/release/attest.js +1 -1
- package/dist/release/build-run.d.ts +2 -2
- package/dist/release/build-run.js +4 -4
- package/dist/release/build-run.js.map +1 -1
- package/dist/release/builder.d.ts +1 -1
- package/dist/release/builder.d.ts.map +1 -1
- package/dist/release/builder.js +1 -1
- package/dist/release/builder.js.map +1 -1
- package/dist/release/daemon-omni.d.ts +1 -1
- package/dist/release/daemon-omni.js +1 -1
- package/dist/release/definition-inputs.d.ts +1 -1
- package/dist/release/definition-inputs.js +1 -1
- package/dist/release/layout.d.ts +2 -2
- package/dist/release/layout.js +2 -2
- package/dist/release/manifest.d.ts +1 -1
- package/dist/release/manifest.js +1 -1
- package/dist/release/publish.d.ts +1 -1
- package/dist/release/publish.js +1 -1
- package/dist/release/store.d.ts +1 -1
- package/dist/release/store.d.ts.map +1 -1
- package/dist/release/store.js +3 -3
- package/dist/release/store.js.map +1 -1
- package/dist/services/alert.service.d.ts +2 -2
- package/dist/services/alert.service.js +2 -2
- package/dist/services/backup-pipeline.d.ts +1 -1
- package/dist/services/backup-pipeline.js +1 -1
- package/dist/services/backup.service.d.ts +3 -3
- package/dist/services/backup.service.js +3 -3
- package/dist/services/bundle-builder.d.ts +15 -12
- package/dist/services/bundle-builder.d.ts.map +1 -1
- package/dist/services/bundle-builder.js +124 -48
- package/dist/services/bundle-builder.js.map +1 -1
- package/dist/services/discovery.service.d.ts +1 -1
- package/dist/services/discovery.service.js +1 -1
- package/dist/services/host-operation-barrier.d.ts +8 -0
- package/dist/services/host-operation-barrier.d.ts.map +1 -0
- package/dist/services/host-operation-barrier.js +44 -0
- package/dist/services/host-operation-barrier.js.map +1 -0
- package/dist/services/host-upgrade.d.ts +129 -0
- package/dist/services/host-upgrade.d.ts.map +1 -0
- package/dist/services/host-upgrade.js +352 -0
- package/dist/services/host-upgrade.js.map +1 -0
- package/dist/services/infrastructure.rpc-service.d.ts +16 -1
- package/dist/services/infrastructure.rpc-service.d.ts.map +1 -1
- package/dist/services/infrastructure.rpc-service.js +71 -10
- package/dist/services/infrastructure.rpc-service.js.map +1 -1
- package/dist/services/local-bundle.d.ts +9 -0
- package/dist/services/local-bundle.d.ts.map +1 -1
- package/dist/services/local-bundle.js +11 -2
- package/dist/services/local-bundle.js.map +1 -1
- package/dist/services/log-collector.service.d.ts +1 -1
- package/dist/services/log-collector.service.js +1 -1
- package/dist/services/maintenance-lock.d.ts +2 -2
- package/dist/services/maintenance-lock.d.ts.map +1 -1
- package/dist/services/maintenance-lock.js +1 -1
- package/dist/services/migration-output.d.ts +2 -2
- package/dist/services/migration-output.js +2 -2
- package/dist/services/node-deploy-lease.d.ts +19 -2
- package/dist/services/node-deploy-lease.d.ts.map +1 -1
- package/dist/services/node-deploy-lease.js +84 -10
- package/dist/services/node-deploy-lease.js.map +1 -1
- package/dist/services/node-manager.rpc-service.d.ts +6 -1
- package/dist/services/node-manager.rpc-service.d.ts.map +1 -1
- package/dist/services/node-manager.rpc-service.js +25 -1
- package/dist/services/node-manager.rpc-service.js.map +1 -1
- package/dist/services/node-manager.service.d.ts +1 -1
- package/dist/services/node-manager.service.js +1 -1
- package/dist/services/node-upgrade.d.ts +1 -1
- package/dist/services/pipeline.rpc-service.d.ts +4 -0
- package/dist/services/pipeline.rpc-service.d.ts.map +1 -1
- package/dist/services/pipeline.rpc-service.js +9 -0
- package/dist/services/pipeline.rpc-service.js.map +1 -1
- package/dist/services/pipeline.service.d.ts +2 -0
- package/dist/services/pipeline.service.d.ts.map +1 -1
- package/dist/services/pipeline.service.js +12 -0
- package/dist/services/pipeline.service.js.map +1 -1
- package/dist/services/project.rpc-service.d.ts +7 -0
- package/dist/services/project.rpc-service.d.ts.map +1 -1
- package/dist/services/project.rpc-service.js +11 -0
- package/dist/services/project.rpc-service.js.map +1 -1
- package/dist/services/project.service.d.ts +21 -11
- package/dist/services/project.service.d.ts.map +1 -1
- package/dist/services/project.service.js +74 -59
- package/dist/services/project.service.js.map +1 -1
- package/dist/services/redeploy-decision.d.ts +2 -2
- package/dist/services/redeploy-decision.js +1 -1
- package/dist/services/release.rpc-service.d.ts +1 -1
- package/dist/services/release.rpc-service.js +1 -1
- package/dist/services/remote-deployer.service.d.ts +27 -16
- package/dist/services/remote-deployer.service.d.ts.map +1 -1
- package/dist/services/remote-deployer.service.js +269 -101
- package/dist/services/remote-deployer.service.js.map +1 -1
- package/dist/services/remote-provisioner.d.ts +2 -0
- package/dist/services/remote-provisioner.d.ts.map +1 -1
- package/dist/services/remote-provisioner.js +1 -1
- package/dist/services/remote-provisioner.js.map +1 -1
- package/dist/services/static-carry-forward.d.ts +26 -1
- package/dist/services/static-carry-forward.d.ts.map +1 -1
- package/dist/services/static-carry-forward.js +275 -1
- package/dist/services/static-carry-forward.js.map +1 -1
- package/dist/shared/dto/nodes.d.ts +2 -2
- package/dist/shared/dto/services.d.ts +27 -0
- package/dist/shared/dto/services.d.ts.map +1 -1
- package/dist/shared/local-infra-host.d.ts +2 -2
- package/dist/shared/local-infra-host.js +2 -2
- package/dist/shared/release-reading.d.ts +1 -1
- package/dist/shared/release-reading.js +1 -1
- package/package.json +16 -12
- package/webapp/dist/BUILD.json +2 -2
- package/webapp/dist/assets/FormControlLabel-BbSxpQwN.js +1 -0
- package/webapp/dist/assets/{Grid-BZ7xhoHQ.js → Grid-DizFZYue.js} +1 -1
- package/webapp/dist/assets/{Switch-DGSAxQPM.js → Switch-Bfiqzx8l.js} +1 -1
- package/webapp/dist/assets/alerts-DH_RVRS3.js +1 -0
- package/webapp/dist/assets/apps-B96355sz.js +1 -0
- package/webapp/dist/assets/audit-CYGtbi4k.js +1 -0
- package/webapp/dist/assets/client-BmqFExWT.js +1 -0
- package/webapp/dist/assets/containers-B_TpThln.js +2 -0
- package/webapp/dist/assets/dashboard-DHf2_65N.js +1 -0
- package/webapp/dist/assets/dashboard-builder-CWY2pjeG.js +1 -0
- package/webapp/dist/assets/{deploy-release-dialog-D6C-XcKY.js → deploy-release-dialog-Dp-zpSAd.js} +1 -1
- package/webapp/dist/assets/deployments-tJI6O3fK.js +1 -0
- package/webapp/dist/assets/detail-B2zP1Hto.js +8 -0
- package/webapp/dist/assets/detail-CoIrwmsy.js +1 -0
- package/webapp/dist/assets/detail-DWaGaOtL.js +2 -0
- package/webapp/dist/assets/index-Dvo0iprx.css +1 -0
- package/webapp/dist/assets/index-vMnY_4jR.js +412 -0
- package/webapp/dist/assets/logs-DTRjOfX8.js +12 -0
- package/webapp/dist/assets/maplibre-gl-DowHoZAx.js +814 -0
- package/webapp/dist/assets/{metrics-CQgjz2Lz.js → metrics-UCajtdox.js} +2 -2
- package/webapp/dist/assets/nodes-DuTVU0f6.js +7 -0
- package/webapp/dist/assets/pipelines-C8BeDcAl.js +4 -0
- package/webapp/dist/assets/projects-Dp_zFfLY.js +1 -0
- package/webapp/dist/assets/react-DlmbjZJV.js +1 -0
- package/webapp/dist/assets/react-apexcharts.esm-C8pn45ml.js +97 -0
- package/webapp/dist/assets/{release-bits-Dj4EOhhb.js → release-bits-BzTKz5fM.js} +1 -1
- package/webapp/dist/assets/release-build-panel-DcW9YcXQ.js +1 -0
- package/webapp/dist/assets/releases-B4hcr1bE.js +2 -0
- package/webapp/dist/assets/rolldown-runtime-XKyaHtl9.js +1 -0
- package/webapp/dist/assets/settings-DIteZTbe.js +1 -0
- package/webapp/dist/assets/sign-in-D4kMBOHp.js +1 -0
- package/webapp/dist/assets/stacks-Brnf-EB7.js +1 -0
- package/webapp/dist/assets/{system-info-BtE3dgfw.js → system-info-CFDNVKkU.js} +1 -1
- package/webapp/dist/assets/topology-7WeTUsDN.js +12 -0
- package/webapp/dist/assets/traces-9c3gwCN-.js +1 -0
- package/webapp/dist/assets/{use-stack-context-CZUgPq88.js → use-stack-context-CnA5FTHu.js} +1 -1
- package/webapp/dist/index.html +6 -6
- package/webapp/dist/assets/FormControlLabel-BrH2diyl.js +0 -1
- package/webapp/dist/assets/alerts-sXqHJbsa.js +0 -1
- package/webapp/dist/assets/apps-B_Ah8Flh.js +0 -1
- package/webapp/dist/assets/audit-YXihwyui.js +0 -1
- package/webapp/dist/assets/client-CGbBvy9k.js +0 -1
- package/webapp/dist/assets/containers-Di4NOTLf.js +0 -2
- package/webapp/dist/assets/dashboard-Cfuf95N3.js +0 -1
- package/webapp/dist/assets/dashboard-builder-CowaYb-M.js +0 -1
- package/webapp/dist/assets/deployments-ChTq5kCw.js +0 -1
- package/webapp/dist/assets/detail-BsGWv7Dj.js +0 -1
- package/webapp/dist/assets/detail-CyVf_cw5.js +0 -2
- package/webapp/dist/assets/detail-D027j6aO.js +0 -8
- package/webapp/dist/assets/index-B8AHIPc-.css +0 -1
- package/webapp/dist/assets/index-DiZbrwxT.js +0 -414
- package/webapp/dist/assets/logs-L2b8Oqmo.js +0 -12
- package/webapp/dist/assets/maplibre-gl-MlmG2kbn.js +0 -801
- package/webapp/dist/assets/nodes-Nwia2Ty6.js +0 -7
- package/webapp/dist/assets/pipelines-DCu_rXOr.js +0 -4
- package/webapp/dist/assets/projects-Bb4aV76h.js +0 -1
- package/webapp/dist/assets/react-CwJFpaho.js +0 -1
- package/webapp/dist/assets/react-apexcharts.esm-Dy0Fez42.js +0 -1956
- package/webapp/dist/assets/release-build-panel-D6OCVlhT.js +0 -1
- package/webapp/dist/assets/releases-CnAt3yO6.js +0 -2
- package/webapp/dist/assets/rolldown-runtime-hePW80VL.js +0 -1
- package/webapp/dist/assets/settings-DU-mjiwb.js +0 -1
- package/webapp/dist/assets/sign-in-Bcvjrr4C.js +0 -1
- package/webapp/dist/assets/stacks-B-e8p50I.js +0 -1
- package/webapp/dist/assets/topology-Cwch-uF1.js +0 -12
- package/webapp/dist/assets/traces-BbShR-4P.js +0 -1
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
/** Controlled host upgrades. App deployments pin an installed bundle and never call this lifecycle. */
|
|
2
|
+
import { shellEscape } from '../shared/shell-escape.js';
|
|
3
|
+
export const HOST_UPGRADE_CONTRACT = 'omnitron.host-upgrade.json';
|
|
4
|
+
function fail(reason) { throw new Error(`Host upgrade preflight: ${reason}`); }
|
|
5
|
+
function strings(value) { return Array.isArray(value) && value.every(v => typeof v === 'string' && v.length > 0); }
|
|
6
|
+
/** The native control-plane runtime contract currently binds the default daemon endpoint. */
|
|
7
|
+
export function assertControlledDaemonPort(port) {
|
|
8
|
+
if (port !== undefined && port !== 9700)
|
|
9
|
+
throw new Error('Controlled host operations currently require daemon port 9700');
|
|
10
|
+
}
|
|
11
|
+
export function assertServingBundle(bundle, status) {
|
|
12
|
+
if (!status || status.build?.commit !== bundle.commit || status.build?.dirty !== false ||
|
|
13
|
+
typeof status.version !== 'string' || status.version.split('+')[0] !== bundle.version.split('+')[0] ||
|
|
14
|
+
!Number.isSafeInteger(status.pid) || status.pid <= 0 || !Array.isArray(status.apps)) {
|
|
15
|
+
fail(`serving daemon does not match installed bundle ${bundle.root}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** Refuse configurations whose existing boot policy would start something previously offline. */
|
|
19
|
+
export function planHostUpgrade(previous, candidate, inventory) {
|
|
20
|
+
for (const bundle of [previous, candidate]) {
|
|
21
|
+
if (!/^[A-Za-z0-9][A-Za-z0-9._+-]*$/.test(bundle.version) || bundle.version.includes('..') ||
|
|
22
|
+
!bundle.root?.startsWith('/') || !bundle.root.endsWith(`/versions/${bundle.version}`) || !/^[a-f0-9]{40}$/.test(bundle.commit))
|
|
23
|
+
fail('invalid recorded bundle identity');
|
|
24
|
+
}
|
|
25
|
+
assertServingBundle(previous, inventory.status);
|
|
26
|
+
if (!inventory.runtime || !['fork', 'systemd'].includes(inventory.runtime.kind) || !inventory.runtime.cwd?.startsWith('/'))
|
|
27
|
+
fail('missing supported runtime snapshot');
|
|
28
|
+
if (!Array.isArray(inventory.projects) || !Array.isArray(inventory.stacks) || !Array.isArray(inventory.contracts))
|
|
29
|
+
fail('incomplete project inventory');
|
|
30
|
+
const all = new Map();
|
|
31
|
+
const contracts = new Map();
|
|
32
|
+
const seenProjects = new Set();
|
|
33
|
+
for (const project of inventory.projects) {
|
|
34
|
+
if (!project.name || seenProjects.has(project.name) || !strings(project.enabledStacks) || !project.path?.startsWith('/'))
|
|
35
|
+
fail('invalid or duplicate project');
|
|
36
|
+
seenProjects.add(project.name);
|
|
37
|
+
const group = inventory.stacks.filter(s => s.project === project.name);
|
|
38
|
+
if (group.length !== 1 || group[0].path !== project.path)
|
|
39
|
+
fail(`missing stack inventory for ${project.name}`);
|
|
40
|
+
const declarations = inventory.contracts.filter(c => c.project === project.name);
|
|
41
|
+
const localApps = group[0].stacks.filter(s => s.type === 'local').flatMap(s => s.apps);
|
|
42
|
+
if (localApps.length && (declarations.length !== 1 || declarations[0].schema !== 1 || !Array.isArray(declarations[0].apps)))
|
|
43
|
+
fail(`${project.name} needs ${HOST_UPGRADE_CONTRACT} schema 1`);
|
|
44
|
+
const seenStacks = new Set();
|
|
45
|
+
for (const stack of group[0].stacks) {
|
|
46
|
+
if (seenStacks.has(stack.name))
|
|
47
|
+
fail(`duplicate stack ${project.name}/${stack.name}`);
|
|
48
|
+
seenStacks.add(stack.name);
|
|
49
|
+
const enabled = project.enabledStacks.includes(stack.name);
|
|
50
|
+
if (stack.type !== 'local') {
|
|
51
|
+
if (enabled)
|
|
52
|
+
fail(`enabled ${stack.type} stack ${project.name}/${stack.name} cannot be restored locally`);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
for (const app of stack.apps) {
|
|
56
|
+
if (!app.handleKey.startsWith(`${project.name}/${stack.name}/`) || all.has(app.handleKey))
|
|
57
|
+
fail('invalid or duplicate qualified app identity');
|
|
58
|
+
if (!['online', 'stopped', 'errored', 'crashed'].includes(app.status))
|
|
59
|
+
fail(`unstable app ${app.handleKey}: ${app.status}`);
|
|
60
|
+
const online = app.status === 'online';
|
|
61
|
+
if (online !== enabled)
|
|
62
|
+
fail(`${app.handleKey}: boot policy would change its online/offline state; partial enabled stacks are unsupported`);
|
|
63
|
+
all.set(app.handleKey, online);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (project.enabledStacks.some(s => !seenStacks.has(s)))
|
|
67
|
+
fail(`unknown enabled stack in ${project.name}`);
|
|
68
|
+
for (const app of declarations[0]?.apps ?? []) {
|
|
69
|
+
if (!app || typeof app.name !== 'string' || !app.name.startsWith(`${project.name}/`) || contracts.has(app.name) ||
|
|
70
|
+
!app.cwd?.startsWith('/') || !app.version || !app.binding)
|
|
71
|
+
fail('invalid or duplicate app contract');
|
|
72
|
+
if (app.binding.kind === 'hook') {
|
|
73
|
+
const b = app.binding;
|
|
74
|
+
if (b.bundleRoot !== previous.root || !/^[A-Z_][A-Z0-9_]*$/.test(b.bundleEnv) ||
|
|
75
|
+
['PATH', 'HOME', 'NODE_OPTIONS', 'NODE_PATH', 'LD_PRELOAD', 'SHELL'].includes(b.bundleEnv) ||
|
|
76
|
+
!strings(b.rebind) || !b.rebind.length || !strings(b.verify) || !b.verify.length)
|
|
77
|
+
fail(`unsupported or stale rebind contract for ${app.name}`);
|
|
78
|
+
}
|
|
79
|
+
else if (app.binding.kind !== 'independent')
|
|
80
|
+
fail(`unsupported binding for ${app.name}`);
|
|
81
|
+
contracts.set(app.name, app);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (inventory.stacks.length !== seenProjects.size || inventory.contracts.some(c => !seenProjects.has(c.project)))
|
|
85
|
+
fail('unmatched project inventory');
|
|
86
|
+
const seenHandles = new Set();
|
|
87
|
+
for (const app of inventory.status.apps) {
|
|
88
|
+
if (seenHandles.has(app.name) || !all.has(app.name) || !['online', 'stopped', 'errored', 'crashed'].includes(app.status) ||
|
|
89
|
+
all.get(app.name) !== (app.status === 'online'))
|
|
90
|
+
fail(`unregistered, duplicate or inconsistent handle ${app.name}`);
|
|
91
|
+
seenHandles.add(app.name);
|
|
92
|
+
}
|
|
93
|
+
for (const [name, online] of all) {
|
|
94
|
+
if (!contracts.has(name))
|
|
95
|
+
fail(`missing explicit binding contract for ${name}`);
|
|
96
|
+
if (online && (!strings(contracts.get(name).health) || !contracts.get(name).health.length))
|
|
97
|
+
fail(`missing operational health command for ${name}`);
|
|
98
|
+
if (online && !seenHandles.has(name))
|
|
99
|
+
fail(`online stack app ${name} is absent from daemon`);
|
|
100
|
+
}
|
|
101
|
+
if ([...contracts.keys()].some(name => !all.has(name)))
|
|
102
|
+
fail('contract names an app absent from local stacks');
|
|
103
|
+
return { previous, candidate, inventory, apps: [...contracts.values()],
|
|
104
|
+
online: [...all].filter(([, online]) => online).map(([name]) => name).sort(),
|
|
105
|
+
offline: [...all].filter(([, online]) => !online).map(([name]) => name).sort() };
|
|
106
|
+
}
|
|
107
|
+
export function verifyRestoredInventory(plan, bundle, status) {
|
|
108
|
+
assertServingBundle(bundle, status);
|
|
109
|
+
const online = status.apps.filter(a => a.status === 'online').map(a => a.name).sort();
|
|
110
|
+
if (JSON.stringify(online) !== JSON.stringify(plan.online) || new Set(status.apps.map(a => a.name)).size !== status.apps.length ||
|
|
111
|
+
status.apps.some(a => ![...plan.online, ...plan.offline].includes(a.name) || ['starting', 'stopping'].includes(a.status))) {
|
|
112
|
+
throw new Error('Restored daemon does not have exactly the previously online apps');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/** Save intent before mutation; rollback only the framework and dependency bindings, never app releases/data. */
|
|
116
|
+
export async function executeHostUpgrade(plan, id, actions) {
|
|
117
|
+
const receipt = { schema: 1, id, plan, phase: 'prepared', outcome: 'running', events: [] };
|
|
118
|
+
const record = async (phase, error) => {
|
|
119
|
+
receipt.phase = phase;
|
|
120
|
+
receipt.events.push({ at: new Date().toISOString(), phase, ...(error ? { error: String(error) } : {}) });
|
|
121
|
+
await actions.save(receipt);
|
|
122
|
+
};
|
|
123
|
+
await record('prepared'); // If this fails there must be no mutation.
|
|
124
|
+
try {
|
|
125
|
+
await record('stopping');
|
|
126
|
+
await actions.stop(plan.previous);
|
|
127
|
+
await record('activating');
|
|
128
|
+
await actions.activate(plan.candidate);
|
|
129
|
+
await record('rebinding');
|
|
130
|
+
for (const app of plan.apps)
|
|
131
|
+
await actions.rebind(app, plan.candidate);
|
|
132
|
+
await record('starting');
|
|
133
|
+
await actions.start(plan.candidate);
|
|
134
|
+
await record('verifying');
|
|
135
|
+
await actions.verify(plan.candidate);
|
|
136
|
+
receipt.outcome = 'upgraded';
|
|
137
|
+
await record('verified');
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
// A failed terminal write may have left either the old or the new bytes.
|
|
141
|
+
// Rollback intent must always be discoverable as unfinished after a crash.
|
|
142
|
+
receipt.outcome = 'running';
|
|
143
|
+
// Record loss must not prevent recovery. All failed writes remain in the returned receipt.
|
|
144
|
+
try {
|
|
145
|
+
await record('rollback', error);
|
|
146
|
+
}
|
|
147
|
+
catch (writeError) {
|
|
148
|
+
receipt.events.push({ at: new Date().toISOString(), phase: 'receipt-write-failed', error: String(writeError) });
|
|
149
|
+
}
|
|
150
|
+
return recoverHostUpgrade(receipt, actions);
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
await actions.prune([plan.previous.root, plan.candidate.root]);
|
|
154
|
+
await record('retained');
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
try {
|
|
158
|
+
await record('retention-failed', error);
|
|
159
|
+
}
|
|
160
|
+
catch { /* verified upgrade remains successful */ }
|
|
161
|
+
}
|
|
162
|
+
return receipt;
|
|
163
|
+
}
|
|
164
|
+
/** Idempotent recovery of an interrupted operation, including a controller lost between phase writes. */
|
|
165
|
+
export async function recoverHostUpgrade(receipt, actions) {
|
|
166
|
+
const record = async (phase, error) => {
|
|
167
|
+
receipt.phase = phase;
|
|
168
|
+
receipt.events.push({ at: new Date().toISOString(), phase, ...(error ? { error: String(error) } : {}) });
|
|
169
|
+
await actions.save(receipt);
|
|
170
|
+
};
|
|
171
|
+
try {
|
|
172
|
+
receipt.outcome = 'running';
|
|
173
|
+
await record('recovering');
|
|
174
|
+
await actions.stop(receipt.plan.candidate);
|
|
175
|
+
await actions.activate(receipt.plan.previous);
|
|
176
|
+
for (const app of receipt.plan.apps)
|
|
177
|
+
await actions.rebind(app, receipt.plan.previous);
|
|
178
|
+
await actions.start(receipt.plan.previous);
|
|
179
|
+
await actions.verify(receipt.plan.previous);
|
|
180
|
+
receipt.outcome = 'rolled-back';
|
|
181
|
+
await record('rolled-back');
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
receipt.outcome = 'recovery-required';
|
|
185
|
+
try {
|
|
186
|
+
await record('recovery-required', error);
|
|
187
|
+
}
|
|
188
|
+
catch { /* original durable intent remains */ }
|
|
189
|
+
}
|
|
190
|
+
return receipt;
|
|
191
|
+
}
|
|
192
|
+
export function appHealthCommand(app, bundle) {
|
|
193
|
+
if (!app.health?.length)
|
|
194
|
+
throw new Error(`No operational health command for ${app.name}`);
|
|
195
|
+
return remoteNode(`${fsPrelude} import {execFileSync} from 'node:child_process';
|
|
196
|
+
const cwd=${JSON.stringify(app.cwd)};
|
|
197
|
+
if(fs.realpathSync(cwd)!==cwd) throw Error('Release cwd changed or is not immutable');
|
|
198
|
+
const argv=${JSON.stringify(app.health)};
|
|
199
|
+
execFileSync(argv[0],argv.slice(1),{cwd,env:{...process.env,...${JSON.stringify(app.binding.kind === 'hook' ? { [app.binding.bundleEnv]: bundle.root } : {})}},stdio:'inherit',timeout:300000});`);
|
|
200
|
+
}
|
|
201
|
+
export function pendingReceiptsCommand(prefix, id) {
|
|
202
|
+
if (id !== undefined && !/^[A-Za-z0-9_-]+$/.test(id))
|
|
203
|
+
throw new Error('Invalid host upgrade receipt ID');
|
|
204
|
+
return remoteNode(`${fsPrelude}
|
|
205
|
+
const dir=${JSON.stringify(`${prefix}/upgrade-receipts`)};
|
|
206
|
+
const ids=${id === undefined ? "fs.existsSync(dir)?fs.readdirSync(dir).filter(n=>n.endsWith('.json')):[]" : JSON.stringify([`${id}.json`])};
|
|
207
|
+
const records=ids.map(name=>JSON.parse(fs.readFileSync(path.join(dir,name),'utf8')));
|
|
208
|
+
if(records.some(r=>r.schema!==1 || !r.plan || !Array.isArray(r.events))) throw Error('Invalid host upgrade receipt');
|
|
209
|
+
console.log(JSON.stringify(records.filter(r=>['running','recovery-required'].includes(r.outcome))));`);
|
|
210
|
+
}
|
|
211
|
+
/** Every program argument is quoted as data; declared hooks run without shell interpolation. */
|
|
212
|
+
export function remoteNode(source) { return `node --input-type=module -e ${shellEscape(source)}`; }
|
|
213
|
+
const fsPrelude = `import fs from 'node:fs'; import path from 'node:path'; import { pathToFileURL } from 'node:url';`;
|
|
214
|
+
export function bundleProbeCommand(prefix, version) {
|
|
215
|
+
return remoteNode(`${fsPrelude}
|
|
216
|
+
const prefix=fs.realpathSync(${JSON.stringify(prefix)});
|
|
217
|
+
if(prefix!==${JSON.stringify(prefix)}) throw Error('Installation prefix must be canonical');
|
|
218
|
+
const root=fs.realpathSync(path.join(prefix,${JSON.stringify(version ? `versions/${version}` : 'current')}));
|
|
219
|
+
if(path.dirname(root)!==path.join(prefix,'versions')) throw Error('Bundle is not an immutable installed version');
|
|
220
|
+
const meta=JSON.parse(fs.readFileSync(path.join(root,'BUNDLE.json'),'utf8'));
|
|
221
|
+
const stamp=JSON.parse(fs.readFileSync(path.join(root,'dist/BUILD.json'),'utf8'));
|
|
222
|
+
const pkg=JSON.parse(fs.readFileSync(path.join(root,'package.json'),'utf8'));
|
|
223
|
+
if(meta.dirty!==false || stamp.dirty!==false || !/^[a-f0-9]{40}$/.test(meta.commit) || stamp.commit!==meta.commit ||
|
|
224
|
+
meta.version!==path.basename(root) || pkg.version!==meta.version) throw Error('Inconsistent bundle metadata');
|
|
225
|
+
fs.accessSync(path.join(root,'dist/cli/omnitron.js'),fs.constants.X_OK);
|
|
226
|
+
console.log(JSON.stringify({root,version:meta.version,commit:meta.commit}));`);
|
|
227
|
+
}
|
|
228
|
+
export function inventoryCommand(bundle, full) {
|
|
229
|
+
return remoteNode(`${fsPrelude}
|
|
230
|
+
const {createDaemonClient}=await import(pathToFileURL(${JSON.stringify(`${bundle.root}/dist/daemon/daemon-client.js`)}).href);
|
|
231
|
+
const client=createDaemonClient();
|
|
232
|
+
try {
|
|
233
|
+
const status=await client.status();
|
|
234
|
+
${full ? `const service=await client.service('OmnitronProject');
|
|
235
|
+
const projects=await service.listProjects(); const stacks=[]; const contracts=[];
|
|
236
|
+
for(const project of projects){
|
|
237
|
+
stacks.push({project:project.name,path:project.path,stacks:await service.listStacks({project:project.name})});
|
|
238
|
+
const file=path.join(project.path,${JSON.stringify(HOST_UPGRADE_CONTRACT)});
|
|
239
|
+
if(fs.existsSync(file)) contracts.push({...JSON.parse(fs.readFileSync(file,'utf8')),project:project.name});
|
|
240
|
+
}
|
|
241
|
+
console.log(JSON.stringify({status,projects,stacks,contracts}));` : 'console.log(JSON.stringify(status));'}
|
|
242
|
+
} finally { await client.disconnect(); }`);
|
|
243
|
+
}
|
|
244
|
+
export function hookCommand(app, bundle, operation) {
|
|
245
|
+
if (app.binding.kind === 'independent')
|
|
246
|
+
return 'true';
|
|
247
|
+
return remoteNode(`${fsPrelude} import {execFileSync} from 'node:child_process';
|
|
248
|
+
const cwd=${JSON.stringify(app.cwd)};
|
|
249
|
+
if(fs.realpathSync(cwd)!==cwd) throw Error('Release cwd changed or is not immutable');
|
|
250
|
+
const argv=${JSON.stringify(app.binding[operation])};
|
|
251
|
+
execFileSync(argv[0],argv.slice(1),{cwd,env:{...process.env,[${JSON.stringify(app.binding.bundleEnv)}]:${JSON.stringify(bundle.root)}},stdio:'inherit',timeout:300000});`);
|
|
252
|
+
}
|
|
253
|
+
export function receiptCommand(prefix, receipt) {
|
|
254
|
+
return remoteNode(`${fsPrelude}
|
|
255
|
+
const dir=${JSON.stringify(`${prefix}/upgrade-receipts`)}; fs.mkdirSync(dir,{recursive:true,mode:0o700});
|
|
256
|
+
const file=path.join(dir,${JSON.stringify(`${receipt.id}.json`)}); const temporary=file+'.part';
|
|
257
|
+
const fd=fs.openSync(temporary,'w',0o600);
|
|
258
|
+
try { fs.writeFileSync(fd,${JSON.stringify(JSON.stringify(receipt, null, 2) + '\n')}); fs.fsyncSync(fd); } finally { fs.closeSync(fd); }
|
|
259
|
+
fs.renameSync(temporary,file); const directory=fs.openSync(dir,'r'); try{fs.fsyncSync(directory)}finally{fs.closeSync(directory)};`);
|
|
260
|
+
}
|
|
261
|
+
export function contractPreflightCommand(apps) {
|
|
262
|
+
return remoteNode(`${fsPrelude}
|
|
263
|
+
for(const app of ${JSON.stringify(apps)}){
|
|
264
|
+
if(fs.realpathSync(app.cwd)!==app.cwd || !fs.statSync(app.cwd).isDirectory()) throw Error('Release cwd is not immutable: '+app.name);
|
|
265
|
+
for(const argv of [...(app.binding.kind==='hook'?[app.binding.rebind,app.binding.verify]:[]),...(app.health?[app.health]:[])]) {
|
|
266
|
+
const executable=argv[0];
|
|
267
|
+
const candidates=executable.includes('/') ? [path.resolve(app.cwd,executable)] : (process.env.PATH||'').split(':').filter(Boolean).map(p=>path.join(p,executable));
|
|
268
|
+
if(!candidates.some(p=>{try{fs.accessSync(p,fs.constants.X_OK);return fs.statSync(p).isFile()}catch{return false}})) throw Error('Missing hook executable: '+executable);
|
|
269
|
+
}
|
|
270
|
+
}`);
|
|
271
|
+
}
|
|
272
|
+
/** Only the declared dependency binding changes; release paths, versions, and app data stay intact. */
|
|
273
|
+
export function updateContractBindingsCommand(plan, bundle) {
|
|
274
|
+
return remoteNode(`${fsPrelude}
|
|
275
|
+
for(const project of ${JSON.stringify(plan.inventory.projects)}) {
|
|
276
|
+
const file=path.join(project.path,${JSON.stringify(HOST_UPGRADE_CONTRACT)});
|
|
277
|
+
if(!fs.existsSync(file)) continue;
|
|
278
|
+
const document=JSON.parse(fs.readFileSync(file,'utf8'));
|
|
279
|
+
const expected=${JSON.stringify(plan.apps)}.filter(a=>a.name.startsWith(project.name+'/'));
|
|
280
|
+
if(document.schema!==1 || !Array.isArray(document.apps) || document.apps.length!==expected.length) throw Error('App contract changed during upgrade');
|
|
281
|
+
for(const app of document.apps) {
|
|
282
|
+
const original=expected.find(a=>a.name===app.name);
|
|
283
|
+
const normalized=JSON.parse(JSON.stringify(app));
|
|
284
|
+
if(normalized.binding.kind==='hook') normalized.binding.bundleRoot=${JSON.stringify(plan.previous.root)};
|
|
285
|
+
if(JSON.stringify(normalized)!==JSON.stringify(original)) throw Error('App release contract changed during upgrade: '+app.name);
|
|
286
|
+
if(app.binding.kind==='hook') app.binding.bundleRoot=${JSON.stringify(bundle.root)};
|
|
287
|
+
}
|
|
288
|
+
const temporary=file+'.upgrade-part'; const fd=fs.openSync(temporary,'w',0o600);
|
|
289
|
+
try {fs.writeFileSync(fd,JSON.stringify(document,null,2));fs.fsyncSync(fd)}finally{fs.closeSync(fd)}
|
|
290
|
+
fs.renameSync(temporary,file);
|
|
291
|
+
}`);
|
|
292
|
+
}
|
|
293
|
+
/** Linux process identity + supervisor state. Other platforms and custom/drop-in units fail closed. */
|
|
294
|
+
export function runtimeProbeCommand(bundle, pid) {
|
|
295
|
+
return remoteNode(`${fsPrelude} import os from 'node:os'; import {execFileSync} from 'node:child_process';
|
|
296
|
+
if(process.platform!=='linux') throw Error('Controlled host upgrade currently requires Linux runtime inspection');
|
|
297
|
+
const root=${JSON.stringify(bundle.root)}; const pid=${JSON.stringify(pid)};
|
|
298
|
+
const argv=fs.readFileSync('/proc/'+pid+'/cmdline','utf8').split('\\0').filter(Boolean);
|
|
299
|
+
const entry=argv.find(a=>a.endsWith('/dist/daemon/daemon-entry.js'));
|
|
300
|
+
if(!entry || fs.realpathSync(entry)!==root+'/dist/daemon/daemon-entry.js') throw Error('Serving daemon entry does not bind installed bundle');
|
|
301
|
+
const cwd=fs.realpathSync('/proc/'+pid+'/cwd');
|
|
302
|
+
const candidates=[{scope:'system',file:'/etc/systemd/system/omnitron-daemon.service'},{scope:'user',file:path.join(os.homedir(),'.config/systemd/user/omnitron-daemon.service')}].filter(c=>fs.existsSync(c.file));
|
|
303
|
+
if(candidates.length>1) throw Error('Multiple supervisor scopes are unsupported');
|
|
304
|
+
if(!candidates.length) { console.log(JSON.stringify({kind:'fork',cwd})); }
|
|
305
|
+
else {
|
|
306
|
+
const unit=candidates[0]; const args=unit.scope==='user'?['--user']:[];
|
|
307
|
+
const output=execFileSync('systemctl',[...args,'show','omnitron-daemon.service','--property=MainPID,ActiveState,UnitFileState,FragmentPath,DropInPaths'],{encoding:'utf8'});
|
|
308
|
+
const properties=Object.fromEntries(output.trim().split('\\n').map(l=>[l.slice(0,l.indexOf('=')),l.slice(l.indexOf('=')+1)]));
|
|
309
|
+
if(properties.MainPID!==String(pid) || properties.ActiveState!=='active' || properties.FragmentPath!==unit.file || properties.DropInPaths || !['enabled','disabled'].includes(properties.UnitFileState)) throw Error('Supervisor does not own the serving daemon, or has unsupported overrides');
|
|
310
|
+
const contents=fs.readFileSync(unit.file,'utf8');
|
|
311
|
+
const lines=contents.split('\\n'); const exec=lines.filter(l=>l.startsWith('ExecStart=')); const wd=lines.filter(l=>l.startsWith('WorkingDirectory='));
|
|
312
|
+
const aliases=[root,path.dirname(path.dirname(root))+'/current'];
|
|
313
|
+
if(exec.length!==1 || wd.length!==1 || !aliases.some(p=>exec[0].includes(p+'/dist/daemon/daemon-entry.js')) || !aliases.some(p=>wd[0]==='WorkingDirectory='+p)) throw Error('Unsupported supervisor framework binding');
|
|
314
|
+
const operatorCwd=lines.filter(l=>/^Environment="?OMNITRON_CWD=/.test(l));
|
|
315
|
+
if(operatorCwd.length!==1 || !aliases.some(p=>operatorCwd[0]==='Environment=OMNITRON_CWD='+p || operatorCwd[0]==='Environment="OMNITRON_CWD='+p+'"')) throw Error('Unsupported supervisor operator cwd');
|
|
316
|
+
if(lines.some(l=>!l.startsWith('ExecStart=')&&!l.startsWith('WorkingDirectory=')&&!/^Environment="?OMNITRON_CWD=/.test(l)&&l.includes(root))) throw Error('Additional static framework paths in service need an explicit migration');
|
|
317
|
+
console.log(JSON.stringify({kind:'systemd',cwd,...unit,contents,enabled:properties.UnitFileState==='enabled'}));
|
|
318
|
+
}`);
|
|
319
|
+
}
|
|
320
|
+
export function runtimeStopCommand(runtime, bundle) {
|
|
321
|
+
if (runtime.kind === 'fork')
|
|
322
|
+
return `${shellEscape(`${bundle.root}/dist/cli/omnitron.js`)} down`;
|
|
323
|
+
return `systemctl ${runtime.scope === 'user' ? '--user ' : ''}stop omnitron-daemon.service`;
|
|
324
|
+
}
|
|
325
|
+
export function runtimeStartCommand(runtime, previous, bundle, allowedCurrentRoots = [previous.root, bundle.root]) {
|
|
326
|
+
if (runtime.kind === 'fork')
|
|
327
|
+
return `cd ${shellEscape(runtime.cwd === previous.root ? bundle.root : runtime.cwd)} && ${shellEscape(`${bundle.root}/dist/cli/omnitron.js`)} up --no-infra`;
|
|
328
|
+
return remoteNode(`${fsPrelude} import {execFileSync} from 'node:child_process';
|
|
329
|
+
const original=${JSON.stringify(runtime.contents)};
|
|
330
|
+
const render=root=>original.split('\\n').map(l=>(l.startsWith('ExecStart=')||l.startsWith('WorkingDirectory=')||/^Environment="?OMNITRON_CWD=/.test(l))?l.split(${JSON.stringify(previous.root)}).join(root):l).join('\\n');
|
|
331
|
+
const content=render(${JSON.stringify(bundle.root)});
|
|
332
|
+
const file=${JSON.stringify(runtime.file)};
|
|
333
|
+
if(!${JSON.stringify(allowedCurrentRoots)}.map(render).includes(fs.readFileSync(file,'utf8'))) throw Error('Supervisor unit changed outside the captured host operation');
|
|
334
|
+
const mode=fs.statSync(file).mode & 0o777;
|
|
335
|
+
const temporary=file+'.upgrade-part'; const fd=fs.openSync(temporary,'w',mode);
|
|
336
|
+
try{fs.writeFileSync(fd,content);fs.fsyncSync(fd)}finally{fs.closeSync(fd)} fs.renameSync(temporary,file);
|
|
337
|
+
const scope=${JSON.stringify(runtime.scope === 'user' ? ['--user'] : [])};
|
|
338
|
+
execFileSync('systemctl',[...scope,'daemon-reload'],{stdio:'inherit'});
|
|
339
|
+
execFileSync('systemctl',[...scope,${JSON.stringify(runtime.enabled ? 'enable' : 'disable')},'omnitron-daemon.service'],{stdio:'inherit'});
|
|
340
|
+
execFileSync('systemctl',[...scope,'start','omnitron-daemon.service'],{stdio:'inherit'});`);
|
|
341
|
+
}
|
|
342
|
+
/** A successful CLI exit is insufficient: prove its native PID owner is no longer alive before rebinding. */
|
|
343
|
+
export function stoppedDaemonCommand(bundle) {
|
|
344
|
+
return remoteNode(`${fsPrelude}
|
|
345
|
+
const base=${JSON.stringify(bundle.root)};
|
|
346
|
+
const {PidManager}=await import(pathToFileURL(base+'/dist/daemon/pid-manager.js').href);
|
|
347
|
+
const {DEFAULT_DAEMON_CONFIG}=await import(pathToFileURL(base+'/dist/config/defaults.js').href);
|
|
348
|
+
const {expandPath}=await import(pathToFileURL(base+'/dist/shared/paths.js').href);
|
|
349
|
+
const pid=new PidManager(expandPath(DEFAULT_DAEMON_CONFIG.pidFile)).getPid();
|
|
350
|
+
if(pid && PidManager.isProcessAlive(pid)) throw Error('Daemon still owns a live PID after stop; refusing to change bindings');`);
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=host-upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-upgrade.js","sourceRoot":"","sources":["../../src/services/host-upgrade.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* Netron RPC endpoints for infrastructure container management
|
|
5
5
|
* (Docker-based PostgreSQL, Redis, MinIO, etc.).
|
|
6
6
|
*/
|
|
7
|
+
import { HostIngressService } from '../infrastructure/host-ingress.service.js';
|
|
8
|
+
import type { HostIngressApply, HostIngressRemove, HostIngressSettings, HostIngressOwnerRestore, HostIngressTakeoverRollback } from '../infrastructure/host-ingress-types.js';
|
|
7
9
|
import type { InfrastructureService } from '../infrastructure/infrastructure.service.js';
|
|
8
10
|
import type { InfrastructureConfig, IServiceRequirement } from '../infrastructure/types.js';
|
|
9
11
|
import type { InfrastructureState, ContainerState } from '../infrastructure/types.js';
|
|
@@ -52,6 +54,7 @@ export declare class InfrastructureRpcService implements IOmnitronInfraService {
|
|
|
52
54
|
* partial payload a `warn`.
|
|
53
55
|
*/
|
|
54
56
|
private readonly logger?;
|
|
57
|
+
private readonly hostIngress;
|
|
55
58
|
constructor(getInfra: () => InfrastructureService | null,
|
|
56
59
|
/**
|
|
57
60
|
* How this daemon builds and adopts an infrastructure it is asked for.
|
|
@@ -98,7 +101,19 @@ export declare class InfrastructureRpcService implements IOmnitronInfraService {
|
|
|
98
101
|
error(obj: object, msg?: string, ...args: any[]): void;
|
|
99
102
|
warn?(obj: object, msg?: string, ...args: any[]): void;
|
|
100
103
|
info?(obj: object, msg?: string, ...args: any[]): void;
|
|
101
|
-
} | undefined);
|
|
104
|
+
} | undefined, hostIngress?: HostIngressService);
|
|
105
|
+
configureHostIngress(data: HostIngressSettings): Promise<{
|
|
106
|
+
configured: true;
|
|
107
|
+
settings: HostIngressSettings;
|
|
108
|
+
}>;
|
|
109
|
+
getHostIngress(): Promise<import("../infrastructure/host-ingress-types.js").HostIngressStatus>;
|
|
110
|
+
checkHostIngress(data: HostIngressApply): Promise<import("../infrastructure/host-ingress-types.js").HostIngressCheck>;
|
|
111
|
+
validateHostIngress(data: HostIngressApply): Promise<import("../infrastructure/host-ingress-types.js").HostIngressValidation>;
|
|
112
|
+
restoreHostIngressOwner(data: HostIngressOwnerRestore): Promise<import("../infrastructure/host-ingress-types.js").HostIngressReceipt>;
|
|
113
|
+
rollbackHostIngressTakeover(data: HostIngressTakeoverRollback): Promise<import("../infrastructure/host-ingress-types.js").HostIngressTakeoverRollbackReceipt>;
|
|
114
|
+
applyHostIngress(data: HostIngressApply): Promise<import("../infrastructure/host-ingress-types.js").HostIngressReceipt>;
|
|
115
|
+
removeHostIngress(data: HostIngressRemove): Promise<import("../infrastructure/host-ingress-types.js").HostIngressReceipt>;
|
|
116
|
+
recoverHostIngress(): Promise<import("../infrastructure/host-ingress-types.js").HostIngressStatus>;
|
|
102
117
|
/**
|
|
103
118
|
* Bring up the infrastructure a stack needs, here, on this node.
|
|
104
119
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"infrastructure.rpc-service.d.ts","sourceRoot":"","sources":["../../src/services/infrastructure.rpc-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"infrastructure.rpc-service.d.ts","sourceRoot":"","sources":["../../src/services/infrastructure.rpc-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,13 +13,14 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
13
13
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
14
14
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
15
15
|
};
|
|
16
|
+
import { HostIngressService } from '../infrastructure/host-ingress.service.js';
|
|
16
17
|
import { Service, Public } from '@omnitron-dev/titan/decorators';
|
|
17
18
|
import { Errors } from '@omnitron-dev/titan/errors';
|
|
18
19
|
import { VIEWER_ROLES, OPERATOR_ROLES, CONTROL_PLANE_ROLES, CONTROL_PLANE_READ_ROLES } from '../shared/roles.js';
|
|
19
20
|
import { summariseProvisioning, provisioningVerdict } from '../infrastructure/provisioning-outcome.js';
|
|
20
21
|
import { withGeneratedCredentials } from '../infrastructure/service-credentials.js';
|
|
21
22
|
import { duringPhase } from '../project/deploy-phases.js';
|
|
22
|
-
import { containerEndpoint, REDIS_CONTAINER_PORT } from '../infrastructure/service-resolver.js';
|
|
23
|
+
import { containerEndpoint, REDIS_CONTAINER_PORT, withInfrastructureScope } from '../infrastructure/service-resolver.js';
|
|
23
24
|
import { gatewayRedisDb } from '../infrastructure/gateway-redis-db.js';
|
|
24
25
|
import { startContainer, stopContainer, removeContainer, getContainerLogs, listManagedContainers, } from '../infrastructure/container-runtime.js';
|
|
25
26
|
let InfrastructureRpcService = class InfrastructureRpcService {
|
|
@@ -27,6 +28,7 @@ let InfrastructureRpcService = class InfrastructureRpcService {
|
|
|
27
28
|
hostInfra;
|
|
28
29
|
getVault;
|
|
29
30
|
logger;
|
|
31
|
+
hostIngress;
|
|
30
32
|
constructor(getInfra,
|
|
31
33
|
/**
|
|
32
34
|
* How this daemon builds and adopts an infrastructure it is asked for.
|
|
@@ -69,12 +71,22 @@ let InfrastructureRpcService = class InfrastructureRpcService {
|
|
|
69
71
|
* credential; writing a node's config files is worth an `info` and a
|
|
70
72
|
* partial payload a `warn`.
|
|
71
73
|
*/
|
|
72
|
-
logger) {
|
|
74
|
+
logger, hostIngress = new HostIngressService()) {
|
|
73
75
|
this.getInfra = getInfra;
|
|
74
76
|
this.hostInfra = hostInfra;
|
|
75
77
|
this.getVault = getVault;
|
|
76
78
|
this.logger = logger;
|
|
79
|
+
this.hostIngress = hostIngress;
|
|
77
80
|
}
|
|
81
|
+
async configureHostIngress(data) { return this.hostIngress.configure(data); }
|
|
82
|
+
async getHostIngress() { return this.hostIngress.status(); }
|
|
83
|
+
async checkHostIngress(data) { return this.hostIngress.check(data); }
|
|
84
|
+
async validateHostIngress(data) { return this.hostIngress.validate(data); }
|
|
85
|
+
async restoreHostIngressOwner(data) { return this.hostIngress.restoreOwner(data); }
|
|
86
|
+
async rollbackHostIngressTakeover(data) { return this.hostIngress.rollbackTakeover(data); }
|
|
87
|
+
async applyHostIngress(data) { return this.hostIngress.apply(data); }
|
|
88
|
+
async removeHostIngress(data) { return this.hostIngress.remove(data); }
|
|
89
|
+
async recoverHostIngress() { return this.hostIngress.recover(); }
|
|
78
90
|
/**
|
|
79
91
|
* Bring up the infrastructure a stack needs, here, on this node.
|
|
80
92
|
*
|
|
@@ -108,7 +120,7 @@ let InfrastructureRpcService = class InfrastructureRpcService {
|
|
|
108
120
|
// Named while it runs, so a stall on this node says what it was doing.
|
|
109
121
|
// Test node, 2026-09-22: it went quiet for ten seconds around the end of a
|
|
110
122
|
// provision and nothing here could name it — `monitoring/event-loop-watch.ts`.
|
|
111
|
-
return duringPhase(`provisioning ${data?.project ?? 'omnitron'}/${data?.stack ?? 'default'} for the master`, () => this.provisionStackNow(data));
|
|
123
|
+
return withInfrastructureScope(data?.project, data?.stack, () => duringPhase(`provisioning ${data?.project ?? 'omnitron'}/${data?.stack ?? 'default'} for the master`, () => this.provisionStackNow(data)));
|
|
112
124
|
}
|
|
113
125
|
/** `provisionStack`'s work. Not an RPC method: it carries no `@Public`. */
|
|
114
126
|
async provisionStackNow(data) {
|
|
@@ -131,11 +143,6 @@ let InfrastructureRpcService = class InfrastructureRpcService {
|
|
|
131
143
|
// Measured: a node asked to provision `postgres, redis, minio` answered
|
|
132
144
|
// "Infrastructure: nothing is declared, so nothing was provisioned" —
|
|
133
145
|
// which was true of what it had been given and false of what was asked.
|
|
134
|
-
if (data.project && data.stack) {
|
|
135
|
-
const { setContainerPrefix, setStackLabels } = await import('../infrastructure/service-resolver.js');
|
|
136
|
-
setContainerPrefix(data.project, data.stack);
|
|
137
|
-
setStackLabels(data.project, data.stack);
|
|
138
|
-
}
|
|
139
146
|
const { normalizeInfraConfig } = await import('../infrastructure/config-normalizer.js');
|
|
140
147
|
const { createDefaultRegistry } = await import('../infrastructure/presets/index.js');
|
|
141
148
|
// One registry, used to expand the config AND to run the post-provision
|
|
@@ -233,7 +240,7 @@ let InfrastructureRpcService = class InfrastructureRpcService {
|
|
|
233
240
|
service.setConfigRoots(configRoots, staticRoots, {
|
|
234
241
|
host: endpoint.host,
|
|
235
242
|
port: endpoint.port,
|
|
236
|
-
// Not `(redis.db ?? 0) + 1`: on
|
|
243
|
+
// Not `(redis.db ?? 0) + 1`: on sample/test that is 1, storage's
|
|
237
244
|
// database, while main wrote the lock to 5 — see gateway-redis-db.ts.
|
|
238
245
|
db: gatewayRedisDb(redisCfg?.databases),
|
|
239
246
|
...(redisCfg?.password ? { password: redisCfg.password } : {}),
|
|
@@ -514,6 +521,60 @@ let InfrastructureRpcService = class InfrastructureRpcService {
|
|
|
514
521
|
return { logs: await getContainerLogs(data.name, tail) };
|
|
515
522
|
}
|
|
516
523
|
};
|
|
524
|
+
__decorate([
|
|
525
|
+
Public({ auth: { roles: ['admin', 'service_role'] } }),
|
|
526
|
+
__metadata("design:type", Function),
|
|
527
|
+
__metadata("design:paramtypes", [Object]),
|
|
528
|
+
__metadata("design:returntype", Promise)
|
|
529
|
+
], InfrastructureRpcService.prototype, "configureHostIngress", null);
|
|
530
|
+
__decorate([
|
|
531
|
+
Public({ auth: { roles: CONTROL_PLANE_READ_ROLES } }),
|
|
532
|
+
__metadata("design:type", Function),
|
|
533
|
+
__metadata("design:paramtypes", []),
|
|
534
|
+
__metadata("design:returntype", Promise)
|
|
535
|
+
], InfrastructureRpcService.prototype, "getHostIngress", null);
|
|
536
|
+
__decorate([
|
|
537
|
+
Public({ auth: { roles: CONTROL_PLANE_ROLES } }),
|
|
538
|
+
__metadata("design:type", Function),
|
|
539
|
+
__metadata("design:paramtypes", [Object]),
|
|
540
|
+
__metadata("design:returntype", Promise)
|
|
541
|
+
], InfrastructureRpcService.prototype, "checkHostIngress", null);
|
|
542
|
+
__decorate([
|
|
543
|
+
Public({ auth: { roles: CONTROL_PLANE_ROLES } }),
|
|
544
|
+
__metadata("design:type", Function),
|
|
545
|
+
__metadata("design:paramtypes", [Object]),
|
|
546
|
+
__metadata("design:returntype", Promise)
|
|
547
|
+
], InfrastructureRpcService.prototype, "validateHostIngress", null);
|
|
548
|
+
__decorate([
|
|
549
|
+
Public({ auth: { roles: CONTROL_PLANE_ROLES } }),
|
|
550
|
+
__metadata("design:type", Function),
|
|
551
|
+
__metadata("design:paramtypes", [Object]),
|
|
552
|
+
__metadata("design:returntype", Promise)
|
|
553
|
+
], InfrastructureRpcService.prototype, "restoreHostIngressOwner", null);
|
|
554
|
+
__decorate([
|
|
555
|
+
Public({ auth: { roles: ['admin', 'service_role'] } }),
|
|
556
|
+
__metadata("design:type", Function),
|
|
557
|
+
__metadata("design:paramtypes", [Object]),
|
|
558
|
+
__metadata("design:returntype", Promise)
|
|
559
|
+
], InfrastructureRpcService.prototype, "rollbackHostIngressTakeover", null);
|
|
560
|
+
__decorate([
|
|
561
|
+
Public({ auth: { roles: CONTROL_PLANE_ROLES } }),
|
|
562
|
+
__metadata("design:type", Function),
|
|
563
|
+
__metadata("design:paramtypes", [Object]),
|
|
564
|
+
__metadata("design:returntype", Promise)
|
|
565
|
+
], InfrastructureRpcService.prototype, "applyHostIngress", null);
|
|
566
|
+
__decorate([
|
|
567
|
+
Public({ auth: { roles: CONTROL_PLANE_ROLES } }),
|
|
568
|
+
__metadata("design:type", Function),
|
|
569
|
+
__metadata("design:paramtypes", [Object]),
|
|
570
|
+
__metadata("design:returntype", Promise)
|
|
571
|
+
], InfrastructureRpcService.prototype, "removeHostIngress", null);
|
|
572
|
+
__decorate([
|
|
573
|
+
Public({ auth: { roles: ['admin', 'service_role'] } }),
|
|
574
|
+
__metadata("design:type", Function),
|
|
575
|
+
__metadata("design:paramtypes", []),
|
|
576
|
+
__metadata("design:returntype", Promise)
|
|
577
|
+
], InfrastructureRpcService.prototype, "recoverHostIngress", null);
|
|
517
578
|
__decorate([
|
|
518
579
|
Public({ auth: { roles: CONTROL_PLANE_ROLES } }),
|
|
519
580
|
__metadata("design:type", Function),
|
|
@@ -570,7 +631,7 @@ __decorate([
|
|
|
570
631
|
], InfrastructureRpcService.prototype, "getContainerLogs", null);
|
|
571
632
|
InfrastructureRpcService = __decorate([
|
|
572
633
|
Service({ name: 'OmnitronInfra' }),
|
|
573
|
-
__metadata("design:paramtypes", [Function, Function, Function, Object])
|
|
634
|
+
__metadata("design:paramtypes", [Function, Function, Function, Object, HostIngressService])
|
|
574
635
|
], InfrastructureRpcService);
|
|
575
636
|
export { InfrastructureRpcService };
|
|
576
637
|
//# sourceMappingURL=infrastructure.rpc-service.js.map
|