首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么是模板条件:不是CfnCondition的实例?

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

Stack Overflow用户
提问于 2021-02-08 02:14:31
回答 1查看 73关注 0票数 0

我想知道为什么亚马逊网络服务模板中的条件是software.amazon.awscdk.core.Construct的实例,而不是CfnCondition的实例。

代码语言:javascript
复制
Conditions:
  ShouldCreateInfra: !Equals [!Ref CreateInfra, true]
  ShouldCreateDB: !Equals [!Ref CreateDB, true]

给定java代码:

代码语言:javascript
复制
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

为什么会发生这种情况,那么我如何识别条件呢?

另外,我也尝试过以下方法:

代码语言:javascript
复制
if (IC.toString().contains("$Conditions")) {
    LOG.debug(IC.toString());
    Construct C = (Construct) IC;
    LOG.debug(toJsonString(C.getNode()));
    LOG.debug(stack.resolve(C).toString());

它给出如下输出

代码语言:javascript
复制
AwsCdkStack/Template/$Conditions
${Token[TOKEN.646]}

但随后会导致错误

代码语言:javascript
复制
    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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-10 17:09:23

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

代码语言:javascript
复制
CfnCondition condition = this.template.getCondition(condition_name);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66091447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档