Skip to content

Commit c7e2af5

Browse files
mikejihbecodycushing
authored andcommitted
WIP, demo of listener deletion failing.
1 parent 2d269ef commit c7e2af5

File tree

10 files changed

+267
-70
lines changed

10 files changed

+267
-70
lines changed

client/bare_metal_client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ type BareMetalClient interface {
162162
TerminateDBSystem(id string, opts *baremetal.IfMatchOptions) (e error)
163163
TerminateInstance(id string, opts *baremetal.IfMatchOptions) (e error)
164164

165-
UpdateBackend(loadBalancerID string, backendSetName string, backendName string, opts *baremetal.CreateLoadBalancerBackendOptions) (workRequestID string, e error)
165+
UpdateBackend(loadBalancerID string, backendSetName string, backendName string, opts *baremetal.UpdateLoadBalancerBackendOptions) (workRequestID string, e error)
166166
UpdateBackendSet(loadBalancerID string, backendSetName string, opts *baremetal.UpdateLoadBalancerBackendSetOptions) (workRequestID string, e error)
167167
UpdateBucket(compartmentID string, name string, namespaceName baremetal.Namespace, opts *baremetal.UpdateBucketOptions) (bckt *baremetal.Bucket, e error)
168168
UpdateCompartment(id string, opts *baremetal.UpdateIdentityOptions) (res *baremetal.Compartment, e error)

client/mocks/bare_metal_client.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3072,18 +3072,18 @@ func (_m *BareMetalClient) TerminateInstance(id string, opts *baremetal.IfMatchO
30723072
}
30733073

30743074
// UpdateBackend provides a mock function with given fields: loadBalancerID, backendSetName, backendName, opts
3075-
func (_m *BareMetalClient) UpdateBackend(loadBalancerID string, backendSetName string, backendName string, opts *baremetal.CreateLoadBalancerBackendOptions) (string, error) {
3075+
func (_m *BareMetalClient) UpdateBackend(loadBalancerID string, backendSetName string, backendName string, opts *baremetal.UpdateLoadBalancerBackendOptions) (string, error) {
30763076
ret := _m.Called(loadBalancerID, backendSetName, backendName, opts)
30773077

30783078
var r0 string
3079-
if rf, ok := ret.Get(0).(func(string, string, string, *baremetal.CreateLoadBalancerBackendOptions) string); ok {
3079+
if rf, ok := ret.Get(0).(func(string, string, string, *baremetal.UpdateLoadBalancerBackendOptions) string); ok {
30803080
r0 = rf(loadBalancerID, backendSetName, backendName, opts)
30813081
} else {
30823082
r0 = ret.Get(0).(string)
30833083
}
30843084

30853085
var r1 error
3086-
if rf, ok := ret.Get(1).(func(string, string, string, *baremetal.CreateLoadBalancerBackendOptions) error); ok {
3086+
if rf, ok := ret.Get(1).(func(string, string, string, *baremetal.UpdateLoadBalancerBackendOptions) error); ok {
30873087
r1 = rf(loadBalancerID, backendSetName, backendName, opts)
30883088
} else {
30893089
r1 = ret.Error(1)

crud/helpers.go

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func handleMissingResourceError(sync ResourceVoider, err *error) {
7373
if err != nil {
7474
if strings.Contains((*err).Error(), "does not exist") ||
7575
strings.Contains((*err).Error(), " not present in ") ||
76-
strings.Contains((*err).Error(), "resource not found") ||
76+
strings.Contains((*err).Error(), "not found") ||
7777
(strings.Contains((*err).Error(), "Load balancer") && strings.Contains((*err).Error(), " has no ")) {
7878

7979
log.Println("[DEBUG] Object does not exist, voiding resource and nullifying error")
@@ -138,6 +138,36 @@ func LoadBalancerResourceGet(s BaseCrud, workReq *baremetal.WorkRequest) (id str
138138
return id, false, nil
139139
}
140140

141+
func LoadBalancerWaitForWorkRequest(client client.BareMetalClient, d *schema.ResourceData, wr *baremetal.WorkRequest) error {
142+
var e error
143+
stateConf := &resource.StateChangeConf{
144+
Pending: []string{
145+
baremetal.ResourceWaitingForWorkRequest,
146+
baremetal.WorkRequestInProgress,
147+
baremetal.WorkRequestAccepted,
148+
},
149+
Target: []string{
150+
baremetal.ResourceSucceededWorkRequest,
151+
baremetal.WorkRequestSucceeded,
152+
baremetal.ResourceFailed,
153+
},
154+
Refresh: func() (interface{}, string, error) {
155+
wr, e = client.GetWorkRequest(wr.ID, nil)
156+
return wr, wr.State, e
157+
},
158+
Timeout: d.Timeout(schema.TimeoutCreate),
159+
}
160+
161+
if _, e = stateConf.WaitForState(); e != nil {
162+
return e
163+
}
164+
if wr.State == baremetal.ResourceFailed {
165+
return errors.New("Resource creation failed, state FAILED")
166+
}
167+
return nil
168+
}
169+
170+
141171
func exponentialBackoffSleep(retryNum uint) {
142172
secondsToSleep := 1 << retryNum
143173
log.Printf("[DEBUG] Got a retriable error. Waiting %d seconds and trying again...", secondsToSleep)
@@ -188,6 +218,7 @@ func ReadResource(sync ResourceReader) (e error) {
188218

189219
func readResourceWithRetry(sync ResourceReader, retryNum uint) (e error) {
190220
if e = sync.Get(); e != nil {
221+
log.Printf("ERROR IN GET: %v\n", e.Error())
191222
handleMissingResourceError(sync, &e)
192223
if e != nil {
193224
if isRetriableError(e.Error()) && retryNum <= MaxRetries {

crud/interface.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,12 @@ type StatefullyCreatedResource interface {
8383
CreatedTarget() []string
8484
}
8585

86+
type StatefullyUpdatedResource interface {
87+
StatefulResource
88+
UpdatedPending() []string
89+
UpdatedTarget() []string
90+
}
91+
8692
type StatefullyDeletedResource interface {
8793
StatefulResource
8894
DeletedPending() []string

resource_obmcs_loadbalancer_backend.go

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package main
44

55
import (
66
"log"
7+
"strings"
78
"strconv"
89

910
"github.com/MustWin/baremetal-sdk-go"
@@ -152,26 +153,21 @@ func (s *LoadBalancerBackendResourceCrud) DeletedTarget() []string {
152153
}
153154
}
154155

155-
func makeBackendOptions(data *schema.ResourceData) *baremetal.CreateLoadBalancerBackendOptions {
156+
func (s *LoadBalancerBackendResourceCrud) Create() (e error) {
157+
156158
opts := &baremetal.CreateLoadBalancerBackendOptions{}
157-
if v, ok := data.GetOk("backup"); ok {
159+
if v, ok := s.D.GetOk("backup"); ok {
158160
opts.Backup = v.(bool)
159161
}
160-
if v, ok := data.GetOk("drain"); ok {
162+
if v, ok := s.D.GetOk("drain"); ok {
161163
opts.Drain = v.(bool)
162164
}
163-
if v, ok := data.GetOk("offline"); ok {
165+
if v, ok := s.D.GetOk("offline"); ok {
164166
opts.Offline = v.(bool)
165167
}
166-
if v, ok := data.GetOk("weight"); ok {
168+
if v, ok := s.D.GetOk("weight"); ok {
167169
opts.Weight = v.(int)
168170
}
169-
return opts
170-
}
171-
172-
func (s *LoadBalancerBackendResourceCrud) Create() (e error) {
173-
174-
opts := makeBackendOptions(s.D)
175171

176172
var workReqID string
177173
workReqID, e = s.Client.CreateBackend(
@@ -201,15 +197,34 @@ func (s *LoadBalancerBackendResourceCrud) Get() (e error) {
201197
}
202198

203199
func (s *LoadBalancerBackendResourceCrud) Update() (e error) {
204-
opts := makeBackendOptions(s.D)
200+
opts := &baremetal.UpdateLoadBalancerBackendOptions{}
201+
if v, ok := s.D.GetOk("backup"); ok {
202+
opts.Backup = v.(bool)
203+
}
204+
if v, ok := s.D.GetOk("drain"); ok {
205+
opts.Drain = v.(bool)
206+
}
207+
if v, ok := s.D.GetOk("offline"); ok {
208+
opts.Offline = v.(bool)
209+
}
210+
if v, ok := s.D.GetOk("weight"); ok {
211+
opts.Weight = v.(int)
212+
}
205213

206214
var workReqID string
207215
workReqID, e = s.Client.UpdateBackend(s.D.Get("load_balancer_id").(string), s.D.Get("backendset_name").(string), s.D.Id(), opts)
208216
if e != nil {
209217
return
210218
}
211219
s.WorkRequest, e = s.Client.GetWorkRequest(workReqID, nil)
212-
return
220+
if e != nil {
221+
return
222+
}
223+
e = crud.LoadBalancerWaitForWorkRequest(s.Client, s.D, s.WorkRequest)
224+
if e != nil {
225+
return
226+
}
227+
return s.Get()
213228
}
214229

215230
func (s *LoadBalancerBackendResourceCrud) SetData() {
@@ -223,6 +238,10 @@ func (s *LoadBalancerBackendResourceCrud) SetData() {
223238
}
224239

225240
func (s *LoadBalancerBackendResourceCrud) Delete() (e error) {
241+
// TODO: make sure this actually works
242+
if strings.Contains(s.D.Id(), "ocid1.loadbalancerworkrequest") {
243+
return
244+
}
226245
var workReqID string
227246
workReqID, e = s.Client.DeleteBackend(s.D.Get("load_balancer_id").(string), s.D.Get("backendset_name").(string), s.D.Id(), nil)
228247
if e != nil {

resource_obmcs_loadbalancer_backend_set.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,14 @@ func (s *LoadBalancerBackendSetResourceCrud) Update() (e error) {
169169
return
170170
}
171171
s.WorkRequest, e = s.Client.GetWorkRequest(workReqID, nil)
172-
return
172+
if e != nil {
173+
return
174+
}
175+
e = crud.LoadBalancerWaitForWorkRequest(s.Client, s.D, s.WorkRequest)
176+
if e != nil {
177+
return
178+
}
179+
return s.Get()
173180
}
174181

175182
func (s *LoadBalancerBackendSetResourceCrud) SetData() {

resource_obmcs_loadbalancer_listener.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,11 +188,15 @@ func (s *LoadBalancerListenerResourceCrud) GetListener(loadBalancerID, name stri
188188
}
189189

190190
func (s *LoadBalancerListenerResourceCrud) Update() (e error) {
191+
191192
opts := &baremetal.UpdateLoadBalancerListenerOptions{
192193
DefaultBackendSetName: s.D.Get("default_backend_set_name").(string),
193194
Port: s.D.Get("port").(int),
194195
Protocol: s.D.Get("protocol").(string),
195-
SSLConfig: *s.sslConfig(),
196+
}
197+
ssl := s.sslConfig()
198+
if ssl != nil && ssl.CertificateName != "" {
199+
opts.SSLConfig = *ssl
196200
}
197201

198202
var workReqID string
@@ -201,7 +205,14 @@ func (s *LoadBalancerListenerResourceCrud) Update() (e error) {
201205
return
202206
}
203207
s.WorkRequest, e = s.Client.GetWorkRequest(workReqID, nil)
204-
return
208+
if e != nil {
209+
return
210+
}
211+
e = crud.LoadBalancerWaitForWorkRequest(s.Client, s.D, s.WorkRequest)
212+
if e != nil {
213+
return
214+
}
215+
return s.Get()
205216
}
206217

207218
func (s *LoadBalancerListenerResourceCrud) SetData() {

0 commit comments

Comments
 (0)