@go-to-k/cdkd 0.301.4 → 0.301.6
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--GY-B-zI.js → asg-provider-GNiE6dR1.js} +2 -2
- package/dist/{asg-provider--GY-B-zI.js.map → asg-provider-GNiE6dR1.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-BIPU9Xdh.js → deploy-engine-D1z0QUsv.js} +19966 -19946
- package/dist/deploy-engine-D1z0QUsv.js.map +1 -0
- package/dist/{iam-role-provider-C58oW5zG.js → iam-role-provider-988BRmqF.js} +2 -2
- package/dist/{iam-role-provider-C58oW5zG.js.map → iam-role-provider-988BRmqF.js.map} +1 -1
- package/dist/index.d.ts +0 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/{neptune-provider-DoKgbZCz.js → neptune-provider-DUaw7kpj.js} +2 -2
- package/dist/{neptune-provider-DoKgbZCz.js.map → neptune-provider-DUaw7kpj.js.map} +1 -1
- package/dist/{program-DYfZCsxM.js → program-Cqk1ZTsY.js} +116 -66
- package/dist/program-Cqk1ZTsY.js.map +1 -0
- package/dist/{provider-classes-BSUoljqw.js → provider-classes-CR4DtD8M.js} +151 -89
- package/dist/provider-classes-CR4DtD8M.js.map +1 -0
- package/dist/{rds-provider-DI_O0_iG.js → rds-provider-DBW972HG.js} +2 -2
- package/dist/{rds-provider-DI_O0_iG.js.map → rds-provider-DBW972HG.js.map} +1 -1
- package/dist/{version-Bft5jrTk.js → version-CnjZ9J4l.js} +2 -2
- package/dist/{version-Bft5jrTk.js.map → version-CnjZ9J4l.js.map} +1 -1
- package/package.json +1 -1
- package/dist/deploy-engine-BIPU9Xdh.js.map +0 -1
- package/dist/program-DYfZCsxM.js.map +0 -1
- package/dist/provider-classes-BSUoljqw.js.map +0 -1
|
@@ -2,12 +2,12 @@ import { r as getAwsClients } from "./aws-clients-B_CEQGE1.js";
|
|
|
2
2
|
import { B as safeMsg, F as displaySafe, I as displayStackName, L as isPasteableIdent, O as SECRET_REF_MAX_CODE_POINTS, P as displayIdent, a as getLogger, b as generateResourceNameWithFallback, n as isAwsAuthoredFailure, r as safeStringify, t as describeAwsFailure, y as generateResourceName, z as plainIdentOr } from "./aws-failure-text-BEQfs6za.js";
|
|
3
3
|
import { $ as protectedReplacementAdvice, $n as explicitDenyPolicyKind, $t as ambientCredentialConfig, A as isQuotableImportValue, B as isTerminalDeleteFailure, C as setBounded, D as VALUE_NOT_SHOWN, E as assertRegionMatch, F as resolveExplicitPhysicalId, Fn as isInertUnquoted, H as observeThenDisableProtection, Hn as withheldTargetClause, In as pasteableCommand, Kt as injectiveKey, L as ProtectionFlipRegistry, M as quotedRemedyLogicalId, Mt as markCreatedBeforeFailure, N as refusalTypeShown, Nn as commandHole, Nt as markSupersedesEarlierCreate, O as isPlainImportJson, P as remedyLogicalId, Pn as hasClauseBreak, Q as pasteableAwsCommand, Qn as markReplayMayCollide, Qt as ambientClientDefaults, Rn as plainOrDescribed, S as replayedSendWindow, St as withDerivedNameMasks, T as RESOURCE_NOT_FOUND, Tt as clearCreatedBeforeFailure, U as protectionFlipKey, V as logGroupProtectionSite, Vn as shellQuote, W as rdsFamilyProtectionSite, X as WITHHELD_AWS_COMMAND, Y as UNNAMEABLE_ID_CLAUSE, Z as isAwsCliLiteral, Zn as markNameCollision, Zt as withPasteableAwsProfile, _ as RecentIdSet, _t as createMaskedLogSinks, a as onlySecretDerived, ar as isRetryableTransientError, at as startInterruptWatch, b as isInsideWindow, bn as ResourceUpdateNotSupportedError, bt as maskDeep, c as recordedPrincipalsRepair, cr as THROTTLING_ERROR_NAMES, ct as canonicalizeRoute53QueryName, dr as markNonRetryable, dt as compositeIdSkipResult, en as clientDefaultsFor, et as renderDisableCommand, fr as markRedactedCause, ft as logicalIdShown, g as AmbiguousCreateLatch, gt as stateOrphanRecordRemedy, h as AMBIGUOUS_LATCH_TTL_MS, ht as segmentAfterAnchor, i as holdsSecretDerivedEntry, in as CdkdError, it as isInterruptedWaitError, j as normalizeAwsTagsToCfn, jt as markAuxiliaryFailure, k as isPlainImportValue, lr as isMarkedNonRetryable, lt as compositeIdFormatMessage, nn as AccountIdUnavailableError, nr as isAmbiguousOutcomeError, o as readPrincipalLists, or as isTransientServerError, ot as ElapsedBudgetRegistry, p as withRemovalDefaults, pr as wrapMaskedAwsError, pt as packCompositeId, q as userPoolProtectionSite, qt as injectiveKeyPrefix, r as SECRET_DERIVED_READ_LIVE, rr as isExplicitDenyError, tn as credentialFingerprint, u as clearOnUpdateRemoval, ur as isThrottlingError, ut as compositeIdSeparatorRefusal, v as ambiguousAttemptLead, vn as ProvisioningError, vt as createMaskedRetryLogger, w as withoutServerErrorRetries, x as replayFollowedAmbiguousAttempt, xt as maskerOrIdentity, y as createAttemptKey, yt as isSecretDerivedValue, z as deleteWithProtectionCompensation } from "./iam-policy-targets-BkeM7IXi.js";
|
|
4
4
|
import { s as ambientRegion } from "./aws-client-defaults-DBXBcg0J.js";
|
|
5
|
-
import { $ as
|
|
6
|
-
import { n as collectInlinePolicyNamesManagedBySiblings, r as IamCreateClientCache, t as IAMRoleProvider } from "./iam-role-provider-
|
|
7
|
-
import { a as resolveSecretDerivedPrincipals, i as isResolvableSecretPrincipalList, n as runDestroyForStack, o as canonicalizeIpProtocolValue, r as holdsUnprovenSecretPrincipalToken, s as resolvedResourceTimeoutMs, t as canonicalizeIpv4Cidr } from "./program-
|
|
8
|
-
import { RDSProvider } from "./rds-provider-
|
|
9
|
-
import { NeptuneProvider } from "./neptune-provider-
|
|
10
|
-
import { ASGProvider } from "./asg-provider
|
|
5
|
+
import { $i as accountArgs, Al as derivePartitionAndUrlSuffix, Ao as replayWarn, Bl as describeFileReadFailure, Bo as sameLambdaFunctionAddress, C as getPriorAttempts, Cn as awaitInFlightSibling, Co as toFiniteNumber, Dn as replacedDeleteFailureVerdict, Do as configIntegerRefusal, Dr as waitForLambdaFunctionActive, Dt as withApiLimit, El as decodeListingKey, Eo as configBooleanRefusal, Es as dynamicReferenceTokens, Et as lookupEachName, F as listNestedTemplateRows, Gr as isWaitAbandonedError, Hl as renderAssemblyPathEscape, I as renderNestedTemplateTreeDefect, Ja as refuseMalformedResourcesForDestroy, Jr as ec2InstanceProtectionSite, Jt as redactedDeleteAddressFields, Ki as passedParameterClassesOf, Kn as secretNamedAttributeNamesOf, Kr as markWaitAbandoned, Kt as REDACTED_DELETE_ADDRESS_SKIP_REASON, Lo as withRetry, Lr as slowCcOperationTimeoutMs, Ls as carriesSecretMask, Mo as requireConfigObject, Ms as recoverMaskedOutput, N as findNestedTemplateTreeDefect, Ni as getAccountInfo, No as requireConfigString, Ns as physicalNameCopiesOf, Oa as refuseMalformedNestedChildOutputs, Oo as configStringRefusal, P as isAbsoluteAssetPath, Ps as recordAttributeIdCopy, Qo as passedNoEchoParametersOf, Qr as reEnableInstanceApiTermination, Ro as canonicalLambdaFunctionName, Rr as unchangedBehindSecretReference, S as isTruthyCfnBoolean, So as toCfnInteger, Tn as getStackRecords, To as coerceCfnInteger, Tt as isAccessDeniedError, Ui as parseWebACLArn, Ul as resolveAssemblyPath, Ur as deleteSkipReason, Vl as displayAssemblyPath, Wr as withIndeterminateGuard, Wt as getCurrentProducerRegions, Xr as observeThenDisableInstanceApiTermination, Yr as isTerminationProtectionPropagationError, Yt as redactedDeleteAddressSkip, Zr as reDisableInstanceApiTermination, _ as deleteTableWithIndexBusyRetry, _r as refuseMalformedDesiredTags, ai as s3BucketDomainName, b as S3_AUTO_DELETE_OBJECTS_TAG, bo as coerceWarmThroughput$1, br as definedAttributes, bs as recordReferenceProvenanceEntry, c as DynamoDBGlobalTableProvider, ci as s3BucketWebsiteUrl, co as findSilentDropProperties, cr as reserveStackCreateToken, d as compensateRemovedDeletionProtection, dr as isRefusedByName, f as deleteBudgetKey, fr as markDeleteStarted, g as INDEX_SETTLE_POLL_INTERVAL_MS, gr as readTagList, h as DELETE_INDEX_WAIT_PROCEED_NOTE, hr as planTagDiff, ii as s3BucketArn, jo as requireConfigArray, jr as getCurrentResourceSecrets, kl as canonicalizeRegion, ko as readConfigString, l as DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS, lt as revertNestedChildFromJournal, m as resolveDynamoDbDeleteBudgetMs, mr as DBPROXY_TAG_OPTIONS, mt as withNestedStackContext, oi as s3BucketDualStackDomainName, oo as withheldAccountClause, or as earliestDefined, ot as getNestedRevertRun, p as resolveDynamoDbDeleteBudgetClock, pi as outputReferenceProvenanceOf, pr as DBPROXY_TAGS_WHAT, pt as getCurrentNestedStackContext, qt as isRedactedRecordedValue, ri as isSettledInstanceState, rs as redactForState, si as s3BucketRegionalDomainName, ss as hasMaskableValues, t as DeployEngine, u as beginDeleteWait, uo as withoutSilentDropProperties, ur as acquireIdempotencyToken, v as waitForIndexesSettled, vr as tagMapAsList, w as markRefusedBeforeApplying, wc as rewriteTemplateAssetReferences, wo as coerceCfnBoolean, ws as withoutPhysicalNameCopies, wt as chunks, x as hasCdkAutoDeleteTag, xo as isWarmThroughputDecrease, xr as stringifyIfAssigned, xs as snapshotPassProvenance, y as ECR_AUTO_DELETE_IMAGES_TAG, yc as stringifyValue, yo as WARM_THROUGHPUT_MEMBERS, yr as tagPlanWarning, ys as markSameGenerationBag, zo as lambdaFunctionNameForMask } from "./deploy-engine-D1z0QUsv.js";
|
|
6
|
+
import { n as collectInlinePolicyNamesManagedBySiblings, r as IamCreateClientCache, t as IAMRoleProvider } from "./iam-role-provider-988BRmqF.js";
|
|
7
|
+
import { a as resolveSecretDerivedPrincipals, i as isResolvableSecretPrincipalList, n as runDestroyForStack, o as canonicalizeIpProtocolValue, r as holdsUnprovenSecretPrincipalToken, s as resolvedResourceTimeoutMs, t as canonicalizeIpv4Cidr } from "./program-Cqk1ZTsY.js";
|
|
8
|
+
import { RDSProvider } from "./rds-provider-DBW972HG.js";
|
|
9
|
+
import { NeptuneProvider } from "./neptune-provider-DUaw7kpj.js";
|
|
10
|
+
import { ASGProvider } from "./asg-provider-GNiE6dR1.js";
|
|
11
11
|
import { createHash, randomUUID } from "node:crypto";
|
|
12
12
|
import { CreateBucketCommand, DeleteBucketAnalyticsConfigurationCommand, DeleteBucketCommand, DeleteBucketCorsCommand, DeleteBucketEncryptionCommand, DeleteBucketIntelligentTieringConfigurationCommand, DeleteBucketInventoryConfigurationCommand, DeleteBucketLifecycleCommand, DeleteBucketMetricsConfigurationCommand, DeleteBucketOwnershipControlsCommand, DeleteBucketPolicyCommand, DeleteBucketReplicationCommand, DeleteBucketTaggingCommand, DeleteBucketWebsiteCommand, DeleteObjectsCommand, GetBucketAccelerateConfigurationCommand, GetBucketCorsCommand, GetBucketEncryptionCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketLoggingCommand, GetBucketNotificationConfigurationCommand, GetBucketOwnershipControlsCommand, GetBucketPolicyCommand, GetBucketReplicationCommand, GetBucketTaggingCommand, GetBucketVersioningCommand, GetBucketWebsiteCommand, GetObjectCommand, GetObjectLockConfigurationCommand, GetPublicAccessBlockCommand, HeadBucketCommand, ListBucketAnalyticsConfigurationsCommand, ListBucketIntelligentTieringConfigurationsCommand, ListBucketInventoryConfigurationsCommand, ListBucketMetricsConfigurationsCommand, ListBucketsCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchBucket, PutBucketAccelerateConfigurationCommand, PutBucketAnalyticsConfigurationCommand, PutBucketCorsCommand, PutBucketEncryptionCommand, PutBucketIntelligentTieringConfigurationCommand, PutBucketInventoryConfigurationCommand, PutBucketLifecycleConfigurationCommand, PutBucketLoggingCommand, PutBucketMetricsConfigurationCommand, PutBucketNotificationConfigurationCommand, PutBucketOwnershipControlsCommand, PutBucketPolicyCommand, PutBucketReplicationCommand, PutBucketTaggingCommand, PutBucketVersioningCommand, PutBucketWebsiteCommand, PutObjectLockConfigurationCommand, PutPublicAccessBlockCommand, S3Client } from "@aws-sdk/client-s3";
|
|
13
13
|
import { AddRoleToInstanceProfileCommand, AddUserToGroupCommand, AttachGroupPolicyCommand, AttachRolePolicyCommand, AttachUserPolicyCommand, CreateAccessKeyCommand, CreateGroupCommand, CreateInstanceProfileCommand, CreateLoginProfileCommand, CreatePolicyCommand, CreatePolicyVersionCommand, CreateUserCommand, DeleteAccessKeyCommand, DeleteGroupCommand, DeleteGroupPolicyCommand, DeleteInstanceProfileCommand, DeleteLoginProfileCommand, DeletePolicyCommand, DeletePolicyVersionCommand, DeleteRolePolicyCommand, DeleteUserCommand, DeleteUserPermissionsBoundaryCommand, DeleteUserPolicyCommand, DetachGroupPolicyCommand, DetachRolePolicyCommand, DetachUserPolicyCommand, GetAccessKeyLastUsedCommand, GetGroupCommand, GetGroupPolicyCommand, GetInstanceProfileCommand, GetPolicyCommand, GetPolicyVersionCommand, GetRolePolicyCommand, GetUserCommand, GetUserPolicyCommand, IAMClient, ListAccessKeysCommand, ListAttachedGroupPoliciesCommand, ListAttachedUserPoliciesCommand, ListEntitiesForPolicyCommand, ListGroupPoliciesCommand, ListGroupsForUserCommand, ListPoliciesCommand, ListPolicyTagsCommand, ListPolicyVersionsCommand, ListUserPoliciesCommand, NoSuchEntityException, PutGroupPolicyCommand, PutRolePolicyCommand, PutUserPermissionsBoundaryCommand, PutUserPolicyCommand, RemoveRoleFromInstanceProfileCommand, RemoveUserFromGroupCommand, TagPolicyCommand, TagUserCommand, UntagPolicyCommand, UntagUserCommand, UpdateAccessKeyCommand, UpdateLoginProfileCommand } from "@aws-sdk/client-iam";
|
|
@@ -14586,7 +14586,10 @@ var SecretsManagerSecretProvider = class {
|
|
|
14586
14586
|
}
|
|
14587
14587
|
asPersisted(bag) {
|
|
14588
14588
|
const secrets = getCurrentResourceSecrets();
|
|
14589
|
-
return secrets !== void 0 && secrets.size > 0 ?
|
|
14589
|
+
return secrets !== void 0 && secrets.size > 0 ? redactForState(bag, {
|
|
14590
|
+
provenance: "value-scan",
|
|
14591
|
+
secrets
|
|
14592
|
+
}) : bag;
|
|
14590
14593
|
}
|
|
14591
14594
|
generateSecretString(config, options) {
|
|
14592
14595
|
const refusal = generateMemberRefusal(config);
|
|
@@ -15390,6 +15393,14 @@ var EventBridgeBusProvider = class {
|
|
|
15390
15393
|
"DeadLetterConfig",
|
|
15391
15394
|
"LogConfig"
|
|
15392
15395
|
])]]);
|
|
15396
|
+
removalDefaults = /* @__PURE__ */ new Map([["AWS::Events::EventBus", /* @__PURE__ */ new Map([
|
|
15397
|
+
["Description", ""],
|
|
15398
|
+
["KmsKeyIdentifier", ""],
|
|
15399
|
+
["LogConfig", {
|
|
15400
|
+
Level: "OFF",
|
|
15401
|
+
IncludeDetail: "NONE"
|
|
15402
|
+
}]
|
|
15403
|
+
])]]);
|
|
15393
15404
|
constructor() {
|
|
15394
15405
|
this.eventBridgeClient = getAwsClients().eventBridge;
|
|
15395
15406
|
}
|
|
@@ -15437,15 +15448,16 @@ var EventBridgeBusProvider = class {
|
|
|
15437
15448
|
async update(logicalId, physicalId, resourceType, properties, previousProperties, context) {
|
|
15438
15449
|
assertRegionMatch(context?.expectedRegion ? await this.eventBridgeClient.config.region() : void 0, context?.expectedRegion, resourceType, logicalId, physicalId, "pre-update");
|
|
15439
15450
|
refuseMalformedDesiredTags(properties["Tags"], resourceType, logicalId, physicalId);
|
|
15451
|
+
properties = withRemovalDefaults(this.removalDefaults, resourceType, properties, previousProperties, context);
|
|
15440
15452
|
try {
|
|
15441
|
-
return await this.applyUpdate(logicalId, physicalId, resourceType, properties, previousProperties);
|
|
15453
|
+
return await this.applyUpdate(logicalId, physicalId, resourceType, properties, previousProperties, context);
|
|
15442
15454
|
} catch (error) {
|
|
15443
15455
|
if (error instanceof CdkdError) throw error;
|
|
15444
15456
|
const cause = error instanceof Error ? error : void 0;
|
|
15445
15457
|
throw new ProvisioningError(`Failed to update EventBus ${logicalId}: ${describeAwsFailure(error).detail}`, resourceType, logicalId, physicalId, cause);
|
|
15446
15458
|
}
|
|
15447
15459
|
}
|
|
15448
|
-
async applyUpdate(logicalId, physicalId, resourceType, properties, previousProperties) {
|
|
15460
|
+
async applyUpdate(logicalId, physicalId, resourceType, properties, previousProperties, context) {
|
|
15449
15461
|
this.logger.debug(`Updating EventBus ${logicalId}: ${physicalId}`);
|
|
15450
15462
|
const descChanged = properties["Description"] !== previousProperties["Description"];
|
|
15451
15463
|
const kmsChanged = properties["KmsKeyIdentifier"] !== previousProperties["KmsKeyIdentifier"];
|
|
@@ -15458,7 +15470,7 @@ var EventBridgeBusProvider = class {
|
|
|
15458
15470
|
if (properties["DeadLetterConfig"] !== void 0) {
|
|
15459
15471
|
const dlcUpdate = sanitizeDeadLetterConfig(properties["DeadLetterConfig"]);
|
|
15460
15472
|
if (dlcUpdate) updateParams.DeadLetterConfig = dlcUpdate;
|
|
15461
|
-
}
|
|
15473
|
+
} else if ((context?.removedProperties?.has("DeadLetterConfig") ?? previousProperties["DeadLetterConfig"] !== void 0) && sanitizeDeadLetterConfig(previousProperties["DeadLetterConfig"]) !== void 0) updateParams.DeadLetterConfig = { Arn: "" };
|
|
15462
15474
|
if (properties["LogConfig"] !== void 0) updateParams.LogConfig = properties["LogConfig"];
|
|
15463
15475
|
await this.eventBridgeClient.send(new UpdateEventBusCommand(updateParams));
|
|
15464
15476
|
}
|
|
@@ -25254,35 +25266,9 @@ function targetsSecretCause(read) {
|
|
|
25254
25266
|
return read.kind === "malformed" && read.onlySecret ? " (an Id holds a dynamic reference or its mask, which names no target Elastic Load Balancing accepts)" : "";
|
|
25255
25267
|
}
|
|
25256
25268
|
const TARGETS_WHAT = "targets, each with a string Id and, where given, an integer Port and a string AvailabilityZone";
|
|
25257
|
-
const
|
|
25258
|
-
|
|
25259
|
-
|
|
25260
|
-
"stickiness.enabled": "false",
|
|
25261
|
-
"stickiness.lb_cookie.duration_seconds": "86400",
|
|
25262
|
-
"stickiness.app_cookie.duration_seconds": "86400",
|
|
25263
|
-
"load_balancing.algorithm.type": "round_robin",
|
|
25264
|
-
"load_balancing.algorithm.anomaly_mitigation": "off",
|
|
25265
|
-
"load_balancing.cross_zone.enabled": "use_load_balancer_configuration",
|
|
25266
|
-
"slow_start.duration_seconds": "0",
|
|
25267
|
-
"lambda.multi_value_headers.enabled": "false",
|
|
25268
|
-
"proxy_protocol_v2.enabled": "false"
|
|
25269
|
-
};
|
|
25270
|
-
const LOAD_BALANCER_ATTRIBUTE_DEFAULTS = {
|
|
25271
|
-
"deletion_protection.enabled": "false",
|
|
25272
|
-
"access_logs.s3.enabled": "false",
|
|
25273
|
-
"connection_logs.s3.enabled": "false",
|
|
25274
|
-
"health_check_logs.s3.enabled": "false",
|
|
25275
|
-
"routing.http.desync_mitigation_mode": "defensive",
|
|
25276
|
-
"routing.http.drop_invalid_header_fields.enabled": "false",
|
|
25277
|
-
"routing.http.preserve_host_header.enabled": "false",
|
|
25278
|
-
"routing.http.x_amzn_tls_version_and_cipher_suite.enabled": "false",
|
|
25279
|
-
"routing.http.xff_client_port.enabled": "false",
|
|
25280
|
-
"routing.http.xff_header_processing.mode": "append",
|
|
25281
|
-
"routing.http2.enabled": "true",
|
|
25282
|
-
"waf.fail_open.enabled": "false",
|
|
25283
|
-
"zonal_shift.config.enabled": "false"
|
|
25284
|
-
};
|
|
25285
|
-
const LISTENER_ATTRIBUTE_DEFAULTS = { "routing.http.response.server.enabled": "true" };
|
|
25269
|
+
const RETAIN_REMOVED_ATTRIBUTE = () => void 0;
|
|
25270
|
+
const LOG_DELIVERY_ATTRIBUTE = /^[a-z_]+_logs\.s3\./;
|
|
25271
|
+
const MISLEADING_IF_KEPT_ATTRIBUTE = /^routing\.http\.(response\.access_control_|request\.[a-z0-9_]+\.header_name$)/;
|
|
25286
25272
|
function loadBalancerAttributes(lb, lbArn) {
|
|
25287
25273
|
return definedAttributes({
|
|
25288
25274
|
DNSName: lb.DNSName,
|
|
@@ -25413,13 +25399,53 @@ var ELBv2Provider = class {
|
|
|
25413
25399
|
"Tags"
|
|
25414
25400
|
])]
|
|
25415
25401
|
]);
|
|
25416
|
-
removalHandledInUpdate = /* @__PURE__ */ new Map([
|
|
25417
|
-
"
|
|
25418
|
-
|
|
25419
|
-
|
|
25420
|
-
|
|
25421
|
-
|
|
25422
|
-
|
|
25402
|
+
removalHandledInUpdate = /* @__PURE__ */ new Map([
|
|
25403
|
+
["AWS::ElasticLoadBalancingV2::LoadBalancer", /* @__PURE__ */ new Set([
|
|
25404
|
+
"Name",
|
|
25405
|
+
"Scheme",
|
|
25406
|
+
"Type",
|
|
25407
|
+
"Subnets",
|
|
25408
|
+
"SubnetMappings",
|
|
25409
|
+
"SecurityGroups",
|
|
25410
|
+
"Tags",
|
|
25411
|
+
"IpAddressType",
|
|
25412
|
+
"Ipv4IpamPoolId",
|
|
25413
|
+
"MinimumLoadBalancerCapacity",
|
|
25414
|
+
"EnableCapacityReservationProvisionStabilize",
|
|
25415
|
+
"LoadBalancerAttributes",
|
|
25416
|
+
"EnablePrefixForIpv6SourceNat",
|
|
25417
|
+
"EnforceSecurityGroupInboundRulesOnPrivateLinkTraffic"
|
|
25418
|
+
])],
|
|
25419
|
+
["AWS::ElasticLoadBalancingV2::TargetGroup", /* @__PURE__ */ new Set([
|
|
25420
|
+
"Protocol",
|
|
25421
|
+
"Port",
|
|
25422
|
+
"VpcId",
|
|
25423
|
+
"TargetType",
|
|
25424
|
+
"ProtocolVersion",
|
|
25425
|
+
"Name",
|
|
25426
|
+
"IpAddressType",
|
|
25427
|
+
"TargetControlPort",
|
|
25428
|
+
"HealthCheckPort",
|
|
25429
|
+
"Targets",
|
|
25430
|
+
"Tags",
|
|
25431
|
+
"HealthCheckProtocol",
|
|
25432
|
+
"HealthCheckPath",
|
|
25433
|
+
"HealthCheckEnabled",
|
|
25434
|
+
"HealthCheckIntervalSeconds",
|
|
25435
|
+
"HealthCheckTimeoutSeconds",
|
|
25436
|
+
"HealthyThresholdCount",
|
|
25437
|
+
"UnhealthyThresholdCount",
|
|
25438
|
+
"Matcher",
|
|
25439
|
+
"TargetGroupAttributes"
|
|
25440
|
+
])],
|
|
25441
|
+
["AWS::ElasticLoadBalancingV2::Listener", /* @__PURE__ */ new Set([
|
|
25442
|
+
"LoadBalancerArn",
|
|
25443
|
+
"DefaultActions",
|
|
25444
|
+
"ListenerAttributes",
|
|
25445
|
+
"Tags",
|
|
25446
|
+
...LISTENER_LEFT_IN_PLACE_ON_REMOVAL
|
|
25447
|
+
])]
|
|
25448
|
+
]);
|
|
25423
25449
|
lambdaClients = /* @__PURE__ */ new Map();
|
|
25424
25450
|
getClient() {
|
|
25425
25451
|
if (!this.elbv2Client) this.elbv2Client = new ElasticLoadBalancingV2Client({
|
|
@@ -25681,7 +25707,11 @@ var ELBv2Provider = class {
|
|
|
25681
25707
|
}) : "For Name / Type / Scheme re-deploy with cdkd deploy --replace, or destroy + redeploy the stack.";
|
|
25682
25708
|
throw new ResourceUpdateNotSupportedError("AWS::ElasticLoadBalancingV2::LoadBalancer", logicalId, "ELBv2 LoadBalancer Name / Type / Scheme are immutable on AWS — none of the ELBv2 Modify* / Set* APIs accept these fields; they are fixed at creation. cdkd handles LoadBalancerAttributes / Subnets / SubnetMappings / SecurityGroups / IpAddressType / Tags in-place. " + remedy);
|
|
25683
25709
|
}
|
|
25684
|
-
const
|
|
25710
|
+
const removedLogKeys = [];
|
|
25711
|
+
const submittedAttrs = this.diffAttributeBag("LoadBalancerAttributes", logicalId, properties["LoadBalancerAttributes"], previousProperties["LoadBalancerAttributes"], (key) => {
|
|
25712
|
+
if (LOG_DELIVERY_ATTRIBUTE.test(key)) removedLogKeys.push(key);
|
|
25713
|
+
return RETAIN_REMOVED_ATTRIBUTE();
|
|
25714
|
+
}, fromReadback, maskSecrets);
|
|
25685
25715
|
if (submittedAttrs.length > 0) {
|
|
25686
25716
|
await this.getClient().send(new ModifyLoadBalancerAttributesCommand({
|
|
25687
25717
|
LoadBalancerArn: physicalId,
|
|
@@ -25689,6 +25719,14 @@ var ELBv2Provider = class {
|
|
|
25689
25719
|
}));
|
|
25690
25720
|
this.logger.debug(`Applied ${submittedAttrs.length} LoadBalancerAttributes change(s) for ${logicalId}`);
|
|
25691
25721
|
}
|
|
25722
|
+
const desiredAttrs = new Map(this.normalizeAttributes(properties["LoadBalancerAttributes"]).map((a) => [a.Key, a.Value]));
|
|
25723
|
+
const exposedLogKeys = removedLogKeys.filter((key) => desiredAttrs.get(`${key.split(".")[0]}.s3.enabled`) !== "false");
|
|
25724
|
+
if (exposedLogKeys.length > 0) {
|
|
25725
|
+
const mask = maskerOrIdentity(maskSecrets);
|
|
25726
|
+
const keys = exposedLogKeys.map((key) => mask(key)).join(", ");
|
|
25727
|
+
const one = exposedLogKeys.length === 1;
|
|
25728
|
+
this.logger.warn(safeMsg`${logicalId}: LoadBalancerAttributes ${one ? "key" : "keys"} ${keys} ${one ? "is" : "are"} no longer declared and ${one ? "keeps its live value" : "keep their live values"}, as CloudFormation leaves ${one ? "it" : "them"}, so the load balancer may keep delivering logs to the bucket it names. To stop it, declare the matching '<kind>_logs.s3.enabled' key as 'false' and deploy.`);
|
|
25729
|
+
}
|
|
25692
25730
|
const newSubnets = properties["Subnets"];
|
|
25693
25731
|
const oldSubnets = previousProperties["Subnets"];
|
|
25694
25732
|
const newMappings = properties["SubnetMappings"];
|
|
@@ -25718,7 +25756,7 @@ var ELBv2Provider = class {
|
|
|
25718
25756
|
}));
|
|
25719
25757
|
this.logger.debug(`Updated SecurityGroups for ${logicalId}`);
|
|
25720
25758
|
}
|
|
25721
|
-
const newIpType = properties["IpAddressType"];
|
|
25759
|
+
const newIpType = fromReadback ? properties["IpAddressType"] : clearOnUpdateRemoval(properties["IpAddressType"], previousProperties["IpAddressType"], "ipv4");
|
|
25722
25760
|
const oldIpType = previousProperties["IpAddressType"];
|
|
25723
25761
|
if (newIpType !== void 0 && newIpType !== oldIpType) {
|
|
25724
25762
|
await this.getClient().send(new SetIpAddressTypeCommand({
|
|
@@ -25928,7 +25966,7 @@ var ELBv2Provider = class {
|
|
|
25928
25966
|
try {
|
|
25929
25967
|
const rawMatcher = properties["Matcher"];
|
|
25930
25968
|
const matcher = rawMatcher && (rawMatcher.HttpCode !== void 0 || rawMatcher.GrpcCode !== void 0) ? rawMatcher : void 0;
|
|
25931
|
-
const healthCheckPort =
|
|
25969
|
+
const healthCheckPort = clearOnUpdateRemoval(properties["HealthCheckPort"], previousProperties["HealthCheckPort"], "traffic-port");
|
|
25932
25970
|
await this.getClient().send(new ModifyTargetGroupCommand({
|
|
25933
25971
|
TargetGroupArn: physicalId,
|
|
25934
25972
|
HealthCheckProtocol: properties["HealthCheckProtocol"],
|
|
@@ -25941,14 +25979,7 @@ var ELBv2Provider = class {
|
|
|
25941
25979
|
UnhealthyThresholdCount: properties["UnhealthyThresholdCount"] !== void 0 ? Number(properties["UnhealthyThresholdCount"]) : void 0,
|
|
25942
25980
|
...matcher && { Matcher: matcher }
|
|
25943
25981
|
}));
|
|
25944
|
-
const tgAttrDiff = this.diffAttributeBag("TargetGroupAttributes", logicalId, properties["TargetGroupAttributes"], previousProperties["TargetGroupAttributes"],
|
|
25945
|
-
const fallback = Object.hasOwn(TARGET_GROUP_ATTRIBUTE_DEFAULTS, key) ? TARGET_GROUP_ATTRIBUTE_DEFAULTS[key] : void 0;
|
|
25946
|
-
if (fallback === void 0) {
|
|
25947
|
-
this.logger.warn(`TargetGroup attribute ${maskerOrIdentity(maskSecrets)(key)} was removed from the template but has no documented default cdkd can reset it to — the live value is retained. Set the attribute explicitly to change it.`);
|
|
25948
|
-
return;
|
|
25949
|
-
}
|
|
25950
|
-
return currentValue === fallback ? void 0 : fallback;
|
|
25951
|
-
}, fromReadback, maskSecrets);
|
|
25982
|
+
const tgAttrDiff = this.diffAttributeBag("TargetGroupAttributes", logicalId, properties["TargetGroupAttributes"], previousProperties["TargetGroupAttributes"], RETAIN_REMOVED_ATTRIBUTE, fromReadback, maskSecrets);
|
|
25952
25983
|
if (tgAttrDiff.length > 0) {
|
|
25953
25984
|
await this.getClient().send(new ModifyTargetGroupAttributesCommand({
|
|
25954
25985
|
TargetGroupArn: physicalId,
|
|
@@ -26115,7 +26146,11 @@ var ELBv2Provider = class {
|
|
|
26115
26146
|
...alpnPolicy && alpnPolicy.length > 0 && { AlpnPolicy: alpnPolicy },
|
|
26116
26147
|
...mutualAuth !== void 0 && { MutualAuthentication: mutualAuth }
|
|
26117
26148
|
}));
|
|
26118
|
-
const
|
|
26149
|
+
const removedMisleadingKeys = [];
|
|
26150
|
+
const submittedAttrs = this.diffAttributeBag("ListenerAttributes", logicalId, properties["ListenerAttributes"], previousProperties["ListenerAttributes"], (key) => {
|
|
26151
|
+
if (MISLEADING_IF_KEPT_ATTRIBUTE.test(key)) removedMisleadingKeys.push(key);
|
|
26152
|
+
return RETAIN_REMOVED_ATTRIBUTE();
|
|
26153
|
+
}, fromReadback, maskSecrets);
|
|
26119
26154
|
if (submittedAttrs.length > 0) {
|
|
26120
26155
|
const watch = startInterruptWatch(`ELBv2 Listener ${logicalId} attributes`);
|
|
26121
26156
|
try {
|
|
@@ -26134,6 +26169,12 @@ var ELBv2Provider = class {
|
|
|
26134
26169
|
}
|
|
26135
26170
|
await this.applyTagDiff(physicalId, resourceType, logicalId, previousProperties["Tags"], properties["Tags"], maskSecrets);
|
|
26136
26171
|
this.logger.debug(`Successfully updated Listener ${logicalId}`);
|
|
26172
|
+
if (removedMisleadingKeys.length > 0) {
|
|
26173
|
+
const mask = maskerOrIdentity(maskSecrets);
|
|
26174
|
+
const keys = removedMisleadingKeys.map((key) => mask(key)).join(", ");
|
|
26175
|
+
const one = removedMisleadingKeys.length === 1;
|
|
26176
|
+
this.logger.warn(safeMsg`${logicalId}: ListenerAttributes ${one ? "key" : "keys"} ${keys} ${one ? "is" : "are"} no longer declared and ${one ? "keeps its live value" : "keep their live values"}, as CloudFormation leaves ${one ? "it" : "them"}, so the listener may keep sending a CORS response header, or keep writing a request header under its renamed name. To change ${one ? "it" : "them"}, declare the value you want and deploy, or set ${one ? "it" : "them"} with 'aws elbv2 modify-listener-attributes'.`);
|
|
26177
|
+
}
|
|
26137
26178
|
if (leftInPlaceNames.length > 0 && !fromReadback) this.logger.warn(listenerLeftInPlaceWarning(logicalId, leftInPlaceNames, context?.replayingState ? "rollback" : "deploy"));
|
|
26138
26179
|
return {
|
|
26139
26180
|
physicalId,
|
|
@@ -26214,12 +26255,6 @@ var ELBv2Provider = class {
|
|
|
26214
26255
|
}
|
|
26215
26256
|
return submitted;
|
|
26216
26257
|
}
|
|
26217
|
-
attributeRemovalResolver(defaults) {
|
|
26218
|
-
return (key, currentValue) => {
|
|
26219
|
-
const fallback = Object.hasOwn(defaults, key) ? defaults[key] : "";
|
|
26220
|
-
return currentValue === fallback ? void 0 : fallback;
|
|
26221
|
-
};
|
|
26222
|
-
}
|
|
26223
26258
|
async readUpdateTargets(logicalId, physicalId, resourceType, desiredRaw, recordedRaw, groupPort) {
|
|
26224
26259
|
const desired = readTargets(desiredRaw, "desired");
|
|
26225
26260
|
if (desired.kind === "malformed") throw markNonRetryable(new ProvisioningError(`desired Targets of TargetGroup ${logicalId} is not a list of ${TARGETS_WHAT}${targetsSecretCause(desired)} — the target group was not updated`, resourceType, logicalId, physicalId));
|
|
@@ -34027,7 +34062,7 @@ async function refuseCatalogMove(args) {
|
|
|
34027
34062
|
try {
|
|
34028
34063
|
callerAccount = await args.callerAccountId();
|
|
34029
34064
|
} catch (error) {
|
|
34030
|
-
throw
|
|
34065
|
+
throw wrapGlueError(mask, args.debug, error, (text) => new ProvisioningError(`Could not resolve the caller's account id (sts:GetCallerIdentity) to tell whether CatalogId ${mask(literal)} is this account's default Data Catalog, so cdkd did not update Glue ${args.noun} ${args.logicalId}: ${text}`, args.resourceType, args.logicalId, void 0, error instanceof Error ? error : void 0));
|
|
34031
34066
|
}
|
|
34032
34067
|
if (literal === callerAccount) return;
|
|
34033
34068
|
}
|
|
@@ -34059,6 +34094,13 @@ function newGlueClients(region) {
|
|
|
34059
34094
|
}))
|
|
34060
34095
|
};
|
|
34061
34096
|
}
|
|
34097
|
+
function wrapGlueError(mask, debug, error, build) {
|
|
34098
|
+
const failure = describeAwsFailure(error);
|
|
34099
|
+
if (!failure.redacted) return wrapMaskedAwsError(mask, error, build);
|
|
34100
|
+
debug(mask(build(failure.detail).message));
|
|
34101
|
+
const wrapped = build(mask(failure.summary));
|
|
34102
|
+
return error instanceof Error ? markRedactedCause(wrapped) : wrapped;
|
|
34103
|
+
}
|
|
34062
34104
|
var GlueProvider = class {
|
|
34063
34105
|
client;
|
|
34064
34106
|
createClient;
|
|
@@ -34066,7 +34108,7 @@ var GlueProvider = class {
|
|
|
34066
34108
|
callerAccountId = makeCallerAccountResolver(this.providerRegion);
|
|
34067
34109
|
logger = getLogger().child("GlueProvider");
|
|
34068
34110
|
wrapMaskedError(mask, error, build) {
|
|
34069
|
-
return
|
|
34111
|
+
return wrapGlueError(mask, (message) => this.logger.debug(message), error, build);
|
|
34070
34112
|
}
|
|
34071
34113
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Database", /* @__PURE__ */ new Set([
|
|
34072
34114
|
"DatabaseInput",
|
|
@@ -34165,6 +34207,7 @@ var GlueProvider = class {
|
|
|
34165
34207
|
stateful: true,
|
|
34166
34208
|
callerAccountId: this.callerAccountId,
|
|
34167
34209
|
warn: log.warn,
|
|
34210
|
+
debug: log.debug,
|
|
34168
34211
|
mask: log.mask
|
|
34169
34212
|
});
|
|
34170
34213
|
const catalogId = updateCatalogId(properties["CatalogId"]);
|
|
@@ -34218,7 +34261,7 @@ var GlueProvider = class {
|
|
|
34218
34261
|
return;
|
|
34219
34262
|
}
|
|
34220
34263
|
const cause = error instanceof Error ? error : void 0;
|
|
34221
|
-
throw
|
|
34264
|
+
throw this.wrapMaskedError(log.mask, error, (text) => new ProvisioningError(`Failed to delete Glue Database ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
|
|
34222
34265
|
}
|
|
34223
34266
|
}
|
|
34224
34267
|
async createTable(logicalId, resourceType, properties, context) {
|
|
@@ -34297,6 +34340,7 @@ var GlueProvider = class {
|
|
|
34297
34340
|
stateful: true,
|
|
34298
34341
|
callerAccountId: this.callerAccountId,
|
|
34299
34342
|
warn: log.warn,
|
|
34343
|
+
debug: log.debug,
|
|
34300
34344
|
mask: log.mask
|
|
34301
34345
|
});
|
|
34302
34346
|
const catalogId = updateCatalogId(properties["CatalogId"]);
|
|
@@ -34326,7 +34370,7 @@ var GlueProvider = class {
|
|
|
34326
34370
|
hint += live.versionId !== void 0 ? ` cdkd sent the version it read (${live.versionId}) as a precondition and AWS rejected the write, rather than let it put back the AWS-managed Parameters and StorageDescriptor members read a moment earlier — which for an Apache Iceberg table would have pinned it to an older metadata_location (an effective snapshot rollback).` : " AWS returned no VersionId on the pre-update read, so cdkd could not attach a precondition; AWS rejected the write on its own.";
|
|
34327
34371
|
hint += ` Re-run the deploy to pick up the current values.`;
|
|
34328
34372
|
}
|
|
34329
|
-
throw this.wrapMaskedError(log.mask, error, (detail) => new ProvisioningError(`Failed to update Glue Table ${logicalId}: ${detail}${hint}`, resourceType, logicalId, physicalId, cause));
|
|
34373
|
+
throw this.wrapMaskedError(log.mask, error, (detail) => new ProvisioningError(`Failed to update Glue Table ${logicalId}: ${hint ? withoutFinalPeriod(detail) : detail}${hint}`, resourceType, logicalId, physicalId, cause));
|
|
34330
34374
|
}
|
|
34331
34375
|
}
|
|
34332
34376
|
async deleteTable(logicalId, physicalId, resourceType, properties, context) {
|
|
@@ -34361,7 +34405,7 @@ var GlueProvider = class {
|
|
|
34361
34405
|
return;
|
|
34362
34406
|
}
|
|
34363
34407
|
const cause = error instanceof Error ? error : void 0;
|
|
34364
|
-
throw
|
|
34408
|
+
throw this.wrapMaskedError(log.mask, error, (text) => new ProvisioningError(`Failed to delete Glue Table ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
|
|
34365
34409
|
}
|
|
34366
34410
|
}
|
|
34367
34411
|
preserveAwsManagedParameters(built, desiredParameters, previousParameters, liveParameters) {
|
|
@@ -34741,7 +34785,7 @@ var GlueWorkflowProvider = class {
|
|
|
34741
34785
|
providerRegion = ambientRegion();
|
|
34742
34786
|
logger = getLogger().child("GlueWorkflowProvider");
|
|
34743
34787
|
wrapMaskedError(mask, error, build) {
|
|
34744
|
-
return
|
|
34788
|
+
return wrapGlueError(mask, (message) => this.logger.debug(message), error, build);
|
|
34745
34789
|
}
|
|
34746
34790
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Workflow", /* @__PURE__ */ new Set([
|
|
34747
34791
|
"Name",
|
|
@@ -34820,7 +34864,7 @@ var GlueWorkflowProvider = class {
|
|
|
34820
34864
|
return;
|
|
34821
34865
|
}
|
|
34822
34866
|
const cause = error instanceof Error ? error : void 0;
|
|
34823
|
-
throw new ProvisioningError(`Failed to delete Glue Workflow ${logicalId}: ${
|
|
34867
|
+
throw this.wrapMaskedError(context?.maskSecrets ?? ((text) => text), error, (text) => new ProvisioningError(`Failed to delete Glue Workflow ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
|
|
34824
34868
|
}
|
|
34825
34869
|
}
|
|
34826
34870
|
async getAttribute(physicalId, _resourceType, attributeName) {
|
|
@@ -34896,7 +34940,7 @@ var GlueSecurityConfigurationProvider = class {
|
|
|
34896
34940
|
providerRegion = ambientRegion();
|
|
34897
34941
|
logger = getLogger().child("GlueSecurityConfigurationProvider");
|
|
34898
34942
|
wrapMaskedError(mask, error, build) {
|
|
34899
|
-
return
|
|
34943
|
+
return wrapGlueError(mask, (message) => this.logger.debug(message), error, build);
|
|
34900
34944
|
}
|
|
34901
34945
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::SecurityConfiguration", /* @__PURE__ */ new Set(["Name", "EncryptionConfiguration"])]]);
|
|
34902
34946
|
getClient() {
|
|
@@ -34948,7 +34992,7 @@ var GlueSecurityConfigurationProvider = class {
|
|
|
34948
34992
|
return;
|
|
34949
34993
|
}
|
|
34950
34994
|
const cause = error instanceof Error ? error : void 0;
|
|
34951
|
-
throw new ProvisioningError(`Failed to delete Glue SecurityConfiguration ${logicalId}: ${
|
|
34995
|
+
throw this.wrapMaskedError(context?.maskSecrets ?? ((text) => text), error, (text) => new ProvisioningError(`Failed to delete Glue SecurityConfiguration ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
|
|
34952
34996
|
}
|
|
34953
34997
|
}
|
|
34954
34998
|
async getAttribute(physicalId, _resourceType, attributeName) {
|
|
@@ -35089,7 +35133,7 @@ var GlueJobProvider = class {
|
|
|
35089
35133
|
providerRegion = ambientRegion();
|
|
35090
35134
|
logger = getLogger().child("GlueJobProvider");
|
|
35091
35135
|
wrapMaskedError(mask, error, build) {
|
|
35092
|
-
return
|
|
35136
|
+
return wrapGlueError(mask, (message) => this.logger.debug(message), error, build);
|
|
35093
35137
|
}
|
|
35094
35138
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Job", /* @__PURE__ */ new Set([
|
|
35095
35139
|
"Name",
|
|
@@ -35199,7 +35243,7 @@ var GlueJobProvider = class {
|
|
|
35199
35243
|
return;
|
|
35200
35244
|
}
|
|
35201
35245
|
const cause = error instanceof Error ? error : void 0;
|
|
35202
|
-
throw new ProvisioningError(`Failed to delete Glue Job ${logicalId}: ${
|
|
35246
|
+
throw this.wrapMaskedError(context?.maskSecrets ?? ((text) => text), error, (text) => new ProvisioningError(`Failed to delete Glue Job ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
|
|
35203
35247
|
}
|
|
35204
35248
|
}
|
|
35205
35249
|
async getAttribute(physicalId, _resourceType, attributeName) {
|
|
@@ -35335,8 +35379,11 @@ function asRecord$1(value) {
|
|
|
35335
35379
|
if (typeof value !== "object" || value === null || Array.isArray(value)) return;
|
|
35336
35380
|
return value;
|
|
35337
35381
|
}
|
|
35382
|
+
function withoutFinalPeriod(text) {
|
|
35383
|
+
return text.endsWith(".") ? text.slice(0, -1) : text;
|
|
35384
|
+
}
|
|
35338
35385
|
function preUpdateReadFailureMessage(kind, iamAction, logicalId, detail) {
|
|
35339
|
-
return `Failed to read the current Glue ${kind} ${logicalId} before update: ${detail}. cdkd reads the live ${kind.toLowerCase()} so AWS-managed Parameters (Apache Iceberg's table_type / metadata_location, a crawler's classification, Lake Formation markers) survive an update that Glue applies as a full replace. Grant ${iamAction} to the deploy identity — proceeding without the read would silently erase them.`;
|
|
35386
|
+
return `Failed to read the current Glue ${kind} ${logicalId} before update: ${withoutFinalPeriod(detail)}. cdkd reads the live ${kind.toLowerCase()} so AWS-managed Parameters (Apache Iceberg's table_type / metadata_location, a crawler's classification, Lake Formation markers) survive an update that Glue applies as a full replace. Grant ${iamAction} to the deploy identity — proceeding without the read would silently erase them.`;
|
|
35340
35387
|
}
|
|
35341
35388
|
function coerceNumber(value) {
|
|
35342
35389
|
if (typeof value === "number") return value;
|
|
@@ -35383,7 +35430,7 @@ var GlueCrawlerProvider = class {
|
|
|
35383
35430
|
providerRegion = ambientRegion();
|
|
35384
35431
|
logger = getLogger().child("GlueCrawlerProvider");
|
|
35385
35432
|
wrapMaskedError(mask, error, build) {
|
|
35386
|
-
return
|
|
35433
|
+
return wrapGlueError(mask, (message) => this.logger.debug(message), error, build);
|
|
35387
35434
|
}
|
|
35388
35435
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Crawler", /* @__PURE__ */ new Set([
|
|
35389
35436
|
"Name",
|
|
@@ -35490,14 +35537,23 @@ var GlueCrawlerProvider = class {
|
|
|
35490
35537
|
log.debug(`Glue Crawler ${v(physicalId)} does not exist, skipping deletion`);
|
|
35491
35538
|
return;
|
|
35492
35539
|
}
|
|
35540
|
+
let failure = error;
|
|
35493
35541
|
if (error instanceof CrawlerRunningException) {
|
|
35494
35542
|
log.debug(`Glue Crawler ${v(physicalId)} is running; stopping before delete and retrying`);
|
|
35495
|
-
|
|
35496
|
-
|
|
35497
|
-
|
|
35543
|
+
try {
|
|
35544
|
+
await this.stopCrawlerAndWait(physicalId, log);
|
|
35545
|
+
await this.getClient().send(new DeleteCrawlerCommand({ Name: physicalId }));
|
|
35546
|
+
return;
|
|
35547
|
+
} catch (retryError) {
|
|
35548
|
+
if (retryError instanceof EntityNotFoundException) {
|
|
35549
|
+
log.debug(`Glue Crawler ${v(physicalId)} does not exist, skipping deletion`);
|
|
35550
|
+
return;
|
|
35551
|
+
}
|
|
35552
|
+
failure = retryError;
|
|
35553
|
+
}
|
|
35498
35554
|
}
|
|
35499
|
-
const cause =
|
|
35500
|
-
throw
|
|
35555
|
+
const cause = failure instanceof Error ? failure : void 0;
|
|
35556
|
+
throw this.wrapMaskedError(log.mask, failure, (text) => new ProvisioningError(`Failed to delete Glue Crawler ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
|
|
35501
35557
|
}
|
|
35502
35558
|
}
|
|
35503
35559
|
async stopCrawlerAndWait(physicalId, log = {
|
|
@@ -35645,7 +35701,7 @@ var GlueConnectionProvider = class {
|
|
|
35645
35701
|
callerAccountId = makeCallerAccountResolver(this.providerRegion);
|
|
35646
35702
|
logger = getLogger().child("GlueConnectionProvider");
|
|
35647
35703
|
wrapMaskedError(mask, error, build) {
|
|
35648
|
-
return
|
|
35704
|
+
return wrapGlueError(mask, (message) => this.logger.debug(message), error, build);
|
|
35649
35705
|
}
|
|
35650
35706
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Connection", /* @__PURE__ */ new Set(["ConnectionInput", "CatalogId"])]]);
|
|
35651
35707
|
getClient() {
|
|
@@ -35707,6 +35763,7 @@ var GlueConnectionProvider = class {
|
|
|
35707
35763
|
stateful: false,
|
|
35708
35764
|
callerAccountId: this.callerAccountId,
|
|
35709
35765
|
warn: log.warn,
|
|
35766
|
+
debug: log.debug,
|
|
35710
35767
|
mask: log.mask
|
|
35711
35768
|
});
|
|
35712
35769
|
const catalogId = updateCatalogId(properties["CatalogId"]);
|
|
@@ -35746,7 +35803,7 @@ var GlueConnectionProvider = class {
|
|
|
35746
35803
|
return;
|
|
35747
35804
|
}
|
|
35748
35805
|
const cause = error instanceof Error ? error : void 0;
|
|
35749
|
-
throw
|
|
35806
|
+
throw this.wrapMaskedError(log.mask, error, (text) => new ProvisioningError(`Failed to delete Glue Connection ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
|
|
35750
35807
|
}
|
|
35751
35808
|
}
|
|
35752
35809
|
async getAttribute(physicalId, _resourceType, attributeName) {
|
|
@@ -35821,7 +35878,7 @@ var GlueTriggerProvider = class {
|
|
|
35821
35878
|
providerRegion = ambientRegion();
|
|
35822
35879
|
logger = getLogger().child("GlueTriggerProvider");
|
|
35823
35880
|
wrapMaskedError(mask, error, build) {
|
|
35824
|
-
return
|
|
35881
|
+
return wrapGlueError(mask, (message) => this.logger.debug(message), error, build);
|
|
35825
35882
|
}
|
|
35826
35883
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Trigger", /* @__PURE__ */ new Set([
|
|
35827
35884
|
"Name",
|
|
@@ -35919,7 +35976,9 @@ var GlueTriggerProvider = class {
|
|
|
35919
35976
|
await this.getClient().send(new StartTriggerCommand({ Name: physicalId }));
|
|
35920
35977
|
} catch (restartError) {
|
|
35921
35978
|
if (updateError === void 0) throw restartError;
|
|
35922
|
-
|
|
35979
|
+
const restartFailure = describeAwsFailure(restartError);
|
|
35980
|
+
log.warn(`Failed to re-activate Glue Trigger ${v(physicalId)} after a failed update: ${restartFailure.summary}`);
|
|
35981
|
+
if (restartFailure.redacted) log.debug(`Failed to re-activate Glue Trigger ${v(physicalId)} after a failed update: ${restartFailure.detail}`);
|
|
35923
35982
|
}
|
|
35924
35983
|
if (updateError !== void 0) throw updateError;
|
|
35925
35984
|
await applyGlueTagDiff(this.getClient(), () => this.resourceArn(physicalId), previousProperties["Tags"], properties["Tags"], resourceType, logicalId, log.warn);
|
|
@@ -35971,7 +36030,7 @@ var GlueTriggerProvider = class {
|
|
|
35971
36030
|
return;
|
|
35972
36031
|
}
|
|
35973
36032
|
const cause = error instanceof Error ? error : void 0;
|
|
35974
|
-
const failure = new ProvisioningError(`Failed to delete Glue Trigger ${logicalId}: ${
|
|
36033
|
+
const failure = this.wrapMaskedError(context?.maskSecrets ?? ((text) => text), error, (text) => new ProvisioningError(`Failed to delete Glue Trigger ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
|
|
35975
36034
|
throw stripped ? markDeleteStarted(failure) : failure;
|
|
35976
36035
|
}
|
|
35977
36036
|
}
|
|
@@ -38035,7 +38094,10 @@ var SchedulerScheduleProvider = class {
|
|
|
38035
38094
|
const bag = getCurrentResourceSecrets();
|
|
38036
38095
|
if (bag === void 0 || typeof desiredGroup !== "string") return false;
|
|
38037
38096
|
if (typeof recordedGroup !== "string" || !recordedGroup.includes("{{resolve:")) return false;
|
|
38038
|
-
return withoutPhysicalNameCopies(bag, () =>
|
|
38097
|
+
return withoutPhysicalNameCopies(bag, () => redactForState(desiredGroup, {
|
|
38098
|
+
provenance: "value-scan",
|
|
38099
|
+
secrets: bag
|
|
38100
|
+
})) !== recordedGroup;
|
|
38039
38101
|
}
|
|
38040
38102
|
async update(logicalId, physicalId, resourceType, properties, previousProperties, context) {
|
|
38041
38103
|
const groupName = this.groupNameOf(properties);
|
|
@@ -46716,4 +46778,4 @@ var ACMCertificateProvider = class {
|
|
|
46716
46778
|
|
|
46717
46779
|
//#endregion
|
|
46718
46780
|
export { ACMCertificateProvider, ASGProvider, AgentCoreBrowserProvider, AgentCoreCodeInterpreterProvider, AgentCoreEvaluatorProvider, AgentCoreRuntimeProvider, ApiGatewayProvider, ApiGatewayV2Provider, AppSyncProvider, BudgetsBudgetProvider, CloudFrontDistributionProvider, CloudFrontOACProvider, CloudFrontOAIProvider, CloudTrailProvider, CloudWatchAlarmProvider, CloudWatchAnomalyDetectorProvider, CodeBuildProvider, CodeCommitRepositoryProvider, CognitoUserPoolProvider, DLMLifecyclePolicyProvider, DocDBProvider, DocDBSubnetGroupProvider, DynamoDBGlobalTableProvider, DynamoDBTableProvider, EC2Provider, ECRProvider, ECSProvider, EFSProvider, ELBv2Provider, EMRClusterProvider, EMRInstanceFleetConfigProvider, EMRInstanceGroupConfigProvider, ElastiCacheProvider, EventBridgeBusProvider, EventBridgeRuleProvider, FSxFileSystemProvider, FirehoseProvider, GlueConnectionProvider, GlueCrawlerProvider, GlueJobProvider, GlueProvider, GlueSecurityConfigurationProvider, GlueTriggerProvider, GlueWorkflowProvider, IAMAccessKeyProvider, IAMInstanceProfileProvider, IAMManagedPolicyProvider, IAMPolicyProvider, IAMRoleProvider, IAMUserGroupProvider, KMSProvider, KinesisStreamConsumerProvider, KinesisStreamProvider, LambdaEventInvokeConfigProvider, LambdaEventSourceMappingProvider, LambdaFunctionProvider, LambdaLayerVersionProvider, LambdaMicrovmImageProvider, LambdaNetworkConnectorProvider, LambdaPermissionProvider, LambdaUrlProvider, LambdaWebFunctionEndpointProvider, LambdaWebFunctionRevisionProvider, LogsLogGroupProvider, NeptuneProvider, NestedStackProvider, PipesPipeProvider, RDSDBProxyEndpointProvider, RDSDBProxyProvider, RDSDBProxyTargetGroupProvider, RDSProvider, Route53Provider, S3BucketPolicyProvider, S3BucketProvider, S3DirectoryBucketProvider, S3TablesProvider, S3VectorsProvider, SNSSubscriptionProvider, SNSTopicPolicyProvider, SNSTopicProvider, SQSQueuePolicyProvider, SQSQueueProvider, SSMParameterProvider, SchedulerScheduleProvider, SecretsManagerSecretProvider, ServiceDiscoveryProvider, StepFunctionsProvider, WAFv2WebACLProvider, WaitConditionHandleProvider };
|
|
46719
|
-
//# sourceMappingURL=provider-classes-
|
|
46781
|
+
//# sourceMappingURL=provider-classes-CR4DtD8M.js.map
|