From fa2710b507d16045d96e976bc1f0004cdaf9b815 Mon Sep 17 00:00:00 2001 From: Daniel Gonzalez Date: Tue, 16 Aug 2022 18:06:42 +0200 Subject: [PATCH] chore: Migrate from tfsdk to new go packages See [1] for more information on these changes. [1]: https://github.com/hashicorp/terraform-plugin-framework/pull/432 --- internal/provider/geofencing_resource.go | 24 +++++++++-------- internal/provider/home_data_source.go | 12 +++++---- internal/provider/provider.go | 33 ++++++++++++------------ internal/provider/zone_data_source.go | 12 +++++---- 4 files changed, 44 insertions(+), 37 deletions(-) diff --git a/internal/provider/geofencing_resource.go b/internal/provider/geofencing_resource.go index 8d68528..aa6ce08 100644 --- a/internal/provider/geofencing_resource.go +++ b/internal/provider/geofencing_resource.go @@ -7,14 +7,16 @@ import ( "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-framework/path" + "github.com/hashicorp/terraform-plugin-framework/provider" + "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/tfsdk" "github.com/hashicorp/terraform-plugin-framework/types" ) // Ensure provider defined types fully satisfy framework interfaces -var _ tfsdk.ResourceType = geofencingResourceType{} -var _ tfsdk.Resource = geofencingResource{} -var _ tfsdk.ResourceWithImportState = geofencingResource{} +var _ provider.ResourceType = geofencingResourceType{} +var _ resource.Resource = geofencingResource{} +var _ resource.ResourceWithImportState = geofencingResource{} type geofencingResourceType struct{} @@ -43,7 +45,7 @@ func (geofencingResourceType) GetSchema(_ context.Context) (tfsdk.Schema, diag.D }, nil } -func (geofencingResourceType) NewResource(_ context.Context, in tfsdk.Provider) (tfsdk.Resource, diag.Diagnostics) { +func (geofencingResourceType) NewResource(_ context.Context, in provider.Provider) (resource.Resource, diag.Diagnostics) { provider, diags := convertProviderType(in) return geofencingResource{ @@ -58,10 +60,10 @@ type geofencingResourceData struct { } type geofencingResource struct { - provider provider + provider tadoProvider } -func (r geofencingResource) Create(ctx context.Context, req tfsdk.CreateResourceRequest, resp *tfsdk.CreateResourceResponse) { +func (r geofencingResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) { var data geofencingResourceData diags := req.Config.Get(ctx, &data) @@ -120,7 +122,7 @@ func (r geofencingResource) Create(ctx context.Context, req tfsdk.CreateResource resp.Diagnostics.Append(diags...) } -func (r geofencingResource) Read(ctx context.Context, req tfsdk.ReadResourceRequest, resp *tfsdk.ReadResourceResponse) { +func (r geofencingResource) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) { var data geofencingResourceData diags := req.State.Get(ctx, &data) @@ -162,7 +164,7 @@ func (r geofencingResource) Read(ctx context.Context, req tfsdk.ReadResourceRequ resp.Diagnostics.Append(diags...) } -func (r geofencingResource) Update(ctx context.Context, req tfsdk.UpdateResourceRequest, resp *tfsdk.UpdateResourceResponse) { +func (r geofencingResource) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) { var data geofencingResourceData diags := req.Plan.Get(ctx, &data) @@ -221,7 +223,7 @@ func (r geofencingResource) Update(ctx context.Context, req tfsdk.UpdateResource resp.Diagnostics.Append(diags...) } -func (geofencingResource) Delete(ctx context.Context, req tfsdk.DeleteResourceRequest, resp *tfsdk.DeleteResourceResponse) { +func (geofencingResource) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) { var data geofencingResourceData diags := req.State.Get(ctx, &data) @@ -234,6 +236,6 @@ func (geofencingResource) Delete(ctx context.Context, req tfsdk.DeleteResourceRe // No deletion necesary on tado api. } -func (geofencingResource) ImportState(ctx context.Context, req tfsdk.ImportResourceStateRequest, resp *tfsdk.ImportResourceStateResponse) { - tfsdk.ResourceImportStatePassthroughID(ctx, path.Root("home_name"), req, resp) +func (geofencingResource) ImportState(ctx context.Context, req resource.ImportStateRequest, resp *resource.ImportStateResponse) { + resource.ImportStatePassthroughID(ctx, path.Root("home_name"), req, resp) } diff --git a/internal/provider/home_data_source.go b/internal/provider/home_data_source.go index 2cff27e..bfb3619 100644 --- a/internal/provider/home_data_source.go +++ b/internal/provider/home_data_source.go @@ -4,14 +4,16 @@ import ( "context" "fmt" + "github.com/hashicorp/terraform-plugin-framework/datasource" "github.com/hashicorp/terraform-plugin-framework/diag" + "github.com/hashicorp/terraform-plugin-framework/provider" "github.com/hashicorp/terraform-plugin-framework/tfsdk" "github.com/hashicorp/terraform-plugin-framework/types" ) // Ensure provider defined types fully satisfy framework interfaces -var _ tfsdk.DataSourceType = homeDataSourceType{} -var _ tfsdk.DataSource = homeDataSource{} +var _ provider.DataSourceType = homeDataSourceType{} +var _ datasource.DataSource = homeDataSource{} type homeDataSourceType struct{} @@ -95,7 +97,7 @@ func (homeDataSourceType) GetSchema(_ context.Context) (tfsdk.Schema, diag.Diagn }, nil } -func (homeDataSourceType) NewDataSource(_ context.Context, in tfsdk.Provider) (tfsdk.DataSource, diag.Diagnostics) { +func (homeDataSourceType) NewDataSource(_ context.Context, in provider.Provider) (datasource.DataSource, diag.Diagnostics) { provider, diags := convertProviderType(in) return homeDataSource{ @@ -121,10 +123,10 @@ type homeDataSourceData struct { } type homeDataSource struct { - provider provider + provider tadoProvider } -func (d homeDataSource) Read(ctx context.Context, req tfsdk.ReadDataSourceRequest, resp *tfsdk.ReadDataSourceResponse) { +func (d homeDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) { var data homeDataSourceData diags := req.Config.Get(ctx, &data) diff --git a/internal/provider/provider.go b/internal/provider/provider.go index 026e028..7112e2d 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -7,6 +7,7 @@ import ( "github.com/gonzolino/gotado/v2" "github.com/hashicorp/terraform-plugin-framework/diag" + "github.com/hashicorp/terraform-plugin-framework/provider" "github.com/hashicorp/terraform-plugin-framework/tfsdk" "github.com/hashicorp/terraform-plugin-framework/types" ) @@ -18,11 +19,11 @@ const ( ) // Ensure provider defined types fully satisfy framework interfaces -var _ tfsdk.Provider = &provider{} +var _ provider.Provider = &tadoProvider{} -// provider satisfies the tfsdk.Provider interface and usually is included +// tadoProvider satisfies the provider.Provider interface and usually is included // with all Resource and DataSource implementations. -type provider struct { +type tadoProvider struct { // client can contain the upstream provider SDK or HTTP client used to // communicate with the upstream service. Resource and DataSource // implementations can then make calls using this client. @@ -48,7 +49,7 @@ type providerData struct { Password types.String `tfsdk:"password"` } -func (p *provider) Configure(ctx context.Context, req tfsdk.ConfigureProviderRequest, resp *tfsdk.ConfigureProviderResponse) { +func (p *tadoProvider) Configure(ctx context.Context, req provider.ConfigureRequest, resp *provider.ConfigureResponse) { var data providerData diags := req.Config.Get(ctx, &data) resp.Diagnostics.Append(diags...) @@ -94,20 +95,20 @@ func (p *provider) Configure(ctx context.Context, req tfsdk.ConfigureProviderReq p.configured = true } -func (p *provider) GetResources(ctx context.Context) (map[string]tfsdk.ResourceType, diag.Diagnostics) { - return map[string]tfsdk.ResourceType{ +func (p *tadoProvider) GetResources(ctx context.Context) (map[string]provider.ResourceType, diag.Diagnostics) { + return map[string]provider.ResourceType{ "tado_geofencing": geofencingResourceType{}, }, nil } -func (p *provider) GetDataSources(ctx context.Context) (map[string]tfsdk.DataSourceType, diag.Diagnostics) { - return map[string]tfsdk.DataSourceType{ +func (p *tadoProvider) GetDataSources(ctx context.Context) (map[string]provider.DataSourceType, diag.Diagnostics) { + return map[string]provider.DataSourceType{ "tado_home": homeDataSourceType{}, "tado_zone": zoneDataSourceType{}, }, nil } -func (p *provider) GetSchema(ctx context.Context) (tfsdk.Schema, diag.Diagnostics) { +func (p *tadoProvider) GetSchema(ctx context.Context) (tfsdk.Schema, diag.Diagnostics) { return tfsdk.Schema{ Attributes: map[string]tfsdk.Attribute{ "username": { @@ -125,9 +126,9 @@ func (p *provider) GetSchema(ctx context.Context) (tfsdk.Schema, diag.Diagnostic }, nil } -func New(version string) func() tfsdk.Provider { - return func() tfsdk.Provider { - return &provider{ +func New(version string) func() provider.Provider { + return func() provider.Provider { + return &tadoProvider{ version: version, } } @@ -138,17 +139,17 @@ func New(version string) func() tfsdk.Provider { // this helper can be skipped and the provider type can be directly type // asserted (e.g. provider: in.(*provider)), however using this can prevent // potential panics. -func convertProviderType(in tfsdk.Provider) (provider, diag.Diagnostics) { +func convertProviderType(in provider.Provider) (tadoProvider, diag.Diagnostics) { var diags diag.Diagnostics - p, ok := in.(*provider) + p, ok := in.(*tadoProvider) if !ok { diags.AddError( "Unexpected Provider Instance Type", fmt.Sprintf("While creating the data source or resource, an unexpected provider type (%T) was received. This is always a bug in the provider code and should be reported to the provider developers.", p), ) - return provider{}, diags + return tadoProvider{}, diags } if p == nil { @@ -156,7 +157,7 @@ func convertProviderType(in tfsdk.Provider) (provider, diag.Diagnostics) { "Unexpected Provider Instance Type", "While creating the data source or resource, an unexpected empty provider instance was received. This is always a bug in the provider code and should be reported to the provider developers.", ) - return provider{}, diags + return tadoProvider{}, diags } return *p, diags diff --git a/internal/provider/zone_data_source.go b/internal/provider/zone_data_source.go index 5195f63..6cbce9c 100644 --- a/internal/provider/zone_data_source.go +++ b/internal/provider/zone_data_source.go @@ -4,14 +4,16 @@ import ( "context" "fmt" + "github.com/hashicorp/terraform-plugin-framework/datasource" "github.com/hashicorp/terraform-plugin-framework/diag" + "github.com/hashicorp/terraform-plugin-framework/provider" "github.com/hashicorp/terraform-plugin-framework/tfsdk" "github.com/hashicorp/terraform-plugin-framework/types" ) // Ensure provider defined types fully satisfy framework interfaces -var _ tfsdk.DataSourceType = zoneDataSourceType{} -var _ tfsdk.DataSource = zoneDataSource{} +var _ provider.DataSourceType = zoneDataSourceType{} +var _ datasource.DataSource = zoneDataSource{} type zoneDataSourceType struct{} @@ -60,7 +62,7 @@ func (zoneDataSourceType) GetSchema(_ context.Context) (tfsdk.Schema, diag.Diagn }, nil } -func (zoneDataSourceType) NewDataSource(_ context.Context, in tfsdk.Provider) (tfsdk.DataSource, diag.Diagnostics) { +func (zoneDataSourceType) NewDataSource(_ context.Context, in provider.Provider) (datasource.DataSource, diag.Diagnostics) { provider, diags := convertProviderType(in) return zoneDataSource{ @@ -79,10 +81,10 @@ type zoneDataSourceData struct { } type zoneDataSource struct { - provider provider + provider tadoProvider } -func (d zoneDataSource) Read(ctx context.Context, req tfsdk.ReadDataSourceRequest, resp *tfsdk.ReadDataSourceResponse) { +func (d zoneDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) { var data zoneDataSourceData diags := req.Config.Get(ctx, &data)