@@ -14,12 +14,14 @@ import (
1414	"github.com/hashicorp/go-azure-sdk/microsoft-graph/applications/beta/federatedidentitycredential" 
1515	"github.com/hashicorp/go-azure-sdk/microsoft-graph/common-types/beta" 
1616	"github.com/hashicorp/go-azure-sdk/microsoft-graph/common-types/stable" 
17+ 	"github.com/hashicorp/go-azure-sdk/sdk/client/pollers" 
1718	"github.com/hashicorp/go-azure-sdk/sdk/nullable" 
1819	"github.com/hashicorp/terraform-provider-azuread/internal/helpers/consistency" 
1920	"github.com/hashicorp/terraform-provider-azuread/internal/helpers/tf" 
2021	"github.com/hashicorp/terraform-provider-azuread/internal/helpers/tf/pluginsdk" 
2122	"github.com/hashicorp/terraform-provider-azuread/internal/helpers/tf/validation" 
2223	"github.com/hashicorp/terraform-provider-azuread/internal/sdk" 
24+ 	"github.com/hashicorp/terraform-provider-azuread/internal/services/applications/custompollers" 
2325)
2426
2527type  flexibleFederatedIdentityCredentialResource  struct {}
@@ -106,7 +108,7 @@ func (f flexibleFederatedIdentityCredentialResource) Create() sdk.ResourceFunc {
106108		Timeout : 15  *  time .Minute ,
107109		Func : func (ctx  context.Context , metadata  sdk.ResourceMetaData ) error  {
108110			client  :=  metadata .Client .Applications .ApplicationClientBeta 
109- 			federatedIdentityCredentialClient  :=  metadata .Client .Applications .ApplicationFlexibleFederatedIdentityCredential 
111+ 			flexibleFederatedIdentityCredentialClient  :=  metadata .Client .Applications .ApplicationFlexibleFederatedIdentityCredential 
110112
111113			data  :=  & flexibleFederatedIdentityCredentialModel {}
112114
@@ -143,7 +145,7 @@ func (f flexibleFederatedIdentityCredentialResource) Create() sdk.ResourceFunc {
143145				Name :        data .DisplayName ,
144146			}
145147
146- 			federatedIdentityCredentialResp , err  :=  federatedIdentityCredentialClient .CreateFederatedIdentityCredential (ctx , * applicationId , credential , federatedidentitycredential .DefaultCreateFederatedIdentityCredentialOperationOptions ())
148+ 			federatedIdentityCredentialResp , err  :=  flexibleFederatedIdentityCredentialClient .CreateFederatedIdentityCredential (ctx , * applicationId , credential , federatedidentitycredential .DefaultCreateFederatedIdentityCredentialOperationOptions ())
147149			if  err  !=  nil  {
148150				return  fmt .Errorf ("adding flexible federated identity credential for %s" , applicationId )
149151			}
@@ -158,35 +160,11 @@ func (f flexibleFederatedIdentityCredentialResource) Create() sdk.ResourceFunc {
158160
159161			id  :=  beta .NewApplicationIdFederatedIdentityCredentialID (applicationId .ApplicationId , * newCredential .Id )
160162
161- 			// Wait for the credential to replicate 
162- 			timeout , _  :=  ctx .Deadline ()
163- 			polledForCredential , err  :=  (& pluginsdk.StateChangeConf { //nolint:staticcheck 
164- 				Pending :                   []string {"Waiting" },
165- 				Target :                    []string {"Done" },
166- 				Timeout :                   time .Until (timeout ),
167- 				MinTimeout :                1  *  time .Second ,
168- 				ContinuousTargetOccurence : 5 ,
169- 				Refresh : func () (interface {}, string , error ) {
170- 					resp , err  :=  federatedIdentityCredentialClient .GetFederatedIdentityCredential (ctx , id , federatedidentitycredential .DefaultGetFederatedIdentityCredentialOperationOptions ())
171- 					if  err  !=  nil  {
172- 						if  response .WasNotFound (resp .HttpResponse ) {
173- 							return  nil , "Waiting" , nil 
174- 						}
175- 						return  nil , "Error" , err 
176- 					}
177- 					credential  :=  resp .Model 
178- 					if  credential  ==  nil  {
179- 						return  nil , "Waiting" , nil 
180- 					}
181- 
182- 					return  credential , "Done" , nil 
183- 				},
184- 			}).WaitForStateContext (ctx )
185- 
186- 			if  err  !=  nil  {
187- 				return  fmt .Errorf ("waiting for %s: %+v" , id , err )
188- 			} else  if  polledForCredential  ==  nil  {
189- 				return  fmt .Errorf ("waiting for flexible federated identity credential %s: flexible federated identity credential not found in application manifest" , id )
163+ 			pollerType  :=  custompollers .NewApplicationFlexibleFederatedCredentialCreationPoller (flexibleFederatedIdentityCredentialClient , id )
164+ 			poller  :=  pollers .NewPoller (pollerType , 10 * time .Second , pollers .DefaultNumberOfDroppedConnectionsToAllow )
165+ 			// Wait for the credential to replicate - TODO This may need converting to a consistency.WaitForUpdate 
166+ 			if  err  :=  poller .PollUntilDone (ctx ); err  !=  nil  {
167+ 				return  err 
190168			}
191169
192170			metadata .SetID (id )
0 commit comments