Skip to content

Commit b6e2153

Browse files
committed
Replace more usages of go-autorest
1 parent f71c5ed commit b6e2153

File tree

7 files changed

+24
-142
lines changed

7 files changed

+24
-142
lines changed

azure/errors.go

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,23 +24,13 @@ import (
2424
"time"
2525

2626
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
27-
"github.com/Azure/go-autorest/autorest"
2827
infrav1 "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1"
2928
)
3029

3130
// ResourceNotFound parses an error to check if its status code is Not Found (404).
3231
func ResourceNotFound(err error) bool {
33-
return hasStatusCode(err, http.StatusNotFound)
34-
}
35-
36-
// hasStatusCode returns true if an error is a DetailedError or ResponseError with a matching status code.
37-
func hasStatusCode(err error, statusCode int) bool {
38-
derr := autorest.DetailedError{} // azure-sdk-for-go v1
39-
if errors.As(err, &derr) {
40-
return derr.StatusCode == statusCode
41-
}
42-
var rerr *azcore.ResponseError // azure-sdk-for-go v2
43-
return errors.As(err, &rerr) && rerr.StatusCode == statusCode
32+
var rerr *azcore.ResponseError
33+
return errors.As(err, &rerr) && rerr.StatusCode == http.StatusNotFound
4434
}
4535

4636
// VMDeletedError is returned when a virtual machine is deleted outside of capz.

azure/errors_test.go

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import (
2323
"time"
2424

2525
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
26-
"github.com/Azure/go-autorest/autorest"
2726
"github.com/pkg/errors"
2827
)
2928

@@ -77,16 +76,6 @@ func TestResourceNotFound(t *testing.T) {
7776
err error
7877
success bool
7978
}{
80-
{
81-
name: "Not Found detailed error",
82-
err: autorest.DetailedError{StatusCode: http.StatusNotFound},
83-
success: true,
84-
},
85-
{
86-
name: "Conflict detailed error",
87-
err: autorest.DetailedError{StatusCode: http.StatusConflict},
88-
success: false,
89-
},
9079
{
9180
name: "Not Found response error",
9281
err: &azcore.ResponseError{StatusCode: http.StatusNotFound},

azure/scope/clients.go

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"strings"
2626

2727
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
28-
"github.com/Azure/go-autorest/autorest"
2928
azureautorest "github.com/Azure/go-autorest/autorest/azure"
3029
"github.com/Azure/go-autorest/autorest/azure/auth"
3130
)
@@ -34,7 +33,6 @@ import (
3433
type AzureClients struct {
3534
auth.EnvironmentSettings
3635

37-
Authorizer autorest.Authorizer
3836
TokenCredential azcore.TokenCredential
3937
ResourceManagerEndpoint string
4038
ResourceManagerVMDNSSuffix string
@@ -47,23 +45,23 @@ func (c *AzureClients) CloudEnvironment() string {
4745

4846
// TenantID returns the Azure tenant id the controller runs in.
4947
func (c *AzureClients) TenantID() string {
50-
return c.Values[auth.TenantID]
48+
return c.Values["AZURE_TENANT_ID"]
5149
}
5250

5351
// ClientID returns the Azure client id from the controller environment.
5452
func (c *AzureClients) ClientID() string {
55-
return c.Values[auth.ClientID]
53+
return c.Values["AZURE_CLIENT_ID"]
5654
}
5755

5856
// ClientSecret returns the Azure client secret from the controller environment.
5957
func (c *AzureClients) ClientSecret() string {
60-
return c.Values[auth.ClientSecret]
58+
return c.Values["AZURE_CLIENT_SECRET"]
6159
}
6260

6361
// SubscriptionID returns the Azure subscription id of the cluster,
6462
// either specified or from the environment.
6563
func (c *AzureClients) SubscriptionID() string {
66-
return c.Values[auth.SubscriptionID]
64+
return c.Values["AZURE_SUBSCRIPTION_ID"]
6765
}
6866

6967
// Token returns the Azure token credential of the cluster used for SDKv2 services.
@@ -99,47 +97,46 @@ func (c *AzureClients) setCredentialsWithProvider(ctx context.Context, subscript
9997
c.EnvironmentSettings = settings
10098
c.ResourceManagerEndpoint = settings.Environment.ResourceManagerEndpoint
10199
c.ResourceManagerVMDNSSuffix = settings.Environment.ResourceManagerVMDNSSuffix
102-
c.Values[auth.SubscriptionID] = strings.TrimSuffix(subscriptionID, "\n")
103-
c.Values[auth.TenantID] = strings.TrimSuffix(credentialsProvider.GetTenantID(), "\n")
104-
c.Values[auth.ClientID] = strings.TrimSuffix(credentialsProvider.GetClientID(), "\n")
100+
c.Values["AZURE_SUBSCRIPTION_ID"] = strings.TrimSuffix(subscriptionID, "\n")
101+
c.Values["AZURE_TENANT_ID"] = strings.TrimSuffix(credentialsProvider.GetTenantID(), "\n")
102+
c.Values["AZURE_CLIENT_ID"] = strings.TrimSuffix(credentialsProvider.GetClientID(), "\n")
105103

106104
clientSecret, err := credentialsProvider.GetClientSecret(ctx)
107105
if err != nil {
108106
return err
109107
}
110-
c.Values[auth.ClientSecret] = strings.TrimSuffix(clientSecret, "\n")
108+
c.Values["AZURE_CLIENT_SECRET"] = strings.TrimSuffix(clientSecret, "\n")
111109

112110
tokenCredential, err := credentialsProvider.GetTokenCredential(ctx, c.ResourceManagerEndpoint, c.Environment.ActiveDirectoryEndpoint, c.Environment.TokenAudience)
113111
if err != nil {
114112
return err
115113
}
116114
c.TokenCredential = tokenCredential
117-
c.Authorizer, err = credentialsProvider.GetAuthorizer(ctx, tokenCredential, c.Environment.TokenAudience)
118115
return err
119116
}
120117

121118
func (c *AzureClients) getSettingsFromEnvironment(environmentName string) (s auth.EnvironmentSettings, err error) {
122119
s = auth.EnvironmentSettings{
123120
Values: map[string]string{},
124121
}
125-
s.Values[auth.EnvironmentName] = environmentName
126-
setValue(s, auth.SubscriptionID)
127-
setValue(s, auth.TenantID)
128-
setValue(s, auth.AuxiliaryTenantIDs)
129-
setValue(s, auth.ClientID)
130-
setValue(s, auth.ClientSecret)
131-
setValue(s, auth.CertificatePath)
132-
setValue(s, auth.CertificatePassword)
133-
setValue(s, auth.Username)
134-
setValue(s, auth.Password)
135-
setValue(s, auth.Resource)
136-
if v := s.Values[auth.EnvironmentName]; v == "" {
122+
s.Values["AZURE_ENVIRONMENT"] = environmentName
123+
setValue(s, "AZURE_SUBSCRIPTION_ID")
124+
setValue(s, "AZURE_TENANT_ID")
125+
setValue(s, "AZURE_AUXILIARY_TENANT_IDS")
126+
setValue(s, "AZURE_CLIENT_ID")
127+
setValue(s, "AZURE_CLIENT_SECRET")
128+
setValue(s, "AZURE_CERTIFICATE_PATH")
129+
setValue(s, "AZURE_CERTIFICATE_PASSWORD")
130+
setValue(s, "AZURE_USERNAME")
131+
setValue(s, "AZURE_PASSWORD")
132+
setValue(s, "AZURE_AD_RESOURCE")
133+
if v := s.Values["AZURE_ENVIRONMENT"]; v == "" {
137134
s.Environment = azureautorest.PublicCloud
138135
} else {
139136
s.Environment, err = azureautorest.EnvironmentFromName(v)
140137
}
141-
if s.Values[auth.Resource] == "" {
142-
s.Values[auth.Resource] = s.Environment.ResourceManagerEndpoint
138+
if s.Values["AZURE_AD_RESOURCE"] == "" {
139+
s.Values["AZURE_AD_RESOURCE"] = s.Environment.ResourceManagerEndpoint
143140
}
144141
return
145142
}

azure/scope/identity.go

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,10 @@ package scope
1919
import (
2020
"context"
2121
"reflect"
22-
"strings"
2322

2423
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
2524
"github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud"
2625
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
27-
"github.com/Azure/go-autorest/autorest"
28-
"github.com/jongio/azidext/go/azidext"
2926
"github.com/pkg/errors"
3027
corev1 "k8s.io/api/core/v1"
3128
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -40,7 +37,6 @@ const AzureSecretKey = "clientSecret"
4037

4138
// CredentialsProvider defines the behavior for azure identity based credential providers.
4239
type CredentialsProvider interface {
43-
GetAuthorizer(ctx context.Context, tokenCredential azcore.TokenCredential, tokenAudience string) (autorest.Authorizer, error)
4440
GetClientID() string
4541
GetClientSecret(ctx context.Context) (string, error)
4642
GetTenantID() string
@@ -95,11 +91,6 @@ func NewAzureClusterCredentialsProvider(ctx context.Context, kubeClient client.C
9591
}, nil
9692
}
9793

98-
// GetAuthorizer returns an Azure authorizer based on the provided azure identity. It delegates to AzureCredentialsProvider with AzureCluster metadata.
99-
func (p *AzureClusterCredentialsProvider) GetAuthorizer(ctx context.Context, tokenCredential azcore.TokenCredential, tokenAudience string) (autorest.Authorizer, error) {
100-
return p.AzureCredentialsProvider.GetAuthorizer(ctx, tokenCredential, tokenAudience)
101-
}
102-
10394
// GetTokenCredential returns an Azure TokenCredential based on the provided azure identity.
10495
func (p *AzureClusterCredentialsProvider) GetTokenCredential(ctx context.Context, resourceManagerEndpoint, activeDirectoryEndpoint, tokenAudience string) (azcore.TokenCredential, error) {
10596
return p.AzureCredentialsProvider.GetTokenCredential(ctx, resourceManagerEndpoint, activeDirectoryEndpoint, tokenAudience, p.AzureCluster.ObjectMeta)
@@ -132,11 +123,6 @@ func NewManagedControlPlaneCredentialsProvider(ctx context.Context, kubeClient c
132123
}, nil
133124
}
134125

135-
// GetAuthorizer returns an Azure authorizer based on the provided azure identity. It delegates to AzureCredentialsProvider with AzureManagedControlPlane metadata.
136-
func (p *ManagedControlPlaneCredentialsProvider) GetAuthorizer(ctx context.Context, tokenCredential azcore.TokenCredential, tokenAudience string) (autorest.Authorizer, error) {
137-
return p.AzureCredentialsProvider.GetAuthorizer(ctx, tokenCredential, tokenAudience)
138-
}
139-
140126
// GetTokenCredential returns an Azure TokenCredential based on the provided azure identity.
141127
func (p *ManagedControlPlaneCredentialsProvider) GetTokenCredential(ctx context.Context, resourceManagerEndpoint, activeDirectoryEndpoint, tokenAudience string) (azcore.TokenCredential, error) {
142128
return p.AzureCredentialsProvider.GetTokenCredential(ctx, resourceManagerEndpoint, activeDirectoryEndpoint, tokenAudience, p.AzureManagedControlPlane.ObjectMeta)
@@ -212,18 +198,6 @@ func (p *AzureCredentialsProvider) GetTokenCredential(ctx context.Context, resou
212198
return cred, nil
213199
}
214200

215-
// GetAuthorizer returns an Azure authorizer based on the provided azure identity, cluster metadata, and tokenCredential.
216-
func (p *AzureCredentialsProvider) GetAuthorizer(ctx context.Context, cred azcore.TokenCredential, tokenAudience string) (autorest.Authorizer, error) {
217-
// We must use TokenAudience for StackCloud, otherwise we get an
218-
// AADSTS500011 error from the API
219-
scope := tokenAudience
220-
if !strings.HasSuffix(scope, "/.default") {
221-
scope += "/.default"
222-
}
223-
authorizer := azidext.NewTokenCredentialAdapter(cred, []string{scope})
224-
return authorizer, nil
225-
}
226-
227201
// GetClientID returns the Client ID associated with the AzureCredentialsProvider's Identity.
228202
func (p *AzureCredentialsProvider) GetClientID() string {
229203
return p.Identity.Spec.ClientID

go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ require (
2525
github.com/google/uuid v1.6.0
2626
github.com/hashicorp/go-retryablehttp v0.7.5
2727
github.com/hashicorp/golang-lru v1.0.2
28-
github.com/jongio/azidext/go/azidext v0.5.0
2928
github.com/onsi/ginkgo/v2 v2.17.1
3029
github.com/onsi/gomega v1.33.0
3130
github.com/pkg/errors v0.9.1

go.sum

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -323,12 +323,8 @@ github.com/jackc/pgx/v5 v5.5.3/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiw
323323
github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
324324
github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
325325
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
326-
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
327-
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
328326
github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ=
329327
github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
330-
github.com/jongio/azidext/go/azidext v0.5.0 h1:uPInXD4NZ3J0k79FPwIA0YXknFn+WcqZqSgs3/jPgvQ=
331-
github.com/jongio/azidext/go/azidext v0.5.0/go.mod h1:TVRX/hJhzbsCKaOIzicH6a8IvOH0hpjWk/JwZZgtXeU=
332328
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
333329
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
334330
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=

util/azure/azure.go

Lines changed: 0 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,10 @@ package azure
1818

1919
import (
2020
"context"
21-
"os"
2221
"strings"
2322
"time"
2423

25-
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
2624
"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
27-
"github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud"
28-
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
29-
"github.com/Azure/go-autorest/autorest"
30-
azureautorest "github.com/Azure/go-autorest/autorest/azure"
31-
"github.com/Azure/go-autorest/autorest/azure/auth"
32-
"github.com/jongio/azidext/go/azidext"
3325
"github.com/pkg/errors"
3426
expv1 "sigs.k8s.io/cluster-api/exp/api/v1beta1"
3527
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -49,61 +41,6 @@ func IsAzureSystemNodeLabelKey(labelKey string) bool {
4941
return strings.HasPrefix(labelKey, AzureSystemNodeLabelPrefix)
5042
}
5143

52-
func getCloudConfig(environment azureautorest.Environment) cloud.Configuration {
53-
var config cloud.Configuration
54-
switch environment.Name {
55-
case "AzureStackCloud":
56-
config = cloud.Configuration{
57-
ActiveDirectoryAuthorityHost: environment.ActiveDirectoryEndpoint,
58-
Services: map[cloud.ServiceName]cloud.ServiceConfiguration{
59-
cloud.ResourceManager: {
60-
Audience: environment.TokenAudience,
61-
Endpoint: environment.ResourceManagerEndpoint,
62-
},
63-
},
64-
}
65-
case "AzureChinaCloud":
66-
config = cloud.AzureChina
67-
case "AzureUSGovernmentCloud":
68-
config = cloud.AzureGovernment
69-
default:
70-
config = cloud.AzurePublic
71-
}
72-
return config
73-
}
74-
75-
// GetAuthorizer returns an autorest.Authorizer-compatible object from MSAL.
76-
func GetAuthorizer(settings auth.EnvironmentSettings) (autorest.Authorizer, error) {
77-
// azidentity uses different envvars for certificate authentication:
78-
// azidentity: AZURE_CLIENT_CERTIFICATE_{PATH,PASSWORD}
79-
// autorest: AZURE_CERTIFICATE_{PATH,PASSWORD}
80-
// Let's set them according to the envvars used by autorest, in case they are present
81-
_, azidSet := os.LookupEnv("AZURE_CLIENT_CERTIFICATE_PATH")
82-
path, autorestSet := os.LookupEnv("AZURE_CERTIFICATE_PATH")
83-
if !azidSet && autorestSet {
84-
os.Setenv("AZURE_CLIENT_CERTIFICATE_PATH", path)
85-
os.Setenv("AZURE_CLIENT_CERTIFICATE_PASSWORD", os.Getenv("AZURE_CERTIFICATE_PASSWORD"))
86-
}
87-
88-
options := azidentity.DefaultAzureCredentialOptions{
89-
ClientOptions: azcore.ClientOptions{
90-
Cloud: getCloudConfig(settings.Environment),
91-
},
92-
}
93-
cred, err := azidentity.NewDefaultAzureCredential(&options)
94-
if err != nil {
95-
return nil, err
96-
}
97-
98-
// We must use TokenAudience for StackCloud, otherwise we get an
99-
// AADSTS500011 error from the API
100-
scope := settings.Environment.TokenAudience
101-
if !strings.HasSuffix(scope, "/.default") {
102-
scope += "/.default"
103-
}
104-
return azidext.NewTokenCredentialAdapter(cred, []string{scope}), nil
105-
}
106-
10744
// FindParentMachinePool finds the parent MachinePool for the AzureMachinePool.
10845
func FindParentMachinePool(ampName string, cli client.Client) (*expv1.MachinePool, error) {
10946
ctx := context.Background()

0 commit comments

Comments
 (0)