@caelo-cms/provisioning 0.11.9 → 0.11.11
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/dist/adapter.d.ts +6 -0
- package/dist/adapter.d.ts.map +1 -1
- package/dist/admin-domain.d.ts +10 -1
- package/dist/admin-domain.d.ts.map +1 -1
- package/dist/admin-domain.js +13 -3
- package/dist/admin-domain.js.map +1 -1
- package/dist/adopt-existing.d.ts +12 -3
- package/dist/adopt-existing.d.ts.map +1 -1
- package/dist/adopt-existing.js +143 -0
- package/dist/adopt-existing.js.map +1 -1
- package/dist/agent/command.d.ts +23 -0
- package/dist/agent/command.d.ts.map +1 -1
- package/dist/agent/command.js +32 -9
- package/dist/agent/command.js.map +1 -1
- package/dist/agent/run.d.ts +2 -0
- package/dist/agent/run.d.ts.map +1 -1
- package/dist/agent/run.js +5 -1
- package/dist/agent/run.js.map +1 -1
- package/dist/agent-db.js +69 -10
- package/dist/aws-task-roles.d.ts +4 -2
- package/dist/aws-task-roles.d.ts.map +1 -1
- package/dist/aws-task-roles.js +4 -1
- package/dist/aws-task-roles.js.map +1 -1
- package/dist/caddy.d.ts +21 -4
- package/dist/caddy.d.ts.map +1 -1
- package/dist/caddy.js +27 -3
- package/dist/caddy.js.map +1 -1
- package/dist/cli-routing.js +1 -1
- package/dist/cli-routing.js.map +1 -1
- package/dist/cli.js +68 -7
- package/dist/cli.js.map +1 -1
- package/dist/cloudsql-tls.d.ts +93 -0
- package/dist/cloudsql-tls.d.ts.map +1 -0
- package/dist/cloudsql-tls.js +295 -0
- package/dist/cloudsql-tls.js.map +1 -0
- package/dist/compose.d.ts +43 -6
- package/dist/compose.d.ts.map +1 -1
- package/dist/compose.js +148 -23
- package/dist/compose.js.map +1 -1
- package/dist/converge-checkpoint.d.ts +1 -0
- package/dist/converge-checkpoint.d.ts.map +1 -1
- package/dist/converge-checkpoint.js +8 -1
- package/dist/converge-checkpoint.js.map +1 -1
- package/dist/converge-db-trust.d.ts +44 -0
- package/dist/converge-db-trust.d.ts.map +1 -0
- package/dist/converge-db-trust.js +158 -0
- package/dist/converge-db-trust.js.map +1 -0
- package/dist/converge-job-gcp.d.ts +5 -2
- package/dist/converge-job-gcp.d.ts.map +1 -1
- package/dist/converge-job-gcp.js +11 -13
- package/dist/converge-job-gcp.js.map +1 -1
- package/dist/converge-job-preflight.d.ts.map +1 -1
- package/dist/converge-job-preflight.js +8 -0
- package/dist/converge-job-preflight.js.map +1 -1
- package/dist/converge-job.d.ts +17 -0
- package/dist/converge-job.d.ts.map +1 -1
- package/dist/converge-job.js +12 -0
- package/dist/converge-job.js.map +1 -1
- package/dist/deployed-release.d.ts +4 -1
- package/dist/deployed-release.d.ts.map +1 -1
- package/dist/deployed-release.js +18 -8
- package/dist/deployed-release.js.map +1 -1
- package/dist/gcp-names.d.ts +34 -0
- package/dist/gcp-names.d.ts.map +1 -1
- package/dist/gcp-names.js +45 -0
- package/dist/gcp-names.js.map +1 -1
- package/dist/gcp-url-map.d.ts.map +1 -1
- package/dist/gcp-url-map.js +6 -2
- package/dist/gcp-url-map.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/infra-contract.d.ts +1 -1
- package/dist/infra-contract.d.ts.map +1 -1
- package/dist/infra-contract.js +45 -1
- package/dist/infra-contract.js.map +1 -1
- package/dist/install-job.d.ts +4 -2
- package/dist/install-job.d.ts.map +1 -1
- package/dist/install-job.js +4 -1
- package/dist/install-job.js.map +1 -1
- package/dist/install-state.d.ts +13 -0
- package/dist/install-state.d.ts.map +1 -1
- package/dist/install-state.js +17 -4
- package/dist/install-state.js.map +1 -1
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +20 -8
- package/dist/lifecycle.js.map +1 -1
- package/dist/mcp-auth-proxy-setup.d.ts +48 -0
- package/dist/mcp-auth-proxy-setup.d.ts.map +1 -0
- package/dist/mcp-auth-proxy-setup.js +280 -0
- package/dist/mcp-auth-proxy-setup.js.map +1 -0
- package/dist/migration-runner.d.ts.map +1 -1
- package/dist/migration-runner.js +8 -3
- package/dist/migration-runner.js.map +1 -1
- package/dist/migration-targets.d.ts +11 -0
- package/dist/migration-targets.d.ts.map +1 -0
- package/dist/migration-targets.js +12 -0
- package/dist/migration-targets.js.map +1 -0
- package/dist/operator-access.d.ts +10 -0
- package/dist/operator-access.d.ts.map +1 -1
- package/dist/operator-access.js +5 -0
- package/dist/operator-access.js.map +1 -1
- package/dist/pool-budget-stack.d.ts +13 -1
- package/dist/pool-budget-stack.d.ts.map +1 -1
- package/dist/pool-budget-stack.js +11 -1
- package/dist/pool-budget-stack.js.map +1 -1
- package/dist/public-role-isolation.d.ts +7 -3
- package/dist/public-role-isolation.d.ts.map +1 -1
- package/dist/public-role-isolation.js +25 -13
- package/dist/public-role-isolation.js.map +1 -1
- package/dist/release-contract.d.ts.map +1 -1
- package/dist/release-contract.js +3 -0
- package/dist/release-contract.js.map +1 -1
- package/dist/release-manifest.d.ts +25 -1
- package/dist/release-manifest.d.ts.map +1 -1
- package/dist/release-manifest.js +36 -3
- package/dist/release-manifest.js.map +1 -1
- package/dist/remote-mcp.d.ts +55 -18
- package/dist/remote-mcp.d.ts.map +1 -1
- package/dist/remote-mcp.js +307 -77
- package/dist/remote-mcp.js.map +1 -1
- package/dist/runtime-secrets.d.ts +11 -0
- package/dist/runtime-secrets.d.ts.map +1 -1
- package/dist/runtime-secrets.js +40 -25
- package/dist/runtime-secrets.js.map +1 -1
- package/dist/scheduler-setup.d.ts +75 -0
- package/dist/scheduler-setup.d.ts.map +1 -0
- package/dist/scheduler-setup.js +331 -0
- package/dist/scheduler-setup.js.map +1 -0
- package/dist/seal-key-rotation.d.ts +7 -7
- package/dist/seal-key-rotation.d.ts.map +1 -1
- package/dist/seal-key-rotation.js +22 -22
- package/dist/seal-key-rotation.js.map +1 -1
- package/dist/self-hosted-db-tls.d.ts +37 -0
- package/dist/self-hosted-db-tls.d.ts.map +1 -0
- package/dist/self-hosted-db-tls.js +220 -0
- package/dist/self-hosted-db-tls.js.map +1 -0
- package/dist/self-hosted-release.d.ts +3 -1
- package/dist/self-hosted-release.d.ts.map +1 -1
- package/dist/self-hosted-release.js +33 -9
- package/dist/self-hosted-release.js.map +1 -1
- package/dist/self-hosted-roles.d.ts +43 -2
- package/dist/self-hosted-roles.d.ts.map +1 -1
- package/dist/self-hosted-roles.js +87 -1
- package/dist/self-hosted-roles.js.map +1 -1
- package/dist/self-hosted-scheduler-interval.d.ts +21 -0
- package/dist/self-hosted-scheduler-interval.d.ts.map +1 -0
- package/dist/self-hosted-scheduler-interval.js +68 -0
- package/dist/self-hosted-scheduler-interval.js.map +1 -0
- package/dist/self-hosted-start.d.ts +0 -21
- package/dist/self-hosted-start.d.ts.map +1 -1
- package/dist/self-hosted-start.js +39 -1
- package/dist/self-hosted-start.js.map +1 -1
- package/dist/self-hosted-upgrade.d.ts +19 -7
- package/dist/self-hosted-upgrade.d.ts.map +1 -1
- package/dist/self-hosted-upgrade.js +78 -25
- package/dist/self-hosted-upgrade.js.map +1 -1
- package/dist/stack-contract.d.ts +234 -28
- package/dist/stack-contract.d.ts.map +1 -1
- package/dist/stack-contract.js +397 -39
- package/dist/stack-contract.js.map +1 -1
- package/dist/stack-converge.d.ts +31 -0
- package/dist/stack-converge.d.ts.map +1 -1
- package/dist/stack-converge.js +71 -30
- package/dist/stack-converge.js.map +1 -1
- package/dist/staging-database.d.ts +22 -0
- package/dist/staging-database.d.ts.map +1 -0
- package/dist/staging-database.js +117 -0
- package/dist/staging-database.js.map +1 -0
- package/dist/upgrade/app-roll.d.ts +25 -4
- package/dist/upgrade/app-roll.d.ts.map +1 -1
- package/dist/upgrade/app-roll.js +63 -17
- package/dist/upgrade/app-roll.js.map +1 -1
- package/dist/upgrade/converge.d.ts +5 -0
- package/dist/upgrade/converge.d.ts.map +1 -1
- package/dist/upgrade/converge.js +207 -20
- package/dist/upgrade/converge.js.map +1 -1
- package/dist/upgrade/health.d.ts +31 -7
- package/dist/upgrade/health.d.ts.map +1 -1
- package/dist/upgrade/health.js +41 -17
- package/dist/upgrade/health.js.map +1 -1
- package/dist/upgrade/image-forms.d.ts +1 -1
- package/dist/upgrade/image-forms.d.ts.map +1 -1
- package/dist/upgrade/image-forms.js +24 -7
- package/dist/upgrade/image-forms.js.map +1 -1
- package/dist/upgrade/release-images.d.ts +12 -3
- package/dist/upgrade/release-images.d.ts.map +1 -1
- package/dist/upgrade/release-images.js +13 -4
- package/dist/upgrade/release-images.js.map +1 -1
- package/dist/upgrade/upgrade.d.ts +19 -3
- package/dist/upgrade/upgrade.d.ts.map +1 -1
- package/dist/upgrade/upgrade.js +37 -2
- package/dist/upgrade/upgrade.js.map +1 -1
- package/dist/upgrader-gcp.d.ts +13 -0
- package/dist/upgrader-gcp.d.ts.map +1 -1
- package/dist/upgrader-gcp.js +50 -1
- package/dist/upgrader-gcp.js.map +1 -1
- package/dist/upgrader-iam-preflight.d.ts.map +1 -1
- package/dist/upgrader-iam-preflight.js +6 -1
- package/dist/upgrader-iam-preflight.js.map +1 -1
- package/dist/upgrader-job.d.ts +1 -1
- package/dist/upgrader-job.d.ts.map +1 -1
- package/dist/upgrader-job.js +20 -14
- package/dist/upgrader-job.js.map +1 -1
- package/dist/upgrader-records.d.ts +1 -1
- package/dist/upgrader-records.d.ts.map +1 -1
- package/dist/upgrader-records.js +26 -7
- package/dist/upgrader-records.js.map +1 -1
- package/dist/upgrader-setup.d.ts.map +1 -1
- package/dist/upgrader-setup.js +10 -5
- package/dist/upgrader-setup.js.map +1 -1
- package/dist/wizard.d.ts +7 -0
- package/dist/wizard.d.ts.map +1 -1
- package/dist/wizard.js +11 -0
- package/dist/wizard.js.map +1 -1
- package/dist/wizards/gcp-cost.d.ts +31 -0
- package/dist/wizards/gcp-cost.d.ts.map +1 -1
- package/dist/wizards/gcp-cost.js +103 -18
- package/dist/wizards/gcp-cost.js.map +1 -1
- package/dist/wizards/gcp.d.ts.map +1 -1
- package/dist/wizards/gcp.js +129 -27
- package/dist/wizards/gcp.js.map +1 -1
- package/package.json +2 -2
- package/src/adapter.ts +6 -0
- package/src/admin-domain.test.ts +9 -8
- package/src/admin-domain.ts +13 -3
- package/src/admin-memory.test.ts +2 -1
- package/src/adopt-existing.test.ts +85 -0
- package/src/adopt-existing.ts +141 -3
- package/src/agent/command.test.ts +49 -1
- package/src/agent/command.ts +39 -9
- package/src/agent/run.test.ts +19 -0
- package/src/agent/run.ts +11 -2
- package/src/aws-task-roles.ts +5 -2
- package/src/caddy-redirects.docker.test.ts +2 -0
- package/src/caddy-redirects.test.ts +4 -1
- package/src/caddy-validate.test.ts +7 -1
- package/src/caddy.test.ts +39 -1
- package/src/caddy.ts +36 -4
- package/src/checkpoint-secrets.test.ts +14 -6
- package/src/cli-routing.test.ts +1 -1
- package/src/cli-routing.ts +1 -1
- package/src/cli.ts +71 -5
- package/src/cloudsql-tls.test.ts +255 -0
- package/src/cloudsql-tls.ts +359 -0
- package/src/compose.ts +193 -24
- package/src/converge-checkpoint.ts +8 -1
- package/src/converge-db-trust.test.ts +237 -0
- package/src/converge-db-trust.ts +212 -0
- package/src/converge-job-gcp.ts +11 -12
- package/src/converge-job-preflight.test.ts +5 -0
- package/src/converge-job-preflight.ts +8 -0
- package/src/converge-job.test.ts +70 -0
- package/src/converge-job.ts +32 -0
- package/src/database-tls-builders.test.ts +56 -0
- package/src/deployed-release.test.ts +107 -40
- package/src/deployed-release.ts +30 -9
- package/src/gateway-env-isolation.test.ts +50 -12
- package/src/gcp-names.ts +56 -0
- package/src/gcp-url-map.test.ts +6 -8
- package/src/gcp-url-map.ts +6 -2
- package/src/index.test.ts +10 -4
- package/src/index.ts +7 -0
- package/src/infra-contract.test.ts +7 -3
- package/src/infra-contract.ts +45 -1
- package/src/install-job.ts +4 -1
- package/src/install-state.ts +33 -4
- package/src/lifecycle.ts +23 -11
- package/src/mcp-auth-proxy-setup.test.ts +305 -0
- package/src/mcp-auth-proxy-setup.ts +374 -0
- package/src/mcp-iap-stacks.test.ts +1 -1
- package/src/media-volume.test.ts +1 -1
- package/src/migration-runner.ts +14 -9
- package/src/migration-targets.ts +12 -0
- package/src/operator-access-stacks.test.ts +1 -1
- package/src/operator-access.test.ts +20 -4
- package/src/operator-access.ts +14 -0
- package/src/pool-budget-stack.ts +15 -0
- package/src/pool-budget-stacks.test.ts +39 -14
- package/src/public-role-isolation.test.ts +18 -8
- package/src/public-role-isolation.ts +31 -17
- package/src/release-contract.ts +3 -0
- package/src/release-manifest.test.ts +25 -0
- package/src/release-manifest.ts +59 -4
- package/src/remote-mcp-stack-config.test.ts +19 -9
- package/src/remote-mcp.test.ts +252 -57
- package/src/remote-mcp.ts +336 -77
- package/src/runtime-secrets.test.ts +37 -14
- package/src/runtime-secrets.ts +87 -27
- package/src/scheduler-setup.test.ts +201 -0
- package/src/scheduler-setup.ts +375 -0
- package/src/seal-key-rotation.test.ts +2 -2
- package/src/seal-key-rotation.ts +25 -25
- package/src/self-hosted-backup.test.ts +1 -0
- package/src/self-hosted-compose.test.ts +180 -6
- package/src/self-hosted-db-tls.test.ts +111 -0
- package/src/self-hosted-db-tls.ts +287 -0
- package/src/self-hosted-release-resolve.test.ts +71 -0
- package/src/self-hosted-release.ts +41 -11
- package/src/self-hosted-roles.integration.test.ts +2 -0
- package/src/self-hosted-roles.test.ts +87 -3
- package/src/self-hosted-roles.ts +101 -3
- package/src/self-hosted-scheduler-interval.test.ts +66 -0
- package/src/self-hosted-scheduler-interval.ts +79 -0
- package/src/self-hosted-start.test.ts +35 -2
- package/src/self-hosted-start.ts +20 -2
- package/src/self-hosted-upgrade.test.ts +104 -14
- package/src/self-hosted-upgrade.ts +123 -31
- package/src/stack-contract-parity.test.ts +79 -12
- package/src/stack-contract.test.ts +199 -31
- package/src/stack-contract.ts +472 -45
- package/src/stack-converge-secrets.test.ts +28 -13
- package/src/stack-converge.test.ts +203 -28
- package/src/stack-converge.ts +92 -30
- package/src/staging-database.test.ts +114 -0
- package/src/staging-database.ts +148 -0
- package/src/state-store.test.ts +2 -1
- package/src/upgrade/app-roll.ts +97 -19
- package/src/upgrade/converge.ts +249 -19
- package/src/upgrade/health.test.ts +63 -25
- package/src/upgrade/health.ts +54 -22
- package/src/upgrade/image-forms.test.ts +34 -0
- package/src/upgrade/image-forms.ts +23 -8
- package/src/upgrade/release-images.test.ts +5 -1
- package/src/upgrade/release-images.ts +22 -6
- package/src/upgrade/upgrade.test.ts +438 -46
- package/src/upgrade/upgrade.ts +64 -6
- package/src/upgrader-gcp.ts +66 -3
- package/src/upgrader-iam-preflight.test.ts +19 -0
- package/src/upgrader-iam-preflight.ts +6 -0
- package/src/upgrader-job.test.ts +101 -27
- package/src/upgrader-job.ts +27 -14
- package/src/upgrader-records.test.ts +97 -12
- package/src/upgrader-records.ts +28 -11
- package/src/upgrader-setup.test.ts +2 -0
- package/src/upgrader-setup.ts +10 -4
- package/src/wizard.ts +19 -0
- package/src/wizards/gcp-cost.test.ts +103 -0
- package/src/wizards/gcp-cost.ts +125 -18
- package/src/wizards/gcp.ts +164 -22
- package/stacks/aws/Pulumi.yaml +1 -1
- package/stacks/aws/index.ts +72 -14
- package/stacks/azure/index.ts +108 -21
- package/stacks/gcp/Pulumi.yaml +1 -1
- package/stacks/gcp/README.md +1 -0
- package/stacks/gcp/index.ts +133 -24
- package/stacks/gcp-firebase/Pulumi.yaml +1 -1
- package/stacks/gcp-firebase/index.ts +212 -34
- package/stacks/self-hosted/Pulumi.yaml +3 -0
- package/stacks/self-hosted/README.md +6 -1
- package/stacks/self-hosted/index.ts +40 -5
package/dist/upgrade/converge.js
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* service accounts, secrets or other cloud resources so the install matches
|
|
5
5
|
* what the release's stacks declare — the gateway's run SA and the
|
|
6
6
|
* CLI-generated runtime secrets, the stack's IAM/CDN/firewall invariants,
|
|
7
|
-
* MCP access through IAP,
|
|
7
|
+
* MCP access through IAP, the staging database and its gateway login
|
|
8
|
+
* (#1329), the gateway logins' Cloud SQL role memberships (#633),
|
|
8
9
|
* the gateway's and public_role's database logins, the operator-access sync
|
|
9
10
|
* job, the quality-audit job (#875), the remote-MCP load-balancer rules and
|
|
10
11
|
* identity env (#806), and dropping bindings nothing reads any more.
|
|
@@ -28,20 +29,23 @@
|
|
|
28
29
|
*/
|
|
29
30
|
import { ensureAuditJob, resolveAdminImage } from "../audit-job-setup.js";
|
|
30
31
|
import { ensureCaptureJob } from "../capture-job-setup.js";
|
|
32
|
+
import { dialsIpAddress, ensureCloudSqlVerifyFull, liveDatabaseUrls, moveServicesToDnsHost, } from "../cloudsql-tls.js";
|
|
31
33
|
import { ensureConvergeJob } from "../converge-job-setup.js";
|
|
32
34
|
import { findSqlInstance, planPublicRoleSwitch } from "../gateway-credentials.js";
|
|
33
|
-
import { upgraderServiceAccountEmail } from "../gcp-names.js";
|
|
35
|
+
import { schedulerServiceAccountEmail, upgraderServiceAccountEmail } from "../gcp-names.js";
|
|
34
36
|
import { ensureMcpIapAccess } from "../mcp-iap.js";
|
|
35
37
|
import { ensureOperatorAccessSync, resolveOperatorAccessTarget } from "../operator-access.js";
|
|
36
38
|
import { revokePublicRoleMemberships } from "../public-role-isolation.js";
|
|
37
39
|
import { ensureRemoteMcpEdge, resolveRemoteMcpIdentity } from "../remote-mcp.js";
|
|
38
40
|
import { ensureGatewayServiceAccount, ensureGeneratedSecrets, plainGeneratedSecretSeed, readSecretReplication, } from "../runtime-secrets.js";
|
|
41
|
+
import { ensureSchedulerTick } from "../scheduler-setup.js";
|
|
39
42
|
import { selfCommand } from "../self-command.js";
|
|
40
|
-
import { AUDIT_JOB_ENV_VAR, AUDIT_RESULTS_BUCKET_ENV_VAR, CAPTURE_BUCKET_ENV_VAR, CAPTURE_JOB_ENV_VAR, CONVERGE_JOB_ENV_VAR, MCP_ENV_VAR, OPERATOR_ACCESS_JOB_ENV_VAR, remoteMcpIdentityEnv, UPGRADER_JOB_ENV_VAR, } from "../stack-contract.js";
|
|
43
|
+
import { AUDIT_JOB_ENV_VAR, AUDIT_RESULTS_BUCKET_ENV_VAR, CAPTURE_BUCKET_ENV_VAR, CAPTURE_JOB_ENV_VAR, CONVERGE_JOB_ENV_VAR, DATABASE_URL_VARS, INTERIM_FORWARD_ORIGIN_ENV, MCP_ENV_VAR, OPERATOR_ACCESS_JOB_ENV_VAR, parseSchedulerIntervalMinutes, remoteMcpIdentityEnv, SCHEDULER_SERVICE_ACCOUNT_ENV_VAR, UPGRADER_JOB_ENV_VAR, } from "../stack-contract.js";
|
|
41
44
|
import { deleteRetiredSecrets, ensureStackInvariants, liveEnvHasInlinePassword, removeRetiredIamBindings, } from "../stack-converge.js";
|
|
45
|
+
import { ensureStagingDatabase } from "../staging-database.js";
|
|
42
46
|
import { ensureUpgraderJob, resolveUpgraderTarget } from "../upgrader-setup.js";
|
|
43
47
|
import { ensureUrlMapRedirectsAccess } from "../url-map-redirects-access.js";
|
|
44
|
-
import { lookupFailure } from "./gcp-lookup.js";
|
|
48
|
+
import { findServiceUrl, lookupFailure } from "./gcp-lookup.js";
|
|
45
49
|
/**
|
|
46
50
|
* Whether the install must converge before an app-roll to a release that
|
|
47
51
|
* expects infrastructure contract `targetVersion` (infra-contract.ts). An
|
|
@@ -57,7 +61,11 @@ export function startConverge(plan, ownerEmail, deps) {
|
|
|
57
61
|
const { reporter: r, run } = deps;
|
|
58
62
|
const runDeps = { run, ...(deps.sleep ? { sleep: deps.sleep } : {}) };
|
|
59
63
|
const service = (slug) => plan.services.find((s) => s.slug === slug);
|
|
60
|
-
const services = {
|
|
64
|
+
const services = {
|
|
65
|
+
admin: service("admin").serviceName,
|
|
66
|
+
gateway: service("gateway").serviceName,
|
|
67
|
+
"mcp-auth-proxy": service("mcp-auth-proxy").serviceName,
|
|
68
|
+
};
|
|
61
69
|
const target = {
|
|
62
70
|
provider: install.provider,
|
|
63
71
|
projectId: install.projectId,
|
|
@@ -137,19 +145,42 @@ export function startConverge(plan, ownerEmail, deps) {
|
|
|
137
145
|
}
|
|
138
146
|
return true;
|
|
139
147
|
}
|
|
148
|
+
async function stagingDatabase() {
|
|
149
|
+
// #1329 — staging's own database and its gateway login, on an install
|
|
150
|
+
// from before them. Before migrations: the cms_public_staging run and
|
|
151
|
+
// migration 0530 need both, and the membership revoke below needs the
|
|
152
|
+
// user. A failure aborts — the new admin refuses to start without the
|
|
153
|
+
// staging database.
|
|
154
|
+
const s = r.step("Ensuring the staging database (cms_public_staging) and its gateway login...");
|
|
155
|
+
const outcomes = await ensureStagingDatabase({ projectId: install.projectId, env: install.env, credentials: install.credentials }, { ...runDeps, ...(deps.http ? { http: deps.http } : {}) });
|
|
156
|
+
const failed = outcomes.filter((o) => o.status === "failed");
|
|
157
|
+
if (failed.length > 0) {
|
|
158
|
+
s.failed("The staging database could not be set up. Aborting upgrade.");
|
|
159
|
+
for (const o of failed)
|
|
160
|
+
r.error(` FAILED: ${o.id}\n ${o.error ?? ""}`);
|
|
161
|
+
r.warn("No traffic was shifted and no migrations ran. Fix the above and re-run.");
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
s.done("Staging database and its gateway login ready");
|
|
165
|
+
for (const o of outcomes.filter((o) => o.status === "applied")) {
|
|
166
|
+
r.info(` ${o.id}: ${o.detail ?? "created"}`);
|
|
167
|
+
}
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
140
170
|
async function publicRoleIsolation() {
|
|
141
|
-
// #633 — the Admin API made public_role
|
|
142
|
-
// Revoked here, before migrations,
|
|
143
|
-
// audit is what verifies it and fails
|
|
144
|
-
|
|
171
|
+
// #633 — the Admin API made public_role (and, #1329, public_staging_role)
|
|
172
|
+
// a member of cloudsqlsuperuser. Revoked here, before migrations,
|
|
173
|
+
// because the migration job's role audit is what verifies it and fails
|
|
174
|
+
// the upgrade while it remains.
|
|
175
|
+
const s = r.step("Removing the gateway logins from the Cloud SQL superuser group...");
|
|
145
176
|
const outcome = await revokePublicRoleMemberships({ projectId: install.projectId, env: install.env, credentials: install.credentials }, runDeps);
|
|
146
177
|
if (outcome.status === "failed") {
|
|
147
|
-
s.failed("
|
|
178
|
+
s.failed("The gateway logins' role memberships could not be revoked. Aborting upgrade.");
|
|
148
179
|
r.error(` ${outcome.error ?? ""}`);
|
|
149
180
|
r.warn("No traffic was shifted and no migrations ran. Fix the above and re-run.");
|
|
150
181
|
return false;
|
|
151
182
|
}
|
|
152
|
-
s.done(`
|
|
183
|
+
s.done(`The gateway logins hold no database roles (${outcome.detail ?? "revoked"})`);
|
|
153
184
|
return true;
|
|
154
185
|
}
|
|
155
186
|
async function mcpAccess() {
|
|
@@ -265,29 +296,49 @@ export function startConverge(plan, ownerEmail, deps) {
|
|
|
265
296
|
leaveUntouched.push(CAPTURE_JOB_ENV_VAR, CAPTURE_BUCKET_ENV_VAR);
|
|
266
297
|
}
|
|
267
298
|
async function remoteMcpEdge() {
|
|
268
|
-
// #806 — on `gcp` the load balancer routes the remote-MCP
|
|
269
|
-
//
|
|
270
|
-
// /api/mcp/* (remote-mcp-edge.ts). Only remote
|
|
271
|
-
// failure warns.
|
|
299
|
+
// #806 / #1328 — on `gcp` the load balancer routes the remote-MCP paths
|
|
300
|
+
// to the MCP-Auth-Proxy's own backend, whose Cloud Armor policy lets
|
|
301
|
+
// agent traffic through on /api/mcp/* (remote-mcp-edge.ts). Only remote
|
|
302
|
+
// MCP depends on it, so a failure warns. The gateway being rolled in
|
|
303
|
+
// this run no longer answers those paths, so until this succeeds remote
|
|
304
|
+
// MCP is down on the site's domain — said below.
|
|
272
305
|
if (install.provider !== "gcp")
|
|
273
306
|
return;
|
|
274
|
-
const s = r.step("Ensuring the
|
|
307
|
+
const s = r.step("Ensuring the MCP-Auth-Proxy's load-balancer route and Cloud Armor rule...");
|
|
275
308
|
const edge = await ensureRemoteMcpEdge({
|
|
276
309
|
provider: install.provider,
|
|
277
310
|
projectId: install.projectId,
|
|
311
|
+
region: install.region,
|
|
278
312
|
env: install.env,
|
|
279
313
|
domain: install.domain,
|
|
314
|
+
mcpAuthProxyImageRef: service("mcp-auth-proxy").imageRef,
|
|
280
315
|
}, { ...runDeps, ...(deps.http ? { http: deps.http } : {}) });
|
|
281
316
|
if (edge.ok) {
|
|
282
317
|
for (const line of edge.done)
|
|
283
318
|
r.info(` ${line}`);
|
|
284
|
-
s.done("Remote-MCP load-balancer
|
|
319
|
+
s.done("Remote-MCP load-balancer route ready");
|
|
285
320
|
return;
|
|
286
321
|
}
|
|
287
|
-
s.warned(`Remote-MCP load-balancer
|
|
322
|
+
s.warned(`Remote-MCP load-balancer route not set up: ${edge.error}`);
|
|
288
323
|
r.warn("The upgrade continues; remote MCP (Settings → MCP → Remote) cannot be reached through the site's domain until this succeeds. Re-run upgrade once the cause is fixed.");
|
|
289
324
|
incomplete = true;
|
|
290
325
|
}
|
|
326
|
+
async function interimForwardEnv() {
|
|
327
|
+
// #1328 — on gcp-firebase the proxy is the service the current live
|
|
328
|
+
// release's Firebase rewrite and the staging domain mapping still
|
|
329
|
+
// point at; it forwards that traffic to the data gateway, whose URL is
|
|
330
|
+
// its origin (stack-contract.ts INTERIM_FORWARD_ORIGIN_ENV). Without it
|
|
331
|
+
// the proxy answers the live site's /api/** with 404 until the next
|
|
332
|
+
// Publish live, and the staging host with 404 — so this aborts.
|
|
333
|
+
if (install.provider !== "gcp-firebase")
|
|
334
|
+
return [];
|
|
335
|
+
const url = await findServiceUrl(run, install.projectId, install.region, services.gateway);
|
|
336
|
+
if (!url)
|
|
337
|
+
throw new Error(`could not read the URL of ${services.gateway}`);
|
|
338
|
+
return [{ name: INTERIM_FORWARD_ORIGIN_ENV, value: new URL(url).origin }];
|
|
339
|
+
}
|
|
340
|
+
/** The admin's origin behind IAP, once {@link remoteMcpIdentity} read it. */
|
|
341
|
+
let resolvedAdminUrl = null;
|
|
291
342
|
async function remoteMcpIdentity() {
|
|
292
343
|
// #806 — CAELO_ADMIN_URL / CAELO_MCP_PUBLIC_URL / CAELO_IAP_AUDIENCE
|
|
293
344
|
// name identities the env contract cannot (stack-contract.ts
|
|
@@ -307,6 +358,7 @@ export function startConverge(plan, ownerEmail, deps) {
|
|
|
307
358
|
services,
|
|
308
359
|
}, runDeps);
|
|
309
360
|
if (resolved.ok) {
|
|
361
|
+
resolvedAdminUrl = resolved.identity.adminUrl;
|
|
310
362
|
s.done(`Google sign-in and remote MCP can be set up under Settings → Google sign-in (${resolved.identity.mcpPublicUrl})`);
|
|
311
363
|
if (resolved.orgDomainError) {
|
|
312
364
|
// #914 — the admin then refuses new users until Google sign-in is
|
|
@@ -338,6 +390,55 @@ export function startConverge(plan, ownerEmail, deps) {
|
|
|
338
390
|
const name = res.ok ? res.stdout.trim().split("\n")[0]?.trim() : "";
|
|
339
391
|
return name ? { kind: "backend-services", service: name } : null;
|
|
340
392
|
}
|
|
393
|
+
/** #1338 — the host the database TLS step moved the services onto. */
|
|
394
|
+
let databaseHost = null;
|
|
395
|
+
async function databaseTls() {
|
|
396
|
+
// #1338 — verify-full TLS needs the shared server CA, the instance's
|
|
397
|
+
// DNS name resolving in the VPC, and the services dialling that name
|
|
398
|
+
// (cloudsql-tls.ts). Before migrations: the migration job reads its host
|
|
399
|
+
// from the admin's live URL, and the new images refuse anything less
|
|
400
|
+
// than verify-full. A failure aborts — the new revisions could not
|
|
401
|
+
// reach the database.
|
|
402
|
+
const s = r.step("Setting up verify-full TLS to the database (shared CA, private DNS name)...");
|
|
403
|
+
const liveUrls = plan.services.map((p) => ({
|
|
404
|
+
serviceName: p.serviceName,
|
|
405
|
+
liveUrls: liveDatabaseUrls(p.liveEnv, DATABASE_URL_VARS[p.slug]),
|
|
406
|
+
}));
|
|
407
|
+
// Only this step moves the services off the instance's IP, and only
|
|
408
|
+
// after the instance, its certificate and the DNS name are in shape —
|
|
409
|
+
// so services that dial a host name already went through it.
|
|
410
|
+
const onIp = liveUrls.some((u) => Object.values(u.liveUrls).some((v) => dialsIpAddress(v)));
|
|
411
|
+
if (!onIp) {
|
|
412
|
+
s.done("Database TLS ready: the services already dial the instance's DNS name");
|
|
413
|
+
return true;
|
|
414
|
+
}
|
|
415
|
+
const lookup = await findSqlInstance(install, { run });
|
|
416
|
+
if (lookup.status !== "found") {
|
|
417
|
+
s.failed(`${lookupFailure(lookup, "Cloud SQL instance", install.credentials)}. Aborting upgrade.`);
|
|
418
|
+
r.warn("No traffic was shifted and no migrations ran. Re-run upgrade once the instance is found.");
|
|
419
|
+
return false;
|
|
420
|
+
}
|
|
421
|
+
const tlsDeps = { ...runDeps, ...(deps.http ? { http: deps.http } : {}) };
|
|
422
|
+
const tls = await ensureCloudSqlVerifyFull({ projectId: install.projectId, env: install.env, sqlInstance: lookup.name }, tlsDeps);
|
|
423
|
+
for (const line of tls.done)
|
|
424
|
+
r.info(` ${line}`);
|
|
425
|
+
if (!tls.ok) {
|
|
426
|
+
s.failed(`Database TLS could not be set up: ${tls.error}. Aborting upgrade.`);
|
|
427
|
+
r.warn("No traffic was shifted and no migrations ran. Fix the above and re-run.");
|
|
428
|
+
return false;
|
|
429
|
+
}
|
|
430
|
+
const moved = await moveServicesToDnsHost({ projectId: install.projectId, region: install.region }, liveUrls, tls.host, tlsDeps);
|
|
431
|
+
for (const line of moved.done)
|
|
432
|
+
r.info(` ${line}`);
|
|
433
|
+
if (!moved.ok) {
|
|
434
|
+
s.failed(`The services could not be moved onto ${tls.host}: ${moved.error}. Aborting upgrade.`);
|
|
435
|
+
r.warn("No migrations ran. Fix the above and re-run.");
|
|
436
|
+
return false;
|
|
437
|
+
}
|
|
438
|
+
databaseHost = tls.host;
|
|
439
|
+
s.done(`Database TLS ready: the services dial ${tls.host} (verify-full from the new revisions)`);
|
|
440
|
+
return true;
|
|
441
|
+
}
|
|
341
442
|
async function databaseLogins() {
|
|
342
443
|
// #613 — public_role moves onto its own password right before the
|
|
343
444
|
// gateway's roll. The gateway has no other database login (#635).
|
|
@@ -441,6 +542,66 @@ export function startConverge(plan, ownerEmail, deps) {
|
|
|
441
542
|
incomplete = true;
|
|
442
543
|
leaveUntouched.push(CONVERGE_JOB_ENV_VAR);
|
|
443
544
|
}
|
|
545
|
+
let schedulerReady = false;
|
|
546
|
+
/** The scheduler's SA exists from an earlier run though this one failed. */
|
|
547
|
+
let schedulerAccountExists = false;
|
|
548
|
+
async function setUpSchedulerTick() {
|
|
549
|
+
let intervalMinutes;
|
|
550
|
+
try {
|
|
551
|
+
intervalMinutes = parseSchedulerIntervalMinutes(deps.schedulerIntervalMinutes, "install.json schedulerIntervalMinutes");
|
|
552
|
+
}
|
|
553
|
+
catch (e) {
|
|
554
|
+
return { ok: false, done: [], error: e.message };
|
|
555
|
+
}
|
|
556
|
+
const resource = await adminIapResource();
|
|
557
|
+
if (!resource)
|
|
558
|
+
return { ok: false, done: [], error: "the admin's IAP resource was not found" };
|
|
559
|
+
if (!resolvedAdminUrl)
|
|
560
|
+
return { ok: false, done: [], error: "the admin's URL could not be read" };
|
|
561
|
+
const st = await ensureSchedulerTick({
|
|
562
|
+
projectId: install.projectId,
|
|
563
|
+
region: install.region,
|
|
564
|
+
env: install.env,
|
|
565
|
+
adminUrl: resolvedAdminUrl,
|
|
566
|
+
resource,
|
|
567
|
+
intervalMinutes,
|
|
568
|
+
}, runDeps);
|
|
569
|
+
return st.ok ? { ok: true, done: st.done, intervalMinutes } : st;
|
|
570
|
+
}
|
|
571
|
+
async function schedulerTick() {
|
|
572
|
+
// #1140 — the one Cloud Scheduler job that calls the admin's tick
|
|
573
|
+
// (scheduler-setup.ts). After migrations and before the operator-access
|
|
574
|
+
// step, which must keep the scheduler's account on IAP. The schedule
|
|
575
|
+
// starts right away: until the roll below finishes, a tick reaches the
|
|
576
|
+
// previous admin, which has no such endpoint (404) — that execution
|
|
577
|
+
// fails and nothing runs; the first tick after the roll does the work.
|
|
578
|
+
// A failure costs the periodic work (plugin workers, GC, release check),
|
|
579
|
+
// not the site, so it warns and the admin keeps its current env.
|
|
580
|
+
const s = r.step("Ensuring the scheduler tick (periodic work and plugin workers)...");
|
|
581
|
+
const st = await setUpSchedulerTick();
|
|
582
|
+
for (const step of st.done)
|
|
583
|
+
r.info(` ${step}`);
|
|
584
|
+
if (st.ok) {
|
|
585
|
+
schedulerReady = true;
|
|
586
|
+
s.done(`Scheduler tick ready (every ${st.intervalMinutes} min)`);
|
|
587
|
+
return;
|
|
588
|
+
}
|
|
589
|
+
s.warned(`Scheduler tick not set up: ${st.error}`);
|
|
590
|
+
// An account set up by an earlier run keeps its IAP access, or the next
|
|
591
|
+
// sync would cut off a tick that still works.
|
|
592
|
+
const exists = await run([
|
|
593
|
+
"iam",
|
|
594
|
+
"service-accounts",
|
|
595
|
+
"describe",
|
|
596
|
+
schedulerServiceAccountEmail(install.projectId, install.env),
|
|
597
|
+
`--project=${install.projectId}`,
|
|
598
|
+
"--format=value(email)",
|
|
599
|
+
]);
|
|
600
|
+
schedulerAccountExists = exists.ok;
|
|
601
|
+
r.warn("The upgrade continues; plugin workers, update checks and clean-up run late or not at all until this succeeds. Re-run upgrade once the cause is fixed.");
|
|
602
|
+
incomplete = true;
|
|
603
|
+
leaveUntouched.push(SCHEDULER_SERVICE_ACCOUNT_ENV_VAR);
|
|
604
|
+
}
|
|
444
605
|
async function operatorAccess() {
|
|
445
606
|
// The job that keeps IAP in step with the user list (operator-access.ts).
|
|
446
607
|
// After migrations: its database user gets the role migration 0239
|
|
@@ -464,6 +625,13 @@ export function startConverge(plan, ownerEmail, deps) {
|
|
|
464
625
|
],
|
|
465
626
|
}
|
|
466
627
|
: {}),
|
|
628
|
+
...(schedulerReady || schedulerAccountExists
|
|
629
|
+
? {
|
|
630
|
+
iapServiceAccounts: [
|
|
631
|
+
schedulerServiceAccountEmail(install.projectId, install.env),
|
|
632
|
+
],
|
|
633
|
+
}
|
|
634
|
+
: {}),
|
|
467
635
|
}, runDeps)
|
|
468
636
|
: { ok: false, done: [], error: resolved.error };
|
|
469
637
|
for (const step of oa.done)
|
|
@@ -485,8 +653,12 @@ export function startConverge(plan, ownerEmail, deps) {
|
|
|
485
653
|
return false;
|
|
486
654
|
if (!(await stackInvariants()))
|
|
487
655
|
return false;
|
|
656
|
+
if (!(await stagingDatabase()))
|
|
657
|
+
return false;
|
|
488
658
|
if (!(await publicRoleIsolation()))
|
|
489
659
|
return false;
|
|
660
|
+
if (!(await databaseTls()))
|
|
661
|
+
return false;
|
|
490
662
|
await mcpAccess();
|
|
491
663
|
await urlMapRedirectsAccess();
|
|
492
664
|
await auditJob();
|
|
@@ -498,14 +670,29 @@ export function startConverge(plan, ownerEmail, deps) {
|
|
|
498
670
|
async afterMigrations() {
|
|
499
671
|
if (!(await databaseLogins()))
|
|
500
672
|
return { ok: false };
|
|
673
|
+
// Read-only, first: the scheduler tick needs the admin's URL.
|
|
674
|
+
const identity = await remoteMcpIdentity();
|
|
501
675
|
await upgraderJob();
|
|
502
676
|
await convergeJob();
|
|
677
|
+
await schedulerTick();
|
|
503
678
|
await operatorAccess();
|
|
504
|
-
|
|
679
|
+
let forward;
|
|
680
|
+
try {
|
|
681
|
+
forward = await interimForwardEnv();
|
|
682
|
+
}
|
|
683
|
+
catch (e) {
|
|
684
|
+
r.error(`The MCP-Auth-Proxy cannot be pointed at the data gateway: ${e instanceof Error ? e.message : String(e)}. Nothing was rolled; re-run upgrade once it is fixed.`);
|
|
685
|
+
return { ok: false };
|
|
686
|
+
}
|
|
687
|
+
const extraEnv = {
|
|
688
|
+
...(identity ?? {}),
|
|
689
|
+
"mcp-auth-proxy": [...(identity?.["mcp-auth-proxy"] ?? []), ...forward],
|
|
690
|
+
};
|
|
505
691
|
return {
|
|
506
692
|
ok: true,
|
|
507
693
|
leaveUntouched: [...leaveUntouched],
|
|
508
|
-
|
|
694
|
+
extraEnv,
|
|
695
|
+
...(databaseHost ? { databaseHost } : {}),
|
|
509
696
|
};
|
|
510
697
|
},
|
|
511
698
|
async beforeRoll(slug) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converge.js","sourceRoot":"","sources":["../../src/upgrade/converge.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"converge.js","sourceRoot":"","sources":["../../src/upgrade/converge.ts"],"names":[],"mappings":"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"}
|
package/dist/upgrade/health.d.ts
CHANGED
|
@@ -9,9 +9,12 @@
|
|
|
9
9
|
* - admin `GET /_caelo/health?deep=1` → `{ ok, version, migrations }`:
|
|
10
10
|
* both databases reachable as the expected roles, and every
|
|
11
11
|
* migration the image ships recorded as applied.
|
|
12
|
-
* - gateway `GET /api/_caelo/health?deep=1` → `{ ok
|
|
13
|
-
* database
|
|
12
|
+
* - gateway `GET /api/_caelo/health?deep=1` → `{ ok }` (no version since
|
|
13
|
+
* #1326): its database login works. Under `/api/` because that is the only
|
|
14
14
|
* path the gcp load balancer routes to the gateway.
|
|
15
|
+
* - MCP-Auth-Proxy `GET /api/mcp/health` → `{ ok }` (#1328, no version
|
|
16
|
+
* either): it has no database, so it answers once it runs; under
|
|
17
|
+
* `/api/mcp/`, the prefix the gcp load balancer routes to it.
|
|
15
18
|
*
|
|
16
19
|
* Both answer with no secrets and no raw database errors. The admin sits
|
|
17
20
|
* behind IAP, so the probe signs an IAP credential as the install's MCP
|
|
@@ -75,8 +78,25 @@ export declare function evaluateAdminDeepHealth(status: number, text: string, ex
|
|
|
75
78
|
ok: false;
|
|
76
79
|
error: string;
|
|
77
80
|
};
|
|
78
|
-
/**
|
|
79
|
-
|
|
81
|
+
/**
|
|
82
|
+
* Judge a public service's deep health answer: the gateway's, or the
|
|
83
|
+
* MCP-Auth-Proxy's (#1328). Since #1326 the public services report no
|
|
84
|
+
* release version (a public version string names the flaws to try), so
|
|
85
|
+
* this proves only that the service answers healthy — for the gateway,
|
|
86
|
+
* that its database login works. Which release it runs the roll itself
|
|
87
|
+
* establishes: `update --image` with the pinned digest succeeded and
|
|
88
|
+
* traffic moved to that revision (app-roll.ts), or the roll already failed.
|
|
89
|
+
*
|
|
90
|
+
* @param service how the errors name it (`gateway`, `MCP-Auth-Proxy`)
|
|
91
|
+
*/
|
|
92
|
+
export declare function evaluatePublicServiceDeepHealth(service: string, status: number, text: string): HealthOutcome;
|
|
93
|
+
/**
|
|
94
|
+
* The MCP-Auth-Proxy's health path (apps/mcp-auth-proxy server.ts). Under
|
|
95
|
+
* `/api/mcp/` because on gcp that is the prefix the load balancer routes to
|
|
96
|
+
* the proxy; it answers before any other routing, also while remote MCP is
|
|
97
|
+
* off.
|
|
98
|
+
*/
|
|
99
|
+
export declare const MCP_AUTH_PROXY_HEALTH_PATH = "/api/mcp/health";
|
|
80
100
|
/** Where the probe reaches the install. */
|
|
81
101
|
export interface HealthTarget {
|
|
82
102
|
readonly provider: "gcp" | "gcp-firebase";
|
|
@@ -86,16 +106,20 @@ export interface HealthTarget {
|
|
|
86
106
|
readonly adminServiceUrl: string;
|
|
87
107
|
/** The gateway service's `run.app` URL (public on gcp-firebase). */
|
|
88
108
|
readonly gatewayServiceUrl: string;
|
|
109
|
+
/** The MCP-Auth-Proxy service's `run.app` URL (public on gcp-firebase). */
|
|
110
|
+
readonly mcpAuthProxyServiceUrl: string;
|
|
89
111
|
}
|
|
90
112
|
/**
|
|
91
113
|
* The origins the probe calls. On gcp the admin's IAP lives on the load
|
|
92
|
-
* balancer (`admin.<domain>`) and the gateway's ingress is
|
|
93
|
-
* (`<domain>/api/*`); on
|
|
94
|
-
*
|
|
114
|
+
* balancer (`admin.<domain>`), and the gateway's and the proxy's ingress is
|
|
115
|
+
* load-balancer-only (`<domain>/api/*`, `<domain>/api/mcp/*`); on
|
|
116
|
+
* gcp-firebase every `run.app` URL is reachable — the admin's through Cloud
|
|
117
|
+
* Run's own IAP, the others publicly.
|
|
95
118
|
*/
|
|
96
119
|
export declare function healthOrigins(target: HealthTarget): {
|
|
97
120
|
admin: string;
|
|
98
121
|
gateway: string;
|
|
122
|
+
mcpAuthProxy: string;
|
|
99
123
|
};
|
|
100
124
|
/**
|
|
101
125
|
* How long the baseline treats a refusal as access still propagating: IAM's
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/upgrade/health.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/upgrade/health.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACpE;;;;;OAKG;IACH,IAAI,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC3E;AAuBD;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,GAAG,IAAI,GAC7B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAuC9E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,aAAa,CAUf;AAED;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,oBAAoB,CAAC;AAE5D,2CAA2C;AAC3C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,cAAc,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,oEAAoE;IACpE,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,2EAA2E;IAC3E,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;CACzC;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB,CAYA;AAED;;;GAGG;AACH,eAAO,MAAM,yBAAyB,QAAa,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,2BAA2B;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AAmBD,4DAA4D;AAC5D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,GAAG,WAAW,CA2N7F"}
|
package/dist/upgrade/health.js
CHANGED
|
@@ -54,37 +54,54 @@ export function evaluateAdminDeepHealth(status, text, expectedVersion) {
|
|
|
54
54
|
detail: `admin ${body.version}, migrations at ${m.admin.head ?? "?"} / ${m.public.head ?? "?"}`,
|
|
55
55
|
};
|
|
56
56
|
}
|
|
57
|
-
/**
|
|
58
|
-
|
|
57
|
+
/**
|
|
58
|
+
* Judge a public service's deep health answer: the gateway's, or the
|
|
59
|
+
* MCP-Auth-Proxy's (#1328). Since #1326 the public services report no
|
|
60
|
+
* release version (a public version string names the flaws to try), so
|
|
61
|
+
* this proves only that the service answers healthy — for the gateway,
|
|
62
|
+
* that its database login works. Which release it runs the roll itself
|
|
63
|
+
* establishes: `update --image` with the pinned digest succeeded and
|
|
64
|
+
* traffic moved to that revision (app-roll.ts), or the roll already failed.
|
|
65
|
+
*
|
|
66
|
+
* @param service how the errors name it (`gateway`, `MCP-Auth-Proxy`)
|
|
67
|
+
*/
|
|
68
|
+
export function evaluatePublicServiceDeepHealth(service, status, text) {
|
|
59
69
|
const body = parseJson(text);
|
|
60
70
|
if (!body)
|
|
61
|
-
return { ok: false, error:
|
|
71
|
+
return { ok: false, error: `${service} answered HTTP ${status} without JSON` };
|
|
62
72
|
if (status !== 200 || body.ok !== true) {
|
|
63
73
|
return {
|
|
64
74
|
ok: false,
|
|
65
|
-
error:
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
if (body.version !== expectedVersion) {
|
|
69
|
-
return {
|
|
70
|
-
ok: false,
|
|
71
|
-
error: `gateway runs ${body.version ?? "an unknown version"}, the admin runs ${expectedVersion}`,
|
|
75
|
+
error: `${service} reports unhealthy (HTTP ${status}, ${body.error?.kind ?? "no reason"})`,
|
|
72
76
|
};
|
|
73
77
|
}
|
|
74
|
-
return { ok: true, detail:
|
|
78
|
+
return { ok: true, detail: `${service} healthy` };
|
|
75
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* The MCP-Auth-Proxy's health path (apps/mcp-auth-proxy server.ts). Under
|
|
82
|
+
* `/api/mcp/` because on gcp that is the prefix the load balancer routes to
|
|
83
|
+
* the proxy; it answers before any other routing, also while remote MCP is
|
|
84
|
+
* off.
|
|
85
|
+
*/
|
|
86
|
+
export const MCP_AUTH_PROXY_HEALTH_PATH = "/api/mcp/health";
|
|
76
87
|
/**
|
|
77
88
|
* The origins the probe calls. On gcp the admin's IAP lives on the load
|
|
78
|
-
* balancer (`admin.<domain>`) and the gateway's ingress is
|
|
79
|
-
* (`<domain>/api/*`); on
|
|
80
|
-
*
|
|
89
|
+
* balancer (`admin.<domain>`), and the gateway's and the proxy's ingress is
|
|
90
|
+
* load-balancer-only (`<domain>/api/*`, `<domain>/api/mcp/*`); on
|
|
91
|
+
* gcp-firebase every `run.app` URL is reachable — the admin's through Cloud
|
|
92
|
+
* Run's own IAP, the others publicly.
|
|
81
93
|
*/
|
|
82
94
|
export function healthOrigins(target) {
|
|
83
95
|
return target.provider === "gcp"
|
|
84
|
-
? {
|
|
96
|
+
? {
|
|
97
|
+
admin: `https://admin.${target.domain}`,
|
|
98
|
+
gateway: `https://${target.domain}`,
|
|
99
|
+
mcpAuthProxy: `https://${target.domain}`,
|
|
100
|
+
}
|
|
85
101
|
: {
|
|
86
102
|
admin: new URL(target.adminServiceUrl).origin,
|
|
87
103
|
gateway: new URL(target.gatewayServiceUrl).origin,
|
|
104
|
+
mcpAuthProxy: new URL(target.mcpAuthProxyServiceUrl).origin,
|
|
88
105
|
};
|
|
89
106
|
}
|
|
90
107
|
/**
|
|
@@ -296,8 +313,15 @@ export function createIapHealthProbe(target, deps) {
|
|
|
296
313
|
const gateway = await get(`${origins.gateway}/api/_caelo/health?deep=1`, {});
|
|
297
314
|
if (!gateway.reached)
|
|
298
315
|
return { ok: false, error: `gateway unreachable: ${gateway.error}` };
|
|
299
|
-
const g =
|
|
300
|
-
|
|
316
|
+
const g = evaluatePublicServiceDeepHealth("gateway", gateway.status, gateway.text);
|
|
317
|
+
if (!g.ok)
|
|
318
|
+
return g;
|
|
319
|
+
// #1328 — the proxy holds no database login: healthy once it answers.
|
|
320
|
+
const proxy = await get(`${origins.mcpAuthProxy}${MCP_AUTH_PROXY_HEALTH_PATH}`, {});
|
|
321
|
+
if (!proxy.reached)
|
|
322
|
+
return { ok: false, error: `MCP-Auth-Proxy unreachable: ${proxy.error}` };
|
|
323
|
+
const p = evaluatePublicServiceDeepHealth("MCP-Auth-Proxy", proxy.status, proxy.text);
|
|
324
|
+
return p.ok ? { ok: true, detail: `${a.detail}; ${g.detail}; ${p.detail}` } : p;
|
|
301
325
|
}
|
|
302
326
|
}
|
|
303
327
|
//# sourceMappingURL=health.js.map
|