@@ -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.
4146type 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