@caelo-cms/provisioning 0.11.11 → 0.11.12
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/agent-db.js +171 -15
- package/dist/converge-job-gcp.d.ts +7 -0
- package/dist/converge-job-gcp.d.ts.map +1 -1
- package/dist/converge-job-gcp.js +33 -1
- package/dist/converge-job-gcp.js.map +1 -1
- package/dist/converge-job-preflight.d.ts +34 -2
- package/dist/converge-job-preflight.d.ts.map +1 -1
- package/dist/converge-job-preflight.js +68 -1
- package/dist/converge-job-preflight.js.map +1 -1
- package/dist/converge-job-setup.d.ts.map +1 -1
- package/dist/converge-job-setup.js +4 -1
- package/dist/converge-job-setup.js.map +1 -1
- package/dist/converge-job.d.ts +27 -3
- package/dist/converge-job.d.ts.map +1 -1
- package/dist/converge-job.js +93 -11
- package/dist/converge-job.js.map +1 -1
- package/dist/install-job.d.ts +6 -0
- package/dist/install-job.d.ts.map +1 -1
- package/dist/install-job.js +6 -0
- package/dist/install-job.js.map +1 -1
- package/dist/mcp-auth-proxy-setup.d.ts +3 -1
- package/dist/mcp-auth-proxy-setup.d.ts.map +1 -1
- package/dist/mcp-auth-proxy-setup.js +9 -4
- package/dist/mcp-auth-proxy-setup.js.map +1 -1
- package/dist/upgrader-iam-preflight.d.ts +8 -6
- package/dist/upgrader-iam-preflight.d.ts.map +1 -1
- package/dist/upgrader-iam-preflight.js +5 -1
- package/dist/upgrader-iam-preflight.js.map +1 -1
- package/dist/wizards/gcp-cost.js +1 -1
- package/dist/wizards/gcp-cost.js.map +1 -1
- package/package.json +2 -2
- package/src/converge-job-gcp.ts +33 -1
- package/src/converge-job-preflight.test.ts +101 -0
- package/src/converge-job-preflight.ts +89 -3
- package/src/converge-job-setup.ts +4 -1
- package/src/converge-job.test.ts +143 -0
- package/src/converge-job.ts +143 -19
- package/src/install-job.ts +6 -0
- package/src/mcp-auth-proxy-setup.test.ts +33 -1
- package/src/mcp-auth-proxy-setup.ts +11 -4
- package/src/upgrader-iam-preflight.ts +15 -10
- package/src/wizards/gcp-cost.ts +1 -1
package/dist/agent-db.js
CHANGED
|
@@ -18856,6 +18856,7 @@ async function recordAudit(tx, opts) {
|
|
|
18856
18856
|
var SYSTEM_ACTOR_ID = "00000000-0000-0000-0000-00000000ffff";
|
|
18857
18857
|
|
|
18858
18858
|
// ../query-api/src/branch-access.ts
|
|
18859
|
+
import { AsyncLocalStorage } from "async_hooks";
|
|
18859
18860
|
var UUID_RE2 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
18860
18861
|
function namedBranches(ctx, input) {
|
|
18861
18862
|
const out = new Set;
|
|
@@ -18879,12 +18880,71 @@ function branchNotFound(operation, chatBranchId) {
|
|
|
18879
18880
|
function firstMalformedBranch(branches) {
|
|
18880
18881
|
return branches.find((b) => !UUID_RE2.test(b)) ?? null;
|
|
18881
18882
|
}
|
|
18882
|
-
|
|
18883
|
+
var VERDICT_MAX_AGE_MS = 30000;
|
|
18884
|
+
var visibilityScope = new AsyncLocalStorage;
|
|
18885
|
+
function verdictKey(ctx, branch) {
|
|
18886
|
+
return `${ctx.actorKind}|${ctx.actorId}|${ctx.chatTaskId ?? ""}|${branch}`;
|
|
18887
|
+
}
|
|
18888
|
+
function rememberedVerdict(ctx, branch) {
|
|
18889
|
+
const scope = visibilityScope.getStore();
|
|
18890
|
+
if (!scope)
|
|
18891
|
+
return;
|
|
18892
|
+
const key = verdictKey(ctx, branch);
|
|
18893
|
+
const hit = scope.verdicts.get(key);
|
|
18894
|
+
if (!hit)
|
|
18895
|
+
return;
|
|
18896
|
+
if (Date.now() - hit.at > VERDICT_MAX_AGE_MS) {
|
|
18897
|
+
scope.verdicts.delete(key);
|
|
18898
|
+
return;
|
|
18899
|
+
}
|
|
18900
|
+
return hit.visible;
|
|
18901
|
+
}
|
|
18902
|
+
function rememberVerdict(ctx, branch, visible) {
|
|
18903
|
+
const scope = visibilityScope.getStore();
|
|
18904
|
+
if (!scope)
|
|
18905
|
+
return;
|
|
18906
|
+
const key = verdictKey(ctx, branch);
|
|
18907
|
+
const entry = { visible, at: Date.now() };
|
|
18908
|
+
scope.verdicts.set(key, entry);
|
|
18909
|
+
visible.catch(() => {
|
|
18910
|
+
if (scope.verdicts.get(key) === entry)
|
|
18911
|
+
scope.verdicts.delete(key);
|
|
18912
|
+
});
|
|
18913
|
+
}
|
|
18914
|
+
async function rememberedFirstInvisible(ctx, branches) {
|
|
18915
|
+
const pending = [];
|
|
18916
|
+
for (const branch of branches) {
|
|
18917
|
+
if (!UUID_RE2.test(branch))
|
|
18918
|
+
return branch;
|
|
18919
|
+
const visible = rememberedVerdict(ctx, branch);
|
|
18920
|
+
if (!visible)
|
|
18921
|
+
return;
|
|
18922
|
+
pending.push({ branch, visible });
|
|
18923
|
+
}
|
|
18924
|
+
for (const p of pending) {
|
|
18925
|
+
try {
|
|
18926
|
+
if (!await p.visible)
|
|
18927
|
+
return p.branch;
|
|
18928
|
+
} catch {
|
|
18929
|
+
return;
|
|
18930
|
+
}
|
|
18931
|
+
}
|
|
18932
|
+
return null;
|
|
18933
|
+
}
|
|
18934
|
+
async function firstInvisibleBranch(tx, branches, ctx) {
|
|
18883
18935
|
for (const branch of branches) {
|
|
18884
18936
|
if (!UUID_RE2.test(branch))
|
|
18885
18937
|
return branch;
|
|
18886
|
-
|
|
18887
|
-
if (
|
|
18938
|
+
let visible = ctx ? rememberedVerdict(ctx, branch) : undefined;
|
|
18939
|
+
if (!visible) {
|
|
18940
|
+
visible = (async () => {
|
|
18941
|
+
const rows = await tx.execute(sql`SELECT caelo_branch_visible(${branch}::uuid) AS visible`);
|
|
18942
|
+
return rows[0]?.visible === true;
|
|
18943
|
+
})();
|
|
18944
|
+
if (ctx)
|
|
18945
|
+
rememberVerdict(ctx, branch, visible);
|
|
18946
|
+
}
|
|
18947
|
+
if (!await visible)
|
|
18888
18948
|
return branch;
|
|
18889
18949
|
}
|
|
18890
18950
|
return null;
|
|
@@ -19106,7 +19166,7 @@ async function provisionPluginSchemaInTx(tx, caller, opts) {
|
|
|
19106
19166
|
}
|
|
19107
19167
|
|
|
19108
19168
|
// ../query-api/src/pool-guard.ts
|
|
19109
|
-
import { AsyncLocalStorage } from "async_hooks";
|
|
19169
|
+
import { AsyncLocalStorage as AsyncLocalStorage2 } from "async_hooks";
|
|
19110
19170
|
var POOL_ACQUIRE_TIMEOUT_MS = 1e4;
|
|
19111
19171
|
var LONG_TRANSACTIONS = [
|
|
19112
19172
|
{
|
|
@@ -19146,13 +19206,14 @@ class PoolAcquireTimeoutError extends Error {
|
|
|
19146
19206
|
timeoutMs;
|
|
19147
19207
|
name = "PoolAcquireTimeoutError";
|
|
19148
19208
|
constructor(pool, requester, timeoutMs) {
|
|
19149
|
-
super(`the ${pool} database pool had no free connection for ${requester} within ${timeoutMs} ms: every connection is busy. ` +
|
|
19209
|
+
super(`the ${pool} database pool had no free connection for ${requester} within ${timeoutMs} ms: every connection is busy. ` + `Nothing was changed. Retry in a few seconds (wait about ${Math.round(POOL_BUSY_RETRY_AFTER_MS / 1000)} s, then send the same call again unchanged); ` + "if it keeps happening the admin is overloaded or a request holds its connections \u2014 the server log names it.");
|
|
19150
19210
|
this.pool = pool;
|
|
19151
19211
|
this.requester = requester;
|
|
19152
19212
|
this.timeoutMs = timeoutMs;
|
|
19153
19213
|
}
|
|
19154
19214
|
}
|
|
19155
|
-
var
|
|
19215
|
+
var POOL_BUSY_RETRY_AFTER_MS = 5000;
|
|
19216
|
+
var joining = new AsyncLocalStorage2;
|
|
19156
19217
|
function newMarker(holder, root) {
|
|
19157
19218
|
return {
|
|
19158
19219
|
holder,
|
|
@@ -19168,8 +19229,8 @@ function newMarker(holder, root) {
|
|
|
19168
19229
|
|
|
19169
19230
|
class PoolGuard {
|
|
19170
19231
|
#stores = {
|
|
19171
|
-
admin: new
|
|
19172
|
-
public: new
|
|
19232
|
+
admin: new AsyncLocalStorage2,
|
|
19233
|
+
public: new AsyncLocalStorage2
|
|
19173
19234
|
};
|
|
19174
19235
|
plan(pool, holder) {
|
|
19175
19236
|
const outer = this.held(pool);
|
|
@@ -19231,6 +19292,50 @@ function detachedRunner(operation, open) {
|
|
|
19231
19292
|
});
|
|
19232
19293
|
}
|
|
19233
19294
|
|
|
19295
|
+
// ../query-api/src/pool-pressure.ts
|
|
19296
|
+
var BUN_DEFAULT_POOL_MAX = 10;
|
|
19297
|
+
|
|
19298
|
+
class PoolDemand {
|
|
19299
|
+
#pool;
|
|
19300
|
+
#max;
|
|
19301
|
+
#now;
|
|
19302
|
+
#next = 0;
|
|
19303
|
+
#waiting = new Map;
|
|
19304
|
+
#holding = new Map;
|
|
19305
|
+
constructor(pool, max, now = Date.now) {
|
|
19306
|
+
this.#pool = pool;
|
|
19307
|
+
this.#max = max;
|
|
19308
|
+
this.#now = now;
|
|
19309
|
+
}
|
|
19310
|
+
beginWait() {
|
|
19311
|
+
const id = this.#next++;
|
|
19312
|
+
this.#waiting.set(id, this.#now());
|
|
19313
|
+
return () => {
|
|
19314
|
+
this.#waiting.delete(id);
|
|
19315
|
+
};
|
|
19316
|
+
}
|
|
19317
|
+
beginHold(holder) {
|
|
19318
|
+
const id = this.#next++;
|
|
19319
|
+
this.#holding.set(id, { holder, since: this.#now() });
|
|
19320
|
+
return () => {
|
|
19321
|
+
this.#holding.delete(id);
|
|
19322
|
+
};
|
|
19323
|
+
}
|
|
19324
|
+
snapshot() {
|
|
19325
|
+
const now = this.#now();
|
|
19326
|
+
const firstWait = this.#waiting.values().next();
|
|
19327
|
+
const holders = [...this.#holding.values()].map((h) => ({ holder: h.holder, heldMs: now - h.since })).sort((a, b) => b.heldMs - a.heldMs);
|
|
19328
|
+
return {
|
|
19329
|
+
pool: this.#pool,
|
|
19330
|
+
max: this.#max,
|
|
19331
|
+
inUse: this.#holding.size,
|
|
19332
|
+
waiting: this.#waiting.size,
|
|
19333
|
+
oldestWaitMs: firstWait.done ? 0 : now - firstWait.value,
|
|
19334
|
+
holders
|
|
19335
|
+
};
|
|
19336
|
+
}
|
|
19337
|
+
}
|
|
19338
|
+
|
|
19234
19339
|
// ../query-api/src/post-commit.ts
|
|
19235
19340
|
var pendingByTx = new WeakMap;
|
|
19236
19341
|
function collectPostCommitEffects(tx) {
|
|
@@ -19377,6 +19482,7 @@ class DatabaseAdapter {
|
|
|
19377
19482
|
#publicDatabase;
|
|
19378
19483
|
#acquireTimeoutMs;
|
|
19379
19484
|
#guard = new PoolGuard;
|
|
19485
|
+
#demand;
|
|
19380
19486
|
#verifyPromise = null;
|
|
19381
19487
|
#projectionPublisher = null;
|
|
19382
19488
|
#onStatement;
|
|
@@ -19405,6 +19511,13 @@ class DatabaseAdapter {
|
|
|
19405
19511
|
this.#public = drizzle(this.#publicRaw, this.#drizzleOptions);
|
|
19406
19512
|
this.#skipVerify = config.skipRoleVerification === true;
|
|
19407
19513
|
this.#acquireTimeoutMs = config.poolAcquireTimeoutMs ?? POOL_ACQUIRE_TIMEOUT_MS;
|
|
19514
|
+
this.#demand = {
|
|
19515
|
+
admin: new PoolDemand("admin", poolMax ?? BUN_DEFAULT_POOL_MAX),
|
|
19516
|
+
public: new PoolDemand("public", publicPoolMax ?? BUN_DEFAULT_POOL_MAX)
|
|
19517
|
+
};
|
|
19518
|
+
}
|
|
19519
|
+
poolPressure(pool) {
|
|
19520
|
+
return this.#demand[pool].snapshot();
|
|
19408
19521
|
}
|
|
19409
19522
|
async#transaction(pool, holder, fn) {
|
|
19410
19523
|
const raw = pool === "admin" ? this.#adminRaw : this.#publicRaw;
|
|
@@ -19415,6 +19528,7 @@ class DatabaseAdapter {
|
|
|
19415
19528
|
return this.#joinHeld(pool, plan.outer, plan.marker, fn);
|
|
19416
19529
|
const marker = plan.marker;
|
|
19417
19530
|
const reserved = await this.#reserve(pool, raw, holder);
|
|
19531
|
+
const endHold = this.#demand[pool].beginHold(holder);
|
|
19418
19532
|
try {
|
|
19419
19533
|
const db = drizzle({ client: reserved, ...this.#drizzleOptions });
|
|
19420
19534
|
this.#onStatement?.("BEGIN");
|
|
@@ -19428,6 +19542,7 @@ class DatabaseAdapter {
|
|
|
19428
19542
|
return out;
|
|
19429
19543
|
} finally {
|
|
19430
19544
|
reserved.release();
|
|
19545
|
+
endHold();
|
|
19431
19546
|
await this.#runAfterEnd(marker);
|
|
19432
19547
|
}
|
|
19433
19548
|
}
|
|
@@ -19471,6 +19586,7 @@ class DatabaseAdapter {
|
|
|
19471
19586
|
async#reserve(pool, raw, requester) {
|
|
19472
19587
|
const deadline = new AbortController;
|
|
19473
19588
|
const timer = setTimeout(() => deadline.abort(), this.#acquireTimeoutMs);
|
|
19589
|
+
const endWait = this.#demand[pool].beginWait();
|
|
19474
19590
|
try {
|
|
19475
19591
|
return await raw.reserve({ signal: deadline.signal });
|
|
19476
19592
|
} catch (e) {
|
|
@@ -19479,6 +19595,7 @@ class DatabaseAdapter {
|
|
|
19479
19595
|
}
|
|
19480
19596
|
throw e;
|
|
19481
19597
|
} finally {
|
|
19598
|
+
endWait();
|
|
19482
19599
|
clearTimeout(timer);
|
|
19483
19600
|
}
|
|
19484
19601
|
}
|
|
@@ -19590,7 +19707,7 @@ class DatabaseAdapter {
|
|
|
19590
19707
|
postCommit = collectPostCommitEffects(tx);
|
|
19591
19708
|
await this.#setIdentity(tx, ctx, op.name);
|
|
19592
19709
|
if (op.database === "cms_admin") {
|
|
19593
|
-
const denied = await firstInvisibleBranch(tx, namedBranches(ctx, validatedInput));
|
|
19710
|
+
const denied = await firstInvisibleBranch(tx, namedBranches(ctx, validatedInput), ctx);
|
|
19594
19711
|
if (denied !== null)
|
|
19595
19712
|
return err(branchNotFound(op.name, denied));
|
|
19596
19713
|
}
|
|
@@ -19647,9 +19764,10 @@ class DatabaseAdapter {
|
|
|
19647
19764
|
try {
|
|
19648
19765
|
const branches = op.database === "cms_admin" ? namedBranches(ctx, validatedInput) : [];
|
|
19649
19766
|
if (branches.length > 0) {
|
|
19650
|
-
const
|
|
19767
|
+
const remembered = await rememberedFirstInvisible(ctx, branches);
|
|
19768
|
+
const denied = remembered !== undefined ? remembered : await this.#transaction("admin", op.name, async (tx) => {
|
|
19651
19769
|
await this.#setIdentity(tx, ctx);
|
|
19652
|
-
return firstInvisibleBranch(tx, branches);
|
|
19770
|
+
return firstInvisibleBranch(tx, branches, ctx);
|
|
19653
19771
|
});
|
|
19654
19772
|
if (denied !== null)
|
|
19655
19773
|
return err(branchNotFound(op.name, denied));
|
|
@@ -19749,7 +19867,8 @@ class DatabaseAdapter {
|
|
|
19749
19867
|
try {
|
|
19750
19868
|
const branches = namedBranches(ctx, validatedInput);
|
|
19751
19869
|
if (branches.length > 0) {
|
|
19752
|
-
const
|
|
19870
|
+
const remembered = await rememberedFirstInvisible(ctx, branches);
|
|
19871
|
+
const denied = remembered !== undefined ? remembered : await this.#shortRead(ctx, op.name, (tx) => firstInvisibleBranch(tx, branches, ctx));
|
|
19753
19872
|
if (denied !== null)
|
|
19754
19873
|
return err(branchNotFound(op.name, denied));
|
|
19755
19874
|
}
|
|
@@ -19829,7 +19948,7 @@ class DatabaseAdapter {
|
|
|
19829
19948
|
if (!joined)
|
|
19830
19949
|
postCommit = collectPostCommitEffects(tx);
|
|
19831
19950
|
await this.#setIdentity(tx, ctx, options.holder ?? null);
|
|
19832
|
-
const denied = await firstInvisibleBranch(tx, namedBranches(ctx, undefined));
|
|
19951
|
+
const denied = await firstInvisibleBranch(tx, namedBranches(ctx, undefined), ctx);
|
|
19833
19952
|
if (denied !== null) {
|
|
19834
19953
|
throw new OperationAbortError(branchNotFound("withAdminTransaction", denied));
|
|
19835
19954
|
}
|
|
@@ -19866,11 +19985,40 @@ class DatabaseAdapter {
|
|
|
19866
19985
|
if (this.#adminRaw === null)
|
|
19867
19986
|
throw new AdminDatabaseUnavailableError("rawAdmin");
|
|
19868
19987
|
this.#guard.assertNoHeldTransaction("admin", "rawAdmin()");
|
|
19869
|
-
return this.#adminRaw;
|
|
19988
|
+
return this.#trackedRaw("admin", this.#adminRaw);
|
|
19870
19989
|
}
|
|
19871
19990
|
rawPublic() {
|
|
19872
19991
|
this.#guard.assertNoHeldTransaction("public", "rawPublic()");
|
|
19873
|
-
return this.#publicRaw;
|
|
19992
|
+
return this.#trackedRaw("public", this.#publicRaw);
|
|
19993
|
+
}
|
|
19994
|
+
#trackedRaw(pool, raw) {
|
|
19995
|
+
const demand = this.#demand[pool];
|
|
19996
|
+
return new Proxy(raw, {
|
|
19997
|
+
get(target, property, receiver) {
|
|
19998
|
+
const value = Reflect.get(target, property, receiver);
|
|
19999
|
+
if (property !== "begin" || typeof value !== "function") {
|
|
20000
|
+
return typeof value === "function" ? value.bind(target) : value;
|
|
20001
|
+
}
|
|
20002
|
+
return (...args) => {
|
|
20003
|
+
const last = args.length - 1;
|
|
20004
|
+
const fn = args[last];
|
|
20005
|
+
if (typeof fn !== "function")
|
|
20006
|
+
return value.apply(target, args);
|
|
20007
|
+
const endWait = demand.beginWait();
|
|
20008
|
+
const counted = async (tx) => {
|
|
20009
|
+
endWait();
|
|
20010
|
+
const endHold = demand.beginHold("raw.begin");
|
|
20011
|
+
try {
|
|
20012
|
+
return await fn(tx);
|
|
20013
|
+
} finally {
|
|
20014
|
+
endHold();
|
|
20015
|
+
}
|
|
20016
|
+
};
|
|
20017
|
+
const out = value.apply(target, [...args.slice(0, last), counted]);
|
|
20018
|
+
return out.finally(endWait);
|
|
20019
|
+
};
|
|
20020
|
+
}
|
|
20021
|
+
});
|
|
19874
20022
|
}
|
|
19875
20023
|
async provisionPluginPublicSchema(opts) {
|
|
19876
20024
|
if (!/^[0-9a-f-]{36}$/i.test(opts.pluginId)) {
|
|
@@ -19963,6 +20111,14 @@ async function auditDroppedColumns(tx, database, pluginId, outcome) {
|
|
|
19963
20111
|
}
|
|
19964
20112
|
function thrownToQueryError(operation, thrown, access) {
|
|
19965
20113
|
const raw = thrown instanceof Error ? thrown.message : String(thrown);
|
|
20114
|
+
if (thrown instanceof PoolAcquireTimeoutError) {
|
|
20115
|
+
return {
|
|
20116
|
+
kind: "HandlerError",
|
|
20117
|
+
operation,
|
|
20118
|
+
message: raw,
|
|
20119
|
+
busy: { retryAfterMs: POOL_BUSY_RETRY_AFTER_MS }
|
|
20120
|
+
};
|
|
20121
|
+
}
|
|
19966
20122
|
if (isRlsDenial(thrown)) {
|
|
19967
20123
|
console.warn(`[query-api] ${operation}: RLS denied the ${access}: ${raw}`);
|
|
19968
20124
|
return { kind: "RLSDenied", operation, detail: rlsDenialMessage(operation, access) };
|
|
@@ -41,6 +41,13 @@ export declare function deployedSiteMismatch(adminJson: string, meta: Pick<Insta
|
|
|
41
41
|
export declare function convergeExecutionNameError(execution: string | null): string | null;
|
|
42
42
|
/** The new execution's name from `gcloud run jobs execute --async`. */
|
|
43
43
|
export declare function startedExecutionName(stdout: string, stderr: string): string | null;
|
|
44
|
+
/**
|
|
45
|
+
* The `gcloud` argv that grants the install's provisioner — this job's
|
|
46
|
+
* own identity, never another principal — `role` on the project, or null
|
|
47
|
+
* when `role` is not on the self-grant allowlist (converge-job-preflight.ts).
|
|
48
|
+
* Exported for the tests that pin the boundary.
|
|
49
|
+
*/
|
|
50
|
+
export declare function selfGrantArgs(projectId: string, role: string): string[] | null;
|
|
44
51
|
/**
|
|
45
52
|
* Every dependency of {@link runConvergeJob} except the database (the queue
|
|
46
53
|
* and how it is secured, #1373) and the log.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converge-job-gcp.d.ts","sourceRoot":"","sources":["../src/converge-job-gcp.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAA0B,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"converge-job-gcp.d.ts","sourceRoot":"","sources":["../src/converge-job-gcp.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAA0B,MAAM,mBAAmB,CAAC;AAahG,OAAO,EACL,KAAK,eAAe,EAKrB,MAAM,oBAAoB,CAAC;AAa5B,OAAO,EAAmC,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC5F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAIrD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBxE;AAQD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkC7F;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,GAAG,eAAe,GAAG,QAAQ,CAAC,EAClE,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,IAAI,CAiCf;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAOlF;AAED,uEAAuE;AACvE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGlF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAY9E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,iBAAiB,EAC5B,KAAK,EAAE,aAAa,EACpB,cAAc,EAAE,eAAe,CAAC,gBAAgB,CAAC,EACjD,GAAG,EAAE,MAAM,GACV,eAAe,CAmPjB"}
|
package/dist/converge-job-gcp.js
CHANGED
|
@@ -19,15 +19,17 @@ import { tmpdir } from "node:os";
|
|
|
19
19
|
import { join } from "node:path";
|
|
20
20
|
import { CAELO_VERSION } from "@caelo-cms/shared";
|
|
21
21
|
import { readConvergeCheckpoint, writeConvergeCheckpoint } from "./converge-checkpoint.js";
|
|
22
|
+
import { isSelfGrantableRole } from "./converge-job-preflight.js";
|
|
22
23
|
import { CONVERGE_TASK_TIMEOUT_MINUTES } from "./converge-job-setup.js";
|
|
23
24
|
import { gcloud } from "./gcloud.js";
|
|
24
|
-
import { realSleep } from "./gcloud-retry.js";
|
|
25
|
+
import { realSleep, runWithRetry } from "./gcloud-retry.js";
|
|
25
26
|
import { convergeJobName, GCP_STACK_ENV, gcpNamePrefix, operatorAccessJobName, } from "./gcp-names.js";
|
|
26
27
|
import { INFRA_CONTRACT_VERSION } from "./infra-contract.js";
|
|
27
28
|
import { describeExecution } from "./install-job.js";
|
|
28
29
|
import { installRoot, installStagingHost, readMetadata, recordInfraContractVersion, } from "./install-state.js";
|
|
29
30
|
import { runMigrationsViaCloudRunJob } from "./migration-runner.js";
|
|
30
31
|
import { installIapAllowlist } from "./operator-access.js";
|
|
32
|
+
import { provisionerServiceAccountEmail } from "./provisioner-identity.js";
|
|
31
33
|
import { fetchVerifiedReleaseManifest, manifestServiceImages } from "./release-manifest.js";
|
|
32
34
|
import { publicSiteUrl, STAGING_HOST_ENV } from "./stack-contract.js";
|
|
33
35
|
import { attachInstall } from "./state-attach.js";
|
|
@@ -160,6 +162,26 @@ export function startedExecutionName(stdout, stderr) {
|
|
|
160
162
|
const name = stdout.trim().split(/\s+/)[0] || /Execution \[([^\]]+)\]/.exec(stderr)?.[1] || "";
|
|
161
163
|
return /^[a-z0-9-]+$/.test(name) ? name : null;
|
|
162
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* The `gcloud` argv that grants the install's provisioner — this job's
|
|
167
|
+
* own identity, never another principal — `role` on the project, or null
|
|
168
|
+
* when `role` is not on the self-grant allowlist (converge-job-preflight.ts).
|
|
169
|
+
* Exported for the tests that pin the boundary.
|
|
170
|
+
*/
|
|
171
|
+
export function selfGrantArgs(projectId, role) {
|
|
172
|
+
if (!isSelfGrantableRole(role))
|
|
173
|
+
return null;
|
|
174
|
+
return [
|
|
175
|
+
"projects",
|
|
176
|
+
"add-iam-policy-binding",
|
|
177
|
+
projectId,
|
|
178
|
+
`--member=serviceAccount:${provisionerServiceAccountEmail(projectId)}`,
|
|
179
|
+
`--role=${role}`,
|
|
180
|
+
"--condition=None",
|
|
181
|
+
"--quiet",
|
|
182
|
+
"--format=none",
|
|
183
|
+
];
|
|
184
|
+
}
|
|
163
185
|
/**
|
|
164
186
|
* Every dependency of {@link runConvergeJob} except the database (the queue
|
|
165
187
|
* and how it is secured, #1373) and the log.
|
|
@@ -285,6 +307,16 @@ export function gcpConvergeDeps(placement, queue, secureDatabase, log) {
|
|
|
285
307
|
projectId,
|
|
286
308
|
region,
|
|
287
309
|
iam: gcloudIamTester(run, http),
|
|
310
|
+
grantOwnRole: async (role) => {
|
|
311
|
+
const args = selfGrantArgs(projectId, role);
|
|
312
|
+
if (!args)
|
|
313
|
+
return { ok: false, error: `${role} is not a role the converge job may grant itself` };
|
|
314
|
+
const r = await runWithRetry(run, realSleep, args);
|
|
315
|
+
return r.ok
|
|
316
|
+
? { ok: true }
|
|
317
|
+
: { ok: false, error: r.stderr.trim() || `gcloud exited ${r.exitCode}` };
|
|
318
|
+
},
|
|
319
|
+
sleep: realSleep,
|
|
288
320
|
execution: placement.execution,
|
|
289
321
|
ownVersion: CAELO_VERSION,
|
|
290
322
|
// The default deps: the fixed registry and signer, never overridden.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converge-job-gcp.js","sourceRoot":"","sources":["../src/converge-job-gcp.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"converge-job-gcp.js","sourceRoot":"","sources":["../src/converge-job-gcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type InstallJobRole } from "./install-job.js";
|
|
2
|
-
import type { AccessCheck, PreflightVoice } from "./upgrader-iam-preflight.js";
|
|
2
|
+
import type { AccessCheck, MissingAccess, PreflightVoice } from "./upgrader-iam-preflight.js";
|
|
3
3
|
/**
|
|
4
4
|
* What a converge does with each role `ensureConvergeJob` grants the
|
|
5
5
|
* provisioner on top of its install roles, and the permissions of that role
|
|
@@ -12,10 +12,42 @@ export declare const INSTALL_ROLE_USES: Record<InstallJobRole, {
|
|
|
12
12
|
}>;
|
|
13
13
|
/** The converge job's voice: the setup is re-converged by a terminal upgrade. */
|
|
14
14
|
export declare const CONVERGE_PREFLIGHT_VOICE: PreflightVoice;
|
|
15
|
+
/**
|
|
16
|
+
* The roles the converge job may grant its own account when the self-check
|
|
17
|
+
* finds them missing: exactly the roles `ensureConvergeJob` grants it, as
|
|
18
|
+
* compiled into this release (see the file comment).
|
|
19
|
+
*/
|
|
20
|
+
export declare const CONVERGE_SELF_GRANTABLE_ROLES: readonly InstallJobRole[];
|
|
21
|
+
/**
|
|
22
|
+
* Roles the converge job must never grant itself, whatever a release's list
|
|
23
|
+
* says — ownership and IAM-policy roles (prefix matches). The tests assert
|
|
24
|
+
* {@link CONVERGE_SELF_GRANTABLE_ROLES} names none of them, and the grant
|
|
25
|
+
* step refuses them again at run time.
|
|
26
|
+
*/
|
|
27
|
+
export declare const SELF_GRANT_FORBIDDEN_ROLES: readonly ["roles/owner", "roles/editor", "roles/resourcemanager.", "roles/iam.securityAdmin", "roles/iam.organizationRoleAdmin", "roles/iam.serviceAccountKeyAdmin", "roles/iam.workloadIdentityPoolAdmin", "roles/orgpolicy.", "roles/billing."];
|
|
28
|
+
/** Whether the converge job may grant `role` to its own account (see the file comment). */
|
|
29
|
+
export declare function isSelfGrantableRole(role: string): role is InstallJobRole;
|
|
30
|
+
/** A converge self-check; `role` marks a check that granting that role repairs. */
|
|
31
|
+
export interface ConvergeAccessCheck extends AccessCheck {
|
|
32
|
+
readonly role?: InstallJobRole;
|
|
33
|
+
}
|
|
34
|
+
/** What the converge job does about the self-check's missing permissions. */
|
|
35
|
+
export interface SelfGrantPlan {
|
|
36
|
+
/** Allowlisted roles to grant the provisioner, in list order. */
|
|
37
|
+
readonly grant: readonly InstallJobRole[];
|
|
38
|
+
/** What no grant of the job repairs: the run stops on any of these. */
|
|
39
|
+
readonly blocking: readonly MissingAccess<ConvergeAccessCheck>[];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Split the self-check's missing permissions into roles the job grants
|
|
43
|
+
* itself and the rest. A check counts as repairable only when its whole
|
|
44
|
+
* shortfall is permissions of an allowlisted role it is marked with.
|
|
45
|
+
*/
|
|
46
|
+
export declare function selfGrantPlan(missing: readonly MissingAccess<ConvergeAccessCheck>[]): SelfGrantPlan;
|
|
15
47
|
/** Every permission a converge run relies on after its decision (see the file comment). */
|
|
16
48
|
export declare function convergeAccessChecks(target: {
|
|
17
49
|
readonly projectId: string;
|
|
18
50
|
readonly region: string;
|
|
19
51
|
readonly env: string;
|
|
20
|
-
}):
|
|
52
|
+
}): ConvergeAccessCheck[];
|
|
21
53
|
//# sourceMappingURL=converge-job-preflight.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converge-job-preflight.d.ts","sourceRoot":"","sources":["../src/converge-job-preflight.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"converge-job-preflight.d.ts","sourceRoot":"","sources":["../src/converge-job-preflight.ts"],"names":[],"mappings":"AAqDA,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG1E,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG9F;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CACpC,cAAc,EACd;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CA0BnE,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,wBAAwB,EAAE,cAItC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,EAAE,SAAS,cAAc,EAAsB,CAAC;AAE1F;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,mPAU7B,CAAC;AAEX,2FAA2F;AAC3F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,cAAc,CAKxE;AAED,mFAAmF;AACnF,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,QAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC;CAChC;AAED,6EAA6E;AAC7E,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,CAAC,mBAAmB,CAAC,EAAE,CAAC;CAClE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,aAAa,CAAC,mBAAmB,CAAC,EAAE,GACrD,aAAa,CAcf;AAED,2FAA2F;AAC3F,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,GAAG,mBAAmB,EAAE,CAyCxB"}
|
|
@@ -25,6 +25,23 @@
|
|
|
25
25
|
* - the Cloud SQL IAM login `ensureConvergeJob` creates (member of
|
|
26
26
|
* {@link UPGRADER_DB_ROLE}): the request row and the timeline.
|
|
27
27
|
*
|
|
28
|
+
* Self-grant (maintainer decision 2026-11-03). A release may add a role to
|
|
29
|
+
* {@link INSTALL_JOB_ROLES} (0.11.11 added roles/workflows.editor for the
|
|
30
|
+
* scheduler tick, #1140); an install set up before it lacks that role until
|
|
31
|
+
* a converge's `ensureConvergeJob` grants it, and the converge job used to
|
|
32
|
+
* stop here and send the Owner to Cloud Shell for exactly that grant. Now a
|
|
33
|
+
* missing role of {@link CONVERGE_SELF_GRANTABLE_ROLES} — this release's own
|
|
34
|
+
* compiled-in list, nothing a request, a record or the environment names —
|
|
35
|
+
* is not a reason to stop: stage 1 leaves it to stage 2, and stage 2 (the
|
|
36
|
+
* target release's verified ops image, under the state lock) grants it to
|
|
37
|
+
* the provisioner at project level, records each grant on the timeline and
|
|
38
|
+
* asks IAM again (converge-job.ts). Not an escalation: the provisioner holds
|
|
39
|
+
* roles/resourcemanager.projectIamAdmin since install, so it could grant
|
|
40
|
+
* itself any role already; the allowlist only narrows what the job does
|
|
41
|
+
* with that. {@link SELF_GRANT_FORBIDDEN_ROLES} pins that the list never
|
|
42
|
+
* names an ownership or IAM-policy role, and the upgrader job — which holds
|
|
43
|
+
* no IAM rights at all — has no grant step.
|
|
44
|
+
*
|
|
28
45
|
* Not checked: the permissions `pulumi up` needs for the stack. They are the
|
|
29
46
|
* provisioner's PROVISIONER_ROLE_LIST (gcloud.ts), granted at install by the
|
|
30
47
|
* Owner's own account; a converge cannot repair them and Pulumi names what
|
|
@@ -73,13 +90,63 @@ export const CONVERGE_PREFLIGHT_VOICE = {
|
|
|
73
90
|
subject: "the converge job",
|
|
74
91
|
repair: "Run the update once from Cloud Shell or the computer you installed from (Settings → Updates shows the command); it repairs the converge job's access.",
|
|
75
92
|
};
|
|
93
|
+
/**
|
|
94
|
+
* The roles the converge job may grant its own account when the self-check
|
|
95
|
+
* finds them missing: exactly the roles `ensureConvergeJob` grants it, as
|
|
96
|
+
* compiled into this release (see the file comment).
|
|
97
|
+
*/
|
|
98
|
+
export const CONVERGE_SELF_GRANTABLE_ROLES = INSTALL_JOB_ROLES;
|
|
99
|
+
/**
|
|
100
|
+
* Roles the converge job must never grant itself, whatever a release's list
|
|
101
|
+
* says — ownership and IAM-policy roles (prefix matches). The tests assert
|
|
102
|
+
* {@link CONVERGE_SELF_GRANTABLE_ROLES} names none of them, and the grant
|
|
103
|
+
* step refuses them again at run time.
|
|
104
|
+
*/
|
|
105
|
+
export const SELF_GRANT_FORBIDDEN_ROLES = [
|
|
106
|
+
"roles/owner",
|
|
107
|
+
"roles/editor",
|
|
108
|
+
"roles/resourcemanager.",
|
|
109
|
+
"roles/iam.securityAdmin",
|
|
110
|
+
"roles/iam.organizationRoleAdmin",
|
|
111
|
+
"roles/iam.serviceAccountKeyAdmin",
|
|
112
|
+
"roles/iam.workloadIdentityPoolAdmin",
|
|
113
|
+
"roles/orgpolicy.",
|
|
114
|
+
"roles/billing.",
|
|
115
|
+
];
|
|
116
|
+
/** Whether the converge job may grant `role` to its own account (see the file comment). */
|
|
117
|
+
export function isSelfGrantableRole(role) {
|
|
118
|
+
return (CONVERGE_SELF_GRANTABLE_ROLES.includes(role) &&
|
|
119
|
+
!SELF_GRANT_FORBIDDEN_ROLES.some((f) => role === f || (f.endsWith(".") && role.startsWith(f))));
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Split the self-check's missing permissions into roles the job grants
|
|
123
|
+
* itself and the rest. A check counts as repairable only when its whole
|
|
124
|
+
* shortfall is permissions of an allowlisted role it is marked with.
|
|
125
|
+
*/
|
|
126
|
+
export function selfGrantPlan(missing) {
|
|
127
|
+
const grant = [];
|
|
128
|
+
const blocking = [];
|
|
129
|
+
for (const m of missing) {
|
|
130
|
+
const role = m.check.role;
|
|
131
|
+
if (role && isSelfGrantableRole(role) && !(m.unchecked && m.unchecked.length > 0)) {
|
|
132
|
+
if (!grant.includes(role))
|
|
133
|
+
grant.push(role);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
blocking.push(m);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const order = CONVERGE_SELF_GRANTABLE_ROLES;
|
|
140
|
+
grant.sort((a, b) => order.indexOf(a) - order.indexOf(b));
|
|
141
|
+
return { grant, blocking };
|
|
142
|
+
}
|
|
76
143
|
/** Every permission a converge run relies on after its decision (see the file comment). */
|
|
77
144
|
export function convergeAccessChecks(target) {
|
|
78
145
|
const { projectId, region, env } = target;
|
|
79
146
|
const project = { kind: "project", projectId };
|
|
80
147
|
const bucket = opsBucketName(projectId);
|
|
81
148
|
return [
|
|
82
|
-
...INSTALL_JOB_ROLES.map((role) => ({ resource: project, ...INSTALL_ROLE_USES[role] })),
|
|
149
|
+
...INSTALL_JOB_ROLES.map((role) => ({ resource: project, role, ...INSTALL_ROLE_USES[role] })),
|
|
83
150
|
{
|
|
84
151
|
need: `read and write the install's records and state lock (${OPS_INSTALL_PREFIX}/) and the update's checkpoint (${CONVERGE_STATE_PREFIX}/) in the ops bucket`,
|
|
85
152
|
resource: { kind: "bucket", bucket },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converge-job-preflight.js","sourceRoot":"","sources":["../src/converge-job-preflight.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC
|
|
1
|
+
{"version":3,"file":"converge-job-preflight.js","sourceRoot":"","sources":["../src/converge-job-preflight.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAuB,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAG1B;IACF,qBAAqB,EAAE;QACrB,IAAI,EAAE,uEAAuE;QAC7E,WAAW,EAAE,CAAC,kBAAkB,EAAE,eAAe,EAAE,kBAAkB,CAAC;KACvE;IACD,4BAA4B,EAAE;QAC5B,IAAI,EAAE,2EAA2E;QACjF,WAAW,EAAE;YACX,4BAA4B;YAC5B,yBAAyB;YACzB,4BAA4B;SAC7B;KACF;IACD,wBAAwB,EAAE;QACxB,IAAI,EAAE,gEAAgE;QACtE,WAAW,EAAE;YACX,4BAA4B;YAC5B,yBAAyB;YACzB,4BAA4B;SAC7B;KACF;IACD,yBAAyB,EAAE;QACzB,IAAI,EAAE,8CAA8C;QACpD,WAAW,EAAE,CAAC,2BAA2B,CAAC;KAC3C;CACF,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,wBAAwB,GAAmB;IACtD,OAAO,EAAE,kBAAkB;IAC3B,MAAM,EACJ,uJAAuJ;CAC1J,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAA8B,iBAAiB,CAAC;AAE1F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,aAAa;IACb,cAAc;IACd,wBAAwB;IACxB,yBAAyB;IACzB,iCAAiC;IACjC,kCAAkC;IAClC,qCAAqC;IACrC,kBAAkB;IAClB,gBAAgB;CACR,CAAC;AAEX,2FAA2F;AAC3F,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,CACJ,6BAAmD,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnE,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAC/F,CAAC;AACJ,CAAC;AAeD;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAsD;IAEtD,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAyC,EAAE,CAAC;IAC1D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QAC1B,IAAI,IAAI,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;YAClF,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,6BAAkD,CAAC;IACjE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,oBAAoB,CAAC,MAIpC;IACC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAC1C,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAW,CAAC;IACxD,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IACxC,OAAO;QACL,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7F;YACE,IAAI,EAAE,wDAAwD,kBAAkB,mCAAmC,qBAAqB,sBAAsB;YAC9J,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE;YACpC,WAAW,EAAE;gBACX,sBAAsB;gBACtB,qBAAqB;gBACrB,wBAAwB;gBACxB,wBAAwB;aACzB;SACF;QACD;YACE,IAAI,EAAE,oEAAoE;YAC1E,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE;YAC5E,WAAW,EAAE,CAAC,cAAc,EAAE,iBAAiB,EAAE,cAAc,CAAC;SACjE;QACD;YACE,IAAI,EAAE,0DAA0D;YAChE,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,CAAC,oBAAoB,CAAC;SACpC;QACD;YACE,IAAI,EAAE,oEAAoE;YAC1E,QAAQ,EAAE;gBACR,IAAI,EAAE,iBAAiB;gBACvB,SAAS;gBACT,KAAK,EAAE,8BAA8B,CAAC,SAAS,CAAC;aACjD;YACD,WAAW,EAAE,CAAC,2BAA2B,CAAC;SAC3C;QACD;YACE,IAAI,EAAE,kCAAkC,gBAAgB,4CAA4C;YACpG,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,CAAC,wBAAwB,EAAE,0BAA0B,CAAC;SACpE;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converge-job-setup.d.ts","sourceRoot":"","sources":["../src/converge-job-setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"converge-job-setup.d.ts","sourceRoot":"","sources":["../src/converge-job-setup.ts"],"names":[],"mappings":"AAsDA,OAAO,EAAE,KAAK,YAAY,EAA2B,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAO3F;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,yDAA0D,CAAC;AAE5F;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,uBAAuB,CAAC;AAC5D,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAMnD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,qFAAqF;IACrF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAC9C;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;CACpC,CAAC;AAEN;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,EAAE,CA4B3E;AAED,0FAA0F;AAC1F,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,mBAAmB,EAC3B,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,YAAY,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAO,GAC/C,OAAO,CAAC,mBAAmB,CAAC,CAiH9B"}
|
|
@@ -40,7 +40,10 @@
|
|
|
40
40
|
* - {@link INSTALL_JOB_ROLES} (the operator-access step of a converge
|
|
41
41
|
* creates a custom role and a Cloud Scheduler job, and the job's lines
|
|
42
42
|
* must reach Cloud Logging) — what an install-job install already
|
|
43
|
-
* grants; not an escalation, the provisioner holds projectIamAdmin
|
|
43
|
+
* grants; not an escalation, the provisioner holds projectIamAdmin. The
|
|
44
|
+
* converge job of a release that adds a role here grants it itself when
|
|
45
|
+
* it finds it missing (converge-job-preflight.ts, the self-grant), so
|
|
46
|
+
* the role reaches an older install without a terminal run;
|
|
44
47
|
* - a Cloud SQL IAM database login that is a member of `platform_updater`
|
|
45
48
|
* only (migration 0267): it reads its request and writes the timeline,
|
|
46
49
|
* nothing else in the database.
|