@go-to-k/cdkd 0.281.7 → 0.281.8
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-Lj_P_wtb.js → asg-provider-BhomRJhR.js} +2 -2
- package/dist/{asg-provider-Lj_P_wtb.js.map → asg-provider-BhomRJhR.js.map} +1 -1
- package/dist/cli.js +116 -22
- package/dist/cli.js.map +1 -1
- package/dist/{deploy-engine-B8Qo1vPU.js → deploy-engine-OafbuSbc.js} +3 -3
- package/dist/{deploy-engine-B8Qo1vPU.js.map → deploy-engine-OafbuSbc.js.map} +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { $ as requireConfigArray, $t as expectedOwnerParam, A as green, An as withErrorHandling, At as getDockerCmd, B as slowCcOperationTimeoutMs, Bt as resolveAutoAssetStorage, C as MULTI_REGION_RECREATE_BLOCKED_TYPES, Cn as StackHasActiveImportsError, Ct as ensureAssetStorage, D as bold, Dt as validateContainerRepoName, E as formatResourceLine, Et as validateAssetBucketName, F as clearOnUpdateRemoval, Ft as Synthesizer, G as refStateLookupFromResource, Gt as resolveUseCdkBootstrapAssets, H as isTerminationProtectionPropagationError, Ht as resolveSkipPrefix, I as ProviderRegistry, It as synthesisStatusMessage, J as resolveExplicitPhysicalId, Jt as CFN_TEMPLATE_BODY_LIMIT, K as WAFv2WebACLProvider, Kt as stateBucketExistenceConfirmed, L as findActionableSilentDrops, Lt as getDefaultStateBucketName, M as yellow, Mt as runDockerStreaming, N as IAMRoleProvider, Nt as AssetManifestLoader, O as cyan, Ot as buildDockerImage, P as collectInlinePolicyNamesManagedBySiblings, Pt as getDockerImageBySourceHash, Q as replayWarn, Qt as uploadCfnTemplate, R as findSilentDropProperties, Rt as getLegacyStateBucketName, S as extractDeploymentEventError, Sn as ResourceUpdateNotSupportedError, St as BOOTSTRAP_MARKER_PREFIX, T as renderStatefulReason, Tt as parseBootstrapMarker, U as IntrinsicFunctionResolver, Ut as resolveStateBucketWithDefault, V as disableInstanceApiTermination, Vt as resolveCaptureObservedState, W as cfnRefValueFromPhysicalId, Wt as resolveStateBucketWithDefaultAndSource, X as configStringRefusal, Xt as MIGRATE_TMP_PREFIX, Y as assertRegionMatch, Yt as CFN_TEMPLATE_URL_LIMIT, Z as readConfigString, Zt as findLargeInlineResources, _ as createPreDeleteFinalSnapshot, _n as MissingCdkCliError, _t as buildAssetRedirectMap, a as DeploymentEventsStore, an as getAwsClients, at as withRetry, b as unsupportedFinalSnapshotError, bn as ProvisioningError, bt as rewriteTemplateAssetReferences, c as replayFailedOperations, ct as DagBuilder, d as IMPLICIT_DELETE_DEPENDENCIES, dt as S3StateBackend, en as AssemblyReader, et as requireConfigObject, f as computeImplicitDeleteEdges, fn as DeployCancelledError, ft as rebuildClientForBucketRegion, g as ccRoutedFinalSnapshotError, gt as WorkGraph, h as buildFinalSnapshotIdentifier, hn as LocalStartServiceError, ht as stringifyValue, i as DeploymentEventsReader, in as AwsClients, it as describeTypeWithThrottleRetry, j as red, jt as runDockerForeground, k as gray, kn as normalizeAwsError, kt as formatDockerLoginError, l as replayRollback, ln as CdkdError, lt as TemplateParser, m as PRE_DELETE_SNAPSHOT_TYPES, mn as LocalMigrateError, mt as AssetPublisher, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nt as applyRoleArnIfSet, o as planFailedOps, on as resetAwsClients, ot as isRetryableTransientError, p as ATOMIC_FINAL_SNAPSHOT_TYPES, pn as LocalInvokeBuildError$1, pt as shouldRetainResource, q as normalizeAwsTagsToCfn, qt as warnDeprecatedNoPrefixCliFlag, r as DeployEngine, rn as resolveBucketRegion, rt as DiffCalculator, s as planRollback, sn as setAwsClients, st as isThrottlingError, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as processStackMessages, tt as requireConfigString, u as withResourceDeadline, ut as LockManager, v as isFinalSnapshotError, vn as NestedStackChildDirectDestroyError, vt as createAssetRedirectResolver, w as isStatefulRecreateTargetSync, wn as StackTerminationProtectionError, wt as getBootstrapMarkerKey, x as makeCanonicalizePropertiesFn, xn as ResourceTimeoutError, xt as AssetModeResolver, y as refusesFinalSnapshot, yn as PartialFailureError, yt as loadPublishableAssetManifest, z as CloudControlProvider, zt as resolveApp } from "./deploy-engine-
|
|
2
|
+
import { $ as requireConfigArray, $t as expectedOwnerParam, A as green, An as withErrorHandling, At as getDockerCmd, B as slowCcOperationTimeoutMs, Bt as resolveAutoAssetStorage, C as MULTI_REGION_RECREATE_BLOCKED_TYPES, Cn as StackHasActiveImportsError, Ct as ensureAssetStorage, D as bold, Dt as validateContainerRepoName, E as formatResourceLine, Et as validateAssetBucketName, F as clearOnUpdateRemoval, Ft as Synthesizer, G as refStateLookupFromResource, Gt as resolveUseCdkBootstrapAssets, H as isTerminationProtectionPropagationError, Ht as resolveSkipPrefix, I as ProviderRegistry, It as synthesisStatusMessage, J as resolveExplicitPhysicalId, Jt as CFN_TEMPLATE_BODY_LIMIT, K as WAFv2WebACLProvider, Kt as stateBucketExistenceConfirmed, L as findActionableSilentDrops, Lt as getDefaultStateBucketName, M as yellow, Mt as runDockerStreaming, N as IAMRoleProvider, Nt as AssetManifestLoader, O as cyan, Ot as buildDockerImage, P as collectInlinePolicyNamesManagedBySiblings, Pt as getDockerImageBySourceHash, Q as replayWarn, Qt as uploadCfnTemplate, R as findSilentDropProperties, Rt as getLegacyStateBucketName, S as extractDeploymentEventError, Sn as ResourceUpdateNotSupportedError, St as BOOTSTRAP_MARKER_PREFIX, T as renderStatefulReason, Tt as parseBootstrapMarker, U as IntrinsicFunctionResolver, Ut as resolveStateBucketWithDefault, V as disableInstanceApiTermination, Vt as resolveCaptureObservedState, W as cfnRefValueFromPhysicalId, Wt as resolveStateBucketWithDefaultAndSource, X as configStringRefusal, Xt as MIGRATE_TMP_PREFIX, Y as assertRegionMatch, Yt as CFN_TEMPLATE_URL_LIMIT, Z as readConfigString, Zt as findLargeInlineResources, _ as createPreDeleteFinalSnapshot, _n as MissingCdkCliError, _t as buildAssetRedirectMap, a as DeploymentEventsStore, an as getAwsClients, at as withRetry, b as unsupportedFinalSnapshotError, bn as ProvisioningError, bt as rewriteTemplateAssetReferences, c as replayFailedOperations, ct as DagBuilder, d as IMPLICIT_DELETE_DEPENDENCIES, dt as S3StateBackend, en as AssemblyReader, et as requireConfigObject, f as computeImplicitDeleteEdges, fn as DeployCancelledError, ft as rebuildClientForBucketRegion, g as ccRoutedFinalSnapshotError, gt as WorkGraph, h as buildFinalSnapshotIdentifier, hn as LocalStartServiceError, ht as stringifyValue, i as DeploymentEventsReader, in as AwsClients, it as describeTypeWithThrottleRetry, j as red, jt as runDockerForeground, k as gray, kn as normalizeAwsError, kt as formatDockerLoginError, l as replayRollback, ln as CdkdError, lt as TemplateParser, m as PRE_DELETE_SNAPSHOT_TYPES, mn as LocalMigrateError, mt as AssetPublisher, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nt as applyRoleArnIfSet, o as planFailedOps, on as resetAwsClients, ot as isRetryableTransientError, p as ATOMIC_FINAL_SNAPSHOT_TYPES, pn as LocalInvokeBuildError$1, pt as shouldRetainResource, q as normalizeAwsTagsToCfn, qt as warnDeprecatedNoPrefixCliFlag, r as DeployEngine, rn as resolveBucketRegion, rt as DiffCalculator, s as planRollback, sn as setAwsClients, st as isThrottlingError, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as processStackMessages, tt as requireConfigString, u as withResourceDeadline, ut as LockManager, v as isFinalSnapshotError, vn as NestedStackChildDirectDestroyError, vt as createAssetRedirectResolver, w as isStatefulRecreateTargetSync, wn as StackTerminationProtectionError, wt as getBootstrapMarkerKey, x as makeCanonicalizePropertiesFn, xn as ResourceTimeoutError, xt as AssetModeResolver, y as refusesFinalSnapshot, yn as PartialFailureError, yt as loadPublishableAssetManifest, z as CloudControlProvider, zt as resolveApp } from "./deploy-engine-OafbuSbc.js";
|
|
3
3
|
import { a as getLiveRenderer, c as PATTERN_B_RESOURCE_TYPES, d as generateResourceNameWithFallback, h as withStackName, i as runStackBuffered, m as withSkipPrefix, n as getLogger, o as PATTERN_B_NAME_OPTIONS, s as PATTERN_B_NAME_PROPERTIES, u as generateResourceName } from "./logger-zRrlbaQt.js";
|
|
4
|
-
import { t as ASGProvider } from "./asg-provider-
|
|
4
|
+
import { t as ASGProvider } from "./asg-provider-BhomRJhR.js";
|
|
5
5
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
6
6
|
import { createHash, randomBytes, randomUUID } from "node:crypto";
|
|
7
7
|
import { CopyObjectCommand, 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, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchBucket, PutBucketAccelerateConfigurationCommand, PutBucketAnalyticsConfigurationCommand, PutBucketCorsCommand, PutBucketEncryptionCommand, PutBucketIntelligentTieringConfigurationCommand, PutBucketInventoryConfigurationCommand, PutBucketLifecycleConfigurationCommand, PutBucketLoggingCommand, PutBucketMetricsConfigurationCommand, PutBucketNotificationConfigurationCommand, PutBucketOwnershipControlsCommand, PutBucketPolicyCommand, PutBucketReplicationCommand, PutBucketTaggingCommand, PutBucketVersioningCommand, PutBucketWebsiteCommand, PutObjectCommand, PutObjectLockConfigurationCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
|
|
@@ -11746,23 +11746,28 @@ var LambdaLayerVersionProvider = class {
|
|
|
11746
11746
|
* ## What this does NOT cover
|
|
11747
11747
|
*
|
|
11748
11748
|
* The claim is "every composite packer this change reaches", not "every `|`
|
|
11749
|
-
* join in the tree".
|
|
11749
|
+
* join in the tree". One deliberate exclusion, recorded so the scope is not
|
|
11750
11750
|
* read as wider than it is:
|
|
11751
11751
|
*
|
|
11752
|
-
* - **`route53-provider.ts`'s three packers** (`AWS::Route53::RecordSet` and
|
|
11753
|
-
* its siblings) are NOT guarded — the file was owned by a parallel lane when
|
|
11754
|
-
* this shipped. The exposure there is bounded rather than absent:
|
|
11755
|
-
* `parseRecordSetCompositeId` requires EXACTLY three parts, so a four-part
|
|
11756
|
-
* id is REJECTED rather than mis-decoded into a different record. That is
|
|
11757
|
-
* the loud failure mode, not the silent-wrong-resource one this helper
|
|
11758
|
-
* exists for — but the deploy still records an id nothing can decode, so the
|
|
11759
|
-
* type belongs here whenever that lane lands. Tracked in issue
|
|
11760
|
-
* [#1711](https://github.com/go-to-k/cdkd/issues/1711).
|
|
11761
11752
|
* - **`intrinsic-function-resolver.ts`'s `|` joins** (the WAFv2 and
|
|
11762
11753
|
* `AWS::Events::Rule` arms) are out of scope by KIND, not by ownership: they
|
|
11763
11754
|
* build a `Ref` VALUE for the template resolver, never a physicalId cdkd
|
|
11764
11755
|
* records and later splits. Nothing decodes them, so an ambiguous join has
|
|
11765
11756
|
* no decode site to go wrong at.
|
|
11757
|
+
*
|
|
11758
|
+
* ## Guarding the PACKERS is not the whole story
|
|
11759
|
+
*
|
|
11760
|
+
* A packer that refuses ambiguity does nothing about an id an EARLIER binary
|
|
11761
|
+
* already recorded, or one an `import` was handed — and a type whose decoder is
|
|
11762
|
+
* loose will mis-decode both. Issue #1711 is where that was learned:
|
|
11763
|
+
* `AWS::Route53::RecordSet`'s `parseRecordSetCompositeId` accepts any three
|
|
11764
|
+
* NON-EMPTY segments, so a record name carrying two pipes decoded to a
|
|
11765
|
+
* DIFFERENT hosted zone at three sites this helper never sees — an `import`
|
|
11766
|
+
* early accept, an identity-resolution short-circuit, and `delete`'s own parse,
|
|
11767
|
+
* where `cdkd destroy` then reported success over a live record. When adopting
|
|
11768
|
+
* this guard for a new type, audit its DECODE sites in the same change and make
|
|
11769
|
+
* each one cross-check the parsed segments against something it can verify them
|
|
11770
|
+
* with (Route 53 uses the template's own `Name` / `Type`).
|
|
11766
11771
|
*/
|
|
11767
11772
|
/** The character every composite physicalId in this codebase joins segments with. */
|
|
11768
11773
|
const COMPOSITE_ID_SEPARATOR = "|";
|
|
@@ -33705,10 +33710,10 @@ var Route53Provider = class {
|
|
|
33705
33710
|
if (!this.route53Client) this.route53Client = new Route53Client(this.providerRegion ? { region: this.providerRegion } : {});
|
|
33706
33711
|
return this.route53Client;
|
|
33707
33712
|
}
|
|
33708
|
-
async create(logicalId, resourceType, properties) {
|
|
33713
|
+
async create(logicalId, resourceType, properties, context) {
|
|
33709
33714
|
switch (resourceType) {
|
|
33710
33715
|
case "AWS::Route53::HostedZone": return this.createHostedZone(logicalId, resourceType, properties);
|
|
33711
|
-
case "AWS::Route53::RecordSet": return this.createRecordSet(logicalId, resourceType, properties);
|
|
33716
|
+
case "AWS::Route53::RecordSet": return this.createRecordSet(logicalId, resourceType, properties, context);
|
|
33712
33717
|
default: throw new ProvisioningError(`Unsupported resource type: ${resourceType}`, resourceType, logicalId);
|
|
33713
33718
|
}
|
|
33714
33719
|
}
|
|
@@ -33937,11 +33942,25 @@ var Route53Provider = class {
|
|
|
33937
33942
|
default: return;
|
|
33938
33943
|
}
|
|
33939
33944
|
}
|
|
33940
|
-
async createRecordSet(logicalId, resourceType, properties) {
|
|
33945
|
+
async createRecordSet(logicalId, resourceType, properties, context) {
|
|
33941
33946
|
this.logger.debug(`Creating Route 53 record set ${logicalId}`);
|
|
33942
33947
|
const hostedZoneId = await this.resolveHostedZoneId(properties, logicalId, resourceType);
|
|
33943
33948
|
const recordName = properties["Name"];
|
|
33944
33949
|
const recordType = properties["Type"];
|
|
33950
|
+
const compositeId = packCompositeId(resourceType, logicalId, [
|
|
33951
|
+
{
|
|
33952
|
+
name: "hostedZoneId",
|
|
33953
|
+
value: hostedZoneId
|
|
33954
|
+
},
|
|
33955
|
+
{
|
|
33956
|
+
name: "recordName",
|
|
33957
|
+
value: recordName
|
|
33958
|
+
},
|
|
33959
|
+
{
|
|
33960
|
+
name: "recordType",
|
|
33961
|
+
value: recordType
|
|
33962
|
+
}
|
|
33963
|
+
], context?.replayingState === true ? { onRefusal: (message) => this.logger.warn(message) } : void 0);
|
|
33945
33964
|
try {
|
|
33946
33965
|
const resourceRecordSet = this.buildResourceRecordSet(properties);
|
|
33947
33966
|
const comment = properties["Comment"];
|
|
@@ -33955,7 +33974,6 @@ var Route53Provider = class {
|
|
|
33955
33974
|
}]
|
|
33956
33975
|
}
|
|
33957
33976
|
}));
|
|
33958
|
-
const compositeId = `${hostedZoneId}|${recordName}|${recordType}`;
|
|
33959
33977
|
this.logger.debug(`Successfully created record set ${logicalId}: ${compositeId}`);
|
|
33960
33978
|
return {
|
|
33961
33979
|
physicalId: compositeId,
|
|
@@ -33972,6 +33990,20 @@ var Route53Provider = class {
|
|
|
33972
33990
|
const hostedZoneId = await this.resolveHostedZoneId(properties, logicalId, resourceType, physicalId);
|
|
33973
33991
|
const recordName = properties["Name"];
|
|
33974
33992
|
const recordType = properties["Type"];
|
|
33993
|
+
const compositeId = packCompositeId(resourceType, logicalId, [
|
|
33994
|
+
{
|
|
33995
|
+
name: "hostedZoneId",
|
|
33996
|
+
value: hostedZoneId
|
|
33997
|
+
},
|
|
33998
|
+
{
|
|
33999
|
+
name: "recordName",
|
|
34000
|
+
value: recordName
|
|
34001
|
+
},
|
|
34002
|
+
{
|
|
34003
|
+
name: "recordType",
|
|
34004
|
+
value: recordType
|
|
34005
|
+
}
|
|
34006
|
+
], { onRefusal: (message) => this.logger.warn(message) });
|
|
33975
34007
|
try {
|
|
33976
34008
|
const resourceRecordSet = this.buildResourceRecordSet(properties);
|
|
33977
34009
|
const comment = properties["Comment"];
|
|
@@ -33985,7 +34017,6 @@ var Route53Provider = class {
|
|
|
33985
34017
|
}]
|
|
33986
34018
|
}
|
|
33987
34019
|
}));
|
|
33988
|
-
const compositeId = `${hostedZoneId}|${recordName}|${recordType}`;
|
|
33989
34020
|
this.logger.debug(`Successfully updated record set ${logicalId}`);
|
|
33990
34021
|
return {
|
|
33991
34022
|
physicalId: compositeId,
|
|
@@ -34000,7 +34031,8 @@ var Route53Provider = class {
|
|
|
34000
34031
|
async deleteRecordSet(logicalId, physicalId, resourceType, properties, context) {
|
|
34001
34032
|
this.logger.debug(`Deleting Route 53 record set ${logicalId}: ${physicalId}`);
|
|
34002
34033
|
if (!properties) throw new ProvisioningError(`Properties required to delete record set ${logicalId}`, resourceType, logicalId, physicalId);
|
|
34003
|
-
const
|
|
34034
|
+
const parsedComposite = parseRecordSetCompositeId(physicalId);
|
|
34035
|
+
const composite = parsedComposite && this.compositeAgreesWithTemplate(parsedComposite, properties) ? parsedComposite : void 0;
|
|
34004
34036
|
let hostedZoneId;
|
|
34005
34037
|
if (composite) hostedZoneId = composite.hostedZoneId;
|
|
34006
34038
|
else try {
|
|
@@ -34433,7 +34465,7 @@ var Route53Provider = class {
|
|
|
34433
34465
|
*/
|
|
34434
34466
|
async resolveRecordSetIdentity(physicalId, properties, options) {
|
|
34435
34467
|
const composite = parseRecordSetCompositeId(physicalId);
|
|
34436
|
-
if (composite) return composite;
|
|
34468
|
+
if (composite && (!properties || this.compositeAgreesWithTemplate(composite, properties))) return composite;
|
|
34437
34469
|
if (!properties) return void 0;
|
|
34438
34470
|
const name = typeof properties["Name"] === "string" ? properties["Name"] : physicalId;
|
|
34439
34471
|
const type = properties["Type"];
|
|
@@ -34612,6 +34644,52 @@ var Route53Provider = class {
|
|
|
34612
34644
|
}
|
|
34613
34645
|
}
|
|
34614
34646
|
/**
|
|
34647
|
+
* Does a parsed composite agree with the properties recorded alongside it?
|
|
34648
|
+
*
|
|
34649
|
+
* Called from all THREE sites that split a stored id back apart —
|
|
34650
|
+
* `importRecordSet`'s early accept, `resolveRecordSetIdentity`, and
|
|
34651
|
+
* `deleteRecordSet` — because `parseRecordSetCompositeId` asks only for three
|
|
34652
|
+
* NON-EMPTY segments, which a record NAME carrying two pipes satisfies
|
|
34653
|
+
* (issue #1711).
|
|
34654
|
+
*
|
|
34655
|
+
* Each check is applied only when the template side is a usable string, so an
|
|
34656
|
+
* unresolved intrinsic or an absent field leaves the pre-#1711 behavior
|
|
34657
|
+
* exactly as it was. When BOTH are unusable this returns `true` and the
|
|
34658
|
+
* mis-decode is still reachable — an accepted bound, since the alternative is
|
|
34659
|
+
* refusing every id on a bag cdkd cannot read, and the identity resolution the
|
|
34660
|
+
* fall-through leads to needs those same fields anyway.
|
|
34661
|
+
*
|
|
34662
|
+
* The NAME check is what catches the residual the TYPE check alone leaves: a
|
|
34663
|
+
* name like `a|b|A` on a record whose `Type` really is `A` agrees on the type
|
|
34664
|
+
* and still decodes to the wrong zone. The TYPE check is in turn the sole
|
|
34665
|
+
* discriminator only where the NAME is unusable, which is why both are here.
|
|
34666
|
+
*
|
|
34667
|
+
* **A false REJECTION is what this must not do, and the argument is
|
|
34668
|
+
* REACHABILITY rather than cost.** The cost differs per caller and is not
|
|
34669
|
+
* uniformly small: at `deleteRecordSet` the fall-through re-resolves the zone
|
|
34670
|
+
* with `requireUnambiguousZoneName`, which THROWS on a split-horizon
|
|
34671
|
+
* `HostedZoneName` and would turn a working destroy into a failed one. It
|
|
34672
|
+
* cannot fire, because every composite is packed from the same
|
|
34673
|
+
* `properties['Name']` / `['Type']` the engine records beside it — create,
|
|
34674
|
+
* update and the import canonicalization all use one bag — so a genuine
|
|
34675
|
+
* composite always agrees with the bag it is stored with. `Type` being
|
|
34676
|
+
* updateable does not break that: `update()` returns the RE-PACKED id, which
|
|
34677
|
+
* is recorded together with the new properties. The one real divergence is
|
|
34678
|
+
* cosmetic and absorbed on purpose — `canonicalizeQueryName` makes the name
|
|
34679
|
+
* compare case- and trailing-dot-insensitive, so a template spelling the name
|
|
34680
|
+
* without CDK's dot is not rejected.
|
|
34681
|
+
*
|
|
34682
|
+
* Note two of the three callers pass a STATE-borne bag rather than a template
|
|
34683
|
+
* one; the reachability argument above is what covers them.
|
|
34684
|
+
*/
|
|
34685
|
+
compositeAgreesWithTemplate(parsed, properties) {
|
|
34686
|
+
const templateType = properties["Type"];
|
|
34687
|
+
if (typeof templateType === "string" && templateType && parsed.type !== templateType) return false;
|
|
34688
|
+
const templateName = properties["Name"];
|
|
34689
|
+
if (typeof templateName === "string" && templateName && canonicalizeQueryName(parsed.name) !== canonicalizeQueryName(templateName)) return false;
|
|
34690
|
+
return true;
|
|
34691
|
+
}
|
|
34692
|
+
/**
|
|
34615
34693
|
* Adopt an existing record set (issue #1658).
|
|
34616
34694
|
*
|
|
34617
34695
|
* cdkd's physicalId is the composite `<hostedZoneId>|<Name>|<Type>` that
|
|
@@ -34654,7 +34732,8 @@ var Route53Provider = class {
|
|
|
34654
34732
|
async importRecordSet(input) {
|
|
34655
34733
|
const known = input.knownPhysicalId;
|
|
34656
34734
|
if (!known) return null;
|
|
34657
|
-
|
|
34735
|
+
const parsedKnown = parseRecordSetCompositeId(known);
|
|
34736
|
+
if (parsedKnown && this.compositeAgreesWithTemplate(parsedKnown, input.properties)) return {
|
|
34658
34737
|
physicalId: known,
|
|
34659
34738
|
attributes: {}
|
|
34660
34739
|
};
|
|
@@ -34667,7 +34746,22 @@ var Route53Provider = class {
|
|
|
34667
34746
|
};
|
|
34668
34747
|
const identity = await this.resolveRecordSetIdentity(known, input.properties, { requireUnambiguousZoneName: true });
|
|
34669
34748
|
if (!identity) return adoptVerbatim("the template does not unambiguously resolve to a hosted zone + Name + Type");
|
|
34670
|
-
const
|
|
34749
|
+
const segments = [
|
|
34750
|
+
{
|
|
34751
|
+
name: "hostedZoneId",
|
|
34752
|
+
value: identity.hostedZoneId
|
|
34753
|
+
},
|
|
34754
|
+
{
|
|
34755
|
+
name: "recordName",
|
|
34756
|
+
value: identity.name
|
|
34757
|
+
},
|
|
34758
|
+
{
|
|
34759
|
+
name: "recordType",
|
|
34760
|
+
value: identity.type
|
|
34761
|
+
}
|
|
34762
|
+
];
|
|
34763
|
+
if (compositeIdSeparatorRefusal(input.resourceType, input.logicalId, segments) !== void 0) return adoptVerbatim(`the resolved hosted zone + Name + Type would pack an ambiguous id — a segment contains '${"|"}', which cdkd uses as this type's physical-id separator`);
|
|
34764
|
+
const compositeId = packCompositeId(input.resourceType, input.logicalId, segments);
|
|
34671
34765
|
let observed;
|
|
34672
34766
|
try {
|
|
34673
34767
|
observed = await this.readRecordSet(compositeId);
|
|
@@ -73207,7 +73301,7 @@ function createMigrateCommand() {
|
|
|
73207
73301
|
*/
|
|
73208
73302
|
function buildProgram() {
|
|
73209
73303
|
const program = new Command();
|
|
73210
|
-
program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.281.
|
|
73304
|
+
program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.281.8");
|
|
73211
73305
|
program.hook("preAction", (_thisCommand, actionCommand) => {
|
|
73212
73306
|
const { profile } = actionCommand.optsWithGlobals();
|
|
73213
73307
|
if (profile !== void 0) process.env["AWS_PROFILE"] = profile;
|