Skip to content

Commit 3002b10

Browse files
committed
wip
Signed-off-by: Bryan Cox <[email protected]>
1 parent 5969417 commit 3002b10

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

pkg/storage/azure/azure.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,8 @@ func NewDriver(ctx context.Context, c *imageregistryv1.ImageRegistryConfigStorag
334334
}
335335

336336
func (d *driver) newAzClient(cfg *Azure, environment autorestazure.Environment, tagset map[string]*string) (*azureclient.Client, error) {
337+
klog.V(2).Infof("Creating new azureclient with shared credential cache: %p", &d.azureCredentials)
338+
337339
client, err := azureclient.New(&azureclient.Options{
338340
Environment: environment,
339341
TenantID: cfg.TenantID,
@@ -343,6 +345,7 @@ func (d *driver) newAzClient(cfg *Azure, environment autorestazure.Environment,
343345
SubscriptionID: cfg.SubscriptionID,
344346
TagSet: tagset,
345347
Policies: d.policies,
348+
CredentialCache: &d.azureCredentials, // Share the driver's credential cache
346349
})
347350
if err != nil {
348351
return nil, err

pkg/storage/azure/azureclient/azureclient.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ type Options struct {
5151
TagSet map[string]*string
5252
Policies []policy.Policy
5353
Creds azcore.TokenCredential
54+
CredentialCache *sync.Map // Optional external credential cache to share across instances
5455
}
5556

5657
type PrivateEndpointCreateOptions struct {
@@ -97,6 +98,13 @@ func New(opts *Options) (*Client, error) {
9798
}, nil
9899
}
99100

101+
func (c *Client) getCredentialCache() *sync.Map {
102+
if c.opts.CredentialCache != nil {
103+
return c.opts.CredentialCache
104+
}
105+
return &c.azureCredentials
106+
}
107+
100108
func (c *Client) getCreds(ctx context.Context) (azcore.TokenCredential, error) {
101109
if c.creds != nil {
102110
return c.creds, nil
@@ -110,9 +118,14 @@ func (c *Client) getCreds(ctx context.Context) (azcore.TokenCredential, error) {
110118
if userAssignedIdentityCredentialsFilePath != "" {
111119
var ok bool
112120

121+
// Use shared credential cache if available
122+
credCache := c.getCredentialCache()
123+
klog.V(2).Infof("Using credential cache: %p", credCache)
124+
113125
// We need to only store the Azure credentials once and reuse them after that.
114-
storedCreds, found := c.azureCredentials.Load(azureCredentialsKey)
126+
storedCreds, found := credCache.Load(azureCredentialsKey)
115127
if !found {
128+
klog.V(2).Infof("Cache miss - creating new credentials")
116129
klog.V(2).Info("Using UserAssignedIdentityCredentials for Azure authentication for managed Azure HCP")
117130
clientOptions := azcore.ClientOptions{
118131
Cloud: c.clientOpts.Cloud,
@@ -121,8 +134,10 @@ func (c *Client) getCreds(ctx context.Context) (azcore.TokenCredential, error) {
121134
if err != nil {
122135
return nil, err
123136
}
124-
c.azureCredentials.Store(azureCredentialsKey, creds)
137+
credCache.Store(azureCredentialsKey, creds)
138+
klog.V(2).Infof("Stored credentials in cache: %p", creds)
125139
} else {
140+
klog.V(2).Infof("Cache hit - reusing existing credentials")
126141
creds, ok = storedCreds.(azcore.TokenCredential)
127142
if !ok {
128143
return nil, fmt.Errorf("expected %T to be a TokenCredential", storedCreds)

0 commit comments

Comments
 (0)