如何使用Terraform提供程序框架配置提供程序级别的属性



我想实现一个提供者级别的配置功能,这样我就可以传递一个可选的特定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对象。

DataSourceDataResourceData字段都接受任何类型的对象,框架将存储这两个值,然后将它们逐字传递给DataSourceResource实现的Configure方法。

要接收这些值,DataSourceResource对象必须分别实现DataSourceWithConfigureResourceWithConfigure。传递给其中每个的ConfigureRequest对象包括您在DataSourceDataResourceData中返回的相同数据对象。

您可以使用此机制从提供程序配置中保存数据源和资源类型实现所需的任何信息。一个典型的设计是提供程序级Configure返回一个预配置的客户端,用于与实际远程系统交互的任何客户端库,然后数据源和资源类型实现将使用该客户端发出请求。

最新更新