-
Notifications
You must be signed in to change notification settings - Fork 9.6k
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
Backend/azure/update to latest sdks #36258
base: main
Are you sure you want to change the base?
Backend/azure/update to latest sdks #36258
Conversation
…-11-09 to 2023-11-03
The failed "Unit Tests" is not related to this PR. |
Thanks for this submission, I let the HashiCorp Azure team know about this PR. |
I'll stop resolving the go.mod/sum file conflicts until before the final merge. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey @magodo, I went ahead and gave it a review and it mostly looks good outside of the things I've called out. Let me know if you have any questions around any of it
go.mod
Outdated
@@ -240,9 +239,12 @@ require ( | |||
github.com/tencentyun/cos-go-sdk-v5 v0.7.42 // indirect | |||
github.com/thanhpk/randstr v1.0.6 // indirect | |||
github.com/thlib/go-timezone-local v0.0.3 // indirect | |||
github.com/tombuildsstuff/giovanni v0.15.1 // indirect | |||
github.com/tombuildsstuff/giovanni v0.27.0 // indirect |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We're looking to move away from Toms sdk and this should be swapped to https://github.com/jackofallops/giovanni
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Got it, thx!
t.Fatalf("Missing ARM_TENANT_ID") | ||
} | ||
|
||
location := os.Getenv("ARM_TEST_LOCATION") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To keep this consistent with our current tests, we should swap this to ARM_LOCATION
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Following is the grep from v4.16.0:
terraform-provider-azurerm on HEAD (f54480d) via 🐹 v1.23.3
💤 grep -r "ARM_TEST_LOCATION" .
./DEVELOPER.md:- `ARM_TEST_LOCATION`
./DEVELOPER.md:- `ARM_TEST_LOCATION_ALT`
./DEVELOPER.md:- `ARM_TEST_LOCATION_ALT2`
./vendor/github.com/magodo/terraform-provider-azurerm-example-gen/examplegen/gen.go: // - ARM_TEST_LOCATION
./vendor/github.com/magodo/terraform-provider-azurerm-example-gen/examplegen/gen.go: // - ARM_TEST_LOCATION_ALT1
./vendor/github.com/magodo/terraform-provider-azurerm-example-gen/examplegen/gen.go: // - ARM_TEST_LOCATION_ALT2
./vendor/github.com/magodo/terraform-provider-azurerm-example-gen/examplegen/gen.go: if os.Getenv("ARM_TEST_LOCATION") == "" {
./vendor/github.com/magodo/terraform-provider-azurerm-example-gen/examplegen/gen.go: cmd.Env = append(os.Environ(), "ARM_TEST_LOCATION=WestEurope")
./vendor/github.com/magodo/terraform-provider-azurerm-example-gen/examplegen/gen.go: if os.Getenv("ARM_TEST_LOCATION_ALT1") == "" {
./vendor/github.com/magodo/terraform-provider-azurerm-example-gen/examplegen/gen.go: cmd.Env = append(os.Environ(), "ARM_TEST_LOCATION_ALT1=WestUS")
./vendor/github.com/magodo/terraform-provider-azurerm-example-gen/examplegen/gen.go: if os.Getenv("ARM_TEST_LOCATION_ALT2") == "" {
./vendor/github.com/magodo/terraform-provider-azurerm-example-gen/examplegen/gen.go: cmd.Env = append(os.Environ(), "ARM_TEST_LOCATION_ALT2=WestUS2")
./contributing/topics/running-the-tests.md:* `ARM_TEST_LOCATION`
./contributing/topics/running-the-tests.md:* `ARM_TEST_LOCATION_ALT`
./contributing/topics/running-the-tests.md:* `ARM_TEST_LOCATION_ALT2`
./internal/acceptance/data.go: Primary: os.Getenv("ARM_TEST_LOCATION"),
./internal/acceptance/data.go: Secondary: os.Getenv("ARM_TEST_LOCATION_ALT"),
./internal/acceptance/data.go: Ternary: os.Getenv("ARM_TEST_LOCATION_ALT2"),
./internal/acceptance/testing.go: "ARM_TEST_LOCATION",
./internal/acceptance/testing.go: "ARM_TEST_LOCATION_ALT",
./internal/acceptance/testing.go: "ARM_TEST_LOCATION_ALT2",
./internal/acceptance/locations.go: os.Getenv("ARM_TEST_LOCATION"),
./internal/acceptance/locations.go: os.Getenv("ARM_TEST_LOCATION_ALT"),
./internal/acceptance/locations.go: os.Getenv("ARM_TEST_LOCATION_ALT2"),
./.teamcity/components/build_azure.kt: hiddenVariable("env.ARM_TEST_LOCATION", locationsForEnv.primary, "The Primary region which should be used for testing")
./.teamcity/components/build_azure.kt: hiddenVariable("env.ARM_TEST_LOCATION_ALT", locationsForEnv.secondary, "The Secondary region which should be used for testing")
./.teamcity/components/build_azure.kt: hiddenVariable("env.ARM_TEST_LOCATION_ALT2", locationsForEnv.tertiary, "The Tertiary region which should be used for testing")
terraform-provider-azurerm on HEAD (f54480d) via 🐹 v1.23.3
💤 grep -r "ARM_LOCATION" .
# Nothing
Could you please double confirm ARM_LOCATION
is now used in preference to ARM_TEST_LOCATION
?
|
||
// newCtx creates a context with a (meaningless) deadline. | ||
// This is only to make the go-azure-sdk/sdk/client Client happy. | ||
func newCtx() context.Context { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't fully understand this change. If I swap this change back to context.TODO()
the backend still seems to work. Can you elaborate a bit more on what issues you are seeing with this
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You'll get an error like below:
2025/01/20 13:22:18 Creating Resource Group "acctestRG-backend-25012013221826-9rd0jbe38q"
2025/01/20 13:22:18 [DEBUG] Deleting Resource Group "acctestRG-backend-25012013221826-9rd0jbe38q"..
client_test.go:28: Error creating Test Resources: "failed to create test resource group: the context used must have a deadline attached for polling purposes, but got no deadline"
This is derived from, e.g. go-azure-sdk/sdk/client/resourcemanager/client.go:
func (c *Client) NewRequest(ctx context.Context, input client.RequestOptions) (*client.Request, error) {
// TODO move these validations to base client method
if _, ok := ctx.Deadline(); !ok {
return nil, fmt.Errorf("the context used must have a deadline attached for polling purposes, but got no deadline")
}
"endpoint": { | ||
Type: schema.TypeString, | ||
Optional: true, | ||
Deprecated: "`endpoint` is deprecated and no longer used, it will be removed in a future version of Terraform", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this be deprecated?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is marked as deprecated when I took over the PR from Tom B. I think the main reason is that this field is not used in the azurerm provider (probably is superseded by the msi_endpoint
).
return nil, nil | ||
} | ||
return nil, err | ||
} | ||
|
||
if blob.Contents == nil { | ||
return nil, nil |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this the expected behavior here or should we return an error?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This one is also taken from the branch of Tom. I think the sanity here is that the Client.Get()
accept there is no remote state:
terraform/internal/states/remote/state.go
Lines 138 to 149 in ba8d180
payload, err := s.Client.Get() | |
if err != nil { | |
return err | |
} | |
// no remote state is OK | |
if payload == nil { | |
s.readState = nil | |
s.lineage = "" | |
s.serial = 0 | |
return nil | |
} |
The other implementation of the State
do the same thing, e.g.:
terraform/internal/backend/remote-state/consul/client.go
Lines 80 to 87 in ba8d180
chunked, hash, chunks, pair, err := c.chunkedMode() if err != nil { return nil, err } if pair == nil { return nil, nil } terraform/internal/backend/remote-state/cos/client.go
Lines 47 to 54 in ba8d180
exists, data, checksum, err := c.getObject(c.stateFile) if err != nil { return nil, err } if !exists { return nil, nil }
This PR updates the
azure
backend authentication to match theterraform-provider-azurerm
provider authentication, in several ways:azurerm
provider v4.14.0)The backend configuration logic is updated to match the provider logic. As a result, some new properties are added:
use_cli
use_aks_workload_identity
client_id_file_path
client_certificate
client_id_file_path
client_secret_file_path
One implementation detail is that the using the same Azure storage dataplane SDK, the storage client requires a base URI of the storage account, which is derived by sending a GET to the storage account. This is skipped in case the storage shared access key or sas token is specified, which is to behave identically as the current version.
Also, this PR improves the acctests in following ways:
go test
is big enough to avoid env vars clean for the single process (launched bygo test
) won't interfere the paused tests.Fixes #34322
Target Release
1.11.0
Draft CHANGELOG entry
ENHANCEMENTS
Test