Skip to content

Commit 45e2c2f

Browse files
committed
chore(azure): refactor clientOpts
1 parent 8e6d85a commit 45e2c2f

File tree

3 files changed

+27
-46
lines changed

3 files changed

+27
-46
lines changed

provider/azure/azure.go

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ import (
2424

2525
log "github.com/sirupsen/logrus"
2626

27-
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
28-
"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
2927
azcoreruntime "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime"
3028
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
3129
dns "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/dns/armdns"
@@ -72,24 +70,16 @@ func NewAzureProvider(configFile string, domainFilter endpoint.DomainFilter, zon
7270
if err != nil {
7371
return nil, fmt.Errorf("failed to read Azure config file '%s': %v", configFile, err)
7472
}
75-
cred, err := getCredentials(*cfg)
73+
cred, clientOpts, err := getCredentials(*cfg)
7674
if err != nil {
7775
return nil, fmt.Errorf("failed to get credentials: %w", err)
7876
}
79-
cloudCfg, err := getCloudConfiguration(cfg.Cloud)
80-
if err != nil {
81-
return nil, fmt.Errorf("failed to get cloud configuration: %w", err)
82-
}
83-
opts := &arm.ClientOptions{
84-
ClientOptions: azcore.ClientOptions{
85-
Cloud: cloudCfg,
86-
},
87-
}
88-
zonesClient, err := dns.NewZonesClient(cfg.SubscriptionID, cred, opts)
77+
78+
zonesClient, err := dns.NewZonesClient(cfg.SubscriptionID, cred, clientOpts)
8979
if err != nil {
9080
return nil, err
9181
}
92-
recordSetsClient, err := dns.NewRecordSetsClient(cfg.SubscriptionID, cred, opts)
82+
recordSetsClient, err := dns.NewRecordSetsClient(cfg.SubscriptionID, cred, clientOpts)
9383
if err != nil {
9484
return nil, err
9585
}

provider/azure/azure_private_dns.go

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ import (
2222
"fmt"
2323
"strings"
2424

25-
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
26-
"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
2725
azcoreruntime "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime"
2826
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
2927
privatedns "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns"
@@ -66,24 +64,16 @@ func NewAzurePrivateDNSProvider(configFile string, domainFilter endpoint.DomainF
6664
if err != nil {
6765
return nil, fmt.Errorf("failed to read Azure config file '%s': %v", configFile, err)
6866
}
69-
cred, err := getCredentials(*cfg)
67+
cred, clientOpts, err := getCredentials(*cfg)
7068
if err != nil {
7169
return nil, fmt.Errorf("failed to get credentials: %w", err)
7270
}
73-
cloudCfg, err := getCloudConfiguration(cfg.Cloud)
74-
if err != nil {
75-
return nil, fmt.Errorf("failed to get cloud configuration: %w", err)
76-
}
77-
opts := &arm.ClientOptions{
78-
ClientOptions: azcore.ClientOptions{
79-
Cloud: cloudCfg,
80-
},
81-
}
82-
zonesClient, err := privatedns.NewPrivateZonesClient(cfg.SubscriptionID, cred, opts)
71+
72+
zonesClient, err := privatedns.NewPrivateZonesClient(cfg.SubscriptionID, cred, clientOpts)
8373
if err != nil {
8474
return nil, err
8575
}
86-
recordSetsClient, err := privatedns.NewRecordSetsClient(cfg.SubscriptionID, cred, opts)
76+
recordSetsClient, err := privatedns.NewRecordSetsClient(cfg.SubscriptionID, cred, clientOpts)
8777
if err != nil {
8878
return nil, err
8979
}

provider/azure/config.go

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"strings"
2323

2424
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
25+
"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
2526
"github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud"
2627
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
2728
log "github.com/sirupsen/logrus"
@@ -65,10 +66,16 @@ func getConfig(configFile, resourceGroup, userAssignedIdentityClientID string) (
6566
}
6667

6768
// getAccessToken retrieves Azure API access token.
68-
func getCredentials(cfg config) (azcore.TokenCredential, error) {
69+
func getCredentials(cfg config) (azcore.TokenCredential, *arm.ClientOptions, error) {
6970
cloudCfg, err := getCloudConfiguration(cfg.Cloud)
7071
if err != nil {
71-
return nil, fmt.Errorf("failed to get cloud configuration: %w", err)
72+
return nil, nil, fmt.Errorf("failed to get cloud configuration: %w", err)
73+
}
74+
clientOpts := azcore.ClientOptions{
75+
Cloud: cloudCfg,
76+
}
77+
armClientOpts := &arm.ClientOptions{
78+
ClientOptions: clientOpts,
7279
}
7380

7481
// Try to retrieve token with service principal credentials.
@@ -83,25 +90,21 @@ func getCredentials(cfg config) (azcore.TokenCredential, error) {
8390
!strings.EqualFold(cfg.ClientSecret, "msi") {
8491
log.Info("Using client_id+client_secret to retrieve access token for Azure API.")
8592
opts := &azidentity.ClientSecretCredentialOptions{
86-
ClientOptions: azcore.ClientOptions{
87-
Cloud: cloudCfg,
88-
},
93+
ClientOptions: clientOpts,
8994
}
9095
cred, err := azidentity.NewClientSecretCredential(cfg.TenantID, cfg.ClientID, cfg.ClientSecret, opts)
9196
if err != nil {
92-
return nil, fmt.Errorf("failed to create service principal token: %w", err)
97+
return nil, nil, fmt.Errorf("failed to create service principal token: %w", err)
9398
}
94-
return cred, nil
99+
return cred, armClientOpts, nil
95100
}
96101

97102
// Try to retrieve token with Workload Identity.
98103
if cfg.UseWorkloadIdentityExtension {
99104
log.Info("Using workload identity extension to retrieve access token for Azure API.")
100105

101106
wiOpt := azidentity.WorkloadIdentityCredentialOptions{
102-
ClientOptions: azcore.ClientOptions{
103-
Cloud: cloudCfg,
104-
},
107+
ClientOptions: clientOpts,
105108
// In a standard scenario, Client ID and Tenant ID are expected to be read from environment variables.
106109
// Though, in certain cases, it might be important to have an option to override those (e.g. when AZURE_TENANT_ID is not set
107110
// through a webhook or azure.workload.identity/client-id service account annotation is absent). When any of those values are
@@ -112,31 +115,29 @@ func getCredentials(cfg config) (azcore.TokenCredential, error) {
112115

113116
cred, err := azidentity.NewWorkloadIdentityCredential(&wiOpt)
114117
if err != nil {
115-
return nil, fmt.Errorf("failed to create a workload identity token: %w", err)
118+
return nil, nil, fmt.Errorf("failed to create a workload identity token: %w", err)
116119
}
117120

118-
return cred, nil
121+
return cred, armClientOpts, nil
119122
}
120123

121124
// Try to retrieve token with MSI.
122125
if cfg.UseManagedIdentityExtension {
123126
log.Info("Using managed identity extension to retrieve access token for Azure API.")
124127
msiOpt := azidentity.ManagedIdentityCredentialOptions{
125-
ClientOptions: azcore.ClientOptions{
126-
Cloud: cloudCfg,
127-
},
128+
ClientOptions: clientOpts,
128129
}
129130
if cfg.UserAssignedIdentityID != "" {
130131
msiOpt.ID = azidentity.ClientID(cfg.UserAssignedIdentityID)
131132
}
132133
cred, err := azidentity.NewManagedIdentityCredential(&msiOpt)
133134
if err != nil {
134-
return nil, fmt.Errorf("failed to create the managed service identity token: %w", err)
135+
return nil, nil, fmt.Errorf("failed to create the managed service identity token: %w", err)
135136
}
136-
return cred, nil
137+
return cred, armClientOpts, nil
137138
}
138139

139-
return nil, fmt.Errorf("no credentials provided for Azure API")
140+
return nil, nil, fmt.Errorf("no credentials provided for Azure API")
140141
}
141142

142143
func getCloudConfiguration(name string) (cloud.Configuration, error) {

0 commit comments

Comments
 (0)