Skip to content

Commit e0f582a

Browse files
author
yann degat
committed
enforce CheckDeleted on all resources
1 parent 74403cc commit e0f582a

30 files changed

+317
-385
lines changed

Diff for: ovh/data_source_ovh_me_installation_template.go

+141-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package ovh
22

33
import (
4+
"fmt"
5+
"net/url"
6+
47
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
8+
"github.com/ovh/go-ovh/ovh"
59
)
610

711
func dataSourceMeInstallationTemplate() *schema.Resource {
@@ -254,9 +258,7 @@ func dataSourceMeInstallationTemplate() *schema.Resource {
254258

255259
func dataSourceMeInstallationTemplateRead(d *schema.ResourceData, meta interface{}) error {
256260
config := meta.(*Config)
257-
name := d.Get("template_name").(string)
258-
259-
template, err := getInstallationTemplate(name, config.OVHClient)
261+
template, err := getInstallationTemplate(d, config.OVHClient)
260262
if err != nil {
261263
return err
262264
}
@@ -272,6 +274,7 @@ func dataSourceMeInstallationTemplateRead(d *schema.ResourceData, meta interface
272274
return err
273275
}
274276

277+
name := d.Get("template_name").(string)
275278
d.SetId(name)
276279

277280
return nil
@@ -322,3 +325,138 @@ func partialMeInstallationTemplatePartitionSchemesRead(d *schema.ResourceData, m
322325

323326
return nil
324327
}
328+
329+
func getPartitionSchemes(template string, client *ovh.Client) ([]*PartitionScheme, error) {
330+
schemes, err := getPartitionSchemeIds(template, client)
331+
if err != nil {
332+
return nil, err
333+
}
334+
335+
partitionSchemes := []*PartitionScheme{}
336+
for _, scheme := range schemes {
337+
partitionScheme, err := getPartitionScheme(template, scheme, client)
338+
if err != nil {
339+
return nil, err
340+
}
341+
342+
partitionSchemes = append(partitionSchemes, partitionScheme)
343+
}
344+
345+
return partitionSchemes, nil
346+
}
347+
348+
func getPartitionScheme(template, scheme string, client *ovh.Client) (*PartitionScheme, error) {
349+
r := &PartitionScheme{}
350+
351+
endpoint := fmt.Sprintf(
352+
"/me/installationTemplate/%s/partitionScheme/%s",
353+
url.PathEscape(template),
354+
url.PathEscape(scheme),
355+
)
356+
357+
if err := client.Get(endpoint, r); err != nil {
358+
return nil, fmt.Errorf("Error calling GET %s: %s \n", endpoint, err.Error())
359+
}
360+
361+
return r, nil
362+
}
363+
364+
func getPartitionSchemeIds(template string, client *ovh.Client) ([]string, error) {
365+
schemes := []string{}
366+
endpoint := fmt.Sprintf(
367+
"/me/installationTemplate/%s/partitionScheme",
368+
url.PathEscape(template),
369+
)
370+
err := client.Get(endpoint, &schemes)
371+
372+
if err != nil {
373+
return nil, fmt.Errorf("Error calling GET %s: %s \n", endpoint, err.Error())
374+
}
375+
return schemes, nil
376+
}
377+
378+
func getPartitionSchemePartitions(template, scheme string, client *ovh.Client) ([]*Partition, error) {
379+
mountPoints := []string{}
380+
endpoint := fmt.Sprintf(
381+
"/me/installationTemplate/%s/partitionScheme/%s/partition",
382+
url.PathEscape(template),
383+
url.PathEscape(scheme),
384+
)
385+
err := client.Get(endpoint, &mountPoints)
386+
387+
if err != nil {
388+
return nil, fmt.Errorf("Error calling GET %s: %s \n", endpoint, err.Error())
389+
}
390+
391+
partitions := []*Partition{}
392+
for _, mountPoint := range mountPoints {
393+
partition, err := getPartitionSchemePartition(template, scheme, mountPoint, client)
394+
if err != nil {
395+
return nil, err
396+
}
397+
398+
partitions = append(partitions, partition)
399+
}
400+
401+
return partitions, nil
402+
}
403+
404+
func getPartitionSchemePartition(template, scheme, mountPoint string, client *ovh.Client) (*Partition, error) {
405+
r := &Partition{}
406+
407+
endpoint := fmt.Sprintf(
408+
"/me/installationTemplate/%s/partitionScheme/%s/partition/%s",
409+
url.PathEscape(template),
410+
url.PathEscape(scheme),
411+
url.PathEscape(mountPoint),
412+
)
413+
414+
if err := client.Get(endpoint, r); err != nil {
415+
return nil, fmt.Errorf("Calling GET %s: %s \n", endpoint, err.Error())
416+
}
417+
418+
return r, nil
419+
}
420+
421+
func getPartitionSchemeHardwareRaids(template, scheme string, client *ovh.Client) ([]*HardwareRaid, error) {
422+
names := []string{}
423+
endpoint := fmt.Sprintf(
424+
"/me/installationTemplate/%s/partitionScheme/%s/hardwareRaid",
425+
url.PathEscape(template),
426+
url.PathEscape(scheme),
427+
)
428+
err := client.Get(endpoint, &names)
429+
430+
if err != nil {
431+
return nil, fmt.Errorf("Error calling GET %s: %s \n", endpoint, err.Error())
432+
}
433+
434+
hardwareRaids := []*HardwareRaid{}
435+
for _, name := range names {
436+
hardwareRaid, err := getPartitionSchemeHardwareRaid(template, scheme, name, client)
437+
if err != nil {
438+
return nil, err
439+
}
440+
441+
hardwareRaids = append(hardwareRaids, hardwareRaid)
442+
}
443+
444+
return hardwareRaids, nil
445+
}
446+
447+
func getPartitionSchemeHardwareRaid(template, scheme, name string, client *ovh.Client) (*HardwareRaid, error) {
448+
r := &HardwareRaid{}
449+
450+
endpoint := fmt.Sprintf(
451+
"/me/installationTemplate/%s/partitionScheme/%s/hardwareRaid/%s",
452+
url.PathEscape(template),
453+
url.PathEscape(scheme),
454+
url.PathEscape(name),
455+
)
456+
457+
if err := client.Get(endpoint, r); err != nil {
458+
return nil, fmt.Errorf("Error calling %s: %s \n", endpoint, err.Error())
459+
}
460+
461+
return r, nil
462+
}

Diff for: ovh/resource_ovh_cloud_project_network_private.go

+19-45
Original file line numberDiff line numberDiff line change
@@ -172,16 +172,29 @@ func resourceCloudProjectNetworkPrivateRead(d *schema.ResourceData, meta interfa
172172

173173
endpoint := fmt.Sprintf("/cloud/project/%s/network/private/%s", serviceName, d.Id())
174174

175-
err = config.OVHClient.Get(endpoint, r)
176-
if err != nil {
177-
return fmt.Errorf("Error calling %s:\n\t %q", endpoint, err)
175+
if err := config.OVHClient.Get(endpoint, r); err != nil {
176+
return helpers.CheckDeleted(d, err, endpoint)
178177
}
179178

180-
err = readCloudProjectNetworkPrivate(config, d, r)
181-
if err != nil {
182-
return err
179+
d.Set("name", r.Name)
180+
d.Set("status", r.Status)
181+
d.Set("type", r.Type)
182+
d.Set("vlan_id", r.Vlanid)
183+
184+
regions_status := make([]map[string]interface{}, 0)
185+
regions := make([]string, 0)
186+
187+
for i := range r.Regions {
188+
region := make(map[string]interface{})
189+
region["region"] = r.Regions[i].Region
190+
region["status"] = r.Regions[i].Status
191+
regions_status = append(regions_status, region)
192+
regions = append(regions, fmt.Sprintf(r.Regions[i].Region))
183193
}
194+
d.Set("regions_status", regions_status)
195+
d.Set("regions", regions)
184196

197+
d.SetId(r.Id)
185198
d.Set("service_name", serviceName)
186199
d.Set("project_id", serviceName)
187200

@@ -251,45 +264,6 @@ func resourceCloudProjectNetworkPrivateDelete(d *schema.ResourceData, meta inter
251264
return nil
252265
}
253266

254-
func readCloudProjectNetworkPrivate(config *Config, d *schema.ResourceData, r *CloudProjectNetworkPrivateResponse) error {
255-
d.Set("name", r.Name)
256-
d.Set("status", r.Status)
257-
d.Set("type", r.Type)
258-
d.Set("vlan_id", r.Vlanid)
259-
260-
regions_status := make([]map[string]interface{}, 0)
261-
regions := make([]string, 0)
262-
263-
for i := range r.Regions {
264-
region := make(map[string]interface{})
265-
region["region"] = r.Regions[i].Region
266-
region["status"] = r.Regions[i].Status
267-
regions_status = append(regions_status, region)
268-
regions = append(regions, fmt.Sprintf(r.Regions[i].Region))
269-
}
270-
d.Set("regions_status", regions_status)
271-
d.Set("regions", regions)
272-
273-
d.SetId(r.Id)
274-
return nil
275-
}
276-
277-
func cloudNetworkPrivateExists(serviceName, id string, c *ovh.Client) error {
278-
r := &CloudProjectNetworkPrivateResponse{}
279-
280-
log.Printf("[DEBUG] Will read public cloud private network for project: %s, id: %s", serviceName, id)
281-
282-
endpoint := fmt.Sprintf("/cloud/project/%s/network/private/%s", serviceName, id)
283-
284-
err := c.Get(endpoint, r)
285-
if err != nil {
286-
return fmt.Errorf("calling %s:\n\t %q", endpoint, err)
287-
}
288-
log.Printf("[DEBUG] Read public cloud private network: %s", r)
289-
290-
return nil
291-
}
292-
293267
// AttachmentStateRefreshFunc returns a resource.StateRefreshFunc that is used to watch
294268
// an Attachment Task.
295269
func waitForCloudProjectNetworkPrivateActive(c *ovh.Client, serviceName, CloudProjectNetworkPrivateId string) resource.StateRefreshFunc {

Diff for: ovh/resource_ovh_cloud_project_network_private_subnet.go

+40-74
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ import (
88

99
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1010
"github.com/ovh/terraform-provider-ovh/ovh/helpers"
11-
12-
"github.com/ovh/go-ovh/ovh"
1311
)
1412

1513
func resourceOvhCloudProjectNetworkPrivateSubnetImportState(
@@ -192,89 +190,26 @@ func resourceCloudProjectNetworkPrivateSubnetRead(d *schema.ResourceData, meta i
192190

193191
networkId := d.Get("network_id").(string)
194192

195-
r := []*CloudProjectNetworkPrivatesResponse{}
193+
subnets := []*CloudProjectNetworkPrivatesResponse{}
196194

197195
log.Printf("[DEBUG] Will read public cloud private network subnet for project: %s, network: %s, id: %s", serviceName, networkId, d.Id())
198196

199197
endpoint := fmt.Sprintf("/cloud/project/%s/network/private/%s/subnet", serviceName, networkId)
200198

201-
err = config.OVHClient.Get(endpoint, &r)
202-
if err != nil {
203-
return fmt.Errorf("calling GET %s:\n\t %q", endpoint, err)
204-
}
205-
206-
err = readCloudProjectNetworkPrivateSubnet(d, r)
207-
if err != nil {
208-
return err
209-
}
210-
211-
d.Set("service_name", serviceName)
212-
d.Set("project_id", serviceName)
213-
214-
log.Printf("[DEBUG] Read Public Cloud Private Network %v", r)
215-
return nil
216-
}
217-
218-
func resourceCloudProjectNetworkPrivateSubnetDelete(d *schema.ResourceData, meta interface{}) error {
219-
config := meta.(*Config)
220-
221-
serviceName, err := helpers.GetCloudProjectServiceName(d)
222-
if err != nil {
223-
return err
199+
if err := config.OVHClient.Get(endpoint, &subnets); err != nil {
200+
return helpers.CheckDeleted(d, err, endpoint)
224201
}
225202

226-
networkId := d.Get("network_id").(string)
227-
id := d.Id()
228-
229-
log.Printf("[DEBUG] Will delete public cloud private network subnet for project: %s, network: %s, id: %s", serviceName, networkId, id)
230-
231-
endpoint := fmt.Sprintf("/cloud/project/%s/network/private/%s/subnet/%s", serviceName, id, id)
232-
233-
err = config.OVHClient.Delete(endpoint, nil)
234-
if err != nil {
235-
return fmt.Errorf("calling DELETE %s:\n\t %q", endpoint, err)
236-
}
237-
238-
d.SetId("")
239-
240-
log.Printf("[DEBUG] Deleted Public Cloud %s Private Network %s Subnet %s", serviceName, networkId, id)
241-
return nil
242-
}
243-
244-
func cloudNetworkPrivateSubnetExists(serviceName, networkId, id string, c *ovh.Client) error {
245-
r := []*CloudProjectNetworkPrivatesResponse{}
246-
247-
log.Printf("[DEBUG] Will read public cloud private network subnet for project: %s, network: %s, id: %s", serviceName, networkId, id)
248-
249-
endpoint := fmt.Sprintf("/cloud/project/%s/network/private/%s/subnet", serviceName, networkId)
250-
251-
err := c.Get(endpoint, &r)
252-
if err != nil {
253-
return fmt.Errorf("calling GET %s:\n\t %q", endpoint, err)
254-
}
255-
256-
s := findCloudProjectNetworkPrivateSubnet(r, id)
257-
if s == nil {
258-
return fmt.Errorf("Subnet %s doesn't exists for project %s and network %s", id, serviceName, networkId)
259-
}
260-
261-
return nil
262-
}
263-
264-
func findCloudProjectNetworkPrivateSubnet(rs []*CloudProjectNetworkPrivatesResponse, id string) *CloudProjectNetworkPrivatesResponse {
265-
for i := range rs {
266-
if rs[i].Id == id {
267-
return rs[i]
203+
var r *CloudProjectNetworkPrivatesResponse
204+
for i := range subnets {
205+
if subnets[i].Id == d.Id() {
206+
r = subnets[i]
268207
}
269208
}
270209

271-
return nil
272-
}
273-
274-
func readCloudProjectNetworkPrivateSubnet(d *schema.ResourceData, rs []*CloudProjectNetworkPrivatesResponse) error {
275-
r := findCloudProjectNetworkPrivateSubnet(rs, d.Id())
276210
if r == nil {
277-
return fmt.Errorf("%s subnet not found", d.Id())
211+
d.SetId("")
212+
return nil
278213
}
279214

280215
d.Set("gateway_ip", r.GatewayIp)
@@ -305,6 +240,37 @@ func readCloudProjectNetworkPrivateSubnet(d *schema.ResourceData, rs []*CloudPro
305240
}
306241

307242
d.SetId(r.Id)
243+
244+
d.Set("service_name", serviceName)
245+
d.Set("project_id", serviceName)
246+
247+
log.Printf("[DEBUG] Read Public Cloud Private Network %v", r)
248+
return nil
249+
}
250+
251+
func resourceCloudProjectNetworkPrivateSubnetDelete(d *schema.ResourceData, meta interface{}) error {
252+
config := meta.(*Config)
253+
254+
serviceName, err := helpers.GetCloudProjectServiceName(d)
255+
if err != nil {
256+
return err
257+
}
258+
259+
networkId := d.Get("network_id").(string)
260+
id := d.Id()
261+
262+
log.Printf("[DEBUG] Will delete public cloud private network subnet for project: %s, network: %s, id: %s", serviceName, networkId, id)
263+
264+
endpoint := fmt.Sprintf("/cloud/project/%s/network/private/%s/subnet/%s", serviceName, id, id)
265+
266+
err = config.OVHClient.Delete(endpoint, nil)
267+
if err != nil {
268+
return fmt.Errorf("calling DELETE %s:\n\t %q", endpoint, err)
269+
}
270+
271+
d.SetId("")
272+
273+
log.Printf("[DEBUG] Deleted Public Cloud %s Private Network %s Subnet %s", serviceName, networkId, id)
308274
return nil
309275
}
310276

0 commit comments

Comments
 (0)