@@ -24,11 +24,13 @@ import (
2424
2525 lb "github.com/oracle/cluster-api-provider-oci/cloud/services/loadbalancer"
2626 nlb "github.com/oracle/cluster-api-provider-oci/cloud/services/networkloadbalancer"
27+ wrs "github.com/oracle/cluster-api-provider-oci/cloud/services/workrequests"
2728
2829 "github.com/oracle/oci-go-sdk/v65/common"
2930 "github.com/oracle/oci-go-sdk/v65/core"
3031 "github.com/oracle/oci-go-sdk/v65/loadbalancer"
3132 "github.com/oracle/oci-go-sdk/v65/networkloadbalancer"
33+ "github.com/oracle/oci-go-sdk/v65/workrequests"
3234
3335 "github.com/pkg/errors"
3436 "k8s.io/apimachinery/pkg/util/wait"
@@ -61,10 +63,25 @@ func IsNotFound(err error) bool {
6163 return ok && serviceErr .GetHTTPStatusCode () == http .StatusNotFound
6264}
6365
66+ func FetchErrorsOnFailedWorkRequest (ctx context.Context , workRequestClient wrs.Client , workRequestId * string ) (done bool , err error ) {
67+ resp , err := workRequestClient .ListWorkRequestErrors (ctx , workrequests.ListWorkRequestErrorsRequest {
68+ WorkRequestId : workRequestId ,
69+ })
70+ if err != nil {
71+ return false , errors .Wrapf (err , "Failed to fetch work-request-errors for failed workrequest: %s" , * workRequestId )
72+ }
73+ final_err := errors .Errorf ("WorkRequest %s failed" , * workRequestId )
74+ for _ , wr_err := range resp .Items {
75+ final_err = errors .Errorf ("%s, %s" , * wr_err .Message , final_err .Error ())
76+ }
77+ return false , final_err
78+ }
79+
6480// AwaitNLBWorkRequest waits for the LB work request to either succeed, fail. See k8s.io/apimachinery/pkg/util/wait
65- func AwaitNLBWorkRequest (ctx context.Context , networkLoadBalancerClient nlb.NetworkLoadBalancerClient , workRequestId * string ) (* networkloadbalancer.WorkRequest , error ) {
81+ func AwaitNLBWorkRequest (ctx context.Context , networkLoadBalancerClient nlb.NetworkLoadBalancerClient , workRequestClient wrs. Client , workRequestId * string ) (* networkloadbalancer.WorkRequest , error ) {
6682 var wr * networkloadbalancer.WorkRequest
67- err := wait .PollWithContext (ctx , WorkRequestPollInterval , WorkRequestTimeout , func (ctx context.Context ) (done bool , err error ) {
83+ immediate := true
84+ err := wait .PollUntilContextTimeout (ctx , WorkRequestPollInterval , WorkRequestTimeout , immediate , func (ctx context.Context ) (done bool , err error ) {
6885 twr , err := networkLoadBalancerClient .GetWorkRequest (ctx , networkloadbalancer.GetWorkRequestRequest {
6986 WorkRequestId : workRequestId ,
7087 })
@@ -76,17 +93,18 @@ func AwaitNLBWorkRequest(ctx context.Context, networkLoadBalancerClient nlb.Netw
7693 wr = & twr .WorkRequest
7794 return true , nil
7895 case networkloadbalancer .OperationStatusFailed :
79- return false , errors . Errorf ( "WorkRequest %s failed" , * workRequestId )
96+ return FetchErrorsOnFailedWorkRequest ( ctx , workRequestClient , workRequestId )
8097 }
8198 return false , nil
8299 })
83100 return wr , err
84101}
85102
86103// AwaitLBWorkRequest waits for the LBaaS work request to either succeed, fail. See k8s.io/apimachinery/pkg/util/wait
87- func AwaitLBWorkRequest (ctx context.Context , loadBalancerClient lb.LoadBalancerClient , workRequestId * string ) (* loadbalancer.WorkRequest , error ) {
104+ func AwaitLBWorkRequest (ctx context.Context , loadBalancerClient lb.LoadBalancerClient , workRequestClient wrs. Client , workRequestId * string ) (* loadbalancer.WorkRequest , error ) {
88105 var wr * loadbalancer.WorkRequest
89- err := wait .PollWithContext (ctx , WorkRequestPollInterval , WorkRequestTimeout , func (ctx context.Context ) (done bool , err error ) {
106+ immediate := true
107+ err := wait .PollUntilContextTimeout (ctx , WorkRequestPollInterval , WorkRequestTimeout , immediate , func (ctx context.Context ) (done bool , err error ) {
90108 twr , err := loadBalancerClient .GetWorkRequest (ctx , loadbalancer.GetWorkRequestRequest {
91109 WorkRequestId : workRequestId ,
92110 })
@@ -98,7 +116,7 @@ func AwaitLBWorkRequest(ctx context.Context, loadBalancerClient lb.LoadBalancerC
98116 wr = & twr .WorkRequest
99117 return true , nil
100118 case loadbalancer .WorkRequestLifecycleStateFailed :
101- return false , errors . Errorf ( "WorkRequest %s failed" , * workRequestId )
119+ return FetchErrorsOnFailedWorkRequest ( ctx , workRequestClient , workRequestId )
102120 }
103121 return false , nil
104122 })
0 commit comments