@go-to-k/cdkd 0.298.8 → 0.299.0
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-B8N6UPAH.js → asg-provider-CGN1a3d3.js} +4 -4
- package/dist/{asg-provider-B8N6UPAH.js.map → asg-provider-CGN1a3d3.js.map} +1 -1
- package/dist/{aws-client-defaults-D0q0z4dG.js → aws-client-defaults-DBXBcg0J.js} +79 -3
- package/dist/aws-client-defaults-DBXBcg0J.js.map +1 -0
- package/dist/{aws-clients-CnmtbrxD.js → aws-clients-Bj7qH5Ph.js} +2 -2
- package/dist/{aws-clients-CnmtbrxD.js.map → aws-clients-Bj7qH5Ph.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-HKmcD4Kn.js → deploy-engine-4K_B3N08.js} +679 -176
- package/dist/deploy-engine-4K_B3N08.js.map +1 -0
- package/dist/{iam-policy-targets-CwKiK9nS.js → iam-policy-targets-Pn2m0R67.js} +3 -3
- package/dist/{iam-policy-targets-CwKiK9nS.js.map → iam-policy-targets-Pn2m0R67.js.map} +1 -1
- package/dist/{iam-role-provider-BiCib2zp.js → iam-role-provider-BKnf387o.js} +47 -7
- package/dist/iam-role-provider-BKnf387o.js.map +1 -0
- package/dist/index.d.ts +24 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/{neptune-provider-D3Qcci3J.js → neptune-provider-CR19ID_J.js} +4 -4
- package/dist/{neptune-provider-D3Qcci3J.js.map → neptune-provider-CR19ID_J.js.map} +1 -1
- package/dist/{program-MMwB_CTT.js → program-BgsCaZFy.js} +230 -80
- package/dist/program-BgsCaZFy.js.map +1 -0
- package/dist/{provider-classes--iMwAb7q.js → provider-classes-DxHQcC1K.js} +79 -14
- package/dist/provider-classes-DxHQcC1K.js.map +1 -0
- package/dist/{rds-provider-BdUme0V8.js → rds-provider-BO3U39K0.js} +4 -4
- package/dist/{rds-provider-BdUme0V8.js.map → rds-provider-BO3U39K0.js.map} +1 -1
- package/dist/{version-n6UXfuUI.js → version-DUCWZskc.js} +2 -2
- package/dist/{version-n6UXfuUI.js.map → version-DUCWZskc.js.map} +1 -1
- package/package.json +1 -1
- package/dist/aws-client-defaults-D0q0z4dG.js.map +0 -1
- package/dist/deploy-engine-HKmcD4Kn.js.map +0 -1
- package/dist/iam-role-provider-BiCib2zp.js.map +0 -1
- package/dist/program-MMwB_CTT.js.map +0 -1
- package/dist/provider-classes--iMwAb7q.js.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { a as runWithStackAwsClients, i as resetAwsClients, o as setAwsClients, t as AwsClients } from "./aws-clients-
|
|
1
|
+
import { a as runWithStackAwsClients, i as resetAwsClients, o as setAwsClients, t as AwsClients } from "./aws-clients-Bj7qH5Ph.js";
|
|
2
2
|
import { A as UNRENDERABLE, B as stringifyJsonPayload, D as SAFE_MSG_ALTERED_CHAR, F as displayStackName, H as truncateCodePoints, I as isPasteableIdent, M as displayAwsMessage, N as displayIdent, O as SECRET_REF_MAX_CODE_POINTS, P as displaySafe, R as plainIdentOr, T as withStackName, _ as derivesPatternBName, a as getLogger, f as getLiveRenderer, h as PATTERN_B_RESOURCE_TYPES, j as cutMarker, k as STACK_REF_MAX_CODE_POINTS, l as runStackBuffered, m as PATTERN_B_NAME_PROPERTIES, o as isStdoutReservedForPayload, p as PATTERN_B_NAME_OPTIONS, r as safeStringify, s as reserveStdoutForPayload, t as describeAwsFailure, v as explicitNamePropertyFor, w as withSkipPrefix, y as generateResourceName, z as safeMsg } from "./aws-failure-text-DtvlUugx.js";
|
|
3
|
-
import { $n as isAmbiguousOutcomeError, $t as credentialFingerprint, Bn as withheldTargetClause, D as VALUE_NOT_SHOWN, Dn as TIMEOUT_FLAG_RESOURCE_TYPE, E as assertRegionMatch, En as withErrorHandling, Ft as buildLockContentionMessage, G as runDeleteAttempt, Hn as setPasteableVerbFlags, Ht as CUSTOM_RESOURCE_RESPONSE_PREFIX, In as plainOrDescribed, It as forceQuitRecoveryClause, Jt as setPasteableAwsProfile, Kt as producerCoordinateKey, Ln as quotedOrDescribed, Lt as formatLockExpiry, Nn as isInertUnquoted, Nt as UNREPRODUCIBLE_LOCK_CLAUSE, P as remedyLogicalId, Pn as pasteableCommand, Pt as buildForceUnlockCommand, Qt as clientDefaultsFor, Rn as shellBoundedDisplay, Rt as formatLockOperation, Sn as SynthesisError, T as RESOURCE_NOT_FOUND, Tn as normalizeAwsError, Ut as DEFAULT_STATE_PREFIX, Vn as setPasteableRunFlags, Wt as injectiveKey, Xt as ambientClientDefaults, Yt as withPasteableAwsProfile, Z as isAwsCliLiteral, Zt as ambientCredentialConfig, _n as ResourceTimeoutError, ar as isMarkedNonRetryable, bn as StackTerminationProtectionError, cn as IntrinsicResolutionRefusalError, en as AccountIdUnavailableError, ft as logicalIdShown, gn as ProvisioningError, hn as PartialFailureError, in as CrossAccountSecretRefusalError, it as isInterruptedWaitError, jn as commandHole, kn as SHELL_ACTIVE_WHY, ln as LocalInvokeBuildError$1, mn as NestedStackChildDirectDestroyError, mt as resourceTypeShown, n as RESOLVED_PREVIOUS_PRINCIPAL_KEYS, nn as CdkdError, nr as isTransientServerError, nt as endCommandInterruptScope, on as DeployCancelledError, or as isThrottlingError, pn as MalformedProducerRecordRefusalError, qt as producerRecordKey, rr as retryClassificationText, rt as interruptWatchListenerCount, s as readRecordedPrincipals, sn as DynamicReferenceRegionAmbiguousError, sr as markNonRetryable, t as IAM_PRINCIPAL_NAME, tr as isRetryableTransientError, tt as beginCommandInterruptScope, un as LocalStartServiceError, vn as ResourceUpdateNotSupportedError, xn as StateError, yn as StackHasActiveImportsError, zn as shellQuote, zt as formatLockOwner } from "./iam-policy-targets-
|
|
4
|
-
import { a as setAssumedRoleCredentials, n as awsClientDefaults, r as getAssumedRoleCredentials, u as formatAuthority } from "./aws-client-defaults-
|
|
5
|
-
import { $a as isStatefulRecreateTargetForReplace, $c as stateBucketExistenceConfirmed, $i as malformedOrphansRefusalMessage, $n as ledgerForStack, $o as markSameGenerationBag, $r as sendableAssumeRoleCommand, $s as AssetPublisher, $t as seedsDeleteFirstGuard, A as noEchoComparisonForTemplate, Aa as refuseMalformedResourcesForDeploy, Ac as redactDockerArgvValues, Ai as declaresNoEcho, An as journaledOrphanPrintingBag, Ao as maskWholeValue, Ar as deleteIndeterminateGuards, As as LockManager, At as dropFailedHint, Ba as unpreviewableOrphanRecords, Bc as getDockerImageBySourceHash, Bi as hasReadableOutputs, Bn as PRE_DELETE_SNAPSHOT_TYPES, Bo as carryLogOnlyValues, Bs as splitImportedOps, C as recordRetainedForReadoption, Ca as refuseMalformedResourceEntriesForImport, Cc as dockerSpawnEnvWithSensitive, Ci as cfnRefValueFromPhysicalId, Cl as displayAssemblyPath, Cn as collectDeclaredOutputNames, Cr as applyCustomResourceResponseExpiration, Cs as wholeStringLeavesOf, D as withResourceDeadline, Da as refuseMalformedResourcePropertiesForDrift, Dc as isDockerClientEnvKey, Di as withSharedDrainBudget, Dl as injectedAwsRegionValue, Dn as DEFAULT_RESOURCE_TIMEOUT_MS, Do as isMarkedCoordinate, Ds as TEMPLATE_SOURCED_RULES, E as serviceTokenBlockingReason, Ea as refuseMalformedResourcePropertiesForDestroy, Ec as getDockerCmd, El as injectAwsRegion, En as bindingSkippedOutputs, Eo as canonicalCoordinates, Er as slowCcOperationTimeoutMs, Es as STATE_SOURCED_READBACK_RULES, Et as collectNestedChildUnaddressed, F as PROTECTION_PROPERTY_BY_TYPE, Fa as repairMalformedOrphansForReadOnly, Fc as warnFinchArgvExposure, Fi as UNREADABLE_RESOURCES_MAP_ROW, Fn as secretNamedRecordNeedles, Fs as CrossPrefixScanCache, Ft as sameJournaledOrphans, Gc as loadCdkJson, Gi as malformedExportNamesWarning, Gn as isFinalSnapshotError, Go as printingCorpusOf, Gr as poisonRenderedSpellingsCollidingIn, Gs as hasReasonlessBaselineRefusal, Gt as isJournaledOrphan, Ha as unreadableResourceEntries, Hc as synthesisStatusMessage, Hi as isReadableOrphanRecord, Hn as ccRoutedFinalSnapshotError, Ho as hasMaskableValues, Hr as DiffCalculator, Hs as describeRegionValueKind, Ht as removeProtectionTypeList, I as isProtectionValueActive, Ia as repairMalformedOutputsForReadOnly, Ic as escapeRegExp, Ii as accountArgs, In as stateSecretNameNeedles, Io as readbackPathFor, Is as applyCrossPrefixScan, It as replayFailedOperations, Ja as NO_CC_HANDLERS_REASON, Jc as resolveCaptureObservedState, Ji as malformedLocalResourceEntriesWarning, Jn as maskingRetryLogger, Jo as shareLogOnlyValues, Jr as applyRoleArnIfSet, Js as importableOutputs, Jt as planRollback, Ka as unwrittenCreateOnlyReplacement, Kc as resolveApp, Ki as malformedExportSourceWarning, Kn as refusesFinalSnapshot, Ko as recordLogOnlyParameterValue, Kr as producerLookupOver, Ks as hasUnverifiableParameterRefusal, Kt as isReplacementOrphan, L as perType, La as repairMalformedResourceEntriesForReadOnly, Lc as stripControlChars, Li as deployRefusesOrphanRowsReason, Ln as storedSecretNameNeedles, Lo as readsNoEchoSource, Ls as crossPrefixDeniedWarning, Lt as replayRollback, M as noEchoParameterNamesOf, Ma as refuseMalformedResourcesForExport, Mc as redactedDockerCause, Mi as STATE_REGION_DIVERGED, Mn as orphanRecordsPrintingBag, Mo as noEchoCoordinatesOf, Mr as deleteSkipReason, Ms as S3StateBackend, Mt as journaledOrphanLines, N as recordedProtectionEvidence, Na as refuseMalformedState, Nc as runDockerForeground, Ni as STATE_RESOURCES_MALFORMED, Nn as secretNamePrintingBag, No as noEchoLeavesOf, Ns as rebuildClientForBucketRegion, Nt as loadJournaledOrphans, O as diffSecurity, Oa as refuseMalformedResourcePropertiesForExport, Oc as isMalformedEnvKey, Oi as parameterInputsFor, On as DEFAULT_RESOURCE_WARN_AFTER_MS, Oo as maskAtCoordinates, Or as RollbackInlinePolicyWriters, Os as WHOLE_DYNAMIC_REFERENCE_PATTERN, Ot as withNestedStackContext, P as recordedProtectionNote, Pa as repairMalformedOrphanRecordsForReadOnly, Pc as runDockerStreaming, Pi as UNREADABLE_ORPHANS_CONTAINER_ROW, Pn as secretNamePrintingBags, Po as noEchoOutputsComparison, Pr as isWaitAbandonedError, Ps as CrossPrefixReadError, Pt as makeForeignHolderScan, Qa as MULTI_REGION_RECREATE_BLOCKED_TYPES, Qc as resolveUseCdkBootstrapAssets, Qi as malformedOrphanRowsKeptWarning, Qo as maskSecretsInText, Qr as isIamRoleArn, Qs as shouldRetainResource, Qt as resolveReplacementOldType, R as readProtection, Ra as repairMalformedResourcePropertiesForReadOnly, Rc as stripForDisplay, Ri as displayLogicalId, Rn as extractDeploymentEventError, Ro as valueAtCoordinate, Rs as isAccessDenied, S as keptForReadoption, Sa as refuseMalformedResourceEntriesForDestroy, Sc as describeDockerFailure, Si as AWS_NO_VALUE, Sl as describeFileReadFailure, Sn as noEchoParameterValueSeed, Sr as CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID, Ss as recordProvenPublicExpression, St as recordDisplacedSkips, T as findServiceTokenRefusals, Ta as refuseMalformedResourceEntriesForOrphan, Tc as formatDockerLoginError, Ti as refStateLookupFromResource, Tl as resolveAssemblyPath, Tn as isExportAliasCollision, To as TemplateParser, Tr as CloudControlProvider, Ts as STATE_SOURCED_CROSS_GENERATION_RULES, Tt as withNestedRevertRun, Ua as withheldAccountClause, Uc as getDefaultStateBucketName, Ui as isReadableResourceEntry, Un as createPreDeleteFinalSnapshot, Uo as literalSplitDelimitersOf, Ur as INTRINSIC_KEYS, Us as exportNamesCarriedFrom, Ut as recordAfterRollbackUpdate, Va as unreadableOrphanRecords, Vc as Synthesizer, Vi as hasReadableResources, Vn as buildFinalSnapshotIdentifier, Vo as createUnionSecretMasker, Vs as acceptedCreateOnlyDropsOf, Vt as withStackRecords, Wa as findActionableSilentDrops, Wc as getLegacyStateBucketName, Wi as malformedDriftResourcePropertiesWarning, Wn as effectiveDeletionPolicy, Wo as logOnlyValueCount, Wr as IntrinsicFunctionResolver, Ws as hasReadableExportSet, Wt as demoteSupersededOrphans, Xa as findReplacedReadersOfRecreateTargets, Xc as resolveStateBucketWithDefault, Xi as malformedOrphanRecordsRefusalMessage, Xn as findDestructiveChanges, Xo as errorCauseChain, Xr as assertSendableRoleArn, Xs as orphansAfterRollback, Xt as recordUnderIdIsNotOwn, Ya as hasNoCloudControlHandlers, Yc as resolveSkipPrefix, Yi as malformedLocalResourcesWarning, Yn as constructPathOf, Yo as createSecretMasker, Yr as assertFlagRoleArn, Ys as isReadableBag, Yt as recheckFailedPlan, Za as shownType, Zc as resolveStateBucketWithDefaultAndSource, Zi as malformedOrphanRecordsWarning, Zn as formatDestructiveChange, Zo as maskSecretsInError, Zr as explicitRoleArnOrThrow, Zs as orphansCarriedFrom, Zt as replacementNeverSwapped, _ as makeCanonicalizePropertiesFn, _a as refuseMalformedOutputs, _c as buildDenyExternalAccessPolicy, _i as isImpossibleEmptyStoredAttribute, _l as hasOwnKey, _n as secretSafeKeyDisplay, _o as prefetchCreateOnlyPropertyPaths, _r as TemplateNoEchoReresolver, _s as provenPublicValue, _t as displacedOpClause, a as findNestedTemplateTreeDefect, aa as malformedResourcePropertiesWarning, ac as loadPublishableAssetManifest, al as findLargeInlineResources, as as dynamicReferenceTokens, at as cyan, ba as refuseMalformedResourceEntries, bc as describeDockerCapturedOutput, bi as isNamelessDynamicReferenceError, bl as ownValue, bn as exportNameSecretExposure, bo as withRetry, bs as recordNoEchoAttributeValues, c as renderNestedTemplateTreeDefect, ca as malformedStateRefusalMessage, cc as BOOTSTRAP_MARKER_PREFIX, cl as decodeListingKey, cn as updatePartialMessage, cs as identityKeyFor, ct as red, d as conditionInputsFrom, dc as getBootstrapMarkerKey, di as producerRegionsFromState, dl as canonicalizeRegion, dn as DeploymentEventsStore, dt as namesAnyDeclaredParameter, ea as malformedOrphansWarning, ec as isSensitiveAttributeName, ei as AWS_CREDENTIAL_ENV_KEYS, el as warnDeprecatedNoPrefixCliFlag, en as orphanDeleteNeedsIdentity, eo as isStatefulRecreateTargetSync, es as redactSecretsForState, f as parentSuppliedValues, fa as refuseMalformedOrphanRecords, fc as isCrossRegionRedirect, fi as regionLessSecretName, fl as derivePartitionAndUrlSuffix, fn as WITHHELD_NAME_DISPLAY, fr as CC_BROKEN_REASON, fs as physicalNameCopiesOf, ft as reachableDivergentParameters, g as mergeNoChangeOutputs, ga as refuseMalformedOrphansForOrphan, gc as validateContainerRepoName, gi as getAccountInfo, gl as defineOwnKey, gn as secretBearingStateKeyWarning, gr as wouldReturnToSdkProvider, gs as carriesSecretMask, gt as NESTED_PENDING_PARENT_REASON, h as keptWholeReasonText, ha as refuseMalformedOrphansForDestroy, hc as validateAssetBucketName, hi as parameterTypeMayLoseSecretIdentity, hl as processStackMessages, hn as secretBearing, hr as isCustomResource, hs as splitGetAttStringForm, ht as planOrphanAdoption, i as childTemplateLoader, ia as malformedResourceEntriesWarning, ic as createAssetRedirectResolver, il as MIGRATE_TMP_PREFIX, is as DYNAMIC_REFERENCE_TOKEN_SCAN, it as bold, j as noEchoExactEchoLeavesOf, ja as refuseMalformedResourcesForDestroy, jc as redactedCause, ji as JSON_LISTING_HOLE_VALUE, jn as maskEventTextWithBoundBags, jo as maskedLeafCoordinatesOf, jr as deleteLeftInPlace, js as isLockInfoExpired, jt as isHandledOrphan, k as noEchoAttributeNamesOf, ka as refuseMalformedResourcePropertiesForOrphan, kc as partitionSensitiveEnv, kl as resolveBucketRegion, kn as completedReplayEntries, ko as maskReadbackAtCoordinates, kr as UNSPECIFIED_SKIP_REASON, ks as isSingleDynamicReferenceToken, kt as deleteJournaledOrphans, l as templateIdentity, la as previewableOrphanRecords, lc as assertAssetBucketRegion, ll as expectedOwnerParam, ln as updatePartialReason, ls as inheritNestedStackParameterAssociations, lt as yellow, m as isSecretBearingReferenceString, ma as refuseMalformedOrphans, mc as readBootstrapMarkerBody, mi as isUnboundTemplateParameter, ml as StageLoadError, mn as exportAliasCollisionScrubWarning, mr as ccBrokenReason, ms as recordPhysicalNameCopy, mt as makeSiblingClaimReader, n as IMPLICIT_DELETE_DEPENDENCIES, na as malformedOutputsWarning, nc as WorkGraph, ni as callerEnvCredentials, nl as CFN_TEMPLATE_BODY_LIMIT, ns as withPhysicalNameCopies, nt as formatResourceLine, o as isAbsoluteAssetPath, oa as malformedResourcesWarning, oc as rewriteTemplateAssetReferences, ol as uploadCfnTemplate, os as isUncertifiedBaselineMaskPosition, ot as gray, p as readRecordedConditionVerdicts, pa as refuseMalformedOrphanRecordsForDestroy, pc as parseBootstrapMarker, pi as coerceParameterTypedValue, pl as AssemblyReader, pn as displayTextOrWithheld, pr as ProviderRegistry, pt as resourcesNamingDeclaredParameter, qc as resolveAutoAssetStorage, qi as malformedLocalOutputsWarning, qn as unsupportedFinalSnapshotError, qo as recordLogOnlyValue, qr as refuseUnreadableCdkCrossAccountRefs, qs as importableOutputKeys, qt as planFailedOps, r as computeImplicitDeleteEdges, ra as malformedRenderedContainersWarning, rc as buildAssetRedirectMap, ri as envCredentialsAreAssumedRole, rl as CFN_TEMPLATE_URL_LIMIT, rn as inheritProducerRegions, rt as createReadOnlyAttributeHealerFactory, s as listNestedTemplateRows, sa as malformedScrubResourceEntriesRefusalMessage, sc as AssetModeResolver, sl as CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION, ss as pathCrossesDottedKey, st as green, t as DeployEngine, ta as malformedOutputsRefusalMessage, tc as stringifyValue, ti as applyCallerIdentityCredentials, tl as ssmResolvedValueType, tn as findNestedStackTypeChanges, to as renderStatefulReason, tr as withCreateTokenLedger, ts as scrubResourceRecord, u as conditionFingerprint, ua as refuseDivergentRecordRegionForDestroy, uc as ensureAssetStorage, ui as classifyReplaySecretRegion, ul as PARTITION_TABLE, un as DeploymentEventsReader, us as recordNestedStackParameterExpressions, ut as computeParameterTaint, va as refuseMalformedOutputsForDestroy, vc as buildDockerImage, vi as carriesDynamicReference, vl as hasPlainPrototype, vn as carriedExportAliasExposure, vo as templateResourceTypes, vr as readsNoEchoDeleteValues, vs as recordMaskOnlyValue, vt as displacedPhysicalIdShown, w as deferredServiceTokenWarning, wa as refuseMalformedResourceEntriesForImportSave, wc as finchSecretArgvRefusal, wi as isStalePlaceholderArnAttribute, wl as renderAssemblyPathEscape, wn as collectPublishedOutputNames, wo as DagBuilder, wr as customResourceResponseExpirationWarning, ws as STATE_SOURCED_BASELINE_RULES, wt as revertedNestedRowIds, xa as refuseMalformedResourceEntriesForDeploy, xc as describeDockerExecFailure, xi as keepsSecretReferenceToken, xl as absoluteAssemblyPathEscape, xn as isWholeDynamicReferenceValue, xr as withPrintingSecrets, xs as recordNoEchoParameterFreshValue, xt as nestedChildStackName$1, ya as refuseMalformedResourceAttributesForOrphan, yc as resolveDockerContextDirectory, yi as carriesFetchableDynamicReference, yl as nullPrototypeRecord, yn as exportNameNoEchoParameters, yo as describeTypeWithThrottleRetry, yr as isCustomResourceType$1, ys as recordMaskOnlyValuesIn, yt as dropSettledNestedJournals, za as repairMalformedResourcesForReadOnly, zc as AssetManifestLoader, zi as hasReadableOrphans, zn as ATOMIC_FINAL_SNAPSHOT_TYPES, zo as liveMatchesUnresolvedTokenFrame, zs as isNotImplemented, zt as destroyStackRecordsView } from "./deploy-engine-HKmcD4Kn.js";
|
|
6
|
-
import { t as getCdkdVersion } from "./version-
|
|
3
|
+
import { $n as isAmbiguousOutcomeError, $t as credentialFingerprint, Bn as withheldTargetClause, D as VALUE_NOT_SHOWN, Dn as TIMEOUT_FLAG_RESOURCE_TYPE, E as assertRegionMatch, En as withErrorHandling, Ft as buildLockContentionMessage, G as runDeleteAttempt, Hn as setPasteableVerbFlags, Ht as CUSTOM_RESOURCE_RESPONSE_PREFIX, In as plainOrDescribed, It as forceQuitRecoveryClause, Jt as setPasteableAwsProfile, Kt as producerCoordinateKey, Ln as quotedOrDescribed, Lt as formatLockExpiry, Nn as isInertUnquoted, Nt as UNREPRODUCIBLE_LOCK_CLAUSE, P as remedyLogicalId, Pn as pasteableCommand, Pt as buildForceUnlockCommand, Qt as clientDefaultsFor, Rn as shellBoundedDisplay, Rt as formatLockOperation, Sn as SynthesisError, T as RESOURCE_NOT_FOUND, Tn as normalizeAwsError, Ut as DEFAULT_STATE_PREFIX, Vn as setPasteableRunFlags, Wt as injectiveKey, Xt as ambientClientDefaults, Yt as withPasteableAwsProfile, Z as isAwsCliLiteral, Zt as ambientCredentialConfig, _n as ResourceTimeoutError, ar as isMarkedNonRetryable, bn as StackTerminationProtectionError, cn as IntrinsicResolutionRefusalError, en as AccountIdUnavailableError, ft as logicalIdShown, gn as ProvisioningError, hn as PartialFailureError, in as CrossAccountSecretRefusalError, it as isInterruptedWaitError, jn as commandHole, kn as SHELL_ACTIVE_WHY, ln as LocalInvokeBuildError$1, mn as NestedStackChildDirectDestroyError, mt as resourceTypeShown, n as RESOLVED_PREVIOUS_PRINCIPAL_KEYS, nn as CdkdError, nr as isTransientServerError, nt as endCommandInterruptScope, on as DeployCancelledError, or as isThrottlingError, pn as MalformedProducerRecordRefusalError, qt as producerRecordKey, rr as retryClassificationText, rt as interruptWatchListenerCount, s as readRecordedPrincipals, sn as DynamicReferenceRegionAmbiguousError, sr as markNonRetryable, t as IAM_PRINCIPAL_NAME, tr as isRetryableTransientError, tt as beginCommandInterruptScope, un as LocalStartServiceError, vn as ResourceUpdateNotSupportedError, xn as StateError, yn as StackHasActiveImportsError, zn as shellQuote, zt as formatLockOwner } from "./iam-policy-targets-Pn2m0R67.js";
|
|
4
|
+
import { a as setAssumedRoleCredentials, n as awsClientDefaults, r as getAssumedRoleCredentials, u as formatAuthority } from "./aws-client-defaults-DBXBcg0J.js";
|
|
5
|
+
import { $a as MULTI_REGION_RECREATE_BLOCKED_TYPES, $c as resolveStateBucketWithDefault, $i as malformedOrphanRowsKeptWarning, $o as maskSecretsInText, $r as isIamRoleArn, $s as orphansAfterRollback, $t as seedsDeleteFirstGuard, A as noEchoComparisonForTemplate, Aa as refuseMalformedResourcePropertiesForOrphan, Ac as isDockerClientEnvKey, Al as injectedAwsRegionValue, An as journaledOrphanPrintingBag, Ao as maskReadbackAtCoordinates, Ar as UNSPECIFIED_SKIP_REASON, As as TEMPLATE_SOURCED_RULES, At as dropFailedHint, Ba as repairMalformedResourcesForReadOnly, Bc as stripControlChars, Bi as hasReadableOrphans, Bn as PRE_DELETE_SNAPSHOT_TYPES, Bo as liveMatchesUnresolvedTokenFrame, Bs as crossPrefixDeniedWarning, C as recordRetainedForReadoption, Ca as refuseMalformedResourceEntriesForDestroy, Cc as describeDockerCapturedOutput, Ci as AWS_NO_VALUE, Cl as ownValue, Cn as collectDeclaredOutputNames, Cr as CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID, Cs as recordNoEchoAttributeValues, D as withResourceDeadline, Da as refuseMalformedResourcePropertiesForDestroy, Dc as finchSecretArgvRefusal, Dl as renderAssemblyPathEscape, Dn as DEFAULT_RESOURCE_TIMEOUT_MS, Do as canonicalCoordinates, Dr as slowCcOperationTimeoutMs, Ds as STATE_SOURCED_BASELINE_RULES, E as serviceTokenBlockingReason, Ea as refuseMalformedResourceEntriesForOrphan, Ec as dockerSpawnEnvWithSensitive, Ei as refStateLookupFromResource, El as displayAssemblyPath, En as bindingSkippedOutputs, Eo as TemplateParser, Er as CloudControlProvider, Es as wholeStringLeavesOf, Et as collectNestedChildUnaddressed, F as PROTECTION_PROPERTY_BY_TYPE, Fa as repairMalformedOrphanRecordsForReadOnly, Fc as redactedDockerCause, Fi as UNREADABLE_ORPHANS_CONTAINER_ROW, Fn as secretNamedRecordNeedles, Fo as noEchoOutputsComparison, Fr as isWaitAbandonedError, Fs as S3StateBackend, Ft as sameJournaledOrphans, Ga as findActionableSilentDrops, Gc as synthesisStatusMessage, Gi as malformedDriftResourcePropertiesWarning, Gn as isFinalSnapshotError, Go as logOnlyValueCount, Gr as IntrinsicFunctionResolver, Gs as describeRegionValueKind, Gt as isJournaledOrphan, Ha as unreadableOrphanRecords, Hc as AssetManifestLoader, Hi as hasReadableResources, Hn as ccRoutedFinalSnapshotError, Ho as createUnionSecretMasker, Hs as isNotImplemented, Ht as removeProtectionTypeList, I as isProtectionValueActive, Ia as repairMalformedOrphansForReadOnly, Ic as runDockerForeground, Ii as UNREADABLE_RESOURCES_MAP_ROW, In as stateSecretNameNeedles, Is as rebuildClientForBucketRegion, It as replayFailedOperations, Jc as loadCdkJson, Ji as malformedLocalOutputsWarning, Jn as maskingRetryLogger, Jo as recordLogOnlyValue, Jr as refuseUnreadableCdkCrossAccountRefs, Js as hasReasonlessBaselineRefusal, Jt as planRollback, Kc as getDefaultStateBucketName, Ki as malformedExportNamesWarning, Kn as refusesFinalSnapshot, Ko as printingCorpusOf, Kr as poisonRenderedSpellingsCollidingIn, Ks as exportNamesCarriedFrom, Kt as isReplacementOrphan, L as perType, La as repairMalformedOutputsForReadOnly, Lc as runDockerStreaming, Li as accountArgs, Ln as storedSecretNameNeedles, Lo as readbackPathFor, Ls as CrossPrefixReadError, Lt as replayRollback, M as noEchoParameterNamesOf, Ma as refuseMalformedResourcesForDestroy, Mc as partitionSensitiveEnv, Mi as JSON_LISTING_HOLE_VALUE, Ml as resolveBucketRegion, Mn as orphanRecordsPrintingBag, Mo as maskedLeafCoordinatesOf, Mr as deleteLeftInPlace, Ms as isSingleDynamicReferenceToken, Mt as journaledOrphanLines, N as recordedProtectionEvidence, Na as refuseMalformedResourcesForExport, Nc as redactDockerArgvValues, Ni as STATE_REGION_DIVERGED, Nn as secretNamePrintingBag, No as noEchoCoordinatesOf, Nr as deleteSkipReason, Ns as LockManager, Nt as loadJournaledOrphans, O as diffSecurity, Oa as refuseMalformedResourcePropertiesForDrift, Oc as formatDockerLoginError, Oi as withSharedDrainBudget, Ol as resolveAssemblyPath, On as DEFAULT_RESOURCE_WARN_AFTER_MS, Oo as isMarkedCoordinate, Os as STATE_SOURCED_CROSS_GENERATION_RULES, Ot as withNestedStackContext, P as recordedProtectionNote, Pa as refuseMalformedState, Pc as redactedCause, Pi as STATE_RESOURCES_MALFORMED, Pn as secretNamePrintingBags, Po as noEchoLeavesOf, Ps as isLockInfoExpired, Pt as makeForeignHolderScan, Qa as shownType, Qc as resolveSkipPrefix, Qi as malformedOrphanRecordsWarning, Qo as maskSecretsInError, Qr as explicitRoleArnOrThrow, Qs as isReadableBag, Qt as resolveReplacementOldType, R as readProtection, Ra as repairMalformedResourceEntriesForReadOnly, Rc as warnFinchArgvExposure, Ri as deployRefusesOrphanRowsReason, Rn as extractDeploymentEventError, Ro as readsNoEchoSource, Rs as CrossPrefixScanCache, S as keptForReadoption, Sa as refuseMalformedResourceEntriesForDeploy, Sc as resolveDockerContextDirectory, Si as keepsSecretReferenceToken, Sl as nullPrototypeRecord, Sn as noEchoParameterValueSeed, Sr as withPrintingSecrets, Ss as recordMaskOnlyValuesIn, St as recordDisplacedSkips, T as findServiceTokenRefusals, Ta as refuseMalformedResourceEntriesForImportSave, Tc as describeDockerFailure, Ti as isStalePlaceholderArnAttribute, Tl as describeFileReadFailure, Tn as isExportAliasCollision, To as DagBuilder, Tr as customResourceResponseExpirationWarning, Ts as recordProvenPublicExpression, Tt as withNestedRevertRun, Ua as unreadableResourceEntries, Uc as getDockerImageBySourceHash, Ui as isReadableOrphanRecord, Un as createPreDeleteFinalSnapshot, Uo as hasMaskableValues, Ur as DiffCalculator, Us as splitImportedOps, Ut as recordAfterRollbackUpdate, Va as unpreviewableOrphanRecords, Vc as stripForDisplay, Vi as hasReadableOutputs, Vn as buildFinalSnapshotIdentifier, Vo as carryLogOnlyValues, Vs as isAccessDenied, Vt as withStackRecords, Wa as withheldAccountClause, Wc as Synthesizer, Wi as isReadableResourceEntry, Wn as effectiveDeletionPolicy, Wo as literalSplitDelimitersOf, Wr as INTRINSIC_KEYS, Ws as acceptedCreateOnlyDropsOf, Wt as demoteSupersededOrphans, Xa as hasNoCloudControlHandlers, Xc as resolveAutoAssetStorage, Xi as malformedLocalResourcesWarning, Xn as findDestructiveChanges, Xo as createSecretMasker, Xr as assertFlagRoleArn, Xs as importableOutputKeys, Xt as recordUnderIdIsNotOwn, Ya as NO_CC_HANDLERS_REASON, Yc as resolveApp, Yi as malformedLocalResourceEntriesWarning, Yn as constructPathOf, Yo as shareLogOnlyValues, Yr as applyRoleArnIfSet, Ys as hasUnverifiableParameterRefusal, Yt as recheckFailedPlan, Za as findReplacedReadersOfRecreateTargets, Zc as resolveCaptureObservedState, Zi as malformedOrphanRecordsRefusalMessage, Zn as formatDestructiveChange, Zo as errorCauseChain, Zr as assertSendableRoleArn, Zs as importableOutputs, Zt as replacementNeverSwapped, _ as makeCanonicalizePropertiesFn, _a as refuseMalformedOrphansForOrphan, _c as readBootstrapMarkerBody, _i as getAccountInfo, _l as StageLoadError, _n as secretSafeKeyDisplay, _r as wouldReturnToSdkProvider, _s as recordPhysicalNameCopy, _t as displacedOpClause, a as findNestedTemplateTreeDefect, aa as malformedResourceEntriesWarning, ac as WorkGraph, al as CFN_TEMPLATE_BODY_LIMIT, as as withPhysicalNameCopies, at as cyan, ba as refuseMalformedResourceAttributesForOrphan, bc as buildDenyExternalAccessPolicy, bi as carriesFetchableDynamicReference, bl as hasOwnKey, bn as exportNameSecretExposure, bo as describeTypeWithThrottleRetry, br as isCustomResourceType$1, bs as provenPublicValue, c as renderNestedTemplateTreeDefect, ca as malformedScrubResourceEntriesRefusalMessage, cc as loadPublishableAssetManifest, cl as findLargeInlineResources, cn as updatePartialMessage, cs as dynamicReferenceTokens, ct as red, d as conditionInputsFrom, da as refuseDivergentRecordRegionForDestroy, dc as BOOTSTRAP_MARKER_PREFIX, di as classifyReplaySecretRegion, dl as decodeListingKey, dn as DeploymentEventsStore, ds as identityKeyFor, dt as namesAnyDeclaredParameter, ea as malformedOrphansRefusalMessage, ec as orphansCarriedFrom, ei as sendableAssumeRoleCommand, el as resolveStateBucketWithDefaultAndSource, en as orphanDeleteNeedsIdentity, eo as isStatefulRecreateTargetForReplace, er as ledgerForStack, es as markSameGenerationBag, f as parentSuppliedValues, fc as assertAssetBucketRegion, fi as producerRegionsFromState, fl as expectedOwnerParam, fn as WITHHELD_NAME_DISPLAY, fs as inheritNestedStackParameterAssociations, ft as reachableDivergentParameters, g as mergeNoChangeOutputs, ga as refuseMalformedOrphansForDestroy, gc as parseBootstrapMarker, gi as parameterTypeMayLoseSecretIdentity, gl as AssemblyReader, gn as secretBearingStateKeyWarning, gr as isCustomResource, gt as NESTED_PENDING_PARENT_REASON, h as keptWholeReasonText, ha as refuseMalformedOrphans, hc as isCrossRegionRedirect, hi as isUnboundTemplateParameter, hl as derivePartitionAndUrlSuffix, hn as secretBearing, hr as ccBrokenReason, hs as physicalNameCopiesOf, ht as planOrphanAdoption, i as childTemplateLoader, ia as malformedRenderedContainersWarning, ic as stringifyValue, ii as envCredentialsAreAssumedRole, il as ssmResolvedValueType, is as scrubResourceRecord, it as bold, j as noEchoExactEchoLeavesOf, ja as refuseMalformedResourcesForDeploy, jc as isMalformedEnvKey, ji as declaresNoEcho, jn as maskEventTextWithBoundBags, jo as maskWholeValue, jr as deleteIndeterminateGuards, js as WHOLE_DYNAMIC_REFERENCE_PATTERN, jt as isHandledOrphan, k as noEchoAttributeNamesOf, ka as refuseMalformedResourcePropertiesForExport, kc as getDockerCmd, ki as parameterInputsFor, kl as injectAwsRegion, kn as completedReplayEntries, ko as maskAtCoordinates, kr as RollbackInlinePolicyWriters, ks as STATE_SOURCED_READBACK_RULES, kt as deleteJournaledOrphans, l as templateIdentity, la as malformedStateRefusalMessage, lc as rewriteTemplateAssetReferences, ll as uploadCfnTemplate, ln as updatePartialReason, ls as isUncertifiedBaselineMaskPosition, lt as yellow, m as isSecretBearingReferenceString, ma as refuseMalformedOrphanRecordsForDestroy, mc as getBootstrapMarkerKey, mi as coerceParameterTypedValue, ml as canonicalizeRegion, mn as exportAliasCollisionScrubWarning, mr as ProviderRegistry, mt as makeSiblingClaimReader, n as IMPLICIT_DELETE_DEPENDENCIES, na as malformedOutputsRefusalMessage, nc as AssetPublisher, ni as applyCallerIdentityCredentials, nl as stateBucketExistenceConfirmed, no as renderStatefulReason, nr as withCreateTokenLedger, nt as formatResourceLine, o as isAbsoluteAssetPath, oa as malformedResourcePropertiesWarning, oc as buildAssetRedirectMap, ol as CFN_TEMPLATE_URL_LIMIT, ot as gray, p as readRecordedConditionVerdicts, pa as refuseMalformedOrphanRecords, pc as ensureAssetStorage, pi as regionLessSecretName, pl as PARTITION_TABLE, pn as displayTextOrWithheld, pr as CC_BROKEN_REASON, ps as recordNestedStackParameterExpressions, pt as resourcesNamingDeclaredParameter, qa as unwrittenCreateOnlyReplacement, qc as getLegacyStateBucketName, qi as malformedExportSourceWarning, qn as unsupportedFinalSnapshotError, qo as recordLogOnlyParameterValue, qr as producerLookupOver, qs as hasReadableExportSet, qt as planFailedOps, r as computeImplicitDeleteEdges, ra as malformedOutputsWarning, rc as isSensitiveAttributeName, ri as callerEnvCredentials, rl as warnDeprecatedNoPrefixCliFlag, rn as inheritProducerRegions, rs as redactSecretsForState, rt as createReadOnlyAttributeHealerFactory, s as listNestedTemplateRows, sa as malformedResourcesWarning, sc as createAssetRedirectResolver, sl as MIGRATE_TMP_PREFIX, ss as DYNAMIC_REFERENCE_TOKEN_SCAN, st as green, t as DeployEngine, ta as malformedOrphansWarning, tc as shouldRetainResource, ti as AWS_CREDENTIAL_ENV_KEYS, tl as resolveUseCdkBootstrapAssets, tn as findNestedStackTypeChanges, to as isStatefulRecreateTargetSync, u as conditionFingerprint, ua as previewableOrphanRecords, uc as AssetModeResolver, ul as CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION, un as DeploymentEventsReader, us as pathCrossesDottedKey, ut as computeParameterTaint, va as refuseMalformedOutputs, vc as validateAssetBucketName, vi as isImpossibleEmptyStoredAttribute, vl as processStackMessages, vn as carriedExportAliasExposure, vo as prefetchCreateOnlyPropertyPaths, vr as TemplateNoEchoReresolver, vs as splitGetAttStringForm, vt as displacedPhysicalIdShown, w as deferredServiceTokenWarning, wa as refuseMalformedResourceEntriesForImport, wc as describeDockerExecFailure, wi as cfnRefValueFromPhysicalId, wl as absoluteAssemblyPathEscape, wn as collectPublishedOutputNames, wr as applyCustomResourceResponseExpiration, ws as recordNoEchoParameterFreshValue, wt as revertedNestedRowIds, xa as refuseMalformedResourceEntries, xc as buildDockerImage, xi as isNamelessDynamicReferenceError, xl as hasPlainPrototype, xn as isWholeDynamicReferenceValue, xo as withRetry, xs as recordMaskOnlyValue, xt as nestedChildStackName$1, ya as refuseMalformedOutputsForDestroy, yc as validateContainerRepoName, yi as carriesDynamicReference, yl as defineOwnKey, yn as exportNameNoEchoParameters, yo as templateResourceTypes, yr as readsNoEchoDeleteValues, ys as carriesSecretMask, yt as dropSettledNestedJournals, za as repairMalformedResourcePropertiesForReadOnly, zc as escapeRegExp, zi as displayLogicalId, zn as ATOMIC_FINAL_SNAPSHOT_TYPES, zo as valueAtCoordinate, zs as applyCrossPrefixScan, zt as destroyStackRecordsView } from "./deploy-engine-4K_B3N08.js";
|
|
6
|
+
import { t as getCdkdVersion } from "./version-DUCWZskc.js";
|
|
7
7
|
import { randomBytes, randomUUID } from "node:crypto";
|
|
8
8
|
import { CopyObjectCommand, CreateBucketCommand, DeleteBucketCommand, DeleteObjectsCommand, GetBucketLocationCommand, GetObjectCommand, HeadBucketCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchBucket, NotFound, PutBucketEncryptionCommand, PutBucketPolicyCommand, PutBucketVersioningCommand, PutObjectCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
|
|
9
9
|
import { GetRoleCommand, GetUserCommand } from "@aws-sdk/client-iam";
|
|
@@ -2561,7 +2561,7 @@ function collectCrossStackRefs(node, onRef, unconditional) {
|
|
|
2561
2561
|
//#region src/provisioning/register-providers.ts
|
|
2562
2562
|
let providerClasses;
|
|
2563
2563
|
function loadProviderClasses() {
|
|
2564
|
-
providerClasses ??= import("./provider-classes
|
|
2564
|
+
providerClasses ??= import("./provider-classes-DxHQcC1K.js");
|
|
2565
2565
|
return providerClasses;
|
|
2566
2566
|
}
|
|
2567
2567
|
function registerAllProviders(registry, classes) {
|
|
@@ -3386,7 +3386,7 @@ Force-quit: stack locks may not be released. If the next run reports a lock, run
|
|
|
3386
3386
|
const syncValidation = validateRecreateTargets({
|
|
3387
3387
|
template: stackInfo.template,
|
|
3388
3388
|
state: stateForRecreateCheck?.state ?? {
|
|
3389
|
-
version:
|
|
3389
|
+
version: 12,
|
|
3390
3390
|
stackName: stackInfo.stackName,
|
|
3391
3391
|
region: stackRegion,
|
|
3392
3392
|
resources: {},
|
|
@@ -3421,7 +3421,7 @@ Force-quit: stack locks may not be released. If the next run reports a lock, run
|
|
|
3421
3421
|
const replacedReaders = await findReplacedReadersOfRecreateTargets({
|
|
3422
3422
|
template: stackInfo.template,
|
|
3423
3423
|
state: stateForRecreateCheck?.state ?? {
|
|
3424
|
-
version:
|
|
3424
|
+
version: 12,
|
|
3425
3425
|
stackName: stackInfo.stackName,
|
|
3426
3426
|
region: stackRegion,
|
|
3427
3427
|
resources: {},
|
|
@@ -4238,10 +4238,10 @@ async function drainTemplateUploads(cleanups, stateBucket, labels) {
|
|
|
4238
4238
|
logger.warn(`Failed to delete ${labels.what} from '${stateBucket}'${labels.when ? ` ${labels.when}` : ""}. Clean up manually under prefix '${MIGRATE_TMP_PREFIX}/'. Cause: ${msg}`);
|
|
4239
4239
|
}
|
|
4240
4240
|
}
|
|
4241
|
-
async function
|
|
4241
|
+
async function prepareCloudFormationStackRetirement(options) {
|
|
4242
4242
|
const logger = getLogger();
|
|
4243
4243
|
const { cfnStackName, cfnClient, yes, stateBucket, s3ClientOpts, resourceTree } = options;
|
|
4244
|
-
if (resourceTree && resourceTree.stackName !== cfnStackName) throw new Error(`
|
|
4244
|
+
if (resourceTree && resourceTree.stackName !== cfnStackName) throw new Error(`prepareCloudFormationStackRetirement: caller-supplied resourceTree.stackName='${resourceTree.stackName}' does not match cfnStackName='${cfnStackName}'. The tree's root must be the stack being retired.`);
|
|
4245
4245
|
logger.info(`[1/4] Inspecting CloudFormation stack '${cfnStackName}'...`);
|
|
4246
4246
|
const stack = (await cfnClient.send(new DescribeStacksCommand({ StackName: cfnStackName }))).Stacks?.[0];
|
|
4247
4247
|
if (!stack) throw new Error(`CloudFormation stack '${cfnStackName}' not found.`);
|
|
@@ -4281,7 +4281,7 @@ async function retireCloudFormationStack(options) {
|
|
|
4281
4281
|
if (!yes) {
|
|
4282
4282
|
let proceed = false;
|
|
4283
4283
|
try {
|
|
4284
|
-
proceed = await confirmPrompt$6(`Set DeletionPolicy=Retain and UpdateReplacePolicy=Retain on every resource in CloudFormation stack '${cfnStackName}',
|
|
4284
|
+
proceed = await confirmPrompt$6(`Set DeletionPolicy=Retain and UpdateReplacePolicy=Retain on every resource in CloudFormation stack '${cfnStackName}', and delete the stack once cdkd state is written? AWS resources will NOT be deleted.`);
|
|
4285
4285
|
} finally {
|
|
4286
4286
|
if (!proceed) await drainTemplateUploads(nestedCleanups, stateBucket, {
|
|
4287
4287
|
what: "temporary nested-template upload",
|
|
@@ -4289,16 +4289,17 @@ async function retireCloudFormationStack(options) {
|
|
|
4289
4289
|
});
|
|
4290
4290
|
}
|
|
4291
4291
|
if (!proceed) {
|
|
4292
|
-
logger.info("CloudFormation stack retirement cancelled.
|
|
4292
|
+
logger.info("CloudFormation stack retirement cancelled. The stack is unchanged and will not be deleted.");
|
|
4293
4293
|
return { outcome: "cancelled" };
|
|
4294
4294
|
}
|
|
4295
4295
|
}
|
|
4296
|
+
let templateUpdated = false;
|
|
4296
4297
|
if (!modified) {
|
|
4297
4298
|
logger.info(`[2/4] Template already has Retain on every resource — skipping UpdateStack.`);
|
|
4298
4299
|
await drainTemplateUploads(nestedCleanups, stateBucket, { what: "temporary nested-template upload" });
|
|
4299
4300
|
} else {
|
|
4300
4301
|
logger.info(`[2/4] Injected DeletionPolicy=Retain and UpdateReplacePolicy=Retain.`);
|
|
4301
|
-
if (newBody.length > TEMPLATE_URL_LIMIT) throw new Error(`Modified template is ${newBody.length} bytes, exceeds the CloudFormation UpdateStack TemplateURL limit (${TEMPLATE_URL_LIMIT}). cdkd state has
|
|
4302
|
+
if (newBody.length > TEMPLATE_URL_LIMIT) throw new Error(`Modified template is ${newBody.length} bytes, exceeds the CloudFormation UpdateStack TemplateURL limit (${TEMPLATE_URL_LIMIT}). cdkd state has not been written; shrink or split the template and retry. ` + MANUAL_RETIREMENT_ROUTE);
|
|
4302
4303
|
let updateInput;
|
|
4303
4304
|
let s3Cleanup;
|
|
4304
4305
|
if (newBody.length <= TEMPLATE_BODY_LIMIT) updateInput = { TemplateBody: newBody };
|
|
@@ -4331,29 +4332,100 @@ async function retireCloudFormationStack(options) {
|
|
|
4331
4332
|
updateRan = true;
|
|
4332
4333
|
} catch (err) {
|
|
4333
4334
|
const msg = describeAwsFailure(err).detail;
|
|
4334
|
-
if (/No updates are to be performed/i.test(msg)) logger.info(` CloudFormation reports no updates needed
|
|
4335
|
-
else throw err;
|
|
4335
|
+
if (/No updates are to be performed/i.test(msg)) logger.info(` CloudFormation reports no updates needed.`);
|
|
4336
|
+
else throw new RetainUpdateFailedError(cfnStackName, "rejected", err);
|
|
4337
|
+
}
|
|
4338
|
+
if (updateRan) {
|
|
4339
|
+
try {
|
|
4340
|
+
await waitUntilStackUpdateComplete({
|
|
4341
|
+
client: cfnClient,
|
|
4342
|
+
maxWaitTime: 1800,
|
|
4343
|
+
minDelay: 5,
|
|
4344
|
+
maxDelay: 10
|
|
4345
|
+
}, { StackName: cfnStackName });
|
|
4346
|
+
} catch (err) {
|
|
4347
|
+
throw new RetainUpdateFailedError(cfnStackName, "unfinished", err);
|
|
4348
|
+
}
|
|
4349
|
+
templateUpdated = true;
|
|
4336
4350
|
}
|
|
4337
|
-
if (updateRan) await waitUntilStackUpdateComplete({
|
|
4338
|
-
client: cfnClient,
|
|
4339
|
-
maxWaitTime: 1800,
|
|
4340
|
-
minDelay: 5,
|
|
4341
|
-
maxDelay: 10
|
|
4342
|
-
}, { StackName: cfnStackName });
|
|
4343
4351
|
} finally {
|
|
4344
4352
|
await drainTemplateUploads([...s3Cleanup ? [s3Cleanup] : [], ...nestedCleanups], stateBucket, { what: "temporary template upload" });
|
|
4345
4353
|
}
|
|
4346
4354
|
}
|
|
4355
|
+
return {
|
|
4356
|
+
outcome: "ready",
|
|
4357
|
+
templateUpdated
|
|
4358
|
+
};
|
|
4359
|
+
}
|
|
4360
|
+
const SUPERSEDED_COPY_HINT = "If that update completes (now or later), CloudFormation may have replaced resources; each superseded copy is RETAINED and managed by neither CloudFormation nor cdkd. Find them in the stack's events: rows whose reason reads \"Requested update requires the creation of a new physical resource\" name the old physical id. A re-run does not report them, because the template then already carries the Retain policies and no update runs.";
|
|
4361
|
+
const MANUAL_RETIREMENT_ROUTE = "To retire the stack by hand: (1) UpdateStack with DeletionPolicy=Retain and UpdateReplacePolicy=Retain on every resource, (2) `cdkd import` without --migrate-from-cloudformation (it reads the physical ids from a same-named CloudFormation stack), (3) DeleteStack. The import must adopt every resource before you delete the stack: check its summary.";
|
|
4362
|
+
function describeStackWaiterFailure(error) {
|
|
4363
|
+
if (!(error instanceof Error)) return void 0;
|
|
4364
|
+
let parsed;
|
|
4365
|
+
try {
|
|
4366
|
+
parsed = JSON.parse(error.message);
|
|
4367
|
+
} catch {
|
|
4368
|
+
return;
|
|
4369
|
+
}
|
|
4370
|
+
if (typeof parsed !== "object" || parsed === null || !("state" in parsed)) return void 0;
|
|
4371
|
+
const result = parsed;
|
|
4372
|
+
const state = typeof result.state === "string" ? result.state : "FAILURE";
|
|
4373
|
+
const reason = result.reason;
|
|
4374
|
+
const stacks = typeof reason === "object" && reason !== null && "Stacks" in reason ? reason.Stacks : void 0;
|
|
4375
|
+
const stack = Array.isArray(stacks) && typeof stacks[0] === "object" ? stacks[0] : void 0;
|
|
4376
|
+
const status = typeof stack?.StackStatus === "string" ? stack.StackStatus : void 0;
|
|
4377
|
+
const statusReason = typeof stack?.StackStatusReason === "string" ? stack.StackStatusReason : void 0;
|
|
4378
|
+
return `waiter ${state}` + (status ? `, stack status ${status}` : typeof reason === "string" ? `: ${reason}` : "") + (statusReason ? ` (${statusReason})` : "");
|
|
4379
|
+
}
|
|
4380
|
+
function cfnFailureText(error) {
|
|
4381
|
+
const waiter = describeStackWaiterFailure(error);
|
|
4382
|
+
if (waiter !== void 0 && error instanceof Error) {
|
|
4383
|
+
try {
|
|
4384
|
+
Object.defineProperty(error, "message", {
|
|
4385
|
+
value: waiter,
|
|
4386
|
+
writable: true,
|
|
4387
|
+
configurable: true,
|
|
4388
|
+
enumerable: false
|
|
4389
|
+
});
|
|
4390
|
+
Object.defineProperty(error, "stack", {
|
|
4391
|
+
value: `${error.name}: ${waiter}`,
|
|
4392
|
+
writable: true,
|
|
4393
|
+
configurable: true,
|
|
4394
|
+
enumerable: false
|
|
4395
|
+
});
|
|
4396
|
+
} catch {}
|
|
4397
|
+
return waiter;
|
|
4398
|
+
}
|
|
4399
|
+
const failure = describeAwsFailure(error);
|
|
4400
|
+
if (failure.redacted) getLogger().debug(safeMsg`CloudFormation failure detail: ${failure.detail}`);
|
|
4401
|
+
return failure.summary.replace(/\.+$/, "");
|
|
4402
|
+
}
|
|
4403
|
+
var RetainUpdateFailedError = class extends Error {
|
|
4404
|
+
cause;
|
|
4405
|
+
constructor(cfnStackName, kind, cause) {
|
|
4406
|
+
const text = cfnFailureText(cause);
|
|
4407
|
+
super(safeMsg`The Retain-policy UpdateStack on CloudFormation stack ${displaySafe(cfnStackName)} ` + (kind === "rejected" ? "was rejected" : "did not complete") + safeMsg`: ${text}. cdkd state has not been written. ` + (kind === "unfinished" ? `${SUPERSEDED_COPY_HINT} ` : "") + "Re-run the same command once the cause is fixed. When the cause is a replacement CloudFormation cannot perform (a custom-named resource whose update requires replacing it), the same update by hand fails too: give that resource no custom name or a new one, or take it out of the stack, then re-run. To retire the stack by hand: (1) UpdateStack with DeletionPolicy=Retain and UpdateReplacePolicy=Retain on every resource, (2) `cdkd import` without --migrate-from-cloudformation (it reads the physical ids from a same-named CloudFormation stack), (3) DeleteStack. The import must adopt every resource before you delete the stack: check its summary.");
|
|
4408
|
+
this.name = "RetainUpdateFailedError";
|
|
4409
|
+
this.cause = cause;
|
|
4410
|
+
}
|
|
4411
|
+
};
|
|
4412
|
+
async function deleteRetiredCloudFormationStack(cfnStackName, cfnClient) {
|
|
4413
|
+
const logger = getLogger();
|
|
4347
4414
|
logger.info(`[4/4] Deleting CloudFormation stack '${cfnStackName}' (resources retained)...`);
|
|
4348
|
-
|
|
4349
|
-
|
|
4350
|
-
|
|
4351
|
-
|
|
4352
|
-
|
|
4353
|
-
|
|
4354
|
-
|
|
4415
|
+
try {
|
|
4416
|
+
await cfnClient.send(new DeleteStackCommand({ StackName: cfnStackName }));
|
|
4417
|
+
await waitUntilStackDeleteComplete({
|
|
4418
|
+
client: cfnClient,
|
|
4419
|
+
maxWaitTime: 1800,
|
|
4420
|
+
minDelay: 5,
|
|
4421
|
+
maxDelay: 10
|
|
4422
|
+
}, { StackName: cfnStackName });
|
|
4423
|
+
} catch (err) {
|
|
4424
|
+
const error = /* @__PURE__ */ new Error(safeMsg`CloudFormation stack ${displaySafe(cfnStackName)} was NOT confirmed deleted: ` + safeMsg`${cfnFailureText(err)}. cdkd state is written and correct, and every resource ` + "carries DeletionPolicy=Retain, so deleting the stack deletes no resource. Delete the stack by hand once its cause is resolved (for example an export another stack still imports).");
|
|
4425
|
+
error.cause = err;
|
|
4426
|
+
throw error;
|
|
4427
|
+
}
|
|
4355
4428
|
logger.info(`✓ CloudFormation stack '${cfnStackName}' retired. AWS resources are now solely managed by cdkd.`);
|
|
4356
|
-
return { outcome: modified ? "retired" : "no-template-change" };
|
|
4357
4429
|
}
|
|
4358
4430
|
async function uploadTemplateForUpdateStack(args) {
|
|
4359
4431
|
return uploadCfnTemplate({
|
|
@@ -4457,7 +4529,7 @@ async function injectRetainPoliciesRecursiveInternal(templateBody, cfnStackName,
|
|
|
4457
4529
|
if (!childTpl.TemplateBody) throw new Error(`GetTemplate returned no body for nested stack '${logicalId}' (physicalId='${childNode.physicalId}', parent='${cfnStackName}').`);
|
|
4458
4530
|
const childResult = await injectRetainPoliciesRecursiveInternal(childTpl.TemplateBody, childNode.stackName, childNode, deps, cleanups);
|
|
4459
4531
|
if (childResult.modified) {
|
|
4460
|
-
if (childResult.body.length > TEMPLATE_URL_LIMIT) throw new Error(`Modified nested-stack template for '${logicalId}' is ${childResult.body.length} bytes, exceeds the CloudFormation TemplateURL limit (${TEMPLATE_URL_LIMIT}). cdkd state has
|
|
4532
|
+
if (childResult.body.length > TEMPLATE_URL_LIMIT) throw new Error(`Modified nested-stack template for '${logicalId}' is ${childResult.body.length} bytes, exceeds the CloudFormation TemplateURL limit (${TEMPLATE_URL_LIMIT}). cdkd state has not been written; shrink the child template and retry, or retire the stack manually: (1) UpdateStack with Retain policies on the parent and each child, (2) cdkd import, (3) DeleteStack on the parent.`);
|
|
4461
4533
|
const uploaded = await uploadCfnTemplate({
|
|
4462
4534
|
bucket: deps.stateBucket,
|
|
4463
4535
|
body: childResult.body,
|
|
@@ -4507,8 +4579,25 @@ async function walkCfnStackTree(stackName, physicalId, cfnClient) {
|
|
|
4507
4579
|
nested
|
|
4508
4580
|
};
|
|
4509
4581
|
}
|
|
4582
|
+
function findReplacedCfnResources(before, after, nestedPath = []) {
|
|
4583
|
+
const replaced = [];
|
|
4584
|
+
for (const [logicalId, beforeId] of before.resources) {
|
|
4585
|
+
const afterId = after.resources.get(logicalId);
|
|
4586
|
+
if (afterId !== void 0 && afterId !== beforeId) replaced.push({
|
|
4587
|
+
nestedPath,
|
|
4588
|
+
logicalId,
|
|
4589
|
+
before: beforeId,
|
|
4590
|
+
after: afterId
|
|
4591
|
+
});
|
|
4592
|
+
}
|
|
4593
|
+
for (const [childLogicalId, beforeChild] of before.nested) {
|
|
4594
|
+
const afterChild = after.nested.get(childLogicalId);
|
|
4595
|
+
if (afterChild) replaced.push(...findReplacedCfnResources(beforeChild, afterChild, [...nestedPath, childLogicalId]));
|
|
4596
|
+
}
|
|
4597
|
+
return replaced;
|
|
4598
|
+
}
|
|
4510
4599
|
async function confirmPrompt$6(prompt) {
|
|
4511
|
-
return confirmOrRefuse(prompt, { refusal: "The CloudFormation stack retirement confirmation prompt cannot run in a non-interactive environment. Pass -y / --yes on cdkd import --migrate-from-cloudformation. Alternatively, run it from a real terminal.
|
|
4600
|
+
return confirmOrRefuse(prompt, { refusal: "The CloudFormation stack retirement confirmation prompt cannot run in a non-interactive environment. Pass -y / --yes on cdkd import --migrate-from-cloudformation. Alternatively, run it from a real terminal. Nothing has been written yet: cdkd state and the CloudFormation stack are unchanged, so re-running with -y / --yes is the whole recovery." });
|
|
4512
4601
|
}
|
|
4513
4602
|
async function tryGetCloudFormationResourceMap(stackName, cfnClient) {
|
|
4514
4603
|
const logger = getLogger();
|
|
@@ -4707,7 +4796,7 @@ async function loadStateOrEmpty(stackName, region, stateBackend, refusalRecovery
|
|
|
4707
4796
|
region,
|
|
4708
4797
|
resources: {},
|
|
4709
4798
|
outputs: {},
|
|
4710
|
-
version:
|
|
4799
|
+
version: 12,
|
|
4711
4800
|
lastModified: Date.now()
|
|
4712
4801
|
},
|
|
4713
4802
|
unreadable: [],
|
|
@@ -19031,7 +19120,7 @@ async function rollbackCommand(stackArg, options) {
|
|
|
19031
19120
|
const { skippedOutputs: _droppedByRollback, ...carriedState } = baseState;
|
|
19032
19121
|
const next = () => ({
|
|
19033
19122
|
...carriedState,
|
|
19034
|
-
version:
|
|
19123
|
+
version: 12,
|
|
19035
19124
|
region,
|
|
19036
19125
|
resources: { ...stateResources },
|
|
19037
19126
|
...orphansAfterRollback(baseState, mintedOrphans),
|
|
@@ -20656,46 +20745,54 @@ async function importCommand(stackArg, options) {
|
|
|
20656
20745
|
}
|
|
20657
20746
|
}));
|
|
20658
20747
|
try {
|
|
20659
|
-
const
|
|
20660
|
-
|
|
20661
|
-
|
|
20662
|
-
|
|
20663
|
-
|
|
20664
|
-
|
|
20665
|
-
|
|
20666
|
-
|
|
20667
|
-
|
|
20668
|
-
|
|
20669
|
-
|
|
20670
|
-
|
|
20671
|
-
|
|
20748
|
+
const collectRows = async () => {
|
|
20749
|
+
const collected = [];
|
|
20750
|
+
for (const { logicalId, resource } of resources) {
|
|
20751
|
+
if (selectiveMode && !overrides.has(logicalId)) {
|
|
20752
|
+
collected.push({
|
|
20753
|
+
logicalId,
|
|
20754
|
+
resourceType: resource.Type,
|
|
20755
|
+
outcome: "skipped-out-of-scope",
|
|
20756
|
+
reason: "not in --resource / --resource-mapping (use --auto to include)"
|
|
20757
|
+
});
|
|
20758
|
+
continue;
|
|
20759
|
+
}
|
|
20760
|
+
if (resource.Type === "AWS::CloudFormation::Stack" && migrationTree && migrationTree.nested.has(logicalId) && accountIdForNestedSynth) {
|
|
20761
|
+
collected.push({
|
|
20762
|
+
logicalId,
|
|
20763
|
+
resourceType: resource.Type,
|
|
20764
|
+
outcome: "imported",
|
|
20765
|
+
physicalId: synthesizeNestedStackArn(targetRegion, accountIdForNestedSynth, stackInfo.stackName, logicalId)
|
|
20766
|
+
});
|
|
20767
|
+
continue;
|
|
20768
|
+
}
|
|
20769
|
+
const outcome = await importOne({
|
|
20672
20770
|
logicalId,
|
|
20673
|
-
|
|
20674
|
-
|
|
20675
|
-
|
|
20771
|
+
resource,
|
|
20772
|
+
stackName: stackInfo.stackName,
|
|
20773
|
+
region: targetRegion,
|
|
20774
|
+
providerRegistry,
|
|
20775
|
+
override: overrides.get(logicalId),
|
|
20776
|
+
overrides
|
|
20676
20777
|
});
|
|
20677
|
-
|
|
20778
|
+
collected.push(outcome);
|
|
20678
20779
|
}
|
|
20679
|
-
|
|
20680
|
-
|
|
20681
|
-
|
|
20682
|
-
stackName: stackInfo.stackName,
|
|
20683
|
-
region: targetRegion,
|
|
20684
|
-
providerRegistry,
|
|
20685
|
-
override: overrides.get(logicalId),
|
|
20686
|
-
overrides
|
|
20687
|
-
});
|
|
20688
|
-
rows.push(outcome);
|
|
20689
|
-
}
|
|
20780
|
+
return collected;
|
|
20781
|
+
};
|
|
20782
|
+
let rows = await collectRows();
|
|
20690
20783
|
printSummary(rows);
|
|
20691
20784
|
if (options.recordResourceMapping) writeRecordedMapping(options.recordResourceMapping, rows);
|
|
20692
|
-
const
|
|
20693
|
-
|
|
20785
|
+
const assembleStackState = () => {
|
|
20786
|
+
const assembled = buildStackState(stackInfo.stackName, targetRegion, rows, templateParser, stateTemplate, existingState, selectiveMode);
|
|
20787
|
+
refuseMalformedResourceEntriesForImportSave(assembled, stackInfo.stackName, targetRegion, lockRecovery);
|
|
20788
|
+
return assembled;
|
|
20789
|
+
};
|
|
20790
|
+
let stackState = assembleStackState();
|
|
20694
20791
|
if (options.dryRun) {
|
|
20695
20792
|
logger.info("--dry-run: state will NOT be written. Re-run without --dry-run to apply.");
|
|
20696
20793
|
return;
|
|
20697
20794
|
}
|
|
20698
|
-
|
|
20795
|
+
let importedRows = rows.filter((r) => r.outcome === "imported");
|
|
20699
20796
|
if (importedRows.length === 0) {
|
|
20700
20797
|
logger.warn("No resources were successfully imported. State will not be written.");
|
|
20701
20798
|
return;
|
|
@@ -20710,8 +20807,54 @@ async function importCommand(stackArg, options) {
|
|
|
20710
20807
|
return;
|
|
20711
20808
|
}
|
|
20712
20809
|
}
|
|
20810
|
+
let retireCfnStack = false;
|
|
20811
|
+
let nestedReplaced = [];
|
|
20812
|
+
if (migrationCfnStackName) {
|
|
20813
|
+
warnMigrationOrphans(logger, resources.length, importedRows.length);
|
|
20814
|
+
const preparation = await prepareCloudFormationStackRetirement({
|
|
20815
|
+
cfnStackName: migrationCfnStackName,
|
|
20816
|
+
cfnClient: regionClients.cloudFormation,
|
|
20817
|
+
yes: options.yes,
|
|
20818
|
+
stateBucket,
|
|
20819
|
+
...options.profile && { s3ClientOpts: { profile: options.profile } },
|
|
20820
|
+
...migrationTree && { resourceTree: migrationTree }
|
|
20821
|
+
});
|
|
20822
|
+
retireCfnStack = preparation.outcome === "ready";
|
|
20823
|
+
if (preparation.outcome === "ready" && preparation.templateUpdated && migrationTree) {
|
|
20824
|
+
let updatedTree;
|
|
20825
|
+
try {
|
|
20826
|
+
updatedTree = await getCloudFormationResourceTree(migrationCfnStackName, regionClients.cloudFormation);
|
|
20827
|
+
} catch (err) {
|
|
20828
|
+
throw new Error(safeMsg`--migrate-from-cloudformation: the Retain-policy update completed, but ` + safeMsg`re-reading the stack's resources failed: ${cfnFailureText(err)}. ` + `cdkd state was not written and the CloudFormation stack was not deleted. ` + SUPERSEDED_COPY_HINT);
|
|
20829
|
+
}
|
|
20830
|
+
const replaced = findReplacedCfnResources(migrationTree, updatedTree).filter((r) => r.nestedPath.length > 0 || templateLogicalIds.has(r.logicalId) && template.Resources[r.logicalId]?.Type !== "AWS::CloudFormation::Stack");
|
|
20831
|
+
migrationTree = updatedTree;
|
|
20832
|
+
nestedReplaced = replaced.filter((r) => r.nestedPath.length > 0);
|
|
20833
|
+
for (const r of replaced) {
|
|
20834
|
+
const where = r.nestedPath.length > 0 ? safeMsg`nested stack ${r.nestedPath.map((p) => logicalIdShown(p)).join(" > ")}: ` : "";
|
|
20835
|
+
const pinned = r.nestedPath.length === 0 && overrides.has(r.logicalId) && overrides.get(r.logicalId) !== r.before;
|
|
20836
|
+
if (r.nestedPath.length === 0 && overrides.get(r.logicalId) === r.before) overrides.set(r.logicalId, r.after);
|
|
20837
|
+
logger.warn(safeMsg`CloudFormation replaced ${where}${logicalIdShown(r.logicalId)} while applying ` + safeMsg`the Retain policies: the stack now holds ${displaySafe(r.after)}` + (pinned ? safeMsg`; cdkd keeps the physical id you passed with --resource, so ${displaySafe(r.after)} ` + `(kept by DeletionPolicy=Retain) is managed by neither CloudFormation nor cdkd either. ` : `, which cdkd adopts. `) + safeMsg`The replaced ${displaySafe(r.before)} is RETAINED and managed by neither ` + `CloudFormation nor cdkd; delete it yourself once you no longer need it.`);
|
|
20838
|
+
}
|
|
20839
|
+
if (replaced.some((r) => r.nestedPath.length === 0)) {
|
|
20840
|
+
rows = await collectRows();
|
|
20841
|
+
printSummary(rows);
|
|
20842
|
+
stackState = assembleStackState();
|
|
20843
|
+
const adoptedBefore = importedRows.map((r) => r.logicalId);
|
|
20844
|
+
importedRows = rows.filter((r) => r.outcome === "imported");
|
|
20845
|
+
const adoptedNow = new Set(importedRows.map((r) => r.logicalId));
|
|
20846
|
+
if (options.recordResourceMapping) writeRecordedMapping(options.recordResourceMapping, rows);
|
|
20847
|
+
refuseLostReplacedRows(adoptedBefore.filter((id) => !adoptedNow.has(id)), "cdkd state was not written and the CloudFormation stack was not deleted.");
|
|
20848
|
+
if (importedRows.length !== adoptedBefore.length) {
|
|
20849
|
+
logger.warn(safeMsg`--migrate-from-cloudformation: the re-import after the replacement adopts ` + safeMsg`${importedRows.length} resource(s); ${adoptedBefore.length} were confirmed.`);
|
|
20850
|
+
warnMigrationOrphans(logger, resources.length, importedRows.length);
|
|
20851
|
+
}
|
|
20852
|
+
}
|
|
20853
|
+
}
|
|
20854
|
+
}
|
|
20713
20855
|
const deployedParameters = !namesAnyDeclaredParameter(stateTemplate) ? void 0 : migrationCfnStackName !== void 0 ? await readDeployedParameters(migrationCfnStackName, regionClients.cloudFormation, logger, displaySafe(migrationCfnStackName)) : await readDeployedParameters(stackInfo.stackName, regionClients.cloudFormation, logger, displaySafe(stackInfo.stackName), { absentStackIsNoSource: true });
|
|
20714
|
-
|
|
20856
|
+
const unsafeObservedBaselineLogicalIds = await withSharedDrainBudget(() => resolveImportedProperties(stackState, stateTemplate, targetRegion, stateBackend, logger, deployedParameters));
|
|
20857
|
+
await captureObservedForImportedResources(stackState, providerRegistry, logger, unsafeObservedBaselineLogicalIds, rebuiltLogicalIdsFrom(rows, stateTemplate));
|
|
20715
20858
|
const saveOptions = {};
|
|
20716
20859
|
if (existingEtag) saveOptions.expectedEtag = existingEtag;
|
|
20717
20860
|
if (migrationPending) saveOptions.migrateLegacy = true;
|
|
@@ -20726,6 +20869,8 @@ async function importCommand(stackArg, options) {
|
|
|
20726
20869
|
parentRegion: targetRegion,
|
|
20727
20870
|
parentNestedTemplates: stackInfo.nestedTemplates ?? nullPrototypeRecord(),
|
|
20728
20871
|
parentTree: migrationTree,
|
|
20872
|
+
nestedPath: [],
|
|
20873
|
+
replaced: nestedReplaced,
|
|
20729
20874
|
stateBackend,
|
|
20730
20875
|
lockManager,
|
|
20731
20876
|
providerRegistry,
|
|
@@ -20736,18 +20881,7 @@ async function importCommand(stackArg, options) {
|
|
|
20736
20881
|
assetRedirect,
|
|
20737
20882
|
cfnClient: regionClients.cloudFormation
|
|
20738
20883
|
});
|
|
20739
|
-
if (migrationCfnStackName)
|
|
20740
|
-
const orphaned = resources.length - importedRows.length;
|
|
20741
|
-
if (orphaned > 0) logger.warn(`--migrate-from-cloudformation: ${orphaned} of ${resources.length} template resource(s) were NOT imported into cdkd. After the CloudFormation stack is retired, those resources remain in AWS but are unmanaged by both CloudFormation and cdkd.`);
|
|
20742
|
-
await retireCloudFormationStack({
|
|
20743
|
-
cfnStackName: migrationCfnStackName,
|
|
20744
|
-
cfnClient: regionClients.cloudFormation,
|
|
20745
|
-
yes: options.yes,
|
|
20746
|
-
stateBucket,
|
|
20747
|
-
...options.profile && { s3ClientOpts: { profile: options.profile } },
|
|
20748
|
-
...migrationTree && { resourceTree: migrationTree }
|
|
20749
|
-
});
|
|
20750
|
-
}
|
|
20884
|
+
if (migrationCfnStackName && retireCfnStack) await deleteRetiredCloudFormationStack(migrationCfnStackName, regionClients.cloudFormation);
|
|
20751
20885
|
} finally {
|
|
20752
20886
|
await lockManager.releaseLock(stackInfo.stackName, targetRegion).catch((err) => {
|
|
20753
20887
|
logger.warn(`Failed to release lock: ${describeAwsFailure(err).detail}`);
|
|
@@ -21178,12 +21312,13 @@ function buildStackState(stackName, region, rows, templateParser, template, exis
|
|
|
21178
21312
|
}
|
|
21179
21313
|
if (namesParameter?.failedClosed !== void 0) getLogger().debug(`The template's parameter dependence could not be judged (${namesParameter.failedClosed}): every prior observed-baseline refusal recorded without a reason is carried as an unverifiable-parameter refusal.`);
|
|
21180
21314
|
return {
|
|
21181
|
-
version:
|
|
21315
|
+
version: 12,
|
|
21182
21316
|
stackName,
|
|
21183
21317
|
region,
|
|
21184
21318
|
resources,
|
|
21185
21319
|
outputs: existingState?.outputs ?? {},
|
|
21186
21320
|
...existingState ? exportNamesCarriedFrom(existingState) : { exportNames: [] },
|
|
21321
|
+
...existingState?.outputReferenceProvenance !== void 0 && { outputReferenceProvenance: existingState.outputReferenceProvenance },
|
|
21187
21322
|
...existingState ? orphansCarriedFrom(existingState) : {},
|
|
21188
21323
|
lastModified: Date.now()
|
|
21189
21324
|
};
|
|
@@ -21462,6 +21597,15 @@ function resolveDiscardsNonInertSubtree(node, conditions, mappings) {
|
|
|
21462
21597
|
}
|
|
21463
21598
|
return keys.some((key) => resolveDiscardsNonInertSubtree(record[key], conditions, mappings));
|
|
21464
21599
|
}
|
|
21600
|
+
function warnMigrationOrphans(logger, total, imported, where) {
|
|
21601
|
+
const orphaned = total - imported;
|
|
21602
|
+
if (orphaned <= 0) return;
|
|
21603
|
+
logger.warn(`--migrate-from-cloudformation: ${orphaned} of ${total} template resource(s)${where ? safeMsg` in ${where}` : ""} were NOT imported into cdkd. After the CloudFormation stack is retired, those resources remain in AWS but are unmanaged by both CloudFormation and cdkd.`);
|
|
21604
|
+
}
|
|
21605
|
+
function refuseLostReplacedRows(lost, written) {
|
|
21606
|
+
if (lost.length === 0) return;
|
|
21607
|
+
throw new Error(safeMsg`--migrate-from-cloudformation: after CloudFormation replaced resources, ` + safeMsg`${lost.map((id) => logicalIdShown(id)).join(", ")} could no longer be imported. ` + `${written} Re-run the same command once the new resource is readable: the re-run runs no update, so it cannot tell the resource was replaced, and a resource it still cannot import is left managed by neither tool after the stack is retired.`);
|
|
21608
|
+
}
|
|
21465
21609
|
function printSummary(rows) {
|
|
21466
21610
|
const logger = getLogger();
|
|
21467
21611
|
const counts = {
|
|
@@ -21495,7 +21639,7 @@ async function confirmPrompt(prompt) {
|
|
|
21495
21639
|
return confirmOrRefuse(prompt, { refusal: "The cdkd import confirmation prompt cannot run in a non-interactive environment. Pass -y / --yes to confirm the state write, or run the command from a real terminal." });
|
|
21496
21640
|
}
|
|
21497
21641
|
function createImportCommand() {
|
|
21498
|
-
const cmd = new Command("import").description("Adopt already-deployed AWS resources into cdkd state. Reads the CDK app to find logical IDs, resource types, and dependencies. With no flags, imports every resource, resolving each physical id from the template's physical-name property and then from a same-named CloudFormation stack's DescribeStackResources. With --resource / --resource-mapping, only the listed resources are imported (CDK CLI parity); pass --auto to auto-resolve the rest.").argument("[stack]", "Stack to import. Optional when the synthesized app contains exactly one stack.").option("--resource <id=physical>", "Explicit physical-id override for one logical ID. Repeatable. When at least one --resource is given, only listed resources are imported (CDK CLI parity). Pass --auto to also auto-resolve everything else.", collectMultiple, []).option("--resource-mapping <file>", "Path to a JSON file of {logicalId: physicalId} overrides (CDK CLI `cdk import --resource-mapping` compatible). Implies selective mode unless --auto is set. Mutually exclusive with --resource-mapping-inline.").option("--resource-mapping-inline <json>", "Inline JSON object of {logicalId: physicalId} overrides (CDK CLI `cdk import --resource-mapping-inline` compatible). Same shape as --resource-mapping but supplied as a string — useful for non-TTY CI scripts that do not want a separate file. Implies selective mode unless --auto is set. Mutually exclusive with --resource-mapping.").option("--record-resource-mapping <file>", "After cdkd resolves every logical ID (via --resource / --resource-mapping / auto-resolution), write the resulting {logicalId: physicalId} map to <file> as JSON. Useful in auto / hybrid mode for capturing the auto-resolved mapping and feeding it back as --resource-mapping in non-interactive CI re-runs. Written before the confirmation prompt (so the user can review the file before saying \"yes\") and even when the user says \"no\". Mirrors `cdk import --record-resource-mapping`.").option("--auto", "Hybrid mode: when explicit overrides are supplied, ALSO auto-resolve every other resource in the template. Without this flag, --resource / --resource-mapping behave as a whitelist (CDK CLI parity).", false).option("--dry-run", "Show planned imports without writing state", false).option("--force", "Confirm a destructive write to existing state. Required for auto / whole-stack import when state already exists (rebuilds the entire resource map). Also required in selective mode if a listed override would overwrite a resource already in state. Not needed for a pure selective merge (adding new resources without touching unlisted entries).", false).option("--migrate-from-cloudformation [cfn-stack-name]", "
|
|
21642
|
+
const cmd = new Command("import").description("Adopt already-deployed AWS resources into cdkd state. Reads the CDK app to find logical IDs, resource types, and dependencies. With no flags, imports every resource, resolving each physical id from the template's physical-name property and then from a same-named CloudFormation stack's DescribeStackResources. With --resource / --resource-mapping, only the listed resources are imported (CDK CLI parity); pass --auto to auto-resolve the rest.").argument("[stack]", "Stack to import. Optional when the synthesized app contains exactly one stack.").option("--resource <id=physical>", "Explicit physical-id override for one logical ID. Repeatable. When at least one --resource is given, only listed resources are imported (CDK CLI parity). Pass --auto to also auto-resolve everything else.", collectMultiple, []).option("--resource-mapping <file>", "Path to a JSON file of {logicalId: physicalId} overrides (CDK CLI `cdk import --resource-mapping` compatible). Implies selective mode unless --auto is set. Mutually exclusive with --resource-mapping-inline.").option("--resource-mapping-inline <json>", "Inline JSON object of {logicalId: physicalId} overrides (CDK CLI `cdk import --resource-mapping-inline` compatible). Same shape as --resource-mapping but supplied as a string — useful for non-TTY CI scripts that do not want a separate file. Implies selective mode unless --auto is set. Mutually exclusive with --resource-mapping.").option("--record-resource-mapping <file>", "After cdkd resolves every logical ID (via --resource / --resource-mapping / auto-resolution), write the resulting {logicalId: physicalId} map to <file> as JSON. Useful in auto / hybrid mode for capturing the auto-resolved mapping and feeding it back as --resource-mapping in non-interactive CI re-runs. Written before the confirmation prompt (so the user can review the file before saying \"yes\") and even when the user says \"no\". Mirrors `cdk import --record-resource-mapping`.").option("--auto", "Hybrid mode: when explicit overrides are supplied, ALSO auto-resolve every other resource in the template. Without this flag, --resource / --resource-mapping behave as a whitelist (CDK CLI parity).", false).option("--dry-run", "Show planned imports without writing state", false).option("--force", "Confirm a destructive write to existing state. Required for auto / whole-stack import when state already exists (rebuilds the entire resource map). Also required in selective mode if a listed override would overwrite a resource already in state. Not needed for a pure selective merge (adding new resources without touching unlisted entries).", false).option("--migrate-from-cloudformation [cfn-stack-name]", "Retire the named CloudFormation stack (deletes the CFn stack record; AWS resources are NOT deleted): inject DeletionPolicy=Retain and UpdateReplacePolicy=Retain on every resource via UpdateStack, write cdkd state from the physical IDs the stack holds after that update, then DeleteStack. cdkd takes over management. Pass without a value to use the cdkd stack name as the CFn stack name (the typical case for a CDK app that was previously deployed via `cdk deploy`); pass an explicit value when the CFn stack name differs.").addOption(useCdkBootstrapAssetsOption).action(withErrorHandling(importCommand));
|
|
21499
21643
|
[
|
|
21500
21644
|
...commonOptions,
|
|
21501
21645
|
...appOptions,
|
|
@@ -21617,6 +21761,10 @@ async function importNestedStackChildrenRecursive(args) {
|
|
|
21617
21761
|
});
|
|
21618
21762
|
rows.push(outcome);
|
|
21619
21763
|
}
|
|
21764
|
+
const childPath = [...args.nestedPath, childLogicalId];
|
|
21765
|
+
const childImported = new Set(rows.filter((r) => r.outcome === "imported").map((r) => r.logicalId));
|
|
21766
|
+
refuseLostReplacedRows(args.replaced.filter((r) => r.nestedPath.length === childPath.length && r.nestedPath.every((p, i) => p === childPath[i]) && childTemplateLogicalIds.has(r.logicalId) && !childImported.has(r.logicalId)).map((r) => r.logicalId), safeMsg`cdkd state for nested stack ${displaySafe(childStackName)} was not written ` + "(the parent's and earlier nested stacks' were), and the CloudFormation stack was not deleted; the re-run needs --force.");
|
|
21767
|
+
warnMigrationOrphans(logger, childResources.length, childImported.size, childStackName);
|
|
21620
21768
|
const childStackState = buildStackState(childStackName, childRegion, rows, templateParser, childStateTemplate, null, false);
|
|
21621
21769
|
childStackState.parentStack = parentStackName;
|
|
21622
21770
|
childStackState.parentLogicalId = childLogicalId;
|
|
@@ -21632,6 +21780,8 @@ async function importNestedStackChildrenRecursive(args) {
|
|
|
21632
21780
|
parentRegion: childRegion,
|
|
21633
21781
|
parentNestedTemplates: indexGrandchildTemplatePaths(childStateTemplate, childTemplatePath),
|
|
21634
21782
|
parentTree: childTreeNode,
|
|
21783
|
+
nestedPath: [...args.nestedPath, childLogicalId],
|
|
21784
|
+
replaced: args.replaced,
|
|
21635
21785
|
stateBackend,
|
|
21636
21786
|
lockManager,
|
|
21637
21787
|
providerRegistry,
|
|
@@ -29193,4 +29343,4 @@ function collectVerbFlags(program) {
|
|
|
29193
29343
|
|
|
29194
29344
|
//#endregion
|
|
29195
29345
|
export { canonicalizeIpProtocolValue as a, buildProgram, resolveSecretDerivedPrincipals as i, runDestroyForStack as n, resolvedResourceTimeoutMs as o, isResolvableSecretPrincipalList as r, canonicalizeIpv4Cidr as t };
|
|
29196
|
-
//# sourceMappingURL=program-
|
|
29346
|
+
//# sourceMappingURL=program-BgsCaZFy.js.map
|