@@ -29,7 +29,6 @@ import (
2929 "github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi"
3030 "github.com/aws/aws-sdk-go-v2/service/secretsmanager"
3131 "github.com/aws/aws-sdk-go/aws"
32- "github.com/aws/aws-sdk-go/aws/credentials"
3332 "github.com/aws/aws-sdk-go/aws/endpoints"
3433 "github.com/aws/aws-sdk-go/aws/session"
3534 "github.com/google/go-cmp/cmp"
@@ -64,7 +63,6 @@ type ServiceEndpoint struct {
6463
6564var sessionCache sync.Map
6665var sessionCacheV2 sync.Map
67- var providerCache sync.Map
6866var providerCacheV2 sync.Map
6967
7068type sessionCacheEntry struct {
@@ -137,89 +135,6 @@ func sessionForRegionV2(region string) (*awsv2.Config, throttle.ServiceLimiters,
137135 return & ns , sl , nil
138136}
139137
140- func sessionForClusterWithRegion (k8sClient client.Client , clusterScoper cloud.SessionMetadata , region string , endpoint []ServiceEndpoint , log logger.Wrapper ) (throttle.ServiceLimiters , error ) {
141- log = log .WithName ("identity" )
142- log .Trace ("Creating an AWS Session" )
143-
144- resolver := func (service , region string , optFns ... func (* endpoints.Options )) (endpoints.ResolvedEndpoint , error ) {
145- for _ , s := range endpoint {
146- if service == s .ServiceID {
147- return endpoints.ResolvedEndpoint {
148- URL : s .URL ,
149- SigningRegion : s .SigningRegion ,
150- }, nil
151- }
152- }
153- return endpoints .DefaultResolver ().EndpointFor (service , region , optFns ... )
154- }
155-
156- providers , err := getProvidersForCluster (context .Background (), k8sClient , clusterScoper , region , log )
157- if err != nil {
158- // could not get providers and retrieve the credentials
159- conditions .MarkFalse (clusterScoper .InfraCluster (), infrav1 .PrincipalCredentialRetrievedCondition , infrav1 .PrincipalCredentialRetrievalFailedReason , clusterv1 .ConditionSeverityError , "%s" , err .Error ())
160- return nil , errors .Wrap (err , "Failed to get providers for cluster" )
161- }
162-
163- isChanged := false
164- awsProviders := make ([]credentials.Provider , len (providers ))
165- for i , provider := range providers {
166- // load an existing matching providers from the cache if such a providers exists
167- providerHash , err := provider .Hash ()
168- if err != nil {
169- return nil , errors .Wrap (err , "Failed to calculate provider hash" )
170- }
171- cachedProvider , ok := providerCache .Load (providerHash )
172- if ok {
173- provider = cachedProvider .(identity.AWSPrincipalTypeProvider )
174- } else {
175- isChanged = true
176- // add this provider to the cache
177- providerCache .Store (providerHash , provider )
178- }
179- awsProviders [i ] = provider .(credentials.Provider )
180- }
181-
182- if ! isChanged {
183- if s , ok := sessionCache .Load (getSessionName (region , clusterScoper )); ok {
184- entry := s .(* sessionCacheEntry )
185- return entry .serviceLimiters , nil
186- }
187- }
188- awsConfig := & aws.Config {
189- Region : aws .String (region ),
190- EndpointResolver : endpoints .ResolverFunc (resolver ),
191- }
192-
193- if len (providers ) > 0 {
194- // Check if identity credentials can be retrieved. One reason this will fail is that source identity is not authorized for assume role.
195- _ , err := providers [0 ].Retrieve ()
196- if err != nil {
197- conditions .MarkUnknown (clusterScoper .InfraCluster (), infrav1 .PrincipalCredentialRetrievedCondition , infrav1 .CredentialProviderBuildFailedReason , "%s" , err .Error ())
198-
199- // delete the existing session from cache. Otherwise, we give back a defective session on next method invocation with same cluster scope
200- sessionCache .Delete (getSessionName (region , clusterScoper ))
201-
202- return nil , errors .Wrap (err , "Failed to retrieve identity credentials" )
203- }
204- awsConfig = awsConfig .WithCredentials (credentials .NewChainCredentials (awsProviders ))
205- }
206-
207- conditions .MarkTrue (clusterScoper .InfraCluster (), infrav1 .PrincipalCredentialRetrievedCondition )
208-
209- ns , err := session .NewSession (awsConfig )
210- if err != nil {
211- return nil , errors .Wrap (err , "Failed to create a new AWS session" )
212- }
213- sl := newServiceLimiters ()
214- sessionCache .Store (getSessionName (region , clusterScoper ), & sessionCacheEntry {
215- session : ns ,
216- serviceLimiters : sl ,
217- sessionV2 : nil ,
218- })
219-
220- return sl , nil
221- }
222-
223138func sessionForClusterWithRegionV2 (k8sClient client.Client , clusterScoper cloud.SessionMetadata , region string , _ []ServiceEndpoint , log logger.Wrapper ) (* awsv2.Config , throttle.ServiceLimiters , error ) {
224139 log = log .WithName ("identity" )
225140 log .Trace ("Creating an AWS Session" )
0 commit comments