为什么模板条件:不是 CfnCondition 的实例?

Why is a template condition: not an instanceof CfnCondition?

我想知道为什么 AWS 模板中的条件是 software.amazon.awscdk.core.Construct 的实例而不是 CfnCondition 的实例。

Conditions:
  ShouldCreateInfra: !Equals [!Ref CreateInfra, true]
  ShouldCreateDB: !Equals [!Ref CreateDB, true]

给定 java 代码:

CfnInclude template;
List<IConstruct> lic = template.getNode().getChildren();
for (IConstruct IC : lic) {
  LOG.debug("TemplateToTreeMap class name " + IC.getClass().getTypeName());
  if (IC instanceof CfnCondition) {
    LOG.debug("IC is instanceof of CfnCondition");
  }else if (IC instanceof CfnParameter) {
    LOG.debug("IC is instanceof of CfnParameter");
  }
}

当构造是模板条件时,它是 software.amazon.awscdk.core.Construct 的实例而不是 CfnCondition,这与构造是 CfnParameter 的情况不同,后者是CfnParameter.

的实例

CfnConditionCfnParameter 都扩展了 CfnElement

为什么会发生这种情况,然后我该如何识别条件?

或者,我尝试解决以下问题:

if (IC.toString().contains("$Conditions")) {
    LOG.debug(IC.toString());
    Construct C = (Construct) IC;
    LOG.debug(toJsonString(C.getNode()));
    LOG.debug(stack.resolve(C).toString());

输出如下

AwsCdkStack/Template/$Conditions
${Token[TOKEN.646]}

但随后导致错误

    software.amazon.jsii.JsiiException: 
Unable to resolve object tree with circular reference. Path: /node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node
Error: Unable to resolve object tree with circular reference. Path: /node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node/host/node
    at resolve (/tmp/jsii-kernel-w8xgCb/node_modules/@aws-cdk/core/lib/private/resolve.js:35:15)
    at Object.resolve (/tmp/jsii-kernel-w8xgCb/node_modules/@aws-cdk/core/lib/private/resolve.js:29:33)
    at resolve (/tmp/jsii-kernel-w8xgCb/node_modules/@aws-cdk/core/lib/private/resolve.js:118:43)
    at Object.resolve (/tmp/jsii-kernel-w8xgCb/node_modules/@aws-cdk/core/lib/private/resolve.js:29:33)
    at resolve (/tmp/jsii-kernel-w8xgCb/node_modules/@aws-cdk/core/lib/private/resolve.js:118:43)
    at Object.resolve (/tmp/jsii-kernel-w8xgCb/node_modules/@aws-cdk/core/lib/private/resolve.js:29:33)
    at resolve (/tmp/jsii-kernel-w8xgCb/node_modules/@aws-cdk/core/lib/private/resolve.js:118:43)
    at Object.resolve (/tmp/jsii-kernel-w8xgCb/node_modules/@aws-cdk/core/lib/private/resolve.js:29:33)
    at resolve (/tmp/jsii-kernel-w8xgCb/node_modules/@aws-cdk/core/lib/private/resolve.js:118:43)
    at Object.resolve (/tmp/jsii-kernel-w8xgCb/node_modules/@aws-cdk/core/lib/private/resolve.js:29:33)
    at com.iriusrisk.cfimport.BasicApplicationTests.Example1_1(BasicApplicationTests.java:29)

要访问 CfnCondition,请使用以下命令

CfnCondition condition = this.template.getCondition(condition_name);