Skip to content

Commit d52a18a

Browse files
committed
Finish load balancer acceptance tests. Things are in working order now
1 parent 7cfad70 commit d52a18a

6 files changed

+33
-140
lines changed

crud/helpers.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/oracle/terraform-provider-baremetal/client"
1515
"github.com/MustWin/baremetal-sdk-go"
1616
"errors"
17+
"strconv"
1718
)
1819

1920
var (
@@ -81,16 +82,28 @@ func handleMissingResourceError(sync ResourceVoider, err *error) {
8182
func LoadBalancerResourceID(res interface{}, workReq *baremetal.WorkRequest) (id *string, workReqSucceeded bool) {
8283
v := reflect.ValueOf(res).Elem()
8384
if v.IsValid() {
85+
log.Printf("=========== Resource IS VALID")
86+
// This is super fugly. It's this way because this API has no convention for ID formats.
87+
88+
// Load balancer
8489
id := v.FieldByName("ID")
8590
if id.IsValid() {
8691
s := id.String()
8792
return &s, false
8893
}
94+
// backendset, certificate, listener
8995
name := v.FieldByName("Name")
9096
if name.IsValid() {
9197
s := name.String()
9298
return &s, false
9399
}
100+
// backend
101+
ip := v.FieldByName("ip_address")
102+
port := v.FieldByName("port")
103+
if ip.IsValid() && port.IsValid() {
104+
s := ip.String() + ":" + strconv.Itoa(int(port.Int()))
105+
return &s, false
106+
}
94107
}
95108
if workReq != nil {
96109
if workReq.State == baremetal.WorkRequestSucceeded {

resource_obmcs_loadbalancer_backend.go

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88

99
"github.com/oracle/terraform-provider-baremetal/client"
1010
"github.com/oracle/terraform-provider-baremetal/crud"
11+
"strconv"
12+
"log"
1113
)
1214

1315
func LoadBalancerBackendResource() *schema.Resource {
@@ -101,24 +103,20 @@ type LoadBalancerBackendResourceCrud struct {
101103
Resource *baremetal.Backend
102104
}
103105

104-
// RefreshWorkRequest returns the last updated workRequest
105-
func (s *LoadBalancerBackendResourceCrud) RefreshWorkRequest() (*baremetal.WorkRequest, error) {
106-
if s.WorkRequest == nil {
107-
return nil, nil
108-
}
109-
wr, err := s.Client.GetWorkRequest(s.WorkRequest.ID, nil)
110-
if err != nil {
111-
return nil, err
112-
}
113-
s.WorkRequest = wr
114-
return wr, nil
106+
func (s *LoadBalancerBackendResourceCrud) buildID() string {
107+
return s.D.Get("ip_address").(string) + ":" + strconv.Itoa(s.D.Get("port").(int))
115108
}
116109

117110
func (s *LoadBalancerBackendResourceCrud) ID() string {
118-
id, _ := crud.LoadBalancerResourceID(s.Resource, s.WorkRequest)
111+
id, workSuccess := crud.LoadBalancerResourceID(s.Resource, s.WorkRequest)
112+
log.Printf("ID in load balancer backend ID(): %v", id)
119113
if id != nil {
120114
return *id
121115
}
116+
if workSuccess {
117+
// Always inferred this way
118+
return s.buildID()
119+
}
122120
return ""
123121
}
124122

@@ -190,7 +188,14 @@ func (s *LoadBalancerBackendResourceCrud) Create() (e error) {
190188
}
191189

192190
func (s *LoadBalancerBackendResourceCrud) Get() (e error) {
193-
s.Resource, e = s.Client.GetBackend(s.D.Get("load_balancer_id").(string), s.D.Get("backendset_name").(string), s.D.Get("name").(string), nil)
191+
_, stillWorking, err := crud.LoadBalancerResourceGet(s.BaseCrud, s.WorkRequest)
192+
if err != nil {
193+
return err
194+
}
195+
if stillWorking {
196+
return nil
197+
}
198+
s.Resource, e = s.Client.GetBackend(s.D.Get("load_balancer_id").(string), s.D.Get("backendset_name").(string), s.buildID(), nil)
194199
return
195200
}
196201

@@ -218,7 +223,7 @@ func (s *LoadBalancerBackendResourceCrud) SetData() {
218223

219224
func (s *LoadBalancerBackendResourceCrud) Delete() (e error) {
220225
var workReqID string
221-
workReqID, e = s.Client.DeleteBackend(s.D.Get("load_balancer_id").(string), s.D.Get("backendset_name").(string), s.D.Get("name").(string), nil)
226+
workReqID, e = s.Client.DeleteBackend(s.D.Get("load_balancer_id").(string), s.D.Get("backendset_name").(string), s.D.Id(), nil)
222227
if e != nil {
223228
return
224229
}

resource_obmcs_loadbalancer_backend_set.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -93,19 +93,6 @@ func (s *LoadBalancerBackendSetResourceCrud) ID() string {
9393
return ""
9494
}
9595

96-
// RefreshWorkRequest returns the last updated workRequest
97-
func (s *LoadBalancerBackendSetResourceCrud) RefreshWorkRequest() (*baremetal.WorkRequest, error) {
98-
if s.WorkRequest == nil {
99-
return nil, nil
100-
}
101-
wr, err := s.Client.GetWorkRequest(s.WorkRequest.ID, nil)
102-
if err != nil {
103-
return nil, err
104-
}
105-
s.WorkRequest = wr
106-
return wr, nil
107-
}
108-
10996
func (s *LoadBalancerBackendSetResourceCrud) CreatedPending() []string {
11097
return []string{
11198
baremetal.ResourceWaitingForWorkRequest,

resource_obmcs_loadbalancer_certificate.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -95,19 +95,6 @@ func (s *LoadBalancerCertificateResourceCrud) ID() string {
9595
return ""
9696
}
9797

98-
// RefreshWorkRequest returns the last updated workRequest
99-
func (s *LoadBalancerCertificateResourceCrud) RefreshWorkRequest() (*baremetal.WorkRequest, error) {
100-
if s.WorkRequest == nil {
101-
return nil, nil
102-
}
103-
wr, err := s.Client.GetWorkRequest(s.WorkRequest.ID, nil)
104-
if err != nil {
105-
return nil, err
106-
}
107-
s.WorkRequest = wr
108-
return wr, nil
109-
}
110-
11198
func (s *LoadBalancerCertificateResourceCrud) CreatedPending() []string {
11299
return []string{
113100
baremetal.ResourceWaitingForWorkRequest,

resource_obmcs_loadbalancer_listener.go

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -95,29 +95,6 @@ func (s *LoadBalancerListenerResourceCrud) ID() string {
9595
return s.D.Get("name").(string)
9696
}
9797
return ""
98-
/*log.Printf("[DEBUG] lb.LoadBalancerListenerResourceCrud.ID: WorkRequest: %#v", s.WorkRequest)
99-
if s.WorkRequest != nil && s.WorkRequest.State != baremetal.WorkRequestSucceeded {
100-
log.Printf("[DEBUG] lb.LoadBalancerListenerResourceCrud.ID: WorkRequest.ID: %s", s.WorkRequest.ID)
101-
return s.WorkRequest.ID
102-
}
103-
104-
id := fmt.Sprintf("%s/listener/%s", s.D.Get("load_balancer_id").(string), s.D.Get("name").(string))
105-
log.Printf("[DEBUG] lb.LoadBalancerListenerResourceCrud.ID: %#v", id)
106-
return id
107-
*/
108-
}
109-
110-
// RefreshWorkRequest returns the last updated workRequest
111-
func (s *LoadBalancerListenerResourceCrud) RefreshWorkRequest() (*baremetal.WorkRequest, error) {
112-
if s.WorkRequest == nil {
113-
return nil, nil
114-
}
115-
wr, err := s.Client.GetWorkRequest(s.WorkRequest.ID, nil)
116-
if err != nil {
117-
return nil, err
118-
}
119-
s.WorkRequest = wr
120-
return wr, nil
12198
}
12299

123100
func (s *LoadBalancerListenerResourceCrud) CreatedPending() []string {
@@ -227,9 +204,6 @@ func (s *LoadBalancerListenerResourceCrud) Update() (e error) {
227204
}
228205

229206
func (s *LoadBalancerListenerResourceCrud) SetData() {
230-
// load_balancer_id is not returned, but we should be able to trust it
231-
// s.D.Set("load_balancer_id", s.Resource.LoadBalancerID)
232-
233207
if s.Resource == nil {
234208
return
235209
}

resource_obmcs_loadbalancer_loadbalancer.go

Lines changed: 1 addition & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -108,38 +108,6 @@ func (s *LoadBalancerResourceCrud) ID() string {
108108
return s.WorkRequest.LoadBalancerID
109109
}
110110
return ""
111-
/*log.Printf("[DEBUG] lb.LoadBalancerResourceCrud.ID()")
112-
log.Printf("[DEBUG] lb.LoadBalancerResourceCrud.ID: Resource: %#v", s.Resource)
113-
if s.Resource != nil && s.Resource.ID != "" {
114-
log.Printf("[DEBUG] lb.LoadBalancerResourceCrud.ID: Resource.ID: %#v", s.Resource.ID)
115-
return s.Resource.ID
116-
}
117-
log.Printf("[DEBUG] lb.LoadBalancerResourceCrud.ID: WorkRequest: %#v", s.WorkRequest)
118-
if s.WorkRequest != nil {
119-
log.Printf("[DEBUG] lb.LoadBalancerResourceCrud.ID: WorkRequest.State: %s", s.WorkRequest.State)
120-
if s.WorkRequest.State == baremetal.WorkRequestSucceeded {
121-
log.Printf("[DEBUG] lb.LoadBalancerResourceCrud.ID: WorkRequest.LoadBalancerID: %#v", s.WorkRequest.LoadBalancerID)
122-
return s.WorkRequest.LoadBalancerID
123-
} else {
124-
log.Printf("[DEBUG] lb.LoadBalancerResourceCrud.ID: WorkRequest.ID: %s", s.WorkRequest.ID)
125-
return s.WorkRequest.ID
126-
}
127-
}
128-
log.Printf("[DEBUG] lb.LoadBalancerResourceCrud.ID: Resource & WorkRequest are nil, returning \"\"")
129-
return ""*/
130-
}
131-
132-
// RefreshWorkRequest returns the last updated workRequest
133-
func (s *LoadBalancerResourceCrud) RefreshWorkRequest() (*baremetal.WorkRequest, error) {
134-
if s.WorkRequest == nil {
135-
return nil, nil
136-
}
137-
wr, err := s.Client.GetWorkRequest(s.WorkRequest.ID, nil)
138-
if err != nil {
139-
return nil, err
140-
}
141-
s.WorkRequest = wr
142-
return wr, nil
143111
}
144112

145113
// CreatedPending returns the resource states which qualify as "creating"
@@ -214,54 +182,13 @@ func (s *LoadBalancerResourceCrud) Get() (e error) {
214182
if stillWorking {
215183
return nil
216184
}
217-
if s.WorkRequest != nil {
185+
if id == "" && s.WorkRequest != nil {
218186
id = s.WorkRequest.LoadBalancerID
219187
s.D.SetId(id)
220188
}
221189

222190
s.Resource, e = s.Client.GetLoadBalancer(id, nil)
223191

224-
/*
225-
id := s.D.Id()
226-
log.Printf("[DEBUG] lb.LoadBalancerBackendResource.Get: ID: %#v", id)
227-
if id == "" {
228-
panic(fmt.Sprintf("LoadBalancer had empty ID: %#v Resource: %#V", s, s.Resource))
229-
}
230-
wr := s.WorkRequest
231-
log.Printf("[DEBUG] lb.LoadBalancerBackendResource.Get: WorkRequest: %#v", wr)
232-
state := s.D.Get("state").(string)
233-
log.Printf("[DEBUG] lb.LoadBalancerBackendResource.Get: State: %#v", state)
234-
235-
// NOTE: if the id is for a work request, refresh its state and loadBalancerID. then refresh the load balancer
236-
if strings.HasPrefix(id, "ocid1.loadbalancerworkrequest.") {
237-
log.Printf("[DEBUG] lb.LoadBalancerBackendResource.Get: ID is for WorkRequest, refreshing")
238-
s.WorkRequest, e = s.Client.GetWorkRequest(id, nil)
239-
log.Printf("[DEBUG] lb.LoadBalancerBackendResource.Get: WorkRequest: %#v", s.WorkRequest)
240-
s.D.Set("state", s.WorkRequest.State)
241-
if s.WorkRequest.State == baremetal.WorkRequestSucceeded {
242-
id = s.WorkRequest.LoadBalancerID
243-
if id == "" {
244-
panic(fmt.Sprintf("WorkRequest had empty LoadBalancerID: %#v", s.WorkRequest))
245-
}
246-
s.D.SetId(id)
247-
// unset work request on success
248-
s.WorkRequest = nil
249-
} else {
250-
// We do not have a LoadBalancerID, so we short-circuit out
251-
return
252-
253-
}
254-
}
255-
256-
if !strings.HasPrefix(id, "ocid1.loadbalancer.") {
257-
panic(fmt.Sprintf("Cannot request loadbalancer with this ID, expected it to begin with \"ocid1.loadbalancer.\", but was: %#v", id))
258-
}
259-
log.Printf("[DEBUG] lb.LoadBalancerBackendResource.Get: ID: %#v", id)
260-
if id == "" {
261-
panic(fmt.Sprintf("LoadBalancer had empty ID: %#v Resource: %#V", s, s.Resource))
262-
}
263-
s.Resource, e = s.Client.GetLoadBalancer(id, nil)
264-
*/
265192
return
266193
}
267194

0 commit comments

Comments
 (0)