【问题标题】:Dynamic Listener Rules creation Type error动态侦听器规则创建类型错误
【发布时间】:2020-11-09 10:04:27
【问题描述】:

配置数据:

config:
  pulumi-ecs-stack:listener_rules_data:
    0:
      pathPattern:
        - "/login/*"
        - "/auth/*"
        - "/info/*"

我的脚本:

import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
import * as awsx from "@pulumi/awsx";

const config = new pulumi.Config()
const listener_rules_data = JSON.parse(config.require("listener_rules_data"))
// ...
var i = 0
for (var key in listener_rules_data) {
    let configuration = {
        listenerArn: httpsListener.arn,
        priority: i,
        actions: [{
            type: "forward",
        }],
        conditions: {},
    }
    for (let item in listener_rules_data[key]) {
        configuration.conditions = [
            {[item]: {values: listener_rules_data[key][item]}}
        ]
    }
    new aws.lb.ListenerRule(project_name + '-https-rule-' + i++, configuration);
}

错误:运行程序“/repo/pulumi-ecs-stack”失败,出现未处理的异常: TSError:⨯ 无法编译 TypeScript: index.ts(80,61): 错误 TS2345: 类型参数 '{ listenerArn: pulumi.Output;优先级:数字;动作:{类型:字符串; }[];条件: {}; }' 不可分配给“ListenerRuleArgs”类型的参数。 属性“条件”的类型不兼容。 类型“{}”不可分配给类型“Input”。 类型“{}”缺少“OutputInstance”类型的以下属性:应用,获取

configuration变量转储:

{ listenerArn:
       OutputImpl {
         __pulumiOutput: true,
         resources: [Function],
         allResources: [Function],
         isKnown: Promise { <pending> },
         isSecret: Promise { <pending> },
         promise: [Function],
         toString: [Function],
         toJSON: [Function] },
      priority: 0,
      actions: [ { type: 'forward' } ],
      conditions: [ { pathPattern: [Object] } ] }

错在哪里?

【问题讨论】:

    标签: typescript amazon-web-services pulumi


    【解决方案1】:

    问题是您将conditions 声明为对象:

    conditions: {},
    

    然后尝试在其中放入一个数组。

    另外,在循环中,你的任务

        conditions = [
            {[item]: {values: listener_rules_data[key][item]}}
        ]
    

    每次都会覆盖整个数组。您的意思是使用push

    我不确定将值分配给条件的正确语义,但这是我对代码的近似:

    for (var key in listener_rules_data) {
        const [fieldName, items] = Object.entries(listener_rules_data[key])[0];
        let configuration = {
            listenerArn: httpsListener.arn,
            priority: i,
            actions: [{
                type: "forward",
            }],
            conditions: [{ pathPattern: {values: items as string[]} }],
        }
    
        new aws.lb.ListenerRule(project_name + '-https-rule-' + i++, configuration);
    }
    

    对于您的配置,它应该将条件设置为

    [
      { pathPattern: { values: [ '/login/*', '/auth/*', '/info/*' ] } }
    ]
    

    【讨论】:

    • 好收获!覆盖数组是正确的。
    • 产生错误数据:条件:[ { values: 'hostHeader' }, { values: 'pathPattern' } ] }
    • 我应该是:条件:[ { pathPattern: { values: ["/foo"], }, }, ],
    猜你喜欢
    • 2020-03-30
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 2014-01-20
    • 2020-11-23
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多