CM-937: Automate e2e tests for Azure DNS01 AAD Workload Identity auth#375
CM-937: Automate e2e tests for Azure DNS01 AAD Workload Identity auth#375lunarwhite wants to merge 2 commits intoopenshift:masterfrom
Conversation
Majorly azure-sdk packages
|
@lunarwhite: This pull request references CM-937 which is a valid jira issue. Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.22.0" version, but no target version was set. DetailsIn response to this: Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
|
Skipping CI for Draft Pull Request. |
WalkthroughThis PR adds Azure and AWS cloud-workload identity support infrastructure to e2e ACME DNS-01 tests. Changes include Azure Managed Identity setup with federated credentials, role assignments, deployment label management helpers, and new cloud SDK dependencies for Azure and AWS. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Tip Try Coding Plans. Let us write the prompt for your AI agent so you can ship faster (with fewer bugs). Comment |
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: lunarwhite The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
|
@lunarwhite: This pull request references CM-937 which is a valid jira issue. Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.22.0" version, but no target version was set. DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (1)
test/e2e/issuer_acme_dns01_test.go (1)
1425-1427: Restore Azure auth env vars after setup to avoid cross-spec leakage.Lines 1425-1427 mutate process-global env and never revert it, which can bleed into later specs in the same process.
♻️ Suggested refactor
Expect(json.Unmarshal(data, &sp)).To(Succeed(), "failed to parse Azure credentials file") - os.Setenv("AZURE_CLIENT_ID", sp.ClientID) - os.Setenv("AZURE_CLIENT_SECRET", sp.ClientSecret) - os.Setenv("AZURE_TENANT_ID", sp.TenantID) + prevClientID, hadClientID := os.LookupEnv("AZURE_CLIENT_ID") + prevClientSecret, hadClientSecret := os.LookupEnv("AZURE_CLIENT_SECRET") + prevTenantID, hadTenantID := os.LookupEnv("AZURE_TENANT_ID") + + Expect(os.Setenv("AZURE_CLIENT_ID", sp.ClientID)).To(Succeed()) + Expect(os.Setenv("AZURE_CLIENT_SECRET", sp.ClientSecret)).To(Succeed()) + Expect(os.Setenv("AZURE_TENANT_ID", sp.TenantID)).To(Succeed()) + + DeferCleanup(func() { + if hadClientID { + _ = os.Setenv("AZURE_CLIENT_ID", prevClientID) + } else { + _ = os.Unsetenv("AZURE_CLIENT_ID") + } + if hadClientSecret { + _ = os.Setenv("AZURE_CLIENT_SECRET", prevClientSecret) + } else { + _ = os.Unsetenv("AZURE_CLIENT_SECRET") + } + if hadTenantID { + _ = os.Setenv("AZURE_TENANT_ID", prevTenantID) + } else { + _ = os.Unsetenv("AZURE_TENANT_ID") + } + })🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@test/e2e/issuer_acme_dns01_test.go` around lines 1425 - 1427, Before mutating AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, and AZURE_TENANT_ID with os.Setenv, capture their current values (using os.Getenv) and then defer restoring them after setup; if a captured value is empty, restore with os.Unsetenv, otherwise call os.Setenv to the previous value. Place this save-and-defer logic immediately around the existing os.Setenv calls so the test restores the original environment and avoids cross-spec leakage.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@test/e2e/issuer_acme_dns01_test.go`:
- Around line 1445-1448: The test dereferences rg.Location without guarding for
nil which can panic if Azure returns no Location; after calling rgClient.Get
(and the Expect on err), add a nil-check for rg.Location and fail the test or
use Expect(rg.Location).NotTo(BeNil(), "resource group Location is missing")
before using *rg.Location, then assign location := *rg.Location; ensure you
reference rg and rgClient.Get in the fix so the check sits immediately after the
Get/err assertion.
- Around line 1495-1506: In the wait.PollUntilContextTimeout retry loop around
authClient.Create (creating roleAssignmentName in dnsZoneScope), treat a failure
where the server reports the role assignment already exists as a success: after
calling authClient.Create and getting assignErr, detect the 409/Conflict with
ErrorCode "RoleAssignmentExists" (inspect the error type returned by the Azure
SDK for the status code/ErrorCode) and return true,nil so the loop exits
successfully; otherwise continue returning false,nil for transient errors as
before.
In `@test/e2e/utils_test.go`:
- Around line 842-849: The pod-label matcher in
waitForDeploymentPodLabelAndRollout can falsely succeed when the label key is
missing because labels[labelKey] returns "" for absent keys; modify the
predicate passed to waitForDeploymentConditionAndRollout to verify the key
exists (use the map lookup form, e.g., val, ok := labels[labelKey]) and return
ok && val == labelValue so the matcher requires presence and value equality;
update the anonymous function inside waitForDeploymentPodLabelAndRollout
accordingly (referencing waitForDeploymentPodLabelAndRollout and
waitForDeploymentConditionAndRollout).
---
Nitpick comments:
In `@test/e2e/issuer_acme_dns01_test.go`:
- Around line 1425-1427: Before mutating AZURE_CLIENT_ID, AZURE_CLIENT_SECRET,
and AZURE_TENANT_ID with os.Setenv, capture their current values (using
os.Getenv) and then defer restoring them after setup; if a captured value is
empty, restore with os.Unsetenv, otherwise call os.Setenv to the previous value.
Place this save-and-defer logic immediately around the existing os.Setenv calls
so the test restores the original environment and avoids cross-spec leakage.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 1036b206-f410-4cdf-a650-ef48d4cd42e5
⛔ Files ignored due to path filters (287)
test/go.sumis excluded by!**/*.sumvendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/CHANGELOG.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/LICENSE.txtis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource/resource_identifier.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource/resource_type.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/policy/policy.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/resource_identifier.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/resource_type.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/pipeline.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_bearer_token.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_register_rp.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_trace_namespace.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/runtime.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/ci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/cloud.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/core.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/errors.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/etag.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/exported.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/pipeline.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/request.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/response_error.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log/log.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/async/async.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/body/body.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/fake/fake.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/loc/loc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/op/op.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/poller.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/util.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/constants.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/shared.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/log.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/policy.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/errors.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pager.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pipeline.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_api_version.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_bearer_token.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_body_download.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_header.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_trace.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_include_response.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_key_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_logging.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_request_id.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_retry.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_sas_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_telemetry.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/poller.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/request.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/response.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_other.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_wasm.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_http_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/progress.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/to/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/to/to.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/constants.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/tracing.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/BREAKING_CHANGES.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/CHANGELOG.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/LICENSE.txtis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/MIGRATION.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/TOKEN_CACHING.MDis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/TROUBLESHOOTING.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/assets.jsonis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/authentication_record.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azidentity.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_cli_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_developer_cli_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_pipelines_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/chained_token_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/ci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_assertion_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_certificate_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_secret_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/confidential_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/default_azure_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/developer_credential_util.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/device_code_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/environment_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/errors.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/go.workis excluded by!**/*.work,!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/interactive_browser_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/internal/cache.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/logging.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/managed-identity-matrix.jsonis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/managed_identity_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/managed_identity_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/on_behalf_of_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/public_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/test-resources-post.ps1is excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/test-resources-pre.ps1is excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/test-resources.bicepis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/username_password_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/version.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/workload_identity.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/LICENSE.txtis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/diag.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/errorinfo.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/exported/exported.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/log.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/poller/util.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/temporal/resource.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/uuid.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/CHANGELOG.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/LICENSE.txtis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/autorest.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/build.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/ci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/classicadministrators_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/client_factory.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/constants.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/denyassignments_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/eligiblechildresources_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/globaladministrator_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/interfaces.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/models.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/models_serde.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/options.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/permissions_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/polymorphic_helpers.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/provideroperationsmetadata_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/response_types.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/roleassignments_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/roleassignmentscheduleinstances_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/roleassignmentschedulerequests_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/roleassignmentschedules_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/roledefinitions_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/roleeligibilityscheduleinstances_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/roleeligibilityschedulerequests_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/roleeligibilityschedules_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/rolemanagementpolicies_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/rolemanagementpolicyassignments_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2/time_rfc3339.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi/CHANGELOG.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi/LICENSE.txtis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi/assets.jsonis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi/autorest.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi/build.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi/ci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi/client_factory.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi/constants.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi/federatedidentitycredentials_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi/models.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi/models_serde.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi/operations_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi/options.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi/responses.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi/systemassignedidentities_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi/time_rfc3339.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi/userassignedidentities_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/CHANGELOG.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/LICENSE.txtis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/assets.jsonis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/autorest.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/build.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/ci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/client_factory.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/constants.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/deploymentoperations_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/deployments_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/models.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/models_serde.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/operations_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/options.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/providerresourcetypes_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/providers_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/resourcegroups_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/response_types.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/tags_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources/time_rfc3339.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/cache/cache.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/confidential/confidential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/errors/error_design.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/errors/errors.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/base.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/storage/items.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/storage/partitioned_storage.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/storage/storage.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/exported/exported.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/design.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/json.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/mapslice.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/marshal.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/struct.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/types/time/time.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/local/server.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/oauth.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens/accesstokens.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens/apptype_string.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens/tokens.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority/authority.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority/authorizetype_string.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/comm/comm.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/comm/compress.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/grant/grant.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/ops.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/endpointtype_string.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/mex_document_definitions.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/saml_assertion_definitions.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/version_string.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/wstrust_endpoint.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/wstrust_mex_document.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/wstrust.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/resolvers.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/options/options.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/shared/shared.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/version/version.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/managedidentity/azure_ml.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/managedidentity/cloud_shell.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/managedidentity/managedidentity.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/managedidentity/servicefabric.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/public/public.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/MIGRATION_GUIDE.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/SECURITY.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/VERSION_HISTORY.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/claims.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/ecdsa.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/ecdsa_utils.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/ed25519.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/ed25519_utils.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/errors.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/hmac.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/map_claims.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/none.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/parser.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/parser_option.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/registered_claims.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/rsa.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/rsa_pss.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/rsa_utils.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/signing_method.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/staticcheck.confis excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/token.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/token_option.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/types.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/golang-jwt/jwt/v5/validator.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/kylelemons/godebug/pretty/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/kylelemons/godebug/pretty/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/kylelemons/godebug/pretty/public.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/kylelemons/godebug/pretty/reflect.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/kylelemons/godebug/pretty/structure.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/pkg/browser/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/pkg/browser/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/pkg/browser/browser.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/pkg/browser/browser_darwin.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/pkg/browser/browser_freebsd.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/pkg/browser/browser_linux.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/pkg/browser/browser_netbsd.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/pkg/browser/browser_openbsd.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/pkg/browser/browser_unsupported.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/pkg/browser/browser_windows.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/crypto/pkcs12/bmp-string.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/crypto/pkcs12/crypto.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/crypto/pkcs12/errors.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/crypto/pkcs12/mac.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/crypto/pkcs12/pbkdf.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/crypto/pkcs12/pkcs12.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/crypto/pkcs12/safebags.gois excluded by!**/vendor/**,!vendor/**vendor/modules.txtis excluded by!**/vendor/**,!vendor/**
📒 Files selected for processing (3)
test/e2e/issuer_acme_dns01_test.gotest/e2e/utils_test.gotest/go.mod
| rg, err := rgClient.Get(ctx, clusterResourceGroup, nil) | ||
| Expect(err).NotTo(HaveOccurred(), "failed to get resource group") | ||
| location := *rg.Location | ||
|
|
There was a problem hiding this comment.
Guard nil Location before dereference.
Line 1447 can panic if Azure returns a resource group payload without Location.
🛡️ Suggested fix
rg, err := rgClient.Get(ctx, clusterResourceGroup, nil)
Expect(err).NotTo(HaveOccurred(), "failed to get resource group")
+ Expect(rg.Location).NotTo(BeNil(), "resource group location should be populated")
location := *rg.Location📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| rg, err := rgClient.Get(ctx, clusterResourceGroup, nil) | |
| Expect(err).NotTo(HaveOccurred(), "failed to get resource group") | |
| location := *rg.Location | |
| rg, err := rgClient.Get(ctx, clusterResourceGroup, nil) | |
| Expect(err).NotTo(HaveOccurred(), "failed to get resource group") | |
| Expect(rg.Location).NotTo(BeNil(), "resource group location should be populated") | |
| location := *rg.Location |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@test/e2e/issuer_acme_dns01_test.go` around lines 1445 - 1448, The test
dereferences rg.Location without guarding for nil which can panic if Azure
returns no Location; after calling rgClient.Get (and the Expect on err), add a
nil-check for rg.Location and fail the test or use
Expect(rg.Location).NotTo(BeNil(), "resource group Location is missing") before
using *rg.Location, then assign location := *rg.Location; ensure you reference
rg and rgClient.Get in the fix so the check sits immediately after the Get/err
assertion.
| err = wait.PollUntilContextTimeout(ctx, fastPollInterval, lowTimeout, true, func(context.Context) (bool, error) { | ||
| _, assignErr := authClient.Create(ctx, dnsZoneScope, roleAssignmentName, armauthorization.RoleAssignmentCreateParameters{ | ||
| Properties: &armauthorization.RoleAssignmentProperties{ | ||
| RoleDefinitionID: &dnsZoneContributorRoleID, | ||
| PrincipalID: &identityPrincipalID, | ||
| PrincipalType: to.Ptr(armauthorization.PrincipalTypeServicePrincipal), | ||
| }, | ||
| }, nil) | ||
| if assignErr != nil { | ||
| fmt.Fprintf(GinkgoWriter, "role assignment attempt failed (retrying): %v\n", assignErr) | ||
| return false, nil | ||
| } |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Get exact code at the specified lines
sed -n '1490,1515p' test/e2e/issuer_acme_dns01_test.go | cat -nRepository: openshift/cert-manager-operator
Length of output: 1493
🏁 Script executed:
#!/bin/bash
# Check for existing imports in the file
head -50 test/e2e/issuer_acme_dns01_test.go | cat -nRepository: openshift/cert-manager-operator
Length of output: 2060
🏁 Script executed:
#!/bin/bash
# Search for error handling patterns in the file
rg -n 'ResponseError|errors\.As|StatusCode|ErrorCode' test/e2e/issuer_acme_dns01_test.goRepository: openshift/cert-manager-operator
Length of output: 57
🏁 Script executed:
#!/bin/bash
# Check if azcore is already imported
rg -n 'import|azcore' test/e2e/issuer_acme_dns01_test.go | head -20Repository: openshift/cert-manager-operator
Length of output: 139
🏁 Script executed:
#!/bin/bash
# Search for other Azure API calls that might handle conflicts
rg -n 'authClient|Create\(' test/e2e/issuer_acme_dns01_test.go | head -20Repository: openshift/cert-manager-operator
Length of output: 2380
🌐 Web query:
Azure SDK for Go v2 RoleAssignment Create conflict error handling
💡 Result:
In Azure SDK for Go v2 (github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2), RoleAssignmentsClient.Create(...) returns an error that you can unwrap as *azcore.ResponseError when the service responds with a non-2xx code. (pkg.go.dev)
Treat “already exists” as success (409 Conflict / RoleAssignmentExists)
Azure RBAC role assignments are effectively unique by (principal + roleDefinition + scope); if you try to create the same combination again (often with a different GUID for roleAssignmentName), Azure can return 409 Conflict with code RoleAssignmentExists. (learn.microsoft.com)
import (
"errors"
"net/http"
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
)
resp, err := roleAssignmentsClient.Create(ctx, scope, roleAssignmentName, params, nil)
if err != nil {
var re *azcore.ResponseError
if errors.As(err, &re) {
if re.StatusCode == http.StatusConflict && re.ErrorCode == "RoleAssignmentExists" {
// idempotent success: the assignment is already present
return nil
}
}
return err
}
// use resp.RoleAssignment ...
_ = respNotes:
azcore.ResponseErroris the standard error type for non-success HTTP status codes, and the SDK expects you to useerrors.As()to access it. (pkg.go.dev)- The SDK extracts
ErrorCodefrom the response (preferringx-ms-error-code, otherwise parsing the body). (pkg.go.dev)
If you need the existing assignment’s ID
If you must return the existing role assignment resource ID (not just ignore the conflict), you typically need to list role assignments at the scope and match on principalId + roleDefinitionId (since the conflicting create won’t tell you the existing GUID). This is the same approach commonly recommended via CLI for investigating these conflicts. (learn.microsoft.com)
Citations:
- 1: https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2
- 2: https://learn.microsoft.com/en-us/answers/questions/5508946/error-roleassignmentexists-setting-up-continuous-d?utm_source=openai
- 3: https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azcore
- 4: https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime
- 5: https://learn.microsoft.com/en-us/answers/questions/5508946/error-roleassignmentexists-setting-up-continuous-d?utm_source=openai
🌐 Web query:
Azure SDK for Go azcore ResponseError StatusCode RoleAssignmentExists
💡 Result:
In the Azure SDK for Go, ARM “role assignment already exists” surfaces as an *azcore.ResponseError with:
StatusCode == 409(HTTP Conflict)ErrorCode == "RoleAssignmentExists"(pkg.go.dev)
Handle it by type-asserting via errors.As and checking StatusCode and/or ErrorCode:
import (
"errors"
"net/http"
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
)
if err != nil {
var re *azcore.ResponseError
if errors.As(err, &re) {
if re.StatusCode == http.StatusConflict && re.ErrorCode == "RoleAssignmentExists" {
// role assignment is already present; treat as success / ignore / reconcile
return nil
}
}
return err
}Why it happens: you attempted to create an RBAC role assignment that already exists (same scope + principal + role), so the service returns 409 with code RoleAssignmentExists. (github.com)
Citations:
- 1: https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported
- 2: azurerm_role_assignment "The role assignment already exists." hashicorp/terraform-provider-azurerm#17421
🏁 Script executed:
#!/bin/bash
# Search for any other Azure error handling patterns in the test file
rg -n 'if.*err|Delete|authClient' test/e2e/issuer_acme_dns01_test.go | tail -30Repository: openshift/cert-manager-operator
Length of output: 2349
🏁 Script executed:
#!/bin/bash
# Check if the repository has any other conflict handling patterns
rg -r 'ResponseError|StatusConflict|RoleAssignmentExists' test/ --type goRepository: openshift/cert-manager-operator
Length of output: 50388
Handle role-assignment "already exists" as success in retry loop.
The retry loop currently retries on all errors. When a role assignment succeeds server-side but the client receives a transient error, subsequent retry attempts can return HTTP 409 Conflict with ErrorCode == "RoleAssignmentExists", causing the loop to timeout instead of succeeding.
🔧 Suggested fix
+// import additions needed:
+// "errors"
+// "net/http"
+// "github.com/Azure/azure-sdk-for-go/sdk/azcore"
err = wait.PollUntilContextTimeout(ctx, fastPollInterval, lowTimeout, true, func(context.Context) (bool, error) {
_, assignErr := authClient.Create(ctx, dnsZoneScope, roleAssignmentName, armauthorization.RoleAssignmentCreateParameters{
Properties: &armauthorization.RoleAssignmentProperties{
RoleDefinitionID: &dnsZoneContributorRoleID,
PrincipalID: &identityPrincipalID,
PrincipalType: to.Ptr(armauthorization.PrincipalTypeServicePrincipal),
},
}, nil)
if assignErr != nil {
+ var respErr *azcore.ResponseError
+ if errors.As(assignErr, &respErr) &&
+ (respErr.StatusCode == http.StatusConflict && respErr.ErrorCode == "RoleAssignmentExists") {
+ return true, nil
+ }
fmt.Fprintf(GinkgoWriter, "role assignment attempt failed (retrying): %v\n", assignErr)
return false, nil
}
return true, nil
})🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@test/e2e/issuer_acme_dns01_test.go` around lines 1495 - 1506, In the
wait.PollUntilContextTimeout retry loop around authClient.Create (creating
roleAssignmentName in dnsZoneScope), treat a failure where the server reports
the role assignment already exists as a success: after calling authClient.Create
and getting assignErr, detect the 409/Conflict with ErrorCode
"RoleAssignmentExists" (inspect the error type returned by the Azure SDK for the
status code/ErrorCode) and return true,nil so the loop exits successfully;
otherwise continue returning false,nil for transient errors as before.
| func waitForDeploymentPodLabelAndRollout(ctx context.Context, namespace, deploymentName, labelKey, labelValue string, timeout time.Duration) error { | ||
| return waitForDeploymentConditionAndRollout(ctx, namespace, deploymentName, func(deployment *appsv1.Deployment) bool { | ||
| labels := deployment.Spec.Template.GetLabels() | ||
| if labels == nil { | ||
| return false | ||
| } | ||
| return labels[labelKey] == labelValue | ||
| }, timeout) |
There was a problem hiding this comment.
Require label-key presence in pod label matcher.
At Line 848, missing keys currently compare as "", which can incorrectly pass when expected value is empty.
🔧 Suggested fix
func waitForDeploymentPodLabelAndRollout(ctx context.Context, namespace, deploymentName, labelKey, labelValue string, timeout time.Duration) error {
return waitForDeploymentConditionAndRollout(ctx, namespace, deploymentName, func(deployment *appsv1.Deployment) bool {
labels := deployment.Spec.Template.GetLabels()
if labels == nil {
return false
}
- return labels[labelKey] == labelValue
+ actual, ok := labels[labelKey]
+ return ok && actual == labelValue
}, timeout)
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| func waitForDeploymentPodLabelAndRollout(ctx context.Context, namespace, deploymentName, labelKey, labelValue string, timeout time.Duration) error { | |
| return waitForDeploymentConditionAndRollout(ctx, namespace, deploymentName, func(deployment *appsv1.Deployment) bool { | |
| labels := deployment.Spec.Template.GetLabels() | |
| if labels == nil { | |
| return false | |
| } | |
| return labels[labelKey] == labelValue | |
| }, timeout) | |
| func waitForDeploymentPodLabelAndRollout(ctx context.Context, namespace, deploymentName, labelKey, labelValue string, timeout time.Duration) error { | |
| return waitForDeploymentConditionAndRollout(ctx, namespace, deploymentName, func(deployment *appsv1.Deployment) bool { | |
| labels := deployment.Spec.Template.GetLabels() | |
| if labels == nil { | |
| return false | |
| } | |
| actual, ok := labels[labelKey] | |
| return ok && actual == labelValue | |
| }, timeout) | |
| } |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@test/e2e/utils_test.go` around lines 842 - 849, The pod-label matcher in
waitForDeploymentPodLabelAndRollout can falsely succeed when the label key is
missing because labels[labelKey] returns "" for absent keys; modify the
predicate passed to waitForDeploymentConditionAndRollout to verify the key
exists (use the map lookup form, e.g., val, ok := labels[labelKey]) and return
ok && val == labelValue so the matcher requires presence and value equality;
update the anonymous function inside waitForDeploymentPodLabelAndRollout
accordingly (referencing waitForDeploymentPodLabelAndRollout and
waitForDeploymentConditionAndRollout).
|
@lunarwhite: This pull request references CM-937 which is a valid jira issue. Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.22.0" version, but no target version was set. DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
Second (2/2) part of https://issues.redhat.com/browse/CM-937
Changes
Add new e2e test to expand Azure DNS-01 coverage:
Dependency
Summary by CodeRabbit
Tests
Chores