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

[WIP] Terraform plugin framework #3889

Draft
wants to merge 21 commits into
base: main
Choose a base branch
from
Draft

Conversation

mgyucht
Copy link
Contributor

@mgyucht mgyucht commented Aug 13, 2024

Changes

Tests

  • make test run locally
  • relevant change in docs/ folder
  • covered with integration tests in internal/acceptance
  • relevant acceptance tests are passing
  • using Go SDK

parthban-db and others added 19 commits July 4, 2024 14:27
* Add codegen template for tfsdk struct

* updated map and list

* -

* remove tf type for list and map

* comments

* added test again
#3780)

## Changes
<!-- Summary of your changes that are easy to understand -->
Rebase the Plugin Framework branch to latest main + resolve conflicts:
9e8fd30

This needs to be merged before
#3719
can be merged. Rebasing the PR over main will lead to many
commits/changes so separating them in this PR.

## Tests
<!-- 
How is this tested? Please see the checklist below and also describe any
other relevant tests
-->
Unit tests 
- [ ] `make test` run locally
- [ ] relevant change in `docs/` folder
- [ ] covered with integration tests in `internal/acceptance`
- [ ] relevant acceptance tests are passing
- [ ] using Go SDK

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: vuong-nguyen <[email protected]>
Co-authored-by: Alex Moschos <[email protected]>
Co-authored-by: hectorcast-db <[email protected]>
Co-authored-by: Aleksandar Dragojević <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alex Ott <[email protected]>
Co-authored-by: Karol <[email protected]>
Co-authored-by: touchida <[email protected]>
Co-authored-by: Miles Yucht <[email protected]>
Co-authored-by: Pieter Noordhuis <[email protected]>
Co-authored-by: mkubicek <[email protected]>
Co-authored-by: Renaud Hartert <[email protected]>
Co-authored-by: Divyansh Vijayvergia <[email protected]>
… SDK plugin (#3719)

## Changes
<!-- Summary of your changes that are easy to understand -->
Upgrade SDK plugin to use protocol version 6 as this will be used
further for introducing plugin framework. We need to mux them (i.e.
support both sdkv2 and plugin framework) until all resources are
migrated to plugin framework.

Reference for PR on main branch:
#3714,
this PR against the main branch will be used to get the binary for
testing with data team.

## Tests
<!-- 
How is this tested? Please see the checklist below and also describe any
other relevant tests
-->
All Unit and Integration test passed.
- [x] `make test` run locally
- [ ] relevant change in `docs/` folder
- [ ] covered with integration tests in `internal/acceptance`
- [x] relevant acceptance tests are passing
- [ ] using Go SDK
## Changes
<!-- Summary of your changes that are easy to understand -->
- Baisc functionality for `StructToSchema`, everything is `Optional` now
- Need to do:
  - Implement equivalent for `CustomizableSchema`
  - Make tfsdk structs contain information about optional and computed
  - Handle recursive data types

## Tests
<!-- 
How is this tested? Please see the checklist below and also describe any
other relevant tests
-->

- [x] `make test` run locally
- [x] relevant change in `docs/` folder
- [x] covered with integration tests in `internal/acceptance`
- [x] relevant acceptance tests are passing
- [x] using Go SDK
## Changes
<!-- Summary of your changes that are easy to understand -->
- Added new `tf` tag in the `tfsdk` structs
- Made `StructToSchema` able to parse and handle optional vs required
fields

## Tests
<!-- 
How is this tested? Please see the checklist below and also describe any
other relevant tests
-->

- [x] `make test` run locally
- [x] relevant change in `docs/` folder
- [x] covered with integration tests in `internal/acceptance`
- [x] relevant acceptance tests are passing
- [x] using Go SDK
## Changes
<!-- Summary of your changes that are easy to understand -->
- Make the two converter functions + StructToSchema work for Enum types
- We do not need to use `types.String` for Enum types as they do not
have a force send zero value problem
- Adding a unit test test case

## Tests
<!-- 
How is this tested? Please see the checklist below and also describe any
other relevant tests
-->

- [x] `make test` run locally
- [x] relevant change in `docs/` folder
- [x] covered with integration tests in `internal/acceptance`
- [x] relevant acceptance tests are passing
- [x] using Go SDK
## Changes
<!-- Summary of your changes that are easy to understand -->
- Added basic supports for CustomizableSchema
- Able to add, remove fields and navigate through the schema
- Feature support matrix:
https://docs.google.com/document/d/1ofoLi9vlu-4L-89kBOYPbpOpPk0GZghZcC5SgnBH4ZM/edit#heading=h.wi3qt4pwk7q4

## Tests
<!-- 
How is this tested? Please see the checklist below and also describe any
other relevant tests
-->

- [x] `make test` run locally
- [x] relevant change in `docs/` folder
- [x] covered with integration tests in `internal/acceptance`
- [x] relevant acceptance tests are passing
- [x] using Go SDK
## Changes
<!-- Summary of your changes that are easy to understand -->
This PR introduces plugin framework to the Databricks Terraform
Provider.
- Introduce plugin framework
- Add core support for resource and data source. 
- Add provider schema
- Add support to configure databricks client
- Add support for provider fixture
- Add support to get raw config to be used in provider tests and further
in unit testing framework.
- Add Quality Monitor resource using plugin framework
- Add UC Volumes data source using plugin framework
- Fix bugs related in configuring client
- Fix bugs where provider schema is used instead of resource schema
- Fix miscellaneous bugs 

## Tests
<!-- 
How is this tested? Please see the checklist below and also describe any
other relevant tests
-->
- Run existing provider tests also for plugin framework. All passes. 
- Manually tested the above 2 resources E2E (apply works for data
source, for resource -- we need customise schema support for
`SetReadOnly`)

Note: We don't have unit and integration test support as of now, so
going ahead with commiting the .tf files for these resources so we can
test the changes in the meantime. Once we have proper support, these can
be converted to example or removed.

<img width="569" alt="image"
src="https://github.com/user-attachments/assets/869cacd7-a471-49db-93de-1a7bbb8b5ea7">

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: vuong-nguyen <[email protected]>
Co-authored-by: Alex Moschos <[email protected]>
Co-authored-by: hectorcast-db <[email protected]>
Co-authored-by: Aleksandar Dragojević <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alex Ott <[email protected]>
Co-authored-by: Karol <[email protected]>
Co-authored-by: touchida <[email protected]>
Co-authored-by: Miles Yucht <[email protected]>
## Changes
<!-- Summary of your changes that are easy to understand -->
- Support `SetReadOnly` in `CustomizableSchema` for terraform plugin
framework

## Tests
<!-- 
How is this tested? Please see the checklist below and also describe any
other relevant tests
-->

- [x] `make test` run locally
- [x] relevant change in `docs/` folder
- [x] covered with integration tests in `internal/acceptance`
- [x] relevant acceptance tests are passing
- [x] using Go SDK
## Changes
<!-- Summary of your changes that are easy to understand -->
- Bump up to the latest released version

## Tests
<!-- 
How is this tested? Please see the checklist below and also describe any
other relevant tests
-->

- [x] `make test` run locally
- [x] relevant change in `docs/` folder
- [x] covered with integration tests in `internal/acceptance`
- [x] relevant acceptance tests are passing
- [x] using Go SDK
## Changes
<!-- Summary of your changes that are easy to understand -->
- Part of making acceptance test pass:
#3841
- Update `ResourceQualityMonitor` to make it pass acceptance test
- Commented out adding two new fields temporarily because we need to
have those fields in the tfsdk struct, otherwise `.get()` and `.set()`
don't work
- Updated the target struct for `.get` calls to be `MonitorInfo` because
terraform requires that to be consistent with the schema
- Added logic at the end of `Create` and `Update` to read the latest
`monitorInfo` and set the state

## Tests
<!-- 
How is this tested? Please see the checklist below and also describe any
other relevant tests
-->

- [x] `make test` run locally
- [x] relevant change in `docs/` folder
- [x] covered with integration tests in `internal/acceptance`
- [x] relevant acceptance tests are passing
- [x] using Go SDK
## Changes
<!-- Summary of your changes that are easy to understand -->
- These enums have to be strings instead of the indirect types that they
used to be, otherwise `.get` and `.set` does not work properly
- First part of making the acceptance test work as specified here
#3841

## Tests
<!-- 
How is this tested? Please see the checklist below and also describe any
other relevant tests
-->

- [ ] `make test` run locally
- [ ] relevant change in `docs/` folder
- [ ] covered with integration tests in `internal/acceptance`
- [ ] relevant acceptance tests are passing
- [ ] using Go SDK
…#3854)

## Changes
<!-- Summary of your changes that are easy to understand -->
- Subpart of
#3841
- Updated reflect_resource_plugin_framework to handle cases
- When a field in the given source struct is nil, the converter function
has to be able to handle it
  - Handle enums in tfsdk structs as types.String
- When a field does not exist on the destination struct, ignore the
field
- Added unit test for the cases mentioned above

## Tests
<!-- 
How is this tested? Please see the checklist below and also describe any
other relevant tests
-->

- [x] `make test` run locally
- [x] relevant change in `docs/` folder
- [x] covered with integration tests in `internal/acceptance`
- [x] relevant acceptance tests are passing
- [x] using Go SDK
…mework (#3868)

## Changes
<!-- Summary of your changes that are easy to understand -->
- Removing these two methods as they will cause the schema and the
struct to be inconsistent

## Tests
<!-- 
How is this tested? Please see the checklist below and also describe any
other relevant tests
-->

- [x] `make test` run locally
- [x] relevant change in `docs/` folder
- [x] covered with integration tests in `internal/acceptance`
- [x] relevant acceptance tests are passing
- [x] using Go SDK
## Changes
<!-- Summary of your changes that are easy to understand -->
- Part of
#3841
- Migrated imports following the documentation
[here](https://developer.hashicorp.com/terraform/plugin/testing/migrating)
  - 
<img width="688" alt="image"
src="https://github.com/user-attachments/assets/f2f14175-f3f8-47b7-a19f-1f0fca13eb47">

- Made `run` in `init_test` able to take both plugin framework resources
as well as sdkv2 resources

## Tests
<!-- 
How is this tested? Please see the checklist below and also describe any
other relevant tests
-->

- [x] `make test` run locally
- [x] relevant change in `docs/` folder
- [x] covered with integration tests in `internal/acceptance`
- [x] relevant acceptance tests are passing
- [x] using Go SDK
## Changes
<!-- Summary of your changes that are easy to understand -->
- Add two more test cases replicating existing test case for quality
monitor resource, but for the plugin framework
- Manually executed the tests to make sure they are passing
- Taking out the manual read check at the end of each test step as
suggested
[here](#3867 (comment))
because the type casting for clients is causing issue for plugin
framework tests

## Tests
<!-- 
How is this tested? Please see the checklist below and also describe any
other relevant tests
-->

- [x] `make test` run locally
- [x] relevant change in `docs/` folder
- [x] covered with integration tests in `internal/acceptance`
- [x] relevant acceptance tests are passing
- [x] using Go SDK
## Changes
<!-- Summary of your changes that are easy to understand -->
- Make `ids` computed
- Add test case for `data_volumes_pluginframework`

## Tests
<!-- 
How is this tested? Please see the checklist below and also describe any
other relevant tests
-->

- [ ] `make test` run locally
- [ ] relevant change in `docs/` folder
- [ ] covered with integration tests in `internal/acceptance`
- [ ] relevant acceptance tests are passing
- [ ] using Go SDK
.codegen/model.go.tmpl Show resolved Hide resolved
.codegen/model.go.tmpl Outdated Show resolved Hide resolved
.codegen/model.go.tmpl Outdated Show resolved Hide resolved
.codegen.json Outdated Show resolved Hide resolved
@@ -0,0 +1,347 @@
package common
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Plugin framework code to its own package.

"github.com/hashicorp/terraform-plugin-framework/resource/schema"
)

type CustomizableSchemaPluginFramework struct {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

doccoment?

cb := func(attr schema.Attribute) schema.Attribute {
val := reflect.ValueOf(attr)

// Make a copy of the existing attr.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We may want to fail if the underlying struct is already set properly (e.g. if read-only can be inferred from OpenAPI spec and it is added to TF structs, force us to remove any manual readonly annotations to remove redundant customizations).

edwardfeng-db and others added 2 commits August 15, 2024 14:38
## Changes
<!-- Summary of your changes that are easy to understand -->
- Addressing comments from
databricks/universe#682431
- Specifically
  - Removed unnecessary parts of the codegen template (map, enum)
  - Moved generated package into `internal/services`

## Tests
<!-- 
How is this tested? Please see the checklist below and also describe any
other relevant tests
-->

- [x] `make test` run locally
- [x] relevant change in `docs/` folder
- [x] covered with integration tests in `internal/acceptance`
- [x] relevant acceptance tests are passing
- [x] using Go SDK
…xed notification_destination acceptance tests. (#3892)

## Changes
<!-- Summary of your changes that are easy to understand -->
- Rebase to latest main
- Fixed merge conflicts
- Fixed notifications tests as they are incompatible with
terraform-plugin-testing because the test use a different type instead
of directly using the underlying type `func(*terraform.State) error`

## Tests
<!-- 
How is this tested? Please see the checklist below and also describe any
other relevant tests
-->
Existing unit tests + Verified that no unexpected changes are there by
creating draft PR over main:
#3893.
- [ ] `make test` run locally
- [ ] relevant change in `docs/` folder
- [ ] covered with integration tests in `internal/acceptance`
- [ ] relevant acceptance tests are passing
- [ ] using Go SDK

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: vuong-nguyen <[email protected]>
Co-authored-by: Alex Moschos <[email protected]>
Co-authored-by: hectorcast-db <[email protected]>
Co-authored-by: Aleksandar Dragojević <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alex Ott <[email protected]>
Co-authored-by: Karol <[email protected]>
Co-authored-by: touchida <[email protected]>
Co-authored-by: Miles Yucht <[email protected]>
Co-authored-by: Pieter Noordhuis <[email protected]>
Co-authored-by: mkubicek <[email protected]>
Co-authored-by: Renaud Hartert <[email protected]>
Co-authored-by: Divyansh Vijayvergia <[email protected]>
Co-authored-by: Arpit Jasapara <[email protected]>
Co-authored-by: Cedric <[email protected]>
Co-authored-by: Alex Ott <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants