@@ -24,11 +24,13 @@ import (
24
24
25
25
lb "github.com/oracle/cluster-api-provider-oci/cloud/services/loadbalancer"
26
26
nlb "github.com/oracle/cluster-api-provider-oci/cloud/services/networkloadbalancer"
27
+ wrs "github.com/oracle/cluster-api-provider-oci/cloud/services/workrequests"
27
28
28
29
"github.com/oracle/oci-go-sdk/v65/common"
29
30
"github.com/oracle/oci-go-sdk/v65/core"
30
31
"github.com/oracle/oci-go-sdk/v65/loadbalancer"
31
32
"github.com/oracle/oci-go-sdk/v65/networkloadbalancer"
33
+ "github.com/oracle/oci-go-sdk/v65/workrequests"
32
34
33
35
"github.com/pkg/errors"
34
36
"k8s.io/apimachinery/pkg/util/wait"
@@ -61,10 +63,25 @@ func IsNotFound(err error) bool {
61
63
return ok && serviceErr .GetHTTPStatusCode () == http .StatusNotFound
62
64
}
63
65
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
+
64
80
// 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 ) {
66
82
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 ) {
68
85
twr , err := networkLoadBalancerClient .GetWorkRequest (ctx , networkloadbalancer.GetWorkRequestRequest {
69
86
WorkRequestId : workRequestId ,
70
87
})
@@ -76,17 +93,18 @@ func AwaitNLBWorkRequest(ctx context.Context, networkLoadBalancerClient nlb.Netw
76
93
wr = & twr .WorkRequest
77
94
return true , nil
78
95
case networkloadbalancer .OperationStatusFailed :
79
- return false , errors . Errorf ( "WorkRequest %s failed" , * workRequestId )
96
+ return FetchErrorsOnFailedWorkRequest ( ctx , workRequestClient , workRequestId )
80
97
}
81
98
return false , nil
82
99
})
83
100
return wr , err
84
101
}
85
102
86
103
// 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 ) {
88
105
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 ) {
90
108
twr , err := loadBalancerClient .GetWorkRequest (ctx , loadbalancer.GetWorkRequestRequest {
91
109
WorkRequestId : workRequestId ,
92
110
})
@@ -98,7 +116,7 @@ func AwaitLBWorkRequest(ctx context.Context, loadBalancerClient lb.LoadBalancerC
98
116
wr = & twr .WorkRequest
99
117
return true , nil
100
118
case loadbalancer .WorkRequestLifecycleStateFailed :
101
- return false , errors . Errorf ( "WorkRequest %s failed" , * workRequestId )
119
+ return FetchErrorsOnFailedWorkRequest ( ctx , workRequestClient , workRequestId )
102
120
}
103
121
return false , nil
104
122
})
0 commit comments