动态侦听器规则创建类型错误

问题描述

配置数据:

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] } ] }

哪里出了错?

解决方法

问题在于您将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/*' ] } }
]