forked from ovh/terraform-provider-ovh
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathresource_ovh_cloud_network_private_test.go
157 lines (130 loc) · 3.98 KB
/
resource_ovh_cloud_network_private_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
package ovh
import (
"fmt"
"log"
"os"
"strings"
"testing"
"time"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
)
var testAccCloudNetworkPrivateConfig_attachVrack = `
resource "ovh_vrack_cloudproject" "attach" {
vrack_id = "%s"
project_id = "%s"
}
data "ovh_cloud_regions" "regions" {
project_id = ovh_vrack_cloudproject.attach.project_id
has_services_up = ["network"]
}
`
var testAccCloudNetworkPrivateConfig_noAttachVrack = `
data "ovh_cloud_regions" "regions" {
project_id = "%s"
has_services_up = ["network"]
}
`
var testAccCloudNetworkPrivateConfig_basic = `
%s
resource "ovh_cloud_network_private" "network" {
project_id = data.ovh_cloud_regions.regions.project_id
vlan_id = 0
name = "terraform_testacc_private_net"
regions = tolist(data.ovh_cloud_regions.regions.names)
}
`
func testAccCloudNetworkPrivateConfig() string {
attachVrack := fmt.Sprintf(
testAccCloudNetworkPrivateConfig_attachVrack,
os.Getenv("OVH_VRACK"),
os.Getenv("OVH_PUBLIC_CLOUD"),
)
noAttachVrack := fmt.Sprintf(
testAccCloudNetworkPrivateConfig_noAttachVrack,
os.Getenv("OVH_PUBLIC_CLOUD"),
)
if os.Getenv("OVH_ATTACH_VRACK") == "0" {
return fmt.Sprintf(
testAccCloudNetworkPrivateConfig_basic,
noAttachVrack,
)
}
return fmt.Sprintf(
testAccCloudNetworkPrivateConfig_basic,
attachVrack,
)
}
func init() {
resource.AddTestSweepers("ovh_cloud_network_private", &resource.Sweeper{
Name: "ovh_cloud_network_private",
F: testSweepCloudNetworkPrivate,
})
}
func testSweepCloudNetworkPrivate(region string) error {
client, err := sharedClientForRegion(region)
if err != nil {
return fmt.Errorf("error getting client: %s", err)
}
vrack := os.Getenv("OVH_VRACK")
if vrack == "" {
return fmt.Errorf("OVH_VRACK must be set")
}
projectId := os.Getenv("OVH_PUBLIC_CLOUD")
if projectId == "" {
return fmt.Errorf("OVH_PUBLIC_CLOUD must be set")
}
networks := []CloudNetworkPrivateResponse{}
err = client.Get(fmt.Sprintf("/cloud/project/%s/network/private", projectId), &networks)
if err != nil {
return fmt.Errorf("error listing private networks for project %q:\n\t %q", projectId, err)
}
for _, n := range networks {
if !strings.HasPrefix(n.Name, test_prefix) {
continue
}
log.Printf("[DEBUG] found dangling network & subnets for project: %s, id: %s", projectId, n.Id)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
subnetIds := []string{}
err = client.Get(fmt.Sprintf("/cloud/project/%s/network/private/%s/subnet", projectId, n.Id), &subnetIds)
if err != nil {
return resource.RetryableError(fmt.Errorf("error listing private network subnets for project %q:\n\t %q", projectId, err))
}
for _, s := range subnetIds {
if err := client.Delete(fmt.Sprintf("/cloud/project/%s/network/private/%s/subnet/%s", projectId, n.Id, s), nil); err != nil {
return resource.RetryableError(err)
}
}
if err := client.Delete(fmt.Sprintf("/cloud/project/%s/network/private/%s", projectId, n.Id), nil); err != nil {
return resource.RetryableError(err)
}
// Successful cascade delete
log.Printf("[DEBUG] successful cascade delete of network & subnets for project: %s, id: %s", projectId, n.Id)
return nil
})
if err != nil {
return err
}
}
return nil
}
func TestAccCloudNetworkPrivate_basic(t *testing.T) {
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccCheckCloudNetworkPrivatePreCheck(t) },
Providers: testAccProviders,
Steps: []resource.TestStep{
{
Config: testAccCloudNetworkPrivateConfig(),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrSet("ovh_cloud_network_private.network", "project_id"),
resource.TestCheckResourceAttrSet("ovh_cloud_network_private.network", "id"),
resource.TestCheckResourceAttr("ovh_cloud_network_private.network", "vlan_id", "0"),
),
},
},
})
}
func testAccCheckCloudNetworkPrivatePreCheck(t *testing.T) {
testAccPreCheckCloud(t)
testAccCheckCloudExists(t)
testAccPreCheckVRack(t)
}