Skip to content

Commit 6145379

Browse files
committed
refactor AzureCredentialsProvider to make it reusable
1 parent 908cbfd commit 6145379

File tree

3 files changed

+41
-22
lines changed

3 files changed

+41
-22
lines changed

azure/scope/clients.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ func (c *AzureClients) setCredentials(subscriptionID, environmentName string) er
9999
return err
100100
}
101101

102-
func (c *AzureClients) setCredentialsWithProvider(ctx context.Context, subscriptionID, environmentName string, credentialsProvider *AzureCredentialsProvider) error {
102+
func (c *AzureClients) setCredentialsWithProvider(ctx context.Context, subscriptionID, environmentName string, credentialsProvider CredentialsProvider) error {
103103
if credentialsProvider == nil {
104104
return fmt.Errorf("credentials provider cannot have an empty value")
105105
}

azure/scope/cluster.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func NewClusterScope(ctx context.Context, params ClusterScopeParams) (*ClusterSc
6767
return nil, errors.Wrap(err, "failed to configure azure settings and credentials from environment")
6868
}
6969
} else {
70-
credentailsProvider, err := NewAzureCredentialsProvider(ctx, params.Client, params.AzureCluster)
70+
credentailsProvider, err := NewAzureClusterCredentialsProvider(ctx, params.Client, params.AzureCluster)
7171
if err != nil {
7272
return nil, errors.Wrap(err, "failed to init credentials provider")
7373
}

azure/scope/identity.go

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,29 @@ import (
3737
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3838
)
3939

40-
// AzureCredentialsProvider provides credentials for an AzureCluster.
40+
// CredentialsProvider defines the behavior for azure identity based credential providers.
41+
type CredentialsProvider interface {
42+
GetAuthorizer(ctx context.Context, resourceManagerEndpoint string) (autorest.Authorizer, error)
43+
}
44+
45+
// AzureCredentialsProvider represents a credential provider with azure cluster identity.
4146
type AzureCredentialsProvider struct {
42-
Client client.Client
47+
Client client.Client
48+
Identity *infrav1.AzureClusterIdentity
49+
}
50+
51+
// AzureClusterCredentialsProvider wraps AzureCredentialsProvider with AzureCluster.
52+
type AzureClusterCredentialsProvider struct {
53+
AzureCredentialsProvider
4354
AzureCluster *infrav1.AzureCluster
44-
Identity *infrav1.AzureClusterIdentity
4555
}
4656

47-
// NewAzureCredentialsProvider creates a new AzureCredentialsProvider from the supplied inputs.
48-
func NewAzureCredentialsProvider(ctx context.Context, kubeClient client.Client, azureCluster *infrav1.AzureCluster) (*AzureCredentialsProvider, error) {
57+
var _ CredentialsProvider = (*AzureClusterCredentialsProvider)(nil)
58+
59+
// NewAzureClusterCredentialsProvider creates a new AzureClusterCredentialsProvider from the supplied inputs.
60+
func NewAzureClusterCredentialsProvider(ctx context.Context, kubeClient client.Client, azureCluster *infrav1.AzureCluster) (*AzureClusterCredentialsProvider, error) {
4961
if azureCluster.Spec.IdentityRef == nil {
50-
return nil, errors.New("failed to generate new AzureCredentialsProvider from empty identityName")
62+
return nil, errors.New("failed to generate new AzureClusterCredentialsProvider from empty identityName")
5163
}
5264

5365
ref := azureCluster.Spec.IdentityRef
@@ -66,15 +78,22 @@ func NewAzureCredentialsProvider(ctx context.Context, kubeClient client.Client,
6678
return nil, errors.New("AzureClusterIdentity is not of type Service Principal")
6779
}
6880

69-
return &AzureCredentialsProvider{
70-
Client: kubeClient,
71-
AzureCluster: azureCluster,
72-
Identity: identity,
81+
return &AzureClusterCredentialsProvider{
82+
AzureCredentialsProvider{
83+
Client: kubeClient,
84+
Identity: identity,
85+
},
86+
azureCluster,
7387
}, nil
7488
}
7589

76-
// GetAuthorizer returns an Azure authorizer based on the provided Azure identity.
77-
func (p *AzureCredentialsProvider) GetAuthorizer(ctx context.Context, resourceManagerEndpoint string) (autorest.Authorizer, error) {
90+
// GetAuthorizer returns an Azure authorizer based on the provided azure identity. It delegates to AzureCredentialsProvider with AzureCluster metadata.
91+
func (p *AzureClusterCredentialsProvider) GetAuthorizer(ctx context.Context, resourceManagerEndpoint string) (autorest.Authorizer, error) {
92+
return p.AzureCredentialsProvider.GetAuthorizer(ctx, resourceManagerEndpoint, p.AzureCluster.ObjectMeta)
93+
}
94+
95+
// GetAuthorizer returns an Azure authorizer based on the provided azure identity and cluster metadata.
96+
func (p *AzureCredentialsProvider) GetAuthorizer(ctx context.Context, resourceManagerEndpoint string, clusterMeta metav1.ObjectMeta) (autorest.Authorizer, error) {
7897
azureIdentityType, err := getAzureIdentityType(p.Identity)
7998
if err != nil {
8099
return nil, err
@@ -85,17 +104,17 @@ func (p *AzureCredentialsProvider) GetAuthorizer(ctx context.Context, resourceMa
85104
APIVersion: "aadpodidentity.k8s.io/v1",
86105
},
87106
ObjectMeta: metav1.ObjectMeta{
88-
Name: identity.GetAzureIdentityName(p.AzureCluster.Name, p.AzureCluster.Namespace, p.Identity.Name),
107+
Name: identity.GetAzureIdentityName(clusterMeta.Name, clusterMeta.Namespace, p.Identity.Name),
89108
Namespace: system.GetManagerNamespace(),
90109
Annotations: map[string]string{
91110
aadpodv1.BehaviorKey: "namespaced",
92111
},
93112
Labels: map[string]string{
94-
clusterv1.ClusterLabelName: p.AzureCluster.Name,
95-
infrav1.ClusterLabelNamespace: p.AzureCluster.Namespace,
113+
clusterv1.ClusterLabelName: clusterMeta.Name,
114+
infrav1.ClusterLabelNamespace: clusterMeta.Namespace,
96115
clusterctl.ClusterctlMoveLabelName: "true",
97116
},
98-
OwnerReferences: p.AzureCluster.OwnerReferences,
117+
OwnerReferences: clusterMeta.OwnerReferences,
99118
},
100119
Spec: aadpodv1.AzureIdentitySpec{
101120
Type: azureIdentityType,
@@ -119,11 +138,11 @@ func (p *AzureCredentialsProvider) GetAuthorizer(ctx context.Context, resourceMa
119138
Name: fmt.Sprintf("%s-binding", copiedIdentity.Name),
120139
Namespace: copiedIdentity.Namespace,
121140
Labels: map[string]string{
122-
clusterv1.ClusterLabelName: p.AzureCluster.Name,
123-
infrav1.ClusterLabelNamespace: p.AzureCluster.Namespace,
141+
clusterv1.ClusterLabelName: clusterMeta.Name,
142+
infrav1.ClusterLabelNamespace: clusterMeta.Namespace,
124143
clusterctl.ClusterctlMoveLabelName: "true",
125144
},
126-
OwnerReferences: p.AzureCluster.OwnerReferences,
145+
OwnerReferences: clusterMeta.OwnerReferences,
127146
},
128147
Spec: aadpodv1.AzureIdentityBindingSpec{
129148
AzureIdentity: copiedIdentity.Name,
@@ -169,7 +188,7 @@ func IsClusterNamespaceAllowed(ctx context.Context, k8sClient client.Client, all
169188
return false
170189
}
171190

172-
// empty value matches with all namespaces.
191+
// empty value matches with all namespaces
173192
if reflect.DeepEqual(*allowedNamespaces, infrav1.AllowedNamespaces{}) {
174193
return true
175194
}

0 commit comments

Comments
 (0)