@go-to-k/cdkd 0.283.3 → 0.283.5
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/{asg-provider-CtmogXk9.js → asg-provider-B9eSuRPc.js} +2 -2
- package/dist/{asg-provider-CtmogXk9.js.map → asg-provider-B9eSuRPc.js.map} +1 -1
- package/dist/cli.js +461 -45
- package/dist/cli.js.map +1 -1
- package/dist/{deploy-engine-DxpS3fJ9.js → deploy-engine-BcwNPlSk.js} +157 -18
- package/dist/deploy-engine-BcwNPlSk.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/deploy-engine-DxpS3fJ9.js.map +0 -1
|
@@ -8234,6 +8234,84 @@ const THROTTLING_ERROR_NAMES = /* @__PURE__ */ new Set([
|
|
|
8234
8234
|
"TransactionInProgressException"
|
|
8235
8235
|
]);
|
|
8236
8236
|
/**
|
|
8237
|
+
* Marker for an error cdkd raised as a DELIBERATE refusal rather than as a
|
|
8238
|
+
* relayed AWS failure (issue [#1778](https://github.com/go-to-k/cdkd/issues/1778)).
|
|
8239
|
+
*
|
|
8240
|
+
* Every classifier below is SUBSTRING-based, which is the right shape for
|
|
8241
|
+
* relaying a vendor's message and the wrong one for cdkd's own prose: a
|
|
8242
|
+
* refusal message is assembled from values cdkd does not control — a provider
|
|
8243
|
+
* `reason`, a state-borne physicalId, a template logical id — and any of them
|
|
8244
|
+
* can happen to contain a retryable pattern. Measured: a resource named
|
|
8245
|
+
* `MyDependencyViolationSub` puts `DependencyViolation` in the message, so a
|
|
8246
|
+
* deterministic refusal was classified transient and burned the whole backoff
|
|
8247
|
+
* schedule before failing exactly as it would have immediately. Keeping the
|
|
8248
|
+
* offending values OUT of the message narrows that surface but cannot close
|
|
8249
|
+
* it, because a message with no identifiers at all is not diagnosable.
|
|
8250
|
+
*
|
|
8251
|
+
* A marker inverts the burden: the raiser STATES that the error is terminal,
|
|
8252
|
+
* so no wording can make it retryable. Deliberately a `Symbol.for` key —
|
|
8253
|
+
* global-registry symbols survive a duplicated module instance (dual
|
|
8254
|
+
* bundling), where a module-local symbol would silently stop matching — and
|
|
8255
|
+
* non-enumerable, so it cannot leak into a serialized error payload.
|
|
8256
|
+
*/
|
|
8257
|
+
const NON_RETRYABLE_MARKER = Symbol.for("cdkd.nonRetryable");
|
|
8258
|
+
/**
|
|
8259
|
+
* Mark a cdkd-authored refusal as terminal and return it, for
|
|
8260
|
+
* `throw markNonRetryable(new ProvisioningError(...))`.
|
|
8261
|
+
*
|
|
8262
|
+
* Reach for it when the error means "this cannot succeed on a retry" as a
|
|
8263
|
+
* matter of cdkd's own logic — NOT for a relayed AWS failure, whose
|
|
8264
|
+
* retryability is the classifiers' business.
|
|
8265
|
+
*
|
|
8266
|
+
* KNOWN LIVE INSTANCE NOT YET COVERED: `ResourceUpdateNotSupportedError`
|
|
8267
|
+
* (`src/utils/error-handler.ts`) interpolates the logical id and is thrown by
|
|
8268
|
+
* ~20 providers from inside the retried `update()` in `deploy-engine.ts`, so a
|
|
8269
|
+
* stack with a resource named e.g. `MyDependencyViolationSub` burns the full
|
|
8270
|
+
* ~47s backoff schedule before the `--replace` fallback is even reached. That
|
|
8271
|
+
* is a LIVE occurrence of the class this marker exists for, unlike the
|
|
8272
|
+
* latent-today SNS abort that motivated it. Marking it belongs in that error's
|
|
8273
|
+
* constructor, in a file this change does not own; tracked separately.
|
|
8274
|
+
*/
|
|
8275
|
+
function markNonRetryable(error) {
|
|
8276
|
+
if (!Object.isExtensible(error)) return error;
|
|
8277
|
+
Object.defineProperty(error, NON_RETRYABLE_MARKER, {
|
|
8278
|
+
value: true,
|
|
8279
|
+
enumerable: false,
|
|
8280
|
+
configurable: true,
|
|
8281
|
+
writable: false
|
|
8282
|
+
});
|
|
8283
|
+
return error;
|
|
8284
|
+
}
|
|
8285
|
+
/**
|
|
8286
|
+
* True when the error, or anything in its bounded `.cause` chain, was marked
|
|
8287
|
+
* by {@link markNonRetryable}.
|
|
8288
|
+
*
|
|
8289
|
+
* The chain walk mirrors {@link isThrottlingError}'s: cdkd wraps errors, so a
|
|
8290
|
+
* marked refusal can end up one or more links deep, and a marker that stopped
|
|
8291
|
+
* counting after a single wrap would be a fence that quietly falls open.
|
|
8292
|
+
*
|
|
8293
|
+
* That reach is DIRECTIONAL, and the upward direction is a hazard worth
|
|
8294
|
+
* stating. Downward — a marked refusal wrapped by an outer error — is the
|
|
8295
|
+
* intended case and stays terminal. UPWARD is the inverse: wrapping a marked
|
|
8296
|
+
* refusal as the `cause` of a genuinely RETRYABLE outer error
|
|
8297
|
+
* (`new Error(msg, { cause: markedRefusal })`) makes the outer error terminal
|
|
8298
|
+
* too, because this walk finds the marker on the cause. Unconstructible today
|
|
8299
|
+
* (`ProvisioningError` is built with no `cause` at the one marking site), and
|
|
8300
|
+
* the failure is fail-fast rather than silent, but a future wrapper that
|
|
8301
|
+
* carries a marked cause into a transient error would stop retrying something
|
|
8302
|
+
* that should retry. Strip or re-raise the cause there rather than nesting it.
|
|
8303
|
+
*/
|
|
8304
|
+
function isMarkedNonRetryable(error) {
|
|
8305
|
+
let current = error;
|
|
8306
|
+
for (let depth = 0; depth < 5 && current != null; depth++) {
|
|
8307
|
+
if (typeof current === "object" || typeof current === "function") {
|
|
8308
|
+
if (current[NON_RETRYABLE_MARKER] === true) return true;
|
|
8309
|
+
}
|
|
8310
|
+
current = current.cause;
|
|
8311
|
+
}
|
|
8312
|
+
return false;
|
|
8313
|
+
}
|
|
8314
|
+
/**
|
|
8237
8315
|
* Walk the error + its `.cause` chain (bounded) looking for a rate-limit
|
|
8238
8316
|
* signal — either an AWS SDK v3 throttling error `name`
|
|
8239
8317
|
* ({@link THROTTLING_ERROR_NAMES}) or a retryable HTTP status
|
|
@@ -8262,6 +8340,10 @@ function isThrottlingError(error) {
|
|
|
8262
8340
|
* Determine whether an AWS error should be retried.
|
|
8263
8341
|
*
|
|
8264
8342
|
* Checks (in order):
|
|
8343
|
+
* 0. {@link isMarkedNonRetryable} — a cdkd-authored refusal is terminal by
|
|
8344
|
+
* declaration, ahead of every message / name heuristic below. FIRST on
|
|
8345
|
+
* purpose: the marker states the error cannot succeed on a retry, so
|
|
8346
|
+
* nothing a later check reads out of the message can overturn it.
|
|
8265
8347
|
* 1. Rate-limit signal on the error or any wrapped cause — throttling error
|
|
8266
8348
|
* `name` or retryable HTTP status (most AWS throttles are HTTP 400, not
|
|
8267
8349
|
* 429, so the name check carries most of the weight). See
|
|
@@ -8269,6 +8351,7 @@ function isThrottlingError(error) {
|
|
|
8269
8351
|
* 2. Substring match against {@link RETRYABLE_ERROR_MESSAGE_PATTERNS}
|
|
8270
8352
|
*/
|
|
8271
8353
|
function isRetryableTransientError(error, message) {
|
|
8354
|
+
if (isMarkedNonRetryable(error)) return false;
|
|
8272
8355
|
if (isThrottlingError(error)) return true;
|
|
8273
8356
|
return RETRYABLE_ERROR_MESSAGE_PATTERNS.some((p) => message.includes(p));
|
|
8274
8357
|
}
|
|
@@ -8448,7 +8531,11 @@ const defaultSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
|
8448
8531
|
* a throttle backs OFF exponentially for that attempt instead of hammering.
|
|
8449
8532
|
*
|
|
8450
8533
|
* Non-retryable errors are rethrown immediately. The transient-error
|
|
8451
|
-
* classifier is `isRetryableTransientError` from ./retryable-errors.ts
|
|
8534
|
+
* classifier is `isRetryableTransientError` from ./retryable-errors.ts, or
|
|
8535
|
+
* `opts.isRetryable` when the caller supplies one — EXCEPT for an error marked
|
|
8536
|
+
* by `markNonRetryable`, which is rethrown ahead of either, so a deliberate
|
|
8537
|
+
* cdkd refusal cannot be turned back into a retry by a custom classifier
|
|
8538
|
+
* (issue #1778).
|
|
8452
8539
|
*/
|
|
8453
8540
|
async function withRetry(operation, logicalId, opts = {}) {
|
|
8454
8541
|
const maxRetries = opts.maxRetries ?? 8;
|
|
@@ -8464,6 +8551,7 @@ async function withRetry(operation, logicalId, opts = {}) {
|
|
|
8464
8551
|
} catch (error) {
|
|
8465
8552
|
lastError = error;
|
|
8466
8553
|
const message = error instanceof Error ? error.message : String(error);
|
|
8554
|
+
if (isMarkedNonRetryable(error)) throw error;
|
|
8467
8555
|
const retryable = opts.isRetryable ? opts.isRetryable(message, error) : isRetryableTransientError(error, message);
|
|
8468
8556
|
const propagation = defaultSchedule && isIamPropagationError(message);
|
|
8469
8557
|
if (propagation) sawPropagation = true;
|
|
@@ -13775,7 +13863,11 @@ var CloudControlProvider = class {
|
|
|
13775
13863
|
if (error.ccErrorCode === "ResourceConflict") return;
|
|
13776
13864
|
this.logger.info(`CREATE of ${logicalId} failed after materializing ${error.physicalId}; deleting the remnant so a retry can re-create it`);
|
|
13777
13865
|
try {
|
|
13778
|
-
await this.delete(logicalId, error.physicalId, resourceType);
|
|
13866
|
+
const cleanupResult = await this.delete(logicalId, error.physicalId, resourceType);
|
|
13867
|
+
if (cleanupResult?.outcome === "skipped") {
|
|
13868
|
+
this.logger.warn(`Skipped deleting the remnant ${error.physicalId} left by the failed CREATE of ${logicalId}: ${cleanupResult.reason} — a retry may fail with AlreadyExists until it is removed manually`);
|
|
13869
|
+
return;
|
|
13870
|
+
}
|
|
13779
13871
|
this.logger.debug(`Removed failed-create remnant ${error.physicalId} for ${logicalId}`);
|
|
13780
13872
|
} catch (cleanupError) {
|
|
13781
13873
|
const message = cleanupError instanceof Error ? cleanupError.message : String(cleanupError);
|
|
@@ -13845,9 +13937,8 @@ var CloudControlProvider = class {
|
|
|
13845
13937
|
if (context?.finalSnapshotIdentifier !== void 0) throw new ProvisioningError(`${logicalId} (${resourceType}) requires a final snapshot (DeletionPolicy: Snapshot), but the Cloud Control API delete route has no final-snapshot parameter. Re-run with --skip-final-snapshot after snapshotting manually, or retain the resource.`, resourceType, logicalId, physicalId);
|
|
13846
13938
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
13847
13939
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
13848
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
13849
|
-
await new ASGProvider().delete(logicalId, physicalId, resourceType, _properties, context);
|
|
13850
|
-
return;
|
|
13940
|
+
const { ASGProvider } = await import("./asg-provider-B9eSuRPc.js").then((n) => n.n);
|
|
13941
|
+
return await new ASGProvider().delete(logicalId, physicalId, resourceType, _properties, context);
|
|
13851
13942
|
}
|
|
13852
13943
|
const isProtectedEc2Instance = context?.removeProtection === true && resourceType === "AWS::EC2::Instance";
|
|
13853
13944
|
if (isProtectedEc2Instance) await disableInstanceApiTermination(getAwsClients().ec2, physicalId, this.logger);
|
|
@@ -14506,6 +14597,32 @@ var CloudControlProvider = class {
|
|
|
14506
14597
|
//#endregion
|
|
14507
14598
|
//#region src/provisioning/providers/custom-resource-provider.ts
|
|
14508
14599
|
/**
|
|
14600
|
+
* The short `ResourceDeleteResult.reason` the no-properties DELETE arm reports
|
|
14601
|
+
* (issue [#1770](https://github.com/go-to-k/cdkd/issues/1770)).
|
|
14602
|
+
*
|
|
14603
|
+
* Rendered inline on the destroy status line, so it is the SHORT form; the full
|
|
14604
|
+
* remediation sentence goes out as the `logger.warn` beside it.
|
|
14605
|
+
*/
|
|
14606
|
+
const CR_NO_PROPERTIES_SKIP_REASON = "no properties in state — Delete handler not invoked";
|
|
14607
|
+
/**
|
|
14608
|
+
* Sibling of {@link CR_NO_PROPERTIES_SKIP_REASON} for the arm where properties
|
|
14609
|
+
* exist but carry no `ServiceToken`. Distinct because the repair differs: one
|
|
14610
|
+
* record lost everything, the other lost the one field that names the handler.
|
|
14611
|
+
*/
|
|
14612
|
+
const CR_NO_SERVICE_TOKEN_SKIP_REASON = "no ServiceToken in state — Delete handler not invoked";
|
|
14613
|
+
/**
|
|
14614
|
+
* The deploy-side caveat both skip warnings in this file carry (issue
|
|
14615
|
+
* [#1762](https://github.com/go-to-k/cdkd/issues/1762)).
|
|
14616
|
+
*
|
|
14617
|
+
* "Repair state.json and re-run" is only true on DESTROY, where the skip KEEPS
|
|
14618
|
+
* the record. The same arms are ALSO reached from `deploy-engine.ts` and
|
|
14619
|
+
* `rollback-executor.ts`, which discard the delete result and DROP the record —
|
|
14620
|
+
* there the id is gone, so re-running cannot help and the resource has to be
|
|
14621
|
+
* torn down by hand. Mirrors the caveat `compositeIdFormatMessage` already
|
|
14622
|
+
* carries for the composite-id family.
|
|
14623
|
+
*/
|
|
14624
|
+
const DEPLOY_SKIP_CAVEAT = "NOTE this arm is ALSO reached from cdkd deploy (the DELETE of a resource removed from the template, plus the replacement / rollback deletes), which DROP the state record and report success (https://github.com/go-to-k/cdkd/issues/1762) — there, tear the resource down by hand.";
|
|
14625
|
+
/**
|
|
14509
14626
|
* Type guard to validate Lambda response payload structure
|
|
14510
14627
|
*/
|
|
14511
14628
|
function isCustomResourceResponsePayload(value) {
|
|
@@ -14931,13 +15048,19 @@ var CustomResourceProvider = class CustomResourceProvider {
|
|
|
14931
15048
|
async delete(logicalId, physicalId, resourceType, properties, _context) {
|
|
14932
15049
|
this.logger.debug(`Deleting custom resource ${logicalId}: ${physicalId} (${resourceType})`);
|
|
14933
15050
|
if (!properties) {
|
|
14934
|
-
this.logger.warn(`No properties available for custom resource ${logicalId}, skipping deletion`);
|
|
14935
|
-
return
|
|
15051
|
+
this.logger.warn(`No properties available for custom resource ${logicalId}, skipping deletion — the handler is never invoked, so anything this custom resource manages is LEFT IN PLACE. Restore the record's properties in state.json and re-run, or tear the resource down by hand. ${DEPLOY_SKIP_CAVEAT}`);
|
|
15052
|
+
return {
|
|
15053
|
+
outcome: "skipped",
|
|
15054
|
+
reason: CR_NO_PROPERTIES_SKIP_REASON
|
|
15055
|
+
};
|
|
14936
15056
|
}
|
|
14937
15057
|
const serviceToken = properties["ServiceToken"];
|
|
14938
15058
|
if (!serviceToken) {
|
|
14939
|
-
this.logger.warn(`No ServiceToken found for custom resource ${logicalId}, skipping deletion`);
|
|
14940
|
-
return
|
|
15059
|
+
this.logger.warn(`No ServiceToken found for custom resource ${logicalId}, skipping deletion — there is no handler to send the Delete request to, so anything this custom resource manages is LEFT IN PLACE. Restore ServiceToken in state.json and re-run, or tear the resource down by hand. ${DEPLOY_SKIP_CAVEAT}`);
|
|
15060
|
+
return {
|
|
15061
|
+
outcome: "skipped",
|
|
15062
|
+
reason: CR_NO_SERVICE_TOKEN_SKIP_REASON
|
|
15063
|
+
};
|
|
14941
15064
|
}
|
|
14942
15065
|
if (typeof serviceToken !== "string") throw new ProvisioningError(`Custom Resource ${logicalId}: ServiceToken is not a resolved string ARN (got ${typeof serviceToken}). This usually indicates state was written by a pre-fix cdkd import; re-run \`cdkd import\` or \`cdkd state orphan <stack>\` to recover.`, resourceType, logicalId, physicalId);
|
|
14943
15066
|
if (!this.isSnsServiceToken(serviceToken) && await this.isBackingLambdaGone(serviceToken)) {
|
|
@@ -15881,7 +16004,11 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
15881
16004
|
"TreatMissingData",
|
|
15882
16005
|
"Unit"
|
|
15883
16006
|
]),
|
|
15884
|
-
silentDrop: /* @__PURE__ */ new Map([
|
|
16007
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
16008
|
+
["EvaluationCriteria", "Absent from both the SDK PutMetricAlarm input and the aws-cdk-lib CfnAlarm L1 (a newer CFn-schema-only property ahead of SDK/CDK support); no wire path to forward it and no CDK app can emit it."],
|
|
16009
|
+
["EvaluationInterval", "Absent from both the SDK PutMetricAlarm input and the aws-cdk-lib CfnAlarm L1 (a newer CFn-schema-only property ahead of SDK/CDK support); no wire path to forward it and no CDK app can emit it."],
|
|
16010
|
+
["EvaluationWindow", "not yet implemented by cdkd"]
|
|
16011
|
+
])
|
|
15885
16012
|
}],
|
|
15886
16013
|
["AWS::CloudWatch::AnomalyDetector", {
|
|
15887
16014
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -15970,7 +16097,11 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
15970
16097
|
"WebAuthnRelyingPartyID",
|
|
15971
16098
|
"WebAuthnUserVerification"
|
|
15972
16099
|
]),
|
|
15973
|
-
silentDrop: /* @__PURE__ */ new Map([
|
|
16100
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
16101
|
+
["IssuerConfiguration", "not yet implemented by cdkd"],
|
|
16102
|
+
["KeyConfiguration", "not yet implemented by cdkd"],
|
|
16103
|
+
["WebAuthnFactorConfiguration", "No SDK wire path: @aws-sdk/client-cognito-identity-provider has no field accepting SINGLE_FACTOR | MULTI_FACTOR_WITH_USER_VERIFICATION (not on CreateUserPool/UpdateUserPool, nor SetUserPoolMfaConfig.WebAuthnConfiguration which only carries RelyingPartyId/UserVerification); CC-API-registry-only property"]
|
|
16104
|
+
])
|
|
15974
16105
|
}],
|
|
15975
16106
|
["AWS::DLM::LifecyclePolicy", {
|
|
15976
16107
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -16219,7 +16350,7 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
16219
16350
|
"VpcEndpointId",
|
|
16220
16351
|
"VpcPeeringConnectionId"
|
|
16221
16352
|
]),
|
|
16222
|
-
silentDrop: /* @__PURE__ */ new Map()
|
|
16353
|
+
silentDrop: /* @__PURE__ */ new Map([["OdbNetworkArn", "not yet implemented by cdkd"]])
|
|
16223
16354
|
}],
|
|
16224
16355
|
["AWS::EC2::RouteTable", {
|
|
16225
16356
|
handled: /* @__PURE__ */ new Set(["Tags", "VpcId"]),
|
|
@@ -16290,7 +16421,11 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
16290
16421
|
"InstanceTenancy",
|
|
16291
16422
|
"Tags"
|
|
16292
16423
|
]),
|
|
16293
|
-
silentDrop: /* @__PURE__ */ new Map([
|
|
16424
|
+
silentDrop: /* @__PURE__ */ new Map([
|
|
16425
|
+
["Ipv4IpamPoolId", "not yet implemented by cdkd"],
|
|
16426
|
+
["Ipv4NetmaskLength", "not yet implemented by cdkd"],
|
|
16427
|
+
["VpcEncryptionControl", "not yet implemented by cdkd"]
|
|
16428
|
+
])
|
|
16294
16429
|
}],
|
|
16295
16430
|
["AWS::EC2::VPCGatewayAttachment", {
|
|
16296
16431
|
handled: /* @__PURE__ */ new Set(["InternetGatewayId", "VpcId"]),
|
|
@@ -16464,7 +16599,7 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
16464
16599
|
"Protocol",
|
|
16465
16600
|
"SslPolicy"
|
|
16466
16601
|
]),
|
|
16467
|
-
silentDrop: /* @__PURE__ */ new Map()
|
|
16602
|
+
silentDrop: /* @__PURE__ */ new Map([["Tags", "not yet implemented by cdkd"]])
|
|
16468
16603
|
}],
|
|
16469
16604
|
["AWS::ElasticLoadBalancingV2::LoadBalancer", {
|
|
16470
16605
|
handled: /* @__PURE__ */ new Set([
|
|
@@ -17034,6 +17169,8 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
17034
17169
|
["CopyTagsToSnapshot", "not yet implemented by cdkd"],
|
|
17035
17170
|
["DBInstanceParameterGroupName", "not yet implemented by cdkd"],
|
|
17036
17171
|
["EnableCloudwatchLogsExports", "not yet implemented by cdkd"],
|
|
17172
|
+
["GlobalClusterIdentifier", "not yet implemented by cdkd"],
|
|
17173
|
+
["NetworkType", "not yet implemented by cdkd"],
|
|
17037
17174
|
["RestoreToTime", "not yet implemented by cdkd"],
|
|
17038
17175
|
["RestoreType", "not yet implemented by cdkd"],
|
|
17039
17176
|
["ServerlessScalingConfiguration", "not yet implemented by cdkd"],
|
|
@@ -17577,6 +17714,7 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
|
|
|
17577
17714
|
silentDrop: /* @__PURE__ */ new Map([
|
|
17578
17715
|
["ApplicationConfig", "not yet implemented by cdkd"],
|
|
17579
17716
|
["DataProtectionConfig", "not yet implemented by cdkd"],
|
|
17717
|
+
["MonetizationConfig", "not yet implemented by cdkd"],
|
|
17580
17718
|
["OnSourceDDoSProtectionConfig", "not yet implemented by cdkd"]
|
|
17581
17719
|
])
|
|
17582
17720
|
}]
|
|
@@ -18306,7 +18444,8 @@ var IAMRoleProvider = class {
|
|
|
18306
18444
|
this.logger.debug(`${reason} changed, replacing role: ${physicalId} (${reason}: ${reason === "RoleName" ? `${physicalId} -> ${newRoleName}` : `${oldPath} -> ${newPath}`})`);
|
|
18307
18445
|
const createResult = await this.create(logicalId, resourceType, properties);
|
|
18308
18446
|
try {
|
|
18309
|
-
await this.delete(logicalId, physicalId, resourceType);
|
|
18447
|
+
const deleteResult = await this.delete(logicalId, physicalId, resourceType);
|
|
18448
|
+
if (deleteResult?.outcome === "skipped") this.logger.warn(`Skipped deleting old role ${physicalId} during replacement: ${deleteResult.reason}. The old role may be orphaned and require manual cleanup.`);
|
|
18310
18449
|
} catch (error) {
|
|
18311
18450
|
this.logger.warn(`Failed to delete old role ${physicalId} during replacement: ${String(error)}. The old role may be orphaned and require manual cleanup.`);
|
|
18312
18451
|
}
|
|
@@ -20762,7 +20901,7 @@ const FLUSH_INTERVAL_MS = 2e3;
|
|
|
20762
20901
|
const FLUSH_EVENT_THRESHOLD = 50;
|
|
20763
20902
|
/** Build-time cdkd version, with a dev fallback for non-built contexts. */
|
|
20764
20903
|
function getCdkdVersion() {
|
|
20765
|
-
return "0.283.
|
|
20904
|
+
return "0.283.5";
|
|
20766
20905
|
}
|
|
20767
20906
|
/**
|
|
20768
20907
|
* Generate a time-sortable unique run id, e.g.
|
|
@@ -22930,5 +23069,5 @@ var DeployEngine = class {
|
|
|
22930
23069
|
};
|
|
22931
23070
|
|
|
22932
23071
|
//#endregion
|
|
22933
|
-
export { configStringRefusal as $,
|
|
22934
|
-
//# sourceMappingURL=deploy-engine-
|
|
23072
|
+
export { configStringRefusal as $, resolveSkipPrefix as $t, green as A, LockError as An, rewriteTemplateAssetReferences as At, slowCcOperationTimeoutMs as B, SynthesisError as Bn, formatDockerLoginError as Bt, MULTI_REGION_RECREATE_BLOCKED_TYPES as C, CdkdError as Cn, shouldRetainResource as Ct, bold as D, LocalInvokeBuildError as Dn, buildAssetRedirectMap as Dt, formatResourceLine as E, DeployCancelledError as En, WorkGraph as Et, clearOnUpdateRemoval as F, ResourceTimeoutError as Fn, parseBootstrapMarker as Ft, getAccountInfo as G, __exportAll as Gn, getDockerImageBySourceHash as Gt, isTerminationProtectionPropagationError as H, isCdkdError as Hn, runDockerForeground as Ht, ProviderRegistry as I, ResourceUpdateNotSupportedError as In, validateAssetBucketName as It, normalizeAwsTagsToCfn as J, getDefaultStateBucketName as Jt, refStateLookupFromResource as K, Synthesizer as Kt, findActionableSilentDrops as L, StackHasActiveImportsError as Ln, validateContainerRepoName as Lt, yellow as M, NestedStackChildDirectDestroyError as Mn, BOOTSTRAP_MARKER_PREFIX as Mt, IAMRoleProvider as N, PartialFailureError as Nn, ensureAssetStorage as Nt, cyan as O, LocalMigrateError as On, createAssetRedirectResolver as Ot, collectInlinePolicyNamesManagedBySiblings as P, ProvisioningError as Pn, getBootstrapMarkerKey as Pt, configBooleanRefusal as Q, resolveCaptureObservedState as Qt, findSilentDropProperties as R, StackTerminationProtectionError as Rn, buildDenyExternalAccessPolicy as Rt, extractDeploymentEventError as S, AssetError as Sn, rebuildClientForBucketRegion as St, renderStatefulReason as T, DependencyError as Tn, stringifyValue as Tt, IntrinsicFunctionResolver as U, normalizeAwsError as Un, runDockerStreaming as Ut, disableInstanceApiTermination as V, formatError as Vn, getDockerCmd as Vt, cfnRefValueFromPhysicalId as W, withErrorHandling as Wn, AssetManifestLoader as Wt, assertRegionMatch as X, resolveApp as Xt, resolveExplicitPhysicalId as Y, getLegacyStateBucketName as Yt, coerceCfnBoolean as Z, resolveAutoAssetStorage as Zt, createPreDeleteFinalSnapshot as _, resolveBucketRegion as _n, markNonRetryable as _t, DeploymentEventsStore as a, CFN_TEMPLATE_BODY_LIMIT as an, s3BucketArn as at, unsupportedFinalSnapshotError as b, resetAwsClients as bn, LockManager as bt, replayFailedOperations as c, findLargeInlineResources as cn, s3BucketRegionalDomainName as ct, IMPLICIT_DELETE_DEPENDENCIES as d, PARTITION_TABLE as dn, DiffCalculator as dt, resolveStateBucketWithDefault as en, readConfigString as et, computeImplicitDeleteEdges as f, canonicalizeRegion as fn, describeTypeWithThrottleRetry as ft, ccRoutedFinalSnapshotError as g, clearBucketRegionCache as gn, isThrottlingError as gt, buildFinalSnapshotIdentifier as h, processStackMessages as hn, isRetryableTransientError as ht, DeploymentEventsReader as i, warnDeprecatedNoPrefixCliFlag as in, requireConfigString as it, red as j, MissingCdkCliError as jn, AssetModeResolver as jt, gray as k, LocalStartServiceError as kn, loadPublishableAssetManifest as kt, replayRollback as l, uploadCfnTemplate as ln, s3BucketWebsiteUrl as lt, PRE_DELETE_SNAPSHOT_TYPES as m, AssemblyReader as mn, isMarkedNonRetryable as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, resolveUseCdkBootstrapAssets as nn, requireConfigArray as nt, planFailedOps as o, CFN_TEMPLATE_URL_LIMIT as on, s3BucketDomainName as ot, ATOMIC_FINAL_SNAPSHOT_TYPES as p, derivePartitionAndUrlSuffix as pn, withRetry as pt, WAFv2WebACLProvider as q, synthesisStatusMessage as qt, DeployEngine as r, stateBucketExistenceConfirmed as rn, requireConfigObject as rt, planRollback as s, MIGRATE_TMP_PREFIX as sn, s3BucketDualStackDomainName as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, resolveStateBucketWithDefaultAndSource as tn, replayWarn as tt, withResourceDeadline as u, expectedOwnerParam as un, applyRoleArnIfSet as ut, isFinalSnapshotError as v, AwsClients as vn, DagBuilder as vt, isStatefulRecreateTargetSync as w, ConfigError as wn, AssetPublisher as wt, makeCanonicalizePropertiesFn as x, setAwsClients as xn, S3StateBackend as xt, refusesFinalSnapshot as y, getAwsClients as yn, TemplateParser as yt, CloudControlProvider as z, StateError as zn, buildDockerImage as zt };
|
|
23073
|
+
//# sourceMappingURL=deploy-engine-BcwNPlSk.js.map
|