@underpostnet/cyberia 3.2.90 → 3.3.73
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/.dockerignore +1 -0
- package/.env.example +16 -0
- package/.github/workflows/coverall.cyberia.ci.yml +107 -0
- package/.github/workflows/cyberia-client.cd.yml +6 -18
- package/.github/workflows/cyberia-server.cd.yml +6 -18
- package/.github/workflows/docker-image.cyberia-client.ci.yml +8 -5
- package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +8 -3
- package/.github/workflows/docker-image.cyberia-server.ci.yml +8 -5
- package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +8 -5
- package/.github/workflows/docker-image.engine-cyberia.ci.yml +15 -1
- package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +15 -1
- package/.github/workflows/engine-cyberia.cd.yml +6 -78
- package/.github/workflows/engine-cyberia.ci.yml +4 -5
- package/.github/workflows/ghpkg.ci.yml +42 -21
- package/.github/workflows/hardhat.ci.yml +12 -11
- package/.github/workflows/npmpkg.ci.yml +17 -15
- package/.github/workflows/pwa-microservices-template-page.cd.yml +1 -16
- package/.github/workflows/pwa-microservices-template-test.ci.yml +2 -2
- package/.github/workflows/release.cd.yml +2 -9
- package/.prettierignore +1 -0
- package/AGENTS.md +47 -0
- package/CHANGELOG.md +581 -2417
- package/CLI-HELP.md +416 -127
- package/Dockerfile +25 -9
- package/Dockerfile.dev +25 -9
- package/Dockerfile.test +4 -4
- package/README.md +21 -1
- package/bin/build.js +70 -43
- package/bin/build.template.js +8 -3
- package/bin/cyberia.js +372 -135
- package/bin/deploy.js +18 -104
- package/bin/index.js +372 -135
- package/compose.env +16 -0
- package/conf.js +93 -4
- package/deploy/cyberia-client/deploy.sh +47 -0
- package/deploy/cyberia-client/package.sh +18 -0
- package/deploy/cyberia-client/state.sh +14 -0
- package/deploy/cyberia-server/deploy.sh +47 -0
- package/deploy/cyberia-server/package.sh +18 -0
- package/deploy/cyberia-server/state.sh +14 -0
- package/deploy/dd-cyberia/deploy.sh +22 -0
- package/deploy/dd-cyberia/init.sh +55 -0
- package/deploy/dd-cyberia/package.sh +17 -0
- package/deploy/dd-cyberia/state.sh +14 -0
- package/deploy/dd-cyberia/sync-deploy.sh +116 -0
- package/deploy/lib/github-actions-logging.sh +594 -0
- package/deploy/lib/host.sh +185 -0
- package/deploy/lib/state.sh +62 -0
- package/deploy/pwa-microservices-template/deploy.sh +45 -0
- package/deploy/release/deploy.sh +32 -0
- package/deployment.yaml +7 -2
- package/docker-compose.yml +31 -37
- package/examples/static-page/README.md +19 -19
- package/examples/static-page/ssr-components/CustomPage.js +2 -2
- package/hardhat/hardhat.config.js +1 -6
- package/hardhat/package-lock.json +104 -43
- package/hardhat/package.json +3 -3
- package/manifests/alertmanager/deployment.yaml +81 -0
- package/manifests/blackbox-exporter/deployment.yaml +75 -0
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +36 -7
- package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +77 -0
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +7 -2
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/manifests/grafana/deployment.yaml +26 -7
- package/manifests/grafana/kustomization.yaml +1 -0
- package/manifests/grafana/service.yaml +6 -1
- package/manifests/mariadb/pv.yaml +1 -0
- package/manifests/mongodb/statefulset.yaml +9 -2
- package/manifests/mysql/pv-pvc.yaml +14 -1
- package/manifests/postgresql/pv.yaml +12 -1
- package/manifests/postgresql/pvc.yaml +1 -0
- package/manifests/prometheus/deployment.yaml +18 -22
- package/package.json +83 -10
- package/scripts/audit-selinux.sh +64 -0
- package/scripts/event-monitor.sh +56 -0
- package/scripts/gpu-diag.sh +0 -0
- package/scripts/ip-info.sh +0 -0
- package/scripts/k3s-node-setup.sh +30 -14
- package/scripts/kubeadm-node-setup.sh +40 -31
- package/scripts/lxd-vm-setup.sh +0 -0
- package/scripts/maas-nat-firewalld.sh +0 -0
- package/scripts/maas-setup.sh +8 -8
- package/scripts/nat-iptables.sh +2 -0
- package/scripts/rhel-grpc-setup.sh +0 -0
- package/scripts/rocky-kickstart.sh +25 -9
- package/scripts/selinux-normalize.sh +907 -0
- package/scripts/shutdown-machine.sh +843 -0
- package/scripts/test-monitor.sh +3 -3
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +1 -1
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +2 -2
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +2 -2
- package/src/api/core/core.controller.js +1 -1
- package/src/api/core/core.router.js +2 -2
- package/src/api/core/core.service.js +2 -2
- package/src/api/crypto/crypto.controller.js +1 -1
- package/src/api/crypto/crypto.service.js +1 -1
- package/src/api/cyberia-action/cyberia-action.controller.js +1 -1
- package/src/api/cyberia-action/cyberia-action.router.js +1 -1
- package/src/api/cyberia-action/cyberia-action.service.js +2 -2
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +1 -1
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +1 -1
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +2 -2
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +1 -1
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +1 -1
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +2 -2
- package/src/api/cyberia-entity/cyberia-entity.controller.js +1 -1
- package/src/api/cyberia-entity/cyberia-entity.router.js +1 -1
- package/src/api/cyberia-entity/cyberia-entity.service.js +2 -2
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +1 -1
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +1 -1
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +2 -2
- package/src/api/cyberia-instance/cyberia-fallback-capture.js +466 -0
- package/src/api/cyberia-instance/cyberia-fallback-default-items.js +63 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +16 -1
- package/src/api/cyberia-instance/cyberia-instance-map.service.js +1 -1
- package/src/api/cyberia-instance/cyberia-instance.controller.js +4 -1
- package/src/api/cyberia-instance/cyberia-instance.router.js +15 -2
- package/src/api/cyberia-instance/cyberia-instance.service.js +45 -2
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +1 -1
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +1 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +1 -1
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +2 -2
- package/src/api/cyberia-map/cyberia-map.controller.js +1 -1
- package/src/api/cyberia-map/cyberia-map.router.js +1 -1
- package/src/api/cyberia-map/cyberia-map.service.js +2 -2
- package/src/api/cyberia-quest/cyberia-quest.controller.js +1 -1
- package/src/api/cyberia-quest/cyberia-quest.router.js +1 -1
- package/src/api/cyberia-quest/cyberia-quest.service.js +2 -2
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +1 -1
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +1 -1
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +2 -2
- package/src/api/cyberia-saga/cyberia-saga.controller.js +1 -1
- package/src/api/cyberia-saga/cyberia-saga.router.js +1 -1
- package/src/api/cyberia-saga/cyberia-saga.service.js +2 -2
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +16 -29
- package/src/api/cyberia-skill/cyberia-skill.controller.js +1 -1
- package/src/api/cyberia-skill/cyberia-skill.router.js +1 -1
- package/src/api/cyberia-skill/cyberia-skill.service.js +2 -2
- package/src/api/default/default.controller.js +1 -1
- package/src/api/default/default.router.js +1 -1
- package/src/api/default/default.service.js +2 -2
- package/src/api/document/document.controller.js +1 -1
- package/src/api/document/document.router.js +1 -1
- package/src/api/document/document.service.js +2 -2
- package/src/api/file/file.controller.js +1 -1
- package/src/api/file/file.router.js +1 -1
- package/src/api/file/file.service.js +2 -2
- package/src/api/instance/instance.controller.js +1 -1
- package/src/api/instance/instance.router.js +1 -1
- package/src/api/instance/instance.service.js +2 -2
- package/src/api/ipfs/ipfs.controller.js +1 -1
- package/src/api/ipfs/ipfs.router.js +2 -2
- package/src/api/ipfs/ipfs.service.js +2 -2
- package/src/api/object-layer/object-layer.controller.js +1 -1
- package/src/api/object-layer/object-layer.model.js +204 -3
- package/src/api/object-layer/object-layer.router.js +2 -2
- package/src/api/object-layer/object-layer.service.js +4 -17
- package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +1 -1
- package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +1 -1
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +2 -2
- package/src/api/test/test.controller.js +1 -1
- package/src/api/test/test.service.js +1 -1
- package/src/api/user/guest.service.js +3 -3
- package/src/api/user/user.controller.js +1 -1
- package/src/api/user/user.router.js +2 -2
- package/src/api/user/user.service.js +4 -4
- package/src/api.js +5 -9
- package/src/cli/app.js +391 -0
- package/src/cli/baremetal.js +30 -36
- package/src/cli/client.js +306 -0
- package/src/cli/cloud-init.js +3 -3
- package/src/cli/cluster.js +242 -135
- package/src/cli/db.js +126 -67
- package/src/cli/deploy.js +158 -60
- package/src/cli/docker-compose.js +5 -5
- package/src/cli/domains.js +184 -0
- package/src/cli/dotenv-store.js +143 -0
- package/src/cli/event.js +2281 -0
- package/src/cli/fs.js +3 -3
- package/src/cli/host.js +672 -0
- package/src/cli/image.js +4 -7
- package/src/cli/index.js +426 -134
- package/src/cli/ipfs.js +34 -30
- package/src/cli/kickstart.js +1 -1
- package/src/cli/kubectl.js +218 -41
- package/src/cli/lxd.js +3 -3
- package/src/cli/monitor.js +1359 -26
- package/src/cli/package.js +90 -0
- package/src/cli/release.js +73 -34
- package/src/cli/repository.js +564 -367
- package/src/cli/run.js +362 -654
- package/src/cli/secrets.js +2158 -964
- package/src/cli/ssh.js +651 -331
- package/src/cli/state.js +394 -0
- package/src/cli/static.js +2 -2
- package/src/cli/system.js +26 -13
- package/src/cli/test.js +199 -125
- package/src/cli/vultr.js +623 -0
- package/src/cli/wireguard.js +2930 -0
- package/src/client/components/core/CalendarCore.js +53 -96
- package/src/client/components/core/Docs.js +258 -211
- package/src/client/components/core/FileExplorer.js +0 -21
- package/src/client/components/core/PanelForm.js +4 -4
- package/src/client/components/core/Repository.js +56 -0
- package/src/client/components/core/Translate.js +7 -0
- package/src/client/components/core/{FullScreen.js → ViewModeController.js} +42 -39
- package/src/client/components/core/Wallet.js +0 -11
- package/src/client/components/core/Worker.js +7 -1
- package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +2 -2
- package/src/client/components/cyberia/FallbackWorldEngineCyberia.js +368 -0
- package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +35 -1
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +4 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +2 -2
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -0
- package/src/client/components/default/AppShellDefault.js +1 -1
- package/src/client/components/default/SettingsDefault.js +2 -2
- package/src/client/components/itemledger/SettingsItemledger.js +2 -2
- package/src/client/components/underpost/AppShellUnderpost.js +3 -2
- package/src/client/components/underpost/SettingsUnderpost.js +2 -2
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +17 -3
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +32 -5
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +1 -1
- package/src/client/public/cyberia-docs/CYBERIA.md +21 -1
- package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +23 -6
- package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
- package/src/client/public/default/android-chrome-144x144.png +0 -0
- package/src/client/public/default/android-chrome-192x192.png +0 -0
- package/src/client/public/default/android-chrome-256x256.png +0 -0
- package/src/client/public/default/android-chrome-36x36.png +0 -0
- package/src/client/public/default/android-chrome-384x384.png +0 -0
- package/src/client/public/default/android-chrome-48x48.png +0 -0
- package/src/client/public/default/android-chrome-512x512.png +0 -0
- package/src/client/public/default/android-chrome-72x72.png +0 -0
- package/src/client/public/default/android-chrome-96x96.png +0 -0
- package/src/client/public/default/apple-touch-icon-1024x1024.png +0 -0
- package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/default/apple-touch-icon-152x152.png +0 -0
- package/src/client/public/default/apple-touch-icon-167x167.png +0 -0
- package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/default/apple-touch-icon-76x76.png +0 -0
- package/src/client/public/default/apple-touch-icon-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1125x2436.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1136x640.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1170x2532.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1179x2556.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1242x2208.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1242x2688.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1284x2778.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1290x2796.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1334x750.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1488x2266.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1536x2048.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1620x2160.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1640x2160.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1668x2224.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1668x2388.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1792x828.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2048x1536.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2048x2732.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2160x1620.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2160x1640.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2208x1242.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2224x1668.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2266x1488.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2388x1668.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2436x1125.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2532x1170.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2556x1179.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2688x1242.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2732x2048.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2778x1284.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2796x1290.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-640x1136.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-750x1334.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-828x1792.png +0 -0
- package/src/client/public/default/assets/background/white.jpg +0 -0
- package/src/client/public/default/browserconfig.xml +1 -1
- package/src/client/public/default/favicon-16x16.png +0 -0
- package/src/client/public/default/favicon-32x32.png +0 -0
- package/src/client/public/default/favicon-48x48.png +0 -0
- package/src/client/public/default/favicon.ico +0 -0
- package/src/client/public/default/manifest.webmanifest +5 -5
- package/src/client/public/default/mstile-144x144.png +0 -0
- package/src/client/public/default/mstile-150x150.png +0 -0
- package/src/client/public/default/mstile-310x150.png +0 -0
- package/src/client/public/default/mstile-310x310.png +0 -0
- package/src/client/public/default/mstile-70x70.png +0 -0
- package/src/client/public/default/yandex-browser-50x50.png +0 -0
- package/src/client/public/default/yandex-browser-manifest.json +1 -1
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +40 -0
- package/src/client/services/object-layer/object-layer.management.js +4 -4
- package/src/client/ssr/RootDocument.js +1 -1
- package/src/client/ssr/body/404.js +1 -1
- package/src/client/ssr/body/500.js +1 -1
- package/src/client/ssr/body/CacheControl.js +1 -1
- package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +1 -1
- package/src/client/ssr/body/DefaultSplashScreen.js +1 -1
- package/src/client/ssr/body/SwaggerDarkMode.js +1 -1
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +1 -1
- package/src/client/ssr/head/CryptokoynScripts.js +1 -1
- package/src/client/ssr/head/Css.js +1 -1
- package/src/client/ssr/head/CyberiaPortalScripts.js +1 -1
- package/src/client/ssr/head/DefaultScripts.js +1 -1
- package/src/client/ssr/head/ItemledgerScripts.js +1 -1
- package/src/client/ssr/head/Microdata.js +1 -1
- package/src/client/ssr/head/Production.js +1 -1
- package/src/client/ssr/head/Pwa.js +1 -1
- package/src/client/ssr/head/PwaItemledger.js +1 -1
- package/src/client/ssr/head/Seo.js +1 -1
- package/src/client/ssr/head/UnderpostScripts.js +1 -1
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +1 -1
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +1 -1
- package/src/client/ssr/views/Cyberia404.js +7 -5
- package/src/client/ssr/views/CyberiaServerMetrics.js +1 -1
- package/src/client/ssr/views/Maintenance.js +1 -1
- package/src/client/ssr/views/NoNetworkConnection.js +1 -1
- package/src/client/ssr/views/Test.js +1 -1
- package/src/client/sw/core.sw.js +20 -14
- package/src/client-builder/client-build-docs.js +61 -46
- package/src/client-builder/client-build-live.js +2 -2
- package/src/client-builder/client-build.js +58 -44
- package/src/client-builder/client-dev-server.js +3 -3
- package/src/client-builder/client-icons.js +2 -2
- package/src/client-builder/ssr.js +3 -3
- package/src/client.build.js +3 -6
- package/src/client.dev.js +3 -6
- package/src/db/DataBaseProvider.js +186 -3
- package/src/db/mariadb/MariaDB.js +3 -2
- package/src/db/mongo/MongoBootstrap.js +273 -101
- package/src/db/mongo/MongooseDB.js +11 -8
- package/src/{server/valkey.js → db/valkey/Valkey.js} +5 -4
- package/src/grpc/cyberia/grpc-server.js +1 -1
- package/src/index.js +103 -23
- package/src/mailer/EmailRender.js +2 -2
- package/src/mailer/MailerInterceptor.js +87 -0
- package/src/mailer/MailerProvider.js +50 -6
- package/src/projects/cyberia/atlas-sprite-sheet-generator.js +1 -1
- package/src/projects/cyberia/besu-genesis-generator.js +3 -3
- package/src/projects/cyberia/catalog-cyberia.js +54 -6
- package/src/projects/cyberia/gemini-client.js +1 -1
- package/src/projects/cyberia/generate-saga.js +15 -24
- package/src/projects/cyberia/hot-reload-trigger.js +1 -1
- package/src/projects/cyberia/instance-data.js +22 -3
- package/src/projects/cyberia/ipfs-client.js +4 -4
- package/src/projects/cyberia/map-preview-generator.js +1 -1
- package/src/projects/cyberia/object-layer.js +12 -22
- package/src/projects/cyberia/semantic-layer-generator.js +1 -1
- package/src/projects/underpost/catalog-underpost.js +13 -2
- package/src/proxy.js +4 -7
- package/src/runtime/cyberia-client/Dockerfile +9 -4
- package/src/runtime/cyberia-client/Dockerfile.dev +8 -2
- package/src/runtime/cyberia-server/Dockerfile +9 -4
- package/src/runtime/cyberia-server/Dockerfile.dev +8 -2
- package/src/runtime/engine-cyberia/Dockerfile +25 -9
- package/src/runtime/engine-cyberia/Dockerfile.dev +25 -9
- package/src/runtime/engine-cyberia/Dockerfile.test +4 -4
- package/src/runtime/engine-cyberia/compose.env +16 -0
- package/src/runtime/engine-cyberia/docker-compose.yml +31 -37
- package/src/runtime/express/Express.js +32 -27
- package/src/runtime/lampp/Lampp.js +22 -70
- package/src/runtime/nginx/Nginx.js +1 -1
- package/src/runtime/wp/Wp.js +16 -48
- package/src/server/{catalog.js → build/catalog.js} +15 -5
- package/src/server/build/coverage.js +117 -0
- package/src/server/build/execution.js +402 -0
- package/src/server/build/package.js +465 -0
- package/src/server/build/testing.js +528 -0
- package/src/server/{dns.js → network/dns.js} +241 -14
- package/src/server/network/forward-proxy.js +541 -0
- package/src/server/{middlewares.js → network/middlewares.js} +59 -4
- package/src/server/network/node-capability.js +98 -0
- package/src/server/{peer.js → network/peer.js} +3 -3
- package/src/server/{proxy.js → network/proxy.js} +7 -13
- package/src/server/network/router.js +356 -0
- package/src/server/{tls.js → network/tls.js} +2 -2
- package/src/server/network/underpost-compression.js +186 -0
- package/src/server/{underpost-gateway.js → network/underpost-gateway.js} +26 -16
- package/src/server/{underpost-ingress.js → network/underpost-ingress.js} +19 -3
- package/src/server/{cri.js → ops/cri.js} +2 -2
- package/src/server/ops/cron.js +949 -0
- package/src/server/ops/event-notification.js +284 -0
- package/src/server/{logger.js → ops/logger.js} +108 -23
- package/src/server/ops/monitoring.js +1724 -0
- package/src/server/ops/systemd.js +259 -0
- package/src/server/{conf.js → runtime/conf.js} +521 -520
- package/src/server/runtime/config-scope.js +215 -0
- package/src/server/runtime/environment.js +149 -0
- package/src/server/{process.js → runtime/process.js} +153 -13
- package/src/server/{runtime-status.js → runtime/runtime-status.js} +155 -16
- package/src/server/{runtime.js → runtime/runtime.js} +12 -8
- package/src/server/{start.js → runtime/start.js} +128 -39
- package/src/server/{auth.js → security/auth.js} +7 -8
- package/src/server/security/container-storage.js +382 -0
- package/src/server/{crypto.js → security/crypto.js} +1 -1
- package/src/server/security/selinux.js +185 -0
- package/src/server/{backup.js → storage/backup.js} +17 -8
- package/src/server/{data-query.js → storage/data-query.js} +1 -1
- package/src/server/{downloader.js → storage/downloader.js} +2 -2
- package/src/server/storage/repository.js +68 -0
- package/src/server.js +4 -7
- package/src/ws/IoInterface.js +1 -1
- package/src/ws/IoServer.js +1 -1
- package/src/ws/core/core.ws.connection.js +1 -1
- package/src/ws/core/core.ws.emit.js +1 -1
- package/src/ws/core/core.ws.server.js +1 -1
- package/src/ws/default/default.ws.connection.js +1 -1
- package/src/ws/default/default.ws.emit.js +1 -1
- package/src/ws/default/default.ws.server.js +1 -1
- package/test/e2e/event-e2e-public-ingress-down.js +45 -0
- package/test/e2e/event-e2e-wireguard-server-down.js +38 -0
- package/test/e2e/event-e2e-wireguard-spoke-down.js +40 -0
- package/test/{api.test.js → integration/app/api.test.js} +33 -14
- package/test/integration/app/cyberia/cyberia-cli-plain-reads.test.js +30 -0
- package/test/{cyberia-instance-conf-defaults.test.js → integration/app/cyberia/cyberia-instance-conf-defaults.test.js} +2 -1
- package/test/integration/app/cyberia/cyberia-load.test.js +467 -0
- package/test/integration/app/cyberia/fallback-world-capture.test.js +253 -0
- package/test/integration/app/cyberia/object-layer-item-id.test.js +327 -0
- package/test/{shape-generator.test.js → integration/app/cyberia/shape-generator.test.js} +1 -1
- package/test/integration/infra/1-security/config-scope.test.js +305 -0
- package/test/integration/infra/1-security/container-storage.test.js +356 -0
- package/test/integration/infra/1-security/in-pod-cli-surface.test.js +86 -0
- package/test/integration/infra/1-security/secret-onboarding.test.js +930 -0
- package/test/integration/infra/1-security/selinux.test.js +69 -0
- package/test/{sops-secret-store.test.js → integration/infra/1-security/sops-secret-store.test.js} +415 -61
- package/test/integration/infra/1-security/systemd-service.test.js +70 -0
- package/test/integration/infra/1-security/underpost-config-secret.test.js +367 -0
- package/test/integration/infra/2-network/dns-firewall.test.js +566 -0
- package/test/integration/infra/2-network/node-capability.test.js +182 -0
- package/test/integration/infra/2-network/wireguard-cli.test.js +1163 -0
- package/test/integration/infra/2-network/wireguard-edge.test.js +1731 -0
- package/test/{cluster-instances.test.js → integration/infra/3-cluster/cluster-instances.test.js} +11 -15
- package/test/{deploy-node-placement.test.js → integration/infra/3-cluster/deploy-node-placement.test.js} +3 -3
- package/test/integration/infra/3-cluster/docker-compose-stack.test.js +313 -0
- package/test/integration/infra/4-ingress/deploy-routes.test.js +379 -0
- package/test/integration/infra/4-ingress/gateway-static-assets.test.js +453 -0
- package/test/{instance-traffic-plan.test.js → integration/infra/4-ingress/instance-traffic-plan.test.js} +10 -6
- package/test/{underpost-gateway.test.js → integration/infra/4-ingress/underpost-gateway.test.js} +47 -6
- package/test/{underpost-ingress.test.js → integration/infra/4-ingress/underpost-ingress.test.js} +56 -4
- package/test/integration/infra/5-observability/cron-jobs.test.js +652 -0
- package/test/{deploy-monitor.test.js → integration/infra/5-observability/deploy-monitor.test.js} +29 -31
- package/test/integration/infra/5-observability/event-notification.test.js +197 -0
- package/test/integration/infra/5-observability/event-remediation.test.js +502 -0
- package/test/integration/infra/5-observability/event-targets.test.js +1174 -0
- package/test/integration/infra/5-observability/monitoring-stack.test.js +902 -0
- package/test/support/shell-harness.js +73 -0
- package/test/unit/build-template.test.js +97 -0
- package/test/unit/build-workflow-offline.test.js +132 -0
- package/test/unit/catalog.test.js +71 -0
- package/test/unit/client-build-docs.test.js +334 -0
- package/test/unit/conf-loading.test.js +303 -0
- package/test/unit/conf-resolution.test.js +979 -0
- package/test/unit/coverage-artifact.test.js +130 -0
- package/test/{crypto.test.js → unit/crypto.test.js} +1 -1
- package/test/unit/deploy-env-resolution.test.js +38 -0
- package/test/unit/deploy-log-table.test.js +447 -0
- package/test/unit/execution-profiles.test.js +219 -0
- package/test/unit/fleet-sync-source.test.js +149 -0
- package/test/unit/logger-redaction.test.js +112 -0
- package/test/unit/package.test.js +403 -0
- package/test/unit/prepare-host.test.js +299 -0
- package/test/unit/process-environment.test.js +18 -0
- package/test/unit/propagation-message.test.js +78 -0
- package/test/unit/redeploy-plan.test.js +24 -0
- package/test/unit/release-bump.test.js +474 -0
- package/test/unit/ssh-output-redaction.test.js +28 -0
- package/test/unit/start-options.test.js +46 -0
- package/test/unit/test-tiers.test.js +193 -0
- package/vitest.config.js +58 -0
- package/.nycrc +0 -9
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +0 -48
- package/manifests/mongodb/pv-pvc.yaml +0 -59
- package/scripts/link-local-underpost-cli.sh +0 -6
- package/src/api/user/user.build.js +0 -16
- package/src/cli/env.js +0 -177
- package/src/client/components/core/Blockchain.js +0 -41
- package/src/client/components/core/Blog.js +0 -9
- package/src/client/components/core/KeyboardAvoidance.js +0 -145
- package/src/client/public/default/assets/background/dark.jpg +0 -0
- package/src/client/public/default/assets/background/white0-min.jpg +0 -0
- package/src/client/public/default/assets/background/white0.jpg +0 -0
- package/src/client/public/doc/favicon.ico +0 -0
- package/src/client/public/doc/sitemap +0 -148
- package/src/server/cron.js +0 -476
package/src/cli/test.js
CHANGED
|
@@ -1,174 +1,248 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Runs the test tiers, wherever they have to run: on this host, inside a
|
|
3
|
+
* deployment's containers, or as a Job on the cluster.
|
|
4
|
+
*
|
|
5
|
+
* One entrypoint, one runner. Selecting suites, ordering tiers and rendering
|
|
6
|
+
* the reporting surfaces belong to `src/server/build/testing.js`; this module resolves
|
|
7
|
+
* where the run happens and drives it.
|
|
8
|
+
*
|
|
3
9
|
* @module src/cli/test.js
|
|
4
10
|
* @namespace UnderpostTest
|
|
5
11
|
*/
|
|
6
12
|
|
|
7
13
|
import fs from 'fs-extra';
|
|
14
|
+
import nodePath from 'node:path';
|
|
8
15
|
import { timer } from '../client/components/core/CommonJs.js';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
16
|
+
import { getUnderpostRootPath } from '../server/runtime/environment.js';
|
|
17
|
+
import { actionInitLog, loggerFactory, setUpInfo } from '../server/ops/logger.js';
|
|
18
|
+
import { shellExec } from '../server/runtime/process.js';
|
|
19
|
+
import {
|
|
20
|
+
UNDERPOST_TESTING,
|
|
21
|
+
allureManifestsFactory,
|
|
22
|
+
resolveTestSelection,
|
|
23
|
+
testJobManifestFactory,
|
|
24
|
+
vitestArgsFactory,
|
|
25
|
+
} from '../server/build/testing.js';
|
|
13
26
|
import Underpost from '../index.js';
|
|
27
|
+
|
|
14
28
|
const logger = loggerFactory(import.meta);
|
|
15
29
|
|
|
16
30
|
/**
|
|
17
31
|
* @class UnderpostTest
|
|
18
|
-
* @description Manages
|
|
32
|
+
* @description Manages test execution and its cluster-side reporting.
|
|
19
33
|
* @memberof UnderpostTest
|
|
20
34
|
*/
|
|
21
35
|
class UnderpostTest {
|
|
22
36
|
static API = {
|
|
23
37
|
/**
|
|
24
|
-
* Logs information about the current process environment to the console.
|
|
25
|
-
*
|
|
26
|
-
* This function is used to log details about
|
|
27
|
-
* the execution context, such as command-line arguments,
|
|
28
|
-
* environment variables, the process's administrative privileges,
|
|
29
|
-
* and the maximum available heap space size.
|
|
30
|
-
*
|
|
31
|
-
* @static
|
|
32
38
|
* @method setUpInfo
|
|
39
|
+
* @description Logs the execution context a failing run has to be read against:
|
|
40
|
+
* arguments, environment, privileges and heap ceiling.
|
|
33
41
|
* @returns {Promise<void>}
|
|
34
42
|
* @memberof UnderpostTest
|
|
35
43
|
*/
|
|
36
44
|
async setUpInfo() {
|
|
37
45
|
return await setUpInfo(logger);
|
|
38
46
|
},
|
|
47
|
+
|
|
39
48
|
/**
|
|
40
49
|
* @method run
|
|
41
|
-
* @description Runs the
|
|
50
|
+
* @description Runs the selected tiers on this host.
|
|
51
|
+
*
|
|
52
|
+
* Resolved against the globally installed engine when the current directory
|
|
53
|
+
* is not one, so `underpost test` from anywhere still runs the shipped suites
|
|
54
|
+
* rather than failing on a missing config.
|
|
55
|
+
* @param {object} [params]
|
|
56
|
+
* @param {string} [params.suite] - Suite or tier selector.
|
|
57
|
+
* @param {string} [params.grep] - Substring filter on test names.
|
|
58
|
+
* @param {boolean} [params.watch] - Keep the runner open and re-run on change.
|
|
59
|
+
* @param {boolean} [params.coverage] - Emit the coverage reporters.
|
|
60
|
+
* @param {boolean} [params.allure] - Also write Allure results for the dashboard.
|
|
61
|
+
* @returns {void}
|
|
62
|
+
* @throws {Error} When no engine tree with a runner configuration can be found.
|
|
42
63
|
* @memberof UnderpostTest
|
|
43
64
|
*/
|
|
44
|
-
run() {
|
|
65
|
+
run({ suite = '', grep = '', watch = false, coverage = true, allure = false } = {}) {
|
|
45
66
|
actionInitLog();
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
67
|
+
const root = [process.cwd(), getUnderpostRootPath()].find(
|
|
68
|
+
(candidate) => candidate && fs.existsSync(`${candidate}/vitest.config.js`),
|
|
69
|
+
);
|
|
70
|
+
if (!root) throw new Error('[test] no vitest.config.js in the current directory or the global underpost install');
|
|
71
|
+
|
|
72
|
+
const { projects, runVitest, delegated } = resolveTestSelection(suite);
|
|
73
|
+
const allureResultsDirectory =
|
|
74
|
+
allure &&
|
|
75
|
+
nodePath.resolve(
|
|
76
|
+
root,
|
|
77
|
+
process.env[UNDERPOST_TESTING.allureResultsEnvKey] || UNDERPOST_TESTING.allureResultsDirectory,
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
if (runVitest) {
|
|
81
|
+
const env = [
|
|
82
|
+
'NODE_ENV=test',
|
|
83
|
+
...(allureResultsDirectory ? [`${UNDERPOST_TESTING.allureResultsEnvKey}=${allureResultsDirectory}`] : []),
|
|
84
|
+
];
|
|
85
|
+
shellExec(
|
|
86
|
+
`cd ${root} && ${env.join(' ')} npx vitest ${vitestArgsFactory({ projects, grep, watch, coverage }).join(' ')}`,
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
for (const { name, directory, delegate } of delegated) {
|
|
91
|
+
const tierRoot = `${root}/${directory}`;
|
|
92
|
+
// A product build strips the tiers it does not own, so an absent
|
|
93
|
+
// directory is a tier this tree does not ship, not a failure.
|
|
94
|
+
if (!fs.existsSync(tierRoot)) {
|
|
95
|
+
logger.warn(`Skipping tier not present in this tree`, { tier: name, directory });
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (allureResultsDirectory) fs.mkdirSync(allureResultsDirectory, { recursive: true });
|
|
99
|
+
const resultsPath = allureResultsDirectory ? `${allureResultsDirectory}/TEST-${name}.xml` : '';
|
|
100
|
+
shellExec(`cd ${tierRoot} && ${delegate({ resultsPath, grep })}`);
|
|
52
101
|
}
|
|
53
102
|
},
|
|
103
|
+
|
|
54
104
|
/**
|
|
55
|
-
* @method
|
|
56
|
-
* @description
|
|
57
|
-
*
|
|
58
|
-
* @param {object}
|
|
59
|
-
* @param {
|
|
60
|
-
* @param {
|
|
61
|
-
* @param {boolean}
|
|
62
|
-
* @
|
|
63
|
-
* @param {string} options.podStatus - The status of the pod to test.
|
|
64
|
-
* @param {string} options.kindType - The type of the kind to test.
|
|
65
|
-
* @param {number} options.deltaMs - The delta time in milliseconds.
|
|
66
|
-
* @param {number} options.maxAttempts - The maximum number of attempts.
|
|
105
|
+
* @method dashboard
|
|
106
|
+
* @description Applies the Allure dashboard: the results claim every run
|
|
107
|
+
* writes to, the report server, and the ways in.
|
|
108
|
+
* @param {object} params
|
|
109
|
+
* @param {string} [params.namespace='default'] - Target namespace.
|
|
110
|
+
* @param {string} [params.host] - Hostname to route the dashboard sub-path on.
|
|
111
|
+
* @param {boolean} [params.dryRun] - Print the manifests instead of applying them.
|
|
112
|
+
* @returns {string} The rendered manifests.
|
|
67
113
|
* @memberof UnderpostTest
|
|
68
114
|
*/
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
typeof options.podName === 'string' &&
|
|
85
|
-
options.podStatus &&
|
|
86
|
-
typeof options.podStatus === 'string'
|
|
87
|
-
)
|
|
88
|
-
return await Underpost.test.statusMonitor(options.podName, options.podStatus, options.kindType);
|
|
115
|
+
dashboard({ namespace = 'default', host = '', dryRun = false } = {}) {
|
|
116
|
+
const manifests = allureManifestsFactory({ namespace, host });
|
|
117
|
+
if (dryRun) {
|
|
118
|
+
console.log(manifests);
|
|
119
|
+
return manifests;
|
|
120
|
+
}
|
|
121
|
+
shellExec(`sudo kubectl apply -f - <<'EOF'\n${manifests}\nEOF`);
|
|
122
|
+
const { allure } = UNDERPOST_TESTING;
|
|
123
|
+
logger.info('Allure dashboard applied', {
|
|
124
|
+
namespace,
|
|
125
|
+
nodePort: allure.nodePort,
|
|
126
|
+
url: host ? `https://${host}${allure.subPath}` : '',
|
|
127
|
+
});
|
|
128
|
+
return manifests;
|
|
129
|
+
},
|
|
89
130
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
131
|
+
/**
|
|
132
|
+
* @method job
|
|
133
|
+
* @description Runs one suite on the cluster as a Job.
|
|
134
|
+
*
|
|
135
|
+
* The Job writes into the same claim the dashboard reads, so its results are
|
|
136
|
+
* published by finishing — there is no upload step to fail separately from
|
|
137
|
+
* the tests it would have reported.
|
|
138
|
+
* @param {object} params
|
|
139
|
+
* @param {string} params.image - Image carrying the engine and its dependencies.
|
|
140
|
+
* @param {string} [params.suite] - Suite or tier selector.
|
|
141
|
+
* @param {string} [params.namespace='default'] - Target namespace.
|
|
142
|
+
* @param {string} [params.nodeName] - Pins the pod to one node.
|
|
143
|
+
* @param {boolean} [params.dryRun] - Print the manifest instead of applying it.
|
|
144
|
+
* @returns {Promise<boolean>} Whether the Job's pod reached completion.
|
|
145
|
+
* @throws {Error} When no image is given.
|
|
146
|
+
* @memberof UnderpostTest
|
|
147
|
+
*/
|
|
148
|
+
async job({ image = '', suite = '', namespace = 'default', nodeName = '', dryRun = false } = {}) {
|
|
149
|
+
if (!image) throw new Error('[test] --job needs --image: the Job has no engine tree of its own');
|
|
150
|
+
const name = `${UNDERPOST_TESTING.job.namePrefix}-${(suite || 'all').replace(/[^a-z0-9]+/g, '-')}-${Date.now()}`;
|
|
151
|
+
const manifest = testJobManifestFactory({ name, namespace, image, suite, nodeName });
|
|
152
|
+
if (dryRun) {
|
|
153
|
+
console.log(manifest);
|
|
154
|
+
return true;
|
|
97
155
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
if (!deployId) continue;
|
|
102
|
-
if (options.itc === true)
|
|
103
|
-
switch (deployId) {
|
|
104
|
-
case 'dd-lampp':
|
|
105
|
-
{
|
|
106
|
-
const { MARIADB_HOST, MARIADB_USER, MARIADB_PASSWORD, DD_LAMPP_TEST_DB_0 } = process.env;
|
|
156
|
+
shellExec(`sudo kubectl apply -f - <<'EOF'\n${manifest}\nEOF`);
|
|
157
|
+
return await Underpost.test.statusMonitor(name, 'Completed', 'pods');
|
|
158
|
+
},
|
|
107
159
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
160
|
+
/**
|
|
161
|
+
* @method callback
|
|
162
|
+
* @description `underpost test` entrypoint.
|
|
163
|
+
* @param {string} [suite] - Suite or tier selector.
|
|
164
|
+
* @param {object} [options]
|
|
165
|
+
* @param {boolean} [options.itc] - Run here rather than dispatching into pods.
|
|
166
|
+
* @param {string} [options.deployList] - Comma separated deploy ids to run inside.
|
|
167
|
+
* @param {boolean} [options.dashboard] - Apply the Allure dashboard and exit.
|
|
168
|
+
* @param {boolean} [options.job] - Run the suite as a cluster Job.
|
|
169
|
+
* @param {boolean} [options.allure] - Write Allure results alongside the run.
|
|
170
|
+
* @param {string} [options.grep] - Substring filter on test names.
|
|
171
|
+
* @param {boolean} [options.watch] - Keep the runner open and re-run on change.
|
|
172
|
+
* @param {boolean} [options.coverage] - Emit the coverage reporters.
|
|
173
|
+
* @param {string} [options.namespace] - Namespace for the cluster-side actions.
|
|
174
|
+
* @param {string} [options.image] - Image for `--job`.
|
|
175
|
+
* @param {string} [options.nodeName] - Node pin for `--job`.
|
|
176
|
+
* @param {string} [options.host] - Hostname for the dashboard route.
|
|
177
|
+
* @param {boolean} [options.dryRun] - Render manifests without applying them.
|
|
178
|
+
* @param {string} [options.podName] - Wait for this object instead of running tests.
|
|
179
|
+
* @param {string} [options.podStatus] - Status `--pod-name` waits for.
|
|
180
|
+
* @param {string} [options.kindType] - Kind `--pod-name` queries.
|
|
181
|
+
* @returns {Promise<void>}
|
|
182
|
+
* @memberof UnderpostTest
|
|
183
|
+
*/
|
|
184
|
+
async callback(suite = '', options = {}) {
|
|
185
|
+
const { itc, deployList, dashboard, job, podName, podStatus, kindType, namespace = 'default' } = options;
|
|
116
186
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
187
|
+
if (podName) return void (await Underpost.test.statusMonitor(podName, podStatus || 'Running', kindType));
|
|
188
|
+
if (dashboard) return void Underpost.test.dashboard(options);
|
|
189
|
+
if (job) return void (await Underpost.test.job({ ...options, suite }));
|
|
121
190
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
);
|
|
132
|
-
}
|
|
133
|
-
else logger.warn(`Couldn't find pods in deployment`, { deployId });
|
|
191
|
+
if (deployList && !itc) {
|
|
192
|
+
for (const deployId of deployList
|
|
193
|
+
.split(',')
|
|
194
|
+
.map((value) => value.trim())
|
|
195
|
+
.filter(Boolean)) {
|
|
196
|
+
const pods = Underpost.kubectl.get(deployId, 'pods', namespace);
|
|
197
|
+
if (pods.length === 0) {
|
|
198
|
+
logger.warn(`Couldn't find pods in deployment`, { deployId });
|
|
199
|
+
continue;
|
|
134
200
|
}
|
|
201
|
+
for (const { NAME } of pods)
|
|
202
|
+
Underpost.kubectl.exec({
|
|
203
|
+
podName: NAME,
|
|
204
|
+
namespace,
|
|
205
|
+
command: `cd ${UNDERPOST_TESTING.job.workingDirectory} && underpost test ${suite} --itc`,
|
|
206
|
+
});
|
|
135
207
|
}
|
|
136
|
-
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
return void Underpost.test.run({ ...options, suite });
|
|
137
212
|
},
|
|
213
|
+
|
|
138
214
|
/**
|
|
139
215
|
* @method statusMonitor
|
|
140
|
-
* @description
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
* @param {
|
|
216
|
+
* @description Waits for a cluster object to reach a status.
|
|
217
|
+
*
|
|
218
|
+
* `Completed` is accepted wherever `Running` was asked for: a Job's pod and a
|
|
219
|
+
* one-shot container both satisfy "it came up" by having finished, and a
|
|
220
|
+
* caller polling for readiness would otherwise time out on a success.
|
|
221
|
+
* @param {string} podName - Name, or name substring, of the object to watch.
|
|
222
|
+
* @param {string} [status='Running'] - Status to wait for.
|
|
223
|
+
* @param {string} [kindType='pods'] - Kind to query.
|
|
224
|
+
* @param {number} [deltaMs=1000] - Delay between attempts.
|
|
225
|
+
* @param {number} [maxAttempts=300] - Attempts before giving up.
|
|
226
|
+
* @returns {Promise<boolean>} Whether the status was reached.
|
|
146
227
|
* @memberof UnderpostTest
|
|
147
228
|
*/
|
|
148
|
-
statusMonitor(podName, status = 'Running', kindType = '', deltaMs = 1000, maxAttempts = 60 * 5) {
|
|
149
|
-
if (!
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
const
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
logger.error(`Failed to test pod ${podName} within ${maxAttempts} attempts`);
|
|
166
|
-
return resolve(false);
|
|
167
|
-
}
|
|
168
|
-
return _monitor();
|
|
169
|
-
};
|
|
170
|
-
await _monitor();
|
|
171
|
-
});
|
|
229
|
+
async statusMonitor(podName, status = 'Running', kindType = 'pods', deltaMs = 1000, maxAttempts = 60 * 5) {
|
|
230
|
+
if (!kindType) kindType = 'pods';
|
|
231
|
+
logger.info(`Loading instance`, { podName, status, kindType, deltaMs, maxAttempts });
|
|
232
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
233
|
+
await timer(deltaMs);
|
|
234
|
+
const pods = Underpost.kubectl.get(podName, kindType);
|
|
235
|
+
const reached = pods.find(
|
|
236
|
+
(pod) => pod.STATUS === status || (status === 'Running' && pod.STATUS === 'Completed'),
|
|
237
|
+
);
|
|
238
|
+
logger.info(
|
|
239
|
+
`Testing pod ${podName}... ${reached ? 1 : 0}/1 - elapsed time ${deltaMs * attempt}ms - attempt ${attempt}/${maxAttempts}`,
|
|
240
|
+
pods[0] ? pods[0].STATUS : 'Not found kind object',
|
|
241
|
+
);
|
|
242
|
+
if (reached) return true;
|
|
243
|
+
}
|
|
244
|
+
logger.error(`Failed to test pod ${podName} within ${maxAttempts} attempts`);
|
|
245
|
+
return false;
|
|
172
246
|
},
|
|
173
247
|
};
|
|
174
248
|
}
|