使用Pulumi调用Pact Terraform Provider时提示host必填字段缺失
使用Pulumi集成Pact Terraform Provider时的"host字段缺失"问题
问题现象
初始化Pact Provider配置正常,但添加Provider之外的资源(如pact.Environment)后,执行预览更新会触发host字段缺失错误:
Previewing update (broker): @ previewing update....... pulumi:providers:pact default_0_10_0 error: rpc error: code = Unknown desc = "host": required field is not set: pulumi:pulumi:Stack pact-broker-broker pulumi:providers:pact default_0_10_0 1 error Diagnostics: pulumi:providers:pact (default_0_10_0): error: rpc error: code = Unknown desc = "host": required field is not set:
日志情况
已启用最高级别日志,可见传递给Provider的信息包含host参数,但仍报错:
eventsink.go:59] RegisterResource RPC finished: resource:Pact Broker[pulumi:providers:pact]; err: null, resp: urn:pulumi:broker::pact-broker::pulumi:providers:pact::Pact Broker,04da6b54-80e4-46f7-96ec-b56ff0331ba9,host,,,https://the-broker-url.com,version,,,0.10.0,,
尝试设置TF_LOG=DEBUG无法查看完整RPC日志,未找到启用隐藏RPC日志的方法。
当前Pulumi代码
import * as pact from "@pulumi/pact"; const host = process.env["PACT_BROKER_BASE_URL"]!! if (!host) { throw new Error("Host needs to be set") } new pact.Provider("Pact Broker", { host: host, basicAuthUsername: process.env["PACT_BROKER_USERNAME"], basicAuthPassword: process.env["PACT_BROKER_PASSWORD"] }) new pact.Environment("Test Environment", { displayName: "Test Environment" })
解决方法
问题根源是未将自定义配置的Provider实例关联到后续资源。Pulumi默认会创建一个无配置的默认Provider实例,而非你手动配置的带host参数的实例。
修改代码,显式将配置好的Provider传递给pact.Environment:
import * as pact from "@pulumi/pact"; const host = process.env["PACT_BROKER_BASE_URL"]!! if (!host) { throw new Error("Host needs to be set") } // 保存配置完成的Provider实例 const pactProvider = new pact.Provider("Pact Broker", { host: host, basicAuthUsername: process.env["PACT_BROKER_USERNAME"], basicAuthPassword: process.env["PACT_BROKER_PASSWORD"] }) // 显式指定资源使用自定义Provider new pact.Environment("Test Environment", { displayName: "Test Environment" }, { provider: pactProvider }) // 关键:添加provider参数关联已配置的实例
原理:创建pact.Environment时若不指定provider选项,Pulumi会自动初始化默认的Pact Provider实例,该实例未配置host参数,因此触发缺失错误。显式关联后,资源将使用你已配置好的带host参数的Provider实例。
内容的提问来源于stack exchange,提问作者Tim Vahlbrock
相关产品推荐
相关产品推荐

