问题描述
配置数据:
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/*' ] } }
]