@go-to-k/cdkd 0.243.0 → 0.244.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.
@@ -9338,7 +9338,6 @@ const NON_PROVISIONABLE_TYPES = new Set([
9338
9338
  "AWS::EMR::Cluster",
9339
9339
  "AWS::EMR::InstanceFleetConfig",
9340
9340
  "AWS::EMR::InstanceGroupConfig",
9341
- "AWS::FSx::FileSystem",
9342
9341
  "AWS::FSx::Snapshot",
9343
9342
  "AWS::FSx::StorageVirtualMachine",
9344
9343
  "AWS::FSx::Volume",
@@ -11928,6 +11927,26 @@ const PROPERTY_COVERAGE_BY_TYPE = new Map([
11928
11927
  ]),
11929
11928
  silentDrop: /* @__PURE__ */ new Map()
11930
11929
  }],
11930
+ ["AWS::FSx::FileSystem", {
11931
+ handled: new Set([
11932
+ "BackupId",
11933
+ "FileSystemType",
11934
+ "FileSystemTypeVersion",
11935
+ "KmsKeyId",
11936
+ "LustreConfiguration",
11937
+ "NetworkType",
11938
+ "SecurityGroupIds",
11939
+ "StorageCapacity",
11940
+ "StorageType",
11941
+ "SubnetIds",
11942
+ "Tags"
11943
+ ]),
11944
+ silentDrop: new Map([
11945
+ ["OntapConfiguration", "FSx for NetApp ONTAP variant — the file system is only a container for SVMs/volumes (separate AWS::FSx::StorageVirtualMachine / AWS::FSx::Volume types, both still unsupported), so shipping it alone would be misleading; only the Lustre variant is supported in v1. Follow-up to issue #1042."],
11946
+ ["OpenZFSConfiguration", "FSx for OpenZFS variant — root-volume semantics (RootVolumeId, child AWS::FSx::Volume trees) are not implemented in v1; only the Lustre variant is supported. Follow-up to issue #1042."],
11947
+ ["WindowsConfiguration", "FSx for Windows File Server variant — requires Active Directory wiring and Windows-specific update/delete semantics (final backups, throughput tiers) that v1 does not implement; only the Lustre variant (the CDK L2) is supported. Follow-up to issue #1042."]
11948
+ ])
11949
+ }],
11931
11950
  ["AWS::Glue::Connection", {
11932
11951
  handled: new Set(["CatalogId", "ConnectionInput"]),
11933
11952
  silentDrop: /* @__PURE__ */ new Map()
@@ -12957,7 +12976,11 @@ function findActionableSilentDrops(resourceType, templateProperties, allowedKeys
12957
12976
  * 3. SDK Provider registered, no silent-drop properties (after the
12958
12977
  * `--allow-unsupported-properties` override filter) → SDK Provider.
12959
12978
  * 4. SDK Provider registered, silent-drop properties present, NOT all
12960
- * in the allow set → Cloud Control (auto-route, info-logged).
12979
+ * in the allow set → Cloud Control (auto-route, info-logged). When the
12980
+ * CC route is NOT viable — the type is `NON_PROVISIONABLE` (no CC
12981
+ * handlers, e.g. AWS::FSx::FileSystem) or the provider sets
12982
+ * `disableCcApiFallback` (e.g. NestedStackProvider) — throw the clear
12983
+ * pre-flight error instead of failing opaquely at provisioning time.
12961
12984
  * 5. SDK Provider registered, silent-drop properties present, ALL in
12962
12985
  * the allow set → SDK Provider (the user explicitly accepted the
12963
12986
  * silent drop, warn-logged).
@@ -12965,10 +12988,12 @@ function findActionableSilentDrops(resourceType, templateProperties, allowedKeys
12965
12988
  * 7. `--allow-unsupported-types` escape hatch → Cloud Control optimistically.
12966
12989
  * 8. Otherwise → throw (no provider available).
12967
12990
  *
12968
- * Tier 3 (`NON_PROVISIONABLE`) types are rejected earlier by
12969
- * {@link validateResourceTypes}; the silent-drop auto-route only fires for
12970
- * Tier 1 types whose SDK Provider declares `handledProperties` and where
12971
- * Cloud Control is guaranteed to be a viable alternative.
12991
+ * SDK-provider-less Tier 3 (`NON_PROVISIONABLE`) types are rejected earlier
12992
+ * by {@link validateResourceTypes}. A Tier 1 type that is ALSO
12993
+ * NON_PROVISIONABLE (SDK provider registered for a type Cloud Control cannot
12994
+ * manage e.g. AWS::FSx::FileSystem, AWS::DLM::LifecyclePolicy) passes the
12995
+ * type check but has no viable CC auto-route; rule 4's viability guard turns
12996
+ * that case into a clear pre-flight error.
12972
12997
  */
12973
12998
  /**
12974
12999
  * Types exempt from the sticky `provisionedBy: 'cc-api'` routing rule.
@@ -13103,6 +13128,7 @@ var ProviderRegistry = class {
13103
13128
  provisionedBy: "sdk"
13104
13129
  };
13105
13130
  }
13131
+ if (isNonProvisionable(resourceType) || specificProvider.disableCcApiFallback === true) throw new Error(this.buildUnroutableSilentDropMessage(resourceType, actionableDrops));
13106
13132
  this.logger.debug(`Auto-routing ${resourceType} via Cloud Control (silent-drop properties: ${actionableDrops.map((d) => d.property).join(", ")})`);
13107
13133
  return {
13108
13134
  provider: this.cloudControlProvider,
@@ -13127,6 +13153,21 @@ var ProviderRegistry = class {
13127
13153
  throw new Error(`No provider available for resource type: ${resourceType}. This resource type is not supported by Cloud Control API and no SDK provider is registered.`);
13128
13154
  }
13129
13155
  /**
13156
+ * Error message for a resource whose template uses SDK-provider-unhandled
13157
+ * properties on a type where the Cloud Control auto-route (issue #614) is
13158
+ * NOT viable — `ProvisioningType: NON_PROVISIONABLE` (no CC handlers) or a
13159
+ * provider-level `disableCcApiFallback` opt-out. Includes each property's
13160
+ * `unhandledByDesign` rationale so the user sees WHY it is unhandled, plus
13161
+ * the `--allow-unsupported-properties` escape hatch (which forces the SDK
13162
+ * path and accepts the drop — the provider may still reject the resource
13163
+ * if the property is load-bearing, e.g. a non-Lustre FSx variant config).
13164
+ */
13165
+ buildUnroutableSilentDropMessage(resourceType, drops) {
13166
+ const details = drops.map((d) => ` - ${d.property}: ${d.rationale}`).join("\n");
13167
+ const overrideHint = drops.map((d) => `${resourceType}:${d.property}`).join(",");
13168
+ return `${resourceType} uses properties cdkd's SDK Provider does not handle, and this type cannot fall back to Cloud Control API (${isNonProvisionable(resourceType) ? "ProvisioningType: NON_PROVISIONABLE — Cloud Control has no handlers for it" : "the type's SDK provider opts out of the Cloud Control fallback (disableCcApiFallback)"}):\n${details}\nRemove the properties, or force the SDK provider path and accept the drop via --allow-unsupported-properties ${overrideHint} (the provider may still reject the resource if the property is required).`;
13169
+ }
13170
+ /**
13130
13171
  * Legacy entry point that returns just the provider. Delegates to
13131
13172
  * {@link getProviderFor} with no properties / no state-recorded layer —
13132
13173
  * which means silent-drop auto-routing CANNOT fire (no template to
@@ -13204,14 +13245,17 @@ var ProviderRegistry = class {
13204
13245
  /**
13205
13246
  * Walk every resource in the template and identify top-level CFn
13206
13247
  * properties cdkd's SDK provider would silently drop on write. As of
13207
- * issue [#614](https://github.com/go-to-k/cdkd/issues/614), this method
13208
- * **no longer throws** silent drops now auto-route the resource through
13209
- * Cloud Control API by default (see {@link getProviderFor}). The method
13210
- * is retained on the name `validateResourceProperties` so existing deploy
13211
- * call sites continue to work; it now emits info-level routing decisions
13248
+ * issue [#614](https://github.com/go-to-k/cdkd/issues/614), silent drops
13249
+ * auto-route the resource through Cloud Control API by default (see
13250
+ * {@link getProviderFor}) the method emits info-level routing decisions
13212
13251
  * for each silent-drop resource, plus warn-level lines for resources
13213
13252
  * where the user explicitly opted into the silent drop via
13214
- * `--allow-unsupported-properties`.
13253
+ * `--allow-unsupported-properties`. The ONE remaining throw path is the
13254
+ * CC-route viability guard: when the auto-route target cannot manage the
13255
+ * type (`NON_PROVISIONABLE` or a provider-level `disableCcApiFallback`
13256
+ * opt-out — e.g. AWS::FSx::FileSystem's Windows/ONTAP/OpenZFS blocks),
13257
+ * this rejects pre-flight with a clear per-property error instead of
13258
+ * letting provisioning fail opaquely.
13215
13259
  *
13216
13260
  * Must be called AFTER {@link validateResourceTypes} — type-level errors
13217
13261
  * are still hard rejects. For a type allowed via `--allow-unsupported-types`,
@@ -13228,11 +13272,13 @@ var ProviderRegistry = class {
13228
13272
  * Info-log every silent-drop routing decision (auto-route via CC API) and
13229
13273
  * warn-log every silent drop the user explicitly opted into via
13230
13274
  * `--allow-unsupported-properties` (forced SDK path, the property will
13231
- * be dropped). Pure side-effect — does not mutate state and never throws.
13275
+ * be dropped). Does not mutate state; throws ONLY for the CC-route
13276
+ * viability guard (un-allowed silent drops on a type Cloud Control cannot
13277
+ * manage — see {@link buildUnroutableSilentDropMessage}).
13232
13278
  *
13233
13279
  * Issue [#614](https://github.com/go-to-k/cdkd/issues/614). Replaces the
13234
13280
  * pre-v0.16x throw path: silent drops are now a routing signal, not an
13235
- * error.
13281
+ * error (except the viability guard above).
13236
13282
  *
13237
13283
  * When the optional `provisionedBy` (from existing state) is `'cc-api'`,
13238
13284
  * the auto-route info line is demoted to `debug` — the resource has been
@@ -13255,6 +13301,8 @@ var ProviderRegistry = class {
13255
13301
  else autoRouted.push(property);
13256
13302
  }
13257
13303
  if (autoRouted.length > 0) {
13304
+ const provider = this.providers.get(resourceType);
13305
+ if (isNonProvisionable(resourceType) || provider?.disableCcApiFallback === true) throw new Error(`${logicalId}: ${this.buildUnroutableSilentDropMessage(resourceType, drops.filter((d) => autoRouted.includes(d.property)))}`);
13258
13306
  const message = `${logicalId} (${resourceType}): routing via Cloud Control API (cdkd's SDK Provider does not yet wire ${autoRouted.join(", ")} — CC API will forward the full property map. Override via --allow-unsupported-properties ${autoRouted.map((p) => `${resourceType}:${p}`).join(",")}.)`;
13259
13307
  if (provisionedBy === "cc-api") this.logger.debug(message);
13260
13308
  else this.logger.info(message);
@@ -14012,6 +14060,7 @@ const STATEFUL_TYPES = new Set([
14012
14060
  "AWS::DynamoDB::Table",
14013
14061
  "AWS::DynamoDB::GlobalTable",
14014
14062
  "AWS::EFS::FileSystem",
14063
+ "AWS::FSx::FileSystem",
14015
14064
  "AWS::S3::Bucket",
14016
14065
  "AWS::ECR::Repository",
14017
14066
  "AWS::Kinesis::Stream",
@@ -15826,11 +15875,12 @@ var DeployEngine = class {
15826
15875
  } else throw updateError;
15827
15876
  }
15828
15877
  if (result.wasReplaced) this.logger.info(`Resource ${logicalId} was replaced: ${currentResource.physicalId} -> ${result.physicalId}`);
15878
+ const carriedAttributes = result.attributes ?? (result.wasReplaced ? void 0 : currentResource.attributes);
15829
15879
  stateResources[logicalId] = {
15830
15880
  physicalId: result.physicalId,
15831
15881
  resourceType,
15832
15882
  properties: resolvedProps,
15833
- ...result.attributes && { attributes: result.attributes },
15883
+ ...carriedAttributes && { attributes: carriedAttributes },
15834
15884
  ...dependencies && dependencies.length > 0 && { dependencies },
15835
15885
  ...this.extractTemplateAttributes(template, logicalId),
15836
15886
  provisionedBy: resultProvisionedBy
@@ -16092,4 +16142,4 @@ var DeployEngine = class {
16092
16142
 
16093
16143
  //#endregion
16094
16144
  export { getDockerCmd as $, DiffCalculator as A, buildAssetRedirectMap as B, findActionableSilentDrops as C, resolveBucketRegion as Ct, refStateLookupFromResource as D, cfnRefValueFromPhysicalId as E, rebuildClientForBucketRegion as F, BOOTSTRAP_MARKER_PREFIX as G, loadPublishableAssetManifest as H, shouldRetainResource as I, parseBootstrapMarker as J, ensureAssetStorage as K, AssetPublisher as L, TemplateParser as M, LockManager as N, WAFv2WebACLProvider as O, S3StateBackend as P, formatDockerLoginError as Q, stringifyValue as R, ProviderRegistry as S, clearBucketRegionCache as St, IntrinsicFunctionResolver as T, rewriteTemplateAssetReferences as U, createAssetRedirectResolver as V, AssetModeResolver as W, validateContainerRepoName as X, validateAssetBucketName as Y, buildDockerImage as Z, green as _, CFN_TEMPLATE_URL_LIMIT as _t, withRetry as a, synthesisStatusMessage as at, IAMRoleProvider as b, uploadCfnTemplate as bt, computeImplicitDeleteEdges as c, resolveApp as ct, isStatefulRecreateTargetSync as d, resolveSkipPrefix as dt, runDockerForeground as et, renderStatefulReason as f, resolveStateBucketWithDefault as ft, gray as g, CFN_TEMPLATE_BODY_LIMIT as gt, cyan as h, warnDeprecatedNoPrefixCliFlag as ht, withResourceDeadline as i, Synthesizer as it, DagBuilder as j, applyRoleArnIfSet as k, extractDeploymentEventError as l, resolveAutoAssetStorage as lt, bold as m, resolveUseCdkBootstrapAssets as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, AssetManifestLoader as nt, isRetryableTransientError as o, getDefaultStateBucketName as ot, formatResourceLine as p, resolveStateBucketWithDefaultAndSource as pt, getBootstrapMarkerKey as q, DeployEngine as r, getDockerImageBySourceHash as rt, IMPLICIT_DELETE_DEPENDENCIES as s, getLegacyStateBucketName as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, runDockerStreaming as tt, MULTI_REGION_RECREATE_BLOCKED_TYPES as u, resolveCaptureObservedState as ut, red as v, MIGRATE_TMP_PREFIX as vt, CloudControlProvider as w, collectInlinePolicyNamesManagedBySiblings as x, AssemblyReader as xt, yellow as y, findLargeInlineResources as yt, WorkGraph as z };
16095
- //# sourceMappingURL=deploy-engine-DNqZHDA5.js.map
16145
+ //# sourceMappingURL=deploy-engine-3KNTmr1u.js.map