Duplicated code between resources and data sources
For the data sources that we have, the code is almost entirely duplicated from the corresponding resource. This creates problems:
- They become out of sync (For example, someone adds an attribute to a resource without updating the data source).
- Managing a data source for each resource is a large enough burden that we usually do not do it.
This is especially egregious for large resources like gitlab_project
with many fields that are difficult to audit for consistency across the resource and data source.
I'm wondering if we can generate the data source based on the resource? The "read" function is always the same across the two. The only differences between a data source and resource are:
- Data source fields are always computed
- The required fields can be different (for example a
gitlab_user
can be looked up by its ID, username, or email)
Possible strategies: https://github.com/hashicorp/terraform-provider-google/blob/1a72f93a8dcf6f1e59d5f25aefcb6d794a116bf5/google/datasource_helpers.go#L13