Skip to content

Commit bec1a8e

Browse files
mikejihbecodycushing
authored andcommitted
Fix load balancer backendset creation without certificates. Closes #85
1 parent 22b83be commit bec1a8e

File tree

5 files changed

+101
-73
lines changed

5 files changed

+101
-73
lines changed

crud/helpers.go

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,16 @@ func (s *BaseCrud) State() string {
6666
}
6767

6868
func handleMissingResourceError(sync ResourceVoider, err *error) {
69-
if err != nil && (strings.Contains((*err).Error(), "does not exist") ||
69+
70+
if err != nil {
71+
if strings.Contains((*err).Error(), "does not exist") ||
7072
strings.Contains((*err).Error(), " not present in ") ||
7173
strings.Contains((*err).Error(), "resource not found") ||
72-
(strings.Contains((*err).Error(), "Load balancer") && strings.Contains((*err).Error(), " has no "))) {
73-
log.Println("[DEBUG] Object does not exist, voiding resource and nullifying error")
74-
sync.VoidState()
75-
*err = nil
74+
(strings.Contains((*err).Error(), "Load balancer") && strings.Contains((*err).Error(), " has no ")) {
75+
log.Println("[DEBUG] Object does not exist, voiding resource and nullifying error")
76+
sync.VoidState()
77+
*err = nil
78+
}
7679
}
7780
}
7881

@@ -113,7 +116,6 @@ func LoadBalancerResourceID(res interface{}, workReq *baremetal.WorkRequest) (id
113116

114117
func LoadBalancerResourceGet(s BaseCrud, workReq *baremetal.WorkRequest) (id string, stillWorking bool, err error) {
115118
id = s.D.Id()
116-
log.Printf("================== ID in LoadbalancerResourceGet: %s\n", id)
117119
// NOTE: if the id is for a work request, refresh its state and loadBalancerID.
118120
if strings.HasPrefix(id, "ocid1.loadbalancerworkrequest.") {
119121
updatedWorkReq, err := s.Client.GetWorkRequest(id, nil)
@@ -166,8 +168,20 @@ func ReadResource(sync ResourceReader) (e error) {
166168
handleMissingResourceError(sync, &e)
167169
return
168170
}
171+
169172
sync.SetData()
170173

174+
/* Attempt at #113, but this breaks everything. Probably because this is used internally by other state checking mechanisms.
175+
176+
if dr, ok := sync.(StatefullyDeletedResource); ok {
177+
for _, target := range dr.DeletedTarget() {
178+
if dr.State() == target {
179+
dr.VoidState()
180+
return
181+
}
182+
}
183+
}*/
184+
171185
return
172186
}
173187

@@ -188,12 +202,14 @@ func UpdateResource(d *schema.ResourceData, sync ResourceUpdater) (e error) {
188202
// Finally, sets the ResourceData state to empty.
189203
func DeleteResource(d *schema.ResourceData, sync ResourceDeleter) (e error) {
190204
if e = sync.Delete(); e != nil {
191-
return
205+
handleMissingResourceError(sync, &e)
206+
if e != nil {
207+
return
208+
}
192209
}
193210

194211
if stateful, ok := sync.(StatefullyDeletedResource); ok {
195212
e = waitForStateRefresh(stateful, d.Timeout(schema.TimeoutDelete), stateful.DeletedPending(), stateful.DeletedTarget())
196-
197213
}
198214

199215
if ew, waitOK := sync.(ExtraWaitPostCreateDelete); waitOK {

resource_obmcs_loadbalancer_backend_set.go

Lines changed: 30 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -157,23 +157,11 @@ func (s *LoadBalancerBackendSetResourceCrud) Get() (e error) {
157157
}
158158

159159
func (s *LoadBalancerBackendSetResourceCrud) Update() (e error) {
160-
healthChecker := baremetal.HealthChecker{
161-
IntervalInMS: s.D.Get("health_checker.interval_ms").(int),
162-
Port: s.D.Get("health_checker.port").(int),
163-
Protocol: s.D.Get("health_checker.protocol").(string),
164-
ResponseBodyRegex: s.D.Get("health_checker.response_body_regex").(string),
165-
URLPath: s.D.Get("health_checker.url_path").(string),
166-
}
167-
sslConfig := baremetal.SSLConfiguration{
168-
CertificateName: s.D.Get("ssl_configuration.certificate_name").(string),
169-
VerifyDepth: s.D.Get("ssl_configuration.verify_depth").(int),
170-
VerifyPeerCertificate: s.D.Get("ssl_configuration.verify_peer_certificate").(bool),
171-
}
172-
opts := &baremetal.UpdateLoadBalancerBackendSetOptions{
173-
Policy: s.D.Get("policy").(string),
174-
SSLConfig: sslConfig,
175-
HealthChecker: healthChecker,
176-
}
160+
opts := &baremetal.UpdateLoadBalancerBackendSetOptions{}
161+
162+
opts.HealthChecker = s.healthChecker()
163+
opts.SSLConfig = s.sslConfig()
164+
opts.Policy = s.D.Get("policy").(string)
177165

178166
var workReqID string
179167
workReqID, e = s.Client.UpdateBackendSet(s.D.Get("load_balancer_id").(string), s.D.Id(), opts)
@@ -190,18 +178,24 @@ func (s *LoadBalancerBackendSetResourceCrud) SetData() {
190178
}
191179
s.D.Set("policy", s.Resource.Policy)
192180
s.D.Set("name", s.Resource.Name)
193-
s.D.Set("health_checker", map[string]interface{}{
194-
"interval_ms": s.Resource.HealthChecker.IntervalInMS,
195-
"port": s.Resource.HealthChecker.Port,
196-
"protocol": s.Resource.HealthChecker.Protocol,
197-
"response_body_regex": s.Resource.HealthChecker.ResponseBodyRegex,
198-
"url_path": s.Resource.HealthChecker.URLPath,
199-
})
200-
s.D.Set("ssl_configuration", map[string]interface{}{
201-
"certificate_name": s.Resource.SSLConfig.CertificateName,
202-
"verify_depth": s.Resource.SSLConfig.VerifyDepth,
203-
"verify_peer_certificate": s.Resource.SSLConfig.VerifyPeerCertificate,
204-
})
181+
if s.Resource.HealthChecker != nil {
182+
s.D.Set("health_checker", map[string]interface{}{
183+
"interval_ms": s.Resource.HealthChecker.IntervalInMS,
184+
"port": s.Resource.HealthChecker.Port,
185+
"protocol": s.Resource.HealthChecker.Protocol,
186+
"response_body_regex": s.Resource.HealthChecker.ResponseBodyRegex,
187+
"url_path": s.Resource.HealthChecker.URLPath,
188+
})
189+
}
190+
191+
if s.Resource.SSLConfig != nil {
192+
s.D.Set("ssl_configuration", map[string]interface{}{
193+
"certificate_name": s.Resource.SSLConfig.CertificateName,
194+
"verify_depth": s.Resource.SSLConfig.VerifyDepth,
195+
"verify_peer_certificate": s.Resource.SSLConfig.VerifyPeerCertificate,
196+
})
197+
}
198+
205199
backends := make([]map[string]interface{}, len(s.Resource.Backends))
206200
for i, v := range s.Resource.Backends {
207201
backends[i] = map[string]interface{}{
@@ -228,30 +222,33 @@ func (s *LoadBalancerBackendSetResourceCrud) Delete() (e error) {
228222
}
229223

230224
func (s *LoadBalancerBackendSetResourceCrud) sslConfig() (sslConfig *baremetal.SSLConfiguration) {
231-
sslConfig = new(baremetal.SSLConfiguration)
232225
vs := s.D.Get("ssl_configuration").([]interface{})
233226
if len(vs) == 1 {
227+
sslConfig = new(baremetal.SSLConfiguration)
234228
v := vs[0].(map[string]interface{})
235229
sslConfig.CertificateName = v["certificate_name"].(string)
236230
sslConfig.VerifyDepth = v["verify_depth"].(int)
237231
sslConfig.VerifyPeerCertificate = v["verify_peer_certificate"].(bool)
232+
return sslConfig
238233
}
239234

240-
return
235+
return nil
241236
}
242237

243238
func (s *LoadBalancerBackendSetResourceCrud) healthChecker() *baremetal.HealthChecker {
244-
healthChecker := new(baremetal.HealthChecker)
239+
245240
vs := s.D.Get("health_checker").([]interface{})
246241
if len(vs) == 1 {
242+
healthChecker := new(baremetal.HealthChecker)
247243
v := vs[0].(map[string]interface{})
248244
healthChecker.IntervalInMS = v["interval_ms"].(int)
249245
healthChecker.Port = v["port"].(int)
250246
healthChecker.Protocol = v["protocol"].(string)
251247
healthChecker.ResponseBodyRegex = v["response_body_regex"].(string)
252248
healthChecker.URLPath = v["url_path"].(string)
249+
return healthChecker
253250
}
254-
return healthChecker
251+
return nil
255252
}
256253
func (s *LoadBalancerBackendSetResourceCrud) backends() []baremetal.Backend {
257254
vs := s.D.Get("backend").([]interface{})

resource_obmcs_loadbalancer_loadbalancer.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ type LoadBalancerResourceCrud struct {
100100
// ID delegates to the load balancer ID, falling back to the work request ID
101101
func (s *LoadBalancerResourceCrud) ID() string {
102102
id, workSuccess := crud.LoadBalancerResourceID(s.Resource, s.WorkRequest)
103-
log.Printf("==================\n%s,%v\n", *id, workSuccess)
104103
if id != nil {
105104
return *id
106105
}
@@ -175,7 +174,6 @@ func (s *LoadBalancerResourceCrud) Create() (e error) {
175174
func (s *LoadBalancerResourceCrud) Get() (e error) {
176175
// key: {workRequestID} || {loadBalancerID}
177176
id, stillWorking, err := crud.LoadBalancerResourceGet(s.BaseCrud, s.WorkRequest)
178-
log.Printf("==================\n%s,%v,%v,%v\n", id, stillWorking, err, s.WorkRequest)
179177
if err != nil {
180178
return err
181179
}
@@ -212,7 +210,7 @@ func (s *LoadBalancerResourceCrud) Update() (e error) {
212210
func (s *LoadBalancerResourceCrud) SetData() {
213211
// The first time this is called, we haven't actually fetched the resource yet, we just got a work request
214212
if s.Resource != nil && s.Resource.ID != "" {
215-
s.D.SetId(s.Resource.ID)
213+
//s.D.SetId(s.Resource.ID)
216214
s.D.Set("compartment_id", s.Resource.CompartmentID)
217215
s.D.Set("display_name", s.Resource.DisplayName)
218216
s.D.Set("shape", s.Resource.Shape)

resource_obmcs_loadbalancer_test.go

Lines changed: 44 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,20 @@ func (s *ResourceLoadBalancerTestSuite) SetupTest() {
3535
s.ResourceName = "baremetal_load_balancer.t"
3636
s.Config = loadbalancerConfig + certificateConfig + `
3737
38+
resource "baremetal_load_balancer_backendset" "no_cert" {
39+
load_balancer_id = "${baremetal_load_balancer.t.id}"
40+
name = "stub_backendset_name_no_cert"
41+
policy = "ROUND_ROBIN"
42+
43+
health_checker {
44+
interval_ms = 30000
45+
port = 1234
46+
protocol = "HTTP"
47+
response_body_regex = ".*"
48+
url_path = "/"
49+
}
50+
}
51+
3852
resource "baremetal_load_balancer_backendset" "t" {
3953
load_balancer_id = "${baremetal_load_balancer.t.id}"
4054
name = "stub_backendset_name"
@@ -79,7 +93,7 @@ resource "baremetal_load_balancer_backend" "t" {
7993
offline = true
8094
weight = 1
8195
}
82-
`
96+
`
8397
s.Config += testProviderConfig()
8498
}
8599

@@ -98,32 +112,35 @@ func (s *ResourceLoadBalancerTestSuite) TestCreateResourceLoadBalancerMaximal()
98112
resource.TestCheckResourceAttrSet("baremetal_load_balancer.t", "ip_addresses.#"),
99113

100114
resource.TestCheckResourceAttr("baremetal_load_balancer_listener.t", "ssl_configuration.#", "1"),
101-
/*
102-
// Certificate
103-
resource.TestCheckResourceAttrSet("baremetal_load_balancer_certificate.t.certificate_name", "stub_certificate_name"),
104-
105-
// BackendSet
106-
resource.TestCheckResourceAttr("baremetal_load_balancer_backendset.t", "name", "stub_backendset_name"),
107-
resource.TestCheckResourceAttr("baremetal_load_balancer_backendset.t", "health_checker.port", "1234"),
108-
resource.TestCheckResourceAttr("baremetal_load_balancer_backendset.t", "ssl_configuration.#", "1"),
109-
resource.TestCheckResourceAttr("baremetal_load_balancer_backendset.t", "ssl_configuration.0.certificate_name", "stub_certificate_name"),
110-
resource.TestCheckResourceAttr("baremetal_load_balancer_backendset.t", "ssl_configuration.0.verify_depth", "6"),
111-
resource.TestCheckResourceAttr("baremetal_load_balancer_backendset.t", "ssl_configuration.0.verify_peer_certificate", "false"),
112-
113-
// Listener
114-
resource.TestCheckResourceAttr("baremetal_load_balancer_listener.t", "name", "stub_listener_name"),
115-
116-
resource.TestCheckResourceAttr("baremetal_load_balancer_listener.t", "ssl_configuration.0.certificate_name", "stub_certificate_name"),
117-
resource.TestCheckResourceAttr("baremetal_load_balancer_listener.t", "ssl_configuration.0.verify_depth", "6"),
118-
resource.TestCheckResourceAttr("baremetal_load_balancer_listener.t", "ssl_configuration.0.verify_peer_certificate", "false"),
119-
120-
// Backend
121-
resource.TestCheckResourceAttr("baremetal_load_balancer_backend.t", "ip_address", "1.2.3.4"),
122-
resource.TestCheckResourceAttr("baremetal_load_balancer_backend.t", "backup", "true"),
123-
resource.TestCheckResourceAttr("baremetal_load_balancer_backend.t", "drain", "true"),
124-
resource.TestCheckResourceAttr("baremetal_load_balancer_backend.t", "offline", "true"),
125-
resource.TestCheckResourceAttr("baremetal_load_balancer_backend.t", "weight", "1"),
126-
*/
115+
116+
// Certificate
117+
resource.TestCheckResourceAttr("baremetal_load_balancer_certificate.t", "certificate_name", "stub_certificate_name"),
118+
119+
// BackendSet
120+
resource.TestCheckResourceAttr("baremetal_load_balancer_backendset.t", "name", "stub_backendset_name"),
121+
resource.TestCheckResourceAttr("baremetal_load_balancer_backendset.t", "health_checker.0.port", "1234"),
122+
resource.TestCheckResourceAttr("baremetal_load_balancer_backendset.t", "ssl_configuration.#", "1"),
123+
resource.TestCheckResourceAttr("baremetal_load_balancer_backendset.t", "ssl_configuration.0.certificate_name", "stub_certificate_name"),
124+
resource.TestCheckResourceAttr("baremetal_load_balancer_backendset.t", "ssl_configuration.0.verify_depth", "6"),
125+
resource.TestCheckResourceAttr("baremetal_load_balancer_backendset.t", "ssl_configuration.0.verify_peer_certificate", "false"),
126+
127+
resource.TestCheckResourceAttr("baremetal_load_balancer_backendset.no_cert", "name", "stub_backendset_name_no_cert"),
128+
resource.TestCheckResourceAttr("baremetal_load_balancer_backendset.no_cert", "health_checker.0.port", "1234"),
129+
130+
131+
// Listener
132+
resource.TestCheckResourceAttr("baremetal_load_balancer_listener.t", "name", "stub_listener_name"),
133+
134+
resource.TestCheckResourceAttr("baremetal_load_balancer_listener.t", "ssl_configuration.0.certificate_name", "stub_certificate_name"),
135+
resource.TestCheckResourceAttr("baremetal_load_balancer_listener.t", "ssl_configuration.0.verify_depth", "6"),
136+
resource.TestCheckResourceAttr("baremetal_load_balancer_listener.t", "ssl_configuration.0.verify_peer_certificate", "false"),
137+
138+
// Backend
139+
resource.TestCheckResourceAttr("baremetal_load_balancer_backend.t", "ip_address", "1.2.3.4"),
140+
resource.TestCheckResourceAttr("baremetal_load_balancer_backend.t", "backup", "true"),
141+
resource.TestCheckResourceAttr("baremetal_load_balancer_backend.t", "drain", "true"),
142+
resource.TestCheckResourceAttr("baremetal_load_balancer_backend.t", "offline", "true"),
143+
resource.TestCheckResourceAttr("baremetal_load_balancer_backend.t", "weight", "1"),
127144
),
128145
},
129146
},

vendor/github.com/MustWin/baremetal-sdk-go/request_options.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)