我想实现一个提供者级别的配置功能,这样我就可以传递一个可选的特定ARN,供提供者在特殊情况下使用。
例如。
provider "custom_provider" {
arn = "arn:aws:service:region-1:123456789012"
}
我创建了providers Schema。
func (p *customProvider) Schema(_ context.Context, _ provider.SchemaRequest, resp *provider.SchemaResponse) {
resp.Schema = schema.Schema{
Attributes: map[string]schema.Attribute{
"arn": schema.StringAttribute{
Optional: true,
},
}
}
和实现提供者数据模型
type customProviderModel struct {
Arn types.String `tfsdk:"arn"`
}
实现配置功能
func (p *customProvider) Configure(ctx context.Context, req provider.ConfigureRequest, resp *provider.ConfigureResponse) {
var config customProviderModel
var arn string
diags := req.Config.Get(ctx, &config)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
return
}
if !config.Arn.IsNull() {
arn = config.Arn.ValueString()
}
但是我不知道如何从配置中传递arn给数据源,以便我可以使用arn来承担一个角色,而我正在数据源内执行Read功能。
基本上我想有一个类似于aws提供商的东西,我们可以在一些特殊情况下传递区域。
provider "aws" {
region = "us-east-1"
}
Configure
实现的resp *provider.ConfigureResponse
参数是需要在函数中填充的ConfigureResponse
对象。
DataSourceData
和ResourceData
字段都接受任何类型的对象,框架将存储这两个值,然后将它们逐字传递给DataSource
或Resource
实现的Configure
方法。
要接收这些值,DataSource
和Resource
对象必须分别实现DataSourceWithConfigure
或ResourceWithConfigure
。传递给其中每个的ConfigureRequest
对象包括您在DataSourceData
或ResourceData
中返回的相同数据对象。
您可以使用此机制从提供程序配置中保存数据源和资源类型实现所需的任何信息。一个典型的设计是提供程序级Configure
返回一个预配置的客户端,用于与实际远程系统交互的任何客户端库,然后数据源和资源类型实现将使用该客户端发出请求。