Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tfsdk: Migrate data source, provider, and resource types into new Go packages #432

Merged
merged 3 commits into from Aug 2, 2022

Commits on Aug 1, 2022

  1. tfsdk: Migrate data source, provider, and resource types into new Go …

    …packages
    
    Reference: #132
    Reference: #365
    Reference: #366
    
    Since the framework's initial release, the `tfsdk` Go package has been a monolithic collection of various provider concepts, including but not limited to handling of data sources, providers, resources, schemas, schema data (such as `Config`, `Plan`, and `State`), and various other helpers. For framework maintainers, this monolithic package has made implementations difficult for certain enhancements, such as import cycles. For provider developers, this monolithic package has been difficult to navigate in the Go documentation. This change represents the first major provider coding paradigm shift to colocate related concepts into their own Go packages, starting with new top-level `datasource`, `provider`, and `resource` packages.
    
    This particular change and method (no deprecation period) was not desired, but it was unavoidable due to the interconnectedness of the `tfsdk` package and due to the amount of effort it would require to attempt to support both the old and new types. This change is necessary to complete before there are additional code compatibility promises added to this Go module, such as a version 1.0.0 release or release candidate.
    
    This type of change is not taken lightly, as it is quite disruptive for existing provider codebases. On the surface, this change may look fairly unbeneficial for provider developers other than the easier discoverability and reduced wordiness, however it is required to unblock other future refactoring and enhancement efforts in the framework. It is unclear at the time of writing whether splitting out the other concepts from the `tfsdk` package, such as schemas, will present the same issues. Regardless, any other major changes will be spread across releases.
    
    Provider developers should be able to update their code using find and replace operations using the tables below.
    
    To reduce framework maintainer review burden, all code migrations were lift and shift operations while most code and documentation updates were find and replace operations.
    
    | Prior tfsdk Package Type | New provider Package Type |
    | --- | --- |
    | `tfsdk.ConfigureProviderRequest` | `provider.ConfigureRequest` |
    | `tfsdk.ConfigureProviderResponse` | `provider.ConfigureResponse` |
    | `tfsdk.Provider` | `provider.Provider` |
    | `tfsdk.ProviderConfigValidator` | `provider.ConfigValidator` |
    | `tfsdk.ProviderWithConfigValidators` | `provider.ProviderWithConfigValidators` |
    | `tfsdk.ProviderWithProviderMeta` | `provider.ProviderWithMetaSchema` (note naming realignment) |
    | `tfsdk.ProviderWithValidateConfig` | `provider.ProviderWithValidateConfig` |
    | `tfsdk.ValidateProviderConfigRequest` | `provider.ValidateConfigRequest` |
    | `tfsdk.ValidateProviderConfigResponse` | `provider.ValidateConfigResponse` |
    
    The `DataSourceType` abstraction migrates to the `provider` package since it relates to data that must be populated before the provider is configured as well as being passed the `Provider` interface, which can be converted into a concrete Go type when creating a `DataSource`. Other data source concept types are migrated to a new `datasource` package.
    
    | Prior tfsdk Package Type | New provider Package Type |
    | --- | --- |
    | `tfsdk.DataSourceType` | `provider.DataSourceType` |
    
    | Prior tfsdk Package Type | New datasource Package Type |
    | --- | --- |
    | `tfsdk.DataSource` | `datasource.DataSource` |
    | `tfsdk.DataSourceConfigValidator` | `datasource.ConfigValidator` |
    | `tfsdk.DataSourceWithConfigValidators` | `datasource.DataSourceWithConfigValidators` |
    | `tfsdk.DataSourceWithValidateConfig` | `datasource.DataSourceWithValidateConfig` |
    | `tfsdk.ReadDataSourceRequest` | `datasource.ReadRequest` |
    | `tfsdk.ReadDataSourceResponse` | `datasource.ReadResponse` |
    | `tfsdk.ValidateDataSourceConfigRequest` | `datasource.ValidateConfigRequest` |
    | `tfsdk.ValidateDataSourceConfigResponse` | `datasource.ValidateConfigResponse` |
    
    The `ResourceType` abstraction migrates to the `provider` package since it relates to data that must be populated before the provider is configured as well as being passed the `Provider` interface, which can be converted into a concrete Go type when creating a `Resource`. Other resource concept types are migrated to a new `resource` package.
    
    Additionally, the `tfsdk.ResourceImportStatePassthroughID()` function has been migrated to `resource.ImportStatePassthroughID()`.
    
    | Prior tfsdk Package Type | New provider Package Type |
    | --- | --- |
    | `tfsdk.ResourceType` | `provider.ResourceType` |
    
    | Prior tfsdk Package Type | New resource Package Type |
    | --- | --- |
    | `tfsdk.CreateResourceRequest` | `resource.CreateRequest` |
    | `tfsdk.CreateResourceResponse` | `resource.CreateResponse` |
    | `tfsdk.DeleteResourceRequest` | `resource.DeleteRequest` |
    | `tfsdk.DeleteResourceResponse` | `resource.DeleteResponse` |
    | `tfsdk.ImportResourceStateRequest` | `resource.ImportStateRequest` |
    | `tfsdk.ImportResourceStateResponse` | `resource.ImportStateResponse` |
    | `tfsdk.ModifyResourcePlanRequest` | `resource.ModifyPlanRequest` |
    | `tfsdk.ModifyResourcePlanResponse` | `resource.ModifyPlanResponse` |
    | `tfsdk.ReadResourceRequest` | `resource.ReadRequest` |
    | `tfsdk.ReadResourceResponse` | `resource.ReadResponse` |
    | `tfsdk.Resource` | `resource.Resource` |
    | `tfsdk.ResourceConfigValidator` | `resource.ConfigValidator` |
    | `tfsdk.ResourceWithConfigValidators` | `resource.ResourceWithConfigValidators` |
    | `tfsdk.ResourceWithImportState` | `resource.ResourceWithImportState` |
    | `tfsdk.ResourceWithModifyPlan` | `resource.ResourceWithModifyPlan` |
    | `tfsdk.ResourceWithUpgradeState` | `resource.ResourceWithUpgradeState` |
    | `tfsdk.ResourceWithValidateConfig` | `resource.ResourceWithValidateConfig` |
    | `tfsdk.UpdateResourceRequest` | `resource.UpdateRequest` |
    | `tfsdk.UpdateResourceResponse` | `resource.UpdateResponse` |
    | `tfsdk.UpgradeResourceStateRequest` | `resource.UpgradeStateRequest` |
    | `tfsdk.UpgradeResourceStateResponse` | `resource.UpgradeStateResponse` |
    | `tfsdk.ValidateResourceConfigRequest` | `resource.ValidateConfigRequest` |
    | `tfsdk.ValidateResourceConfigResponse` | `resource.ValidateConfigResponse` |
    bflad committed Aug 1, 2022
    Copy the full SHA
    a278d0a View commit details
    Browse the repository at this point in the history
  2. Update CHANGELOG for #432

    bflad committed Aug 1, 2022
    Copy the full SHA
    d56ea09 View commit details
    Browse the repository at this point in the history
  3. Copy the full SHA
    0062c6c View commit details
    Browse the repository at this point in the history