Skip to content

Commit 5e6aef2

Browse files
authored
Merge pull request #173 from yanndegat/bigrefacto
d|r/cloud*: use service_name for identifier
2 parents 4949b79 + 43cbe0e commit 5e6aef2

File tree

53 files changed

+713
-397
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+713
-397
lines changed

ovh/data_source_ovh_cloud_region.go

+31-13
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,32 @@ import (
66
"net/url"
77

88
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9-
"github.com/ovh/terraform-provider-ovh/ovh/helpers/hashcode"
10-
119
"github.com/ovh/go-ovh/ovh"
10+
"github.com/ovh/terraform-provider-ovh/ovh/helpers"
11+
"github.com/ovh/terraform-provider-ovh/ovh/helpers/hashcode"
1212
)
1313

1414
func dataSourceCloudRegion() *schema.Resource {
1515
return &schema.Resource{
1616
Read: dataSourceCloudRegionRead,
1717
Schema: map[string]*schema.Schema{
1818
"project_id": {
19-
Type: schema.TypeString,
20-
Required: true,
21-
ForceNew: true,
22-
DefaultFunc: schema.EnvDefaultFunc("OVH_PROJECT_ID", nil),
19+
Type: schema.TypeString,
20+
Optional: true,
21+
Computed: true,
22+
ForceNew: true,
23+
DefaultFunc: schema.EnvDefaultFunc("OVH_PROJECT_ID", nil),
24+
Description: "Id of the cloud project. DEPRECATED, use `service_name` instead",
25+
ConflictsWith: []string{"service_name"},
26+
},
27+
"service_name": {
28+
Type: schema.TypeString,
29+
Optional: true,
30+
Computed: true,
31+
ForceNew: true,
32+
DefaultFunc: schema.EnvDefaultFunc("OVH_CLOUD_PROJECT_SERVICE", nil),
33+
Description: "Service name of the resource representing the id of the cloud project.",
34+
ConflictsWith: []string{"project_id"},
2335
},
2436
"name": {
2537
Type: schema.TypeString,
@@ -70,12 +82,16 @@ func dataSourceCloudRegion() *schema.Resource {
7082

7183
func dataSourceCloudRegionRead(d *schema.ResourceData, meta interface{}) error {
7284
config := meta.(*Config)
73-
projectId := d.Get("project_id").(string)
85+
serviceName, err := helpers.GetCloudProjectServiceName(d)
86+
if err != nil {
87+
return err
88+
}
89+
7490
name := d.Get("name").(string)
7591

76-
log.Printf("[DEBUG] Will read public cloud region %s for project: %s", name, projectId)
92+
log.Printf("[DEBUG] Will read public cloud region %s for project: %s", name, serviceName)
7793

78-
region, err := getCloudRegion(projectId, name, config.OVHClient)
94+
region, err := getCloudRegion(serviceName, name, config.OVHClient)
7995
if err != nil {
8096
return err
8197
}
@@ -98,18 +114,20 @@ func dataSourceCloudRegionRead(d *schema.ResourceData, meta interface{}) error {
98114
}
99115

100116
d.Set("services", services)
101-
d.SetId(fmt.Sprintf("%s_%s", projectId, name))
117+
d.Set("service_name", serviceName)
118+
d.Set("project_id", serviceName)
119+
d.SetId(fmt.Sprintf("%s_%s", serviceName, name))
102120

103121
return nil
104122
}
105123

106-
func getCloudRegion(projectId, region string, client *ovh.Client) (*CloudRegionResponse, error) {
107-
log.Printf("[DEBUG] Will read public cloud region %s for project: %s", region, projectId)
124+
func getCloudRegion(serviceName, region string, client *ovh.Client) (*CloudRegionResponse, error) {
125+
log.Printf("[DEBUG] Will read public cloud region %s for project: %s", region, serviceName)
108126

109127
response := &CloudRegionResponse{}
110128
endpoint := fmt.Sprintf(
111129
"/cloud/project/%s/region/%s",
112-
url.PathEscape(projectId),
130+
url.PathEscape(serviceName),
113131
url.PathEscape(region),
114132
)
115133
err := client.Get(endpoint, response)

ovh/data_source_ovh_cloud_region_test.go

+36-4
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,46 @@ func TestAccCloudRegionDataSource_basic(t *testing.T) {
2828
})
2929
}
3030

31+
func TestAccCloudRegionDataSourceDeprecated_basic(t *testing.T) {
32+
resource.Test(t, resource.TestCase{
33+
PreCheck: func() { testAccPreCheckCloud(t) },
34+
Providers: testAccProviders,
35+
Steps: []resource.TestStep{
36+
{
37+
Config: testAccCloudRegionDatasourceDeprecatedConfig,
38+
Check: resource.ComposeTestCheckFunc(
39+
resource.TestCheckResourceAttrSet("data.ovh_cloud_region.region_attr.0", "name"),
40+
resource.TestCheckResourceAttrSet("data.ovh_cloud_region.region_attr.0", "services.#"),
41+
resource.TestCheckResourceAttrSet("data.ovh_cloud_region.region_attr.1", "name"),
42+
resource.TestCheckResourceAttrSet("data.ovh_cloud_region.region_attr.1", "services.#"),
43+
resource.TestCheckResourceAttrSet("data.ovh_cloud_region.region_attr.2", "name"),
44+
resource.TestCheckResourceAttrSet("data.ovh_cloud_region.region_attr.2", "services.#"),
45+
),
46+
},
47+
},
48+
})
49+
}
50+
3151
var testAccCloudRegionDatasourceConfig = fmt.Sprintf(`
52+
data "ovh_cloud_regions" "regions" {
53+
service_name = "%s"
54+
}
55+
56+
data "ovh_cloud_region" "region_attr" {
57+
count = 3
58+
service_name = data.ovh_cloud_regions.regions.service_name
59+
name = element(sort(data.ovh_cloud_regions.regions.names), count.index)
60+
}
61+
`, os.Getenv("OVH_CLOUD_PROJECT_SERVICE_TEST"))
62+
63+
var testAccCloudRegionDatasourceDeprecatedConfig = fmt.Sprintf(`
3264
data "ovh_cloud_regions" "regions" {
3365
project_id = "%s"
3466
}
3567
3668
data "ovh_cloud_region" "region_attr" {
37-
count = 3
38-
project_id = data.ovh_cloud_regions.regions.project_id
39-
name = element(sort(data.ovh_cloud_regions.regions.names), count.index)
69+
count = 3
70+
project_id = data.ovh_cloud_regions.regions.service_name
71+
name = element(sort(data.ovh_cloud_regions.regions.names), count.index)
4072
}
41-
`, os.Getenv("OVH_PUBLIC_CLOUD"))
73+
`, os.Getenv("OVH_CLOUD_PROJECT_SERVICE_TEST"))

ovh/data_source_ovh_cloud_regions.go

+30-13
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,35 @@ import (
66
"net/url"
77

88
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
"github.com/ovh/terraform-provider-ovh/ovh/helpers"
910
)
1011

1112
func dataSourceCloudRegions() *schema.Resource {
1213
return &schema.Resource{
1314
Read: dataSourceCloudRegionsRead,
1415
Schema: map[string]*schema.Schema{
1516
"project_id": {
16-
Type: schema.TypeString,
17-
Required: true,
18-
ForceNew: true,
19-
DefaultFunc: schema.EnvDefaultFunc("OVH_PROJECT_ID", nil),
17+
Type: schema.TypeString,
18+
Optional: true,
19+
Computed: true,
20+
ForceNew: true,
21+
DefaultFunc: schema.EnvDefaultFunc("OVH_PROJECT_ID", nil),
22+
Description: "Id of the cloud project. DEPRECATED, use `service_name` instead",
23+
ConflictsWith: []string{"service_name"},
24+
},
25+
"service_name": {
26+
Type: schema.TypeString,
27+
Optional: true,
28+
Computed: true,
29+
ForceNew: true,
30+
DefaultFunc: schema.EnvDefaultFunc("OVH_CLOUD_PROJECT_SERVICE", nil),
31+
Description: "Service name of the resource representing the id of the cloud project.",
32+
ConflictsWith: []string{"project_id"},
2033
},
2134
"has_services_up": {
22-
Type: schema.TypeSet,
35+
Type: schema.TypeList,
2336
Optional: true,
2437
Elem: &schema.Schema{Type: schema.TypeString},
25-
Set: schema.HashString,
2638
},
2739
"names": {
2840
Type: schema.TypeSet,
@@ -36,27 +48,32 @@ func dataSourceCloudRegions() *schema.Resource {
3648

3749
func dataSourceCloudRegionsRead(d *schema.ResourceData, meta interface{}) error {
3850
config := meta.(*Config)
39-
projectId := d.Get("project_id").(string)
51+
serviceName, err := helpers.GetCloudProjectServiceName(d)
52+
if err != nil {
53+
return err
54+
}
4055

41-
log.Printf("[DEBUG] Will read public cloud regions for project: %s", projectId)
56+
log.Printf("[DEBUG] Will read public cloud regions for project: %s", serviceName)
4257

4358
endpoint := fmt.Sprintf(
4459
"/cloud/project/%s/region",
45-
url.PathEscape(projectId),
60+
url.PathEscape(serviceName),
4661
)
4762

4863
names := make([]string, 0)
49-
err := config.OVHClient.Get(endpoint, &names)
64+
err = config.OVHClient.Get(endpoint, &names)
5065

5166
if err != nil {
5267
return fmt.Errorf("Error calling %s:\n\t %q", endpoint, err)
5368
}
5469

55-
d.SetId(projectId)
70+
d.SetId(serviceName)
71+
d.Set("service_name", serviceName)
72+
d.Set("project_id", serviceName)
5673

5774
var services []interface{}
5875
if servicesVal, ok := d.GetOk("has_services_up"); ok {
59-
services = servicesVal.(*schema.Set).List()
76+
services = servicesVal.([]interface{})
6077
}
6178

6279
// no filtering on services
@@ -67,7 +84,7 @@ func dataSourceCloudRegionsRead(d *schema.ResourceData, meta interface{}) error
6784

6885
filtered_names := make([]string, 0)
6986
for _, n := range names {
70-
region, err := getCloudRegion(projectId, n, config.OVHClient)
87+
region, err := getCloudRegion(serviceName, n, config.OVHClient)
7188
if err != nil {
7289
return err
7390
}

ovh/data_source_ovh_cloud_regions_test.go

+13-13
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,26 @@ func TestAccCloudRegionsDataSource_basic(t *testing.T) {
2121
})
2222
}
2323

24-
func TestAccCloudRegionsDataSource_withNetworkUp(t *testing.T) {
24+
func TestAccCloudRegionsDeprecatedDataSource_basic(t *testing.T) {
2525
resource.Test(t, resource.TestCase{
2626
PreCheck: func() { testAccPreCheckCloud(t) },
2727
Providers: testAccProviders,
2828
Steps: []resource.TestStep{
2929
{
30-
Config: testAccCloudRegionsDatasourceConfig_withNetwork,
30+
Config: testAccCloudRegionsDatasourceDeprecatedConfig,
3131
Check: resource.TestCheckResourceAttrSet("data.ovh_cloud_regions.regions", "names.#"),
3232
},
3333
},
3434
})
3535
}
3636

37-
func TestAccCloudRegionsDataSource_withProjectIdEnvVar(t *testing.T) {
38-
os.Setenv("OVH_PROJECT_ID", os.Getenv("OVH_PUBLIC_CLOUD"))
39-
37+
func TestAccCloudRegionsDataSource_withNetworkUp(t *testing.T) {
4038
resource.Test(t, resource.TestCase{
4139
PreCheck: func() { testAccPreCheckCloud(t) },
4240
Providers: testAccProviders,
4341
Steps: []resource.TestStep{
4442
{
45-
Config: testAccCloudRegionsDatasourceConfig_withProjectIdEnvVar,
43+
Config: testAccCloudRegionsDatasourceConfig_withNetwork,
4644
Check: resource.TestCheckResourceAttrSet("data.ovh_cloud_regions.regions", "names.#"),
4745
},
4846
},
@@ -51,17 +49,19 @@ func TestAccCloudRegionsDataSource_withProjectIdEnvVar(t *testing.T) {
5149

5250
var testAccCloudRegionsDatasourceConfig = fmt.Sprintf(`
5351
data "ovh_cloud_regions" "regions" {
54-
project_id = "%s"
52+
service_name = "%s"
5553
}
56-
`, os.Getenv("OVH_PUBLIC_CLOUD"))
54+
`, os.Getenv("OVH_CLOUD_PROJECT_SERVICE_TEST"))
5755

58-
var testAccCloudRegionsDatasourceConfig_withProjectIdEnvVar = `
59-
data "ovh_cloud_regions" "regions" {}
60-
`
56+
var testAccCloudRegionsDatasourceDeprecatedConfig = fmt.Sprintf(`
57+
data "ovh_cloud_regions" "regions" {
58+
project_id = "%s"
59+
}
60+
`, os.Getenv("OVH_CLOUD_PROJECT_SERVICE_TEST"))
6161

6262
var testAccCloudRegionsDatasourceConfig_withNetwork = fmt.Sprintf(`
6363
data "ovh_cloud_regions" "regions" {
64-
project_id = "%s"
64+
service_name = "%s"
6565
has_services_up = ["network"]
6666
}
67-
`, os.Getenv("OVH_PUBLIC_CLOUD"))
67+
`, os.Getenv("OVH_CLOUD_PROJECT_SERVICE_TEST"))

ovh/data_source_ovh_domain_zone_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
)
1212

1313
func TestAccDomainZoneDataSource_basic(t *testing.T) {
14-
zoneName := os.Getenv("OVH_ZONE")
14+
zoneName := os.Getenv("OVH_ZONE_TEST")
1515
config := fmt.Sprintf(testAccDomainZoneDatasourceConfig_Basic, zoneName)
1616

1717
resource.Test(t, resource.TestCase{

ovh/data_source_ovh_iploadbalancing_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
)
1010

1111
func TestAccIpLoadbalancingDataSource_basic(t *testing.T) {
12-
serviceName := os.Getenv("OVH_IPLB_SERVICE")
12+
serviceName := os.Getenv("OVH_IPLB_SERVICE_TEST")
1313
config := fmt.Sprintf(testAccIpLoadbalancingDatasourceConfig_Basic, serviceName)
1414

1515
resource.Test(t, resource.TestCase{
@@ -30,7 +30,7 @@ func TestAccIpLoadbalancingDataSource_basic(t *testing.T) {
3030
}
3131

3232
func TestAccIpLoadbalancingDataSource_statevrack(t *testing.T) {
33-
serviceName := os.Getenv("OVH_IPLB_SERVICE")
33+
serviceName := os.Getenv("OVH_IPLB_SERVICE_TEST")
3434
config := fmt.Sprintf(testAccIpLoadbalancingDatasourceConfig_StateAndVrack, serviceName)
3535

3636
resource.Test(t, resource.TestCase{

ovh/data_source_ovh_iploadbalancing_vrack_network_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ data ovh_iploadbalancing_vrack_network "network" {
5050
vrack_network_id = ovh_iploadbalancing_vrack_network.network.vrack_network_id
5151
}
5252
`,
53-
os.Getenv("OVH_IPLB_SERVICE"),
54-
os.Getenv("OVH_VRACK"),
53+
os.Getenv("OVH_IPLB_SERVICE_TEST"),
54+
os.Getenv("OVH_VRACK_SERVICE_TEST"),
5555
testAccIpLoadbalancingVrackNetworkSubnet,
5656
testAccIpLoadbalancingVrackNetworkVlan1001,
5757
testAccIpLoadbalancingVrackNetworkNatIp,

ovh/data_source_ovh_iploadbalancing_vrack_networks_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ data ovh_iploadbalancing_vrack_networks "networks" {
4949
service_name = data.ovh_iploadbalancing.iplb.service_name
5050
subnet = "10.0.0.0/24"
5151
}
52-
`, os.Getenv("OVH_IPLB_SERVICE"))
52+
`, os.Getenv("OVH_IPLB_SERVICE_TEST"))
5353

5454
var testAccIpLoadbalancingVrackNetworksDatasourceConfig_withFilters = fmt.Sprintf(`
5555
data ovh_iploadbalancing "iplb" {
@@ -61,4 +61,4 @@ data ovh_iploadbalancing_vrack_networks "networks" {
6161
subnet = "10.0.0.0/24"
6262
vlan_id = 0
6363
}
64-
`, os.Getenv("OVH_IPLB_SERVICE"))
64+
`, os.Getenv("OVH_IPLB_SERVICE_TEST"))

ovh/helpers/helpers.go

+34
Original file line numberDiff line numberDiff line change
@@ -323,3 +323,37 @@ func StringsFromSchema(d *schema.ResourceData, id string) ([]string, error) {
323323
}
324324
return xs, nil
325325
}
326+
327+
// This function shall be removed as soon as the deprecated project_id
328+
// attribute is removed from schemas
329+
func GetCloudProjectServiceName(d *schema.ResourceData) (string, error) {
330+
projectId := GetNilStringPointerFromData(d, "project_id")
331+
serviceNamePtr := GetNilStringPointerFromData(d, "service_name")
332+
333+
if serviceNamePtr == nil && projectId != nil && *projectId != "" {
334+
serviceNamePtr = projectId
335+
}
336+
337+
if serviceNamePtr == nil || *serviceNamePtr == "" {
338+
return "", fmt.Errorf("service_name attribute is mandatory.")
339+
}
340+
341+
return *serviceNamePtr, nil
342+
}
343+
344+
// This function shall be removed as soon as the deprecated vrack_id
345+
// attribute is removed from schemas
346+
func GetVrackServiceName(d *schema.ResourceData) (string, error) {
347+
vrackId := GetNilStringPointerFromData(d, "vrack_id")
348+
serviceNamePtr := GetNilStringPointerFromData(d, "service_name")
349+
350+
if serviceNamePtr == nil && vrackId != nil && *vrackId != "" {
351+
serviceNamePtr = vrackId
352+
}
353+
354+
if serviceNamePtr == nil || *serviceNamePtr == "" {
355+
return "", fmt.Errorf("service_name attribute is mandatory.")
356+
}
357+
358+
return *serviceNamePtr, nil
359+
}

ovh/import_cloud_network_private_subnet_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ func TestAccCloudNetworkPrivateSubnet_importBasic(t *testing.T) {
1717
Providers: testAccProviders,
1818
Steps: []resource.TestStep{
1919
{
20-
Config: testAccCloudNetworkPrivateSubnetConfig(),
20+
Config: testAccCloudNetworkPrivateSubnetConfig(testAccCloudNetworkPrivateSubnetConfig_basic),
2121
},
2222
{
2323
ResourceName: "ovh_cloud_network_private_subnet.subnet",
@@ -38,7 +38,7 @@ func testAccCloudNetworkPrivateSubnetImportId(resourceName string) resource.Impo
3838

3939
return fmt.Sprintf(
4040
"%s/%s/%s",
41-
subnet.Primary.Attributes["project_id"],
41+
subnet.Primary.Attributes["service_name"],
4242
subnet.Primary.Attributes["network_id"],
4343
subnet.Primary.ID,
4444
), nil

ovh/import_iploadbalancing_http_farm_server_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,4 @@ func testAccIpLoadbalancingHttpFarmServerImportId(resourceName string) resource.
7575
// ping.ovh.net ip is used for test purposes
7676
var httpServerAddress = "198.27.92.1"
7777
var testAccIpLoadbalancingHttpFarmServerConfig_basic = fmt.Sprintf(testAccIpLoadbalancingHttpFarmServerConfig,
78-
os.Getenv("OVH_IPLB_SERVICE"), "testfarm", 12345, "all", "testserver", httpServerAddress)
78+
os.Getenv("OVH_IPLB_SERVICE_TEST"), "testfarm", 12345, "all", "testserver", httpServerAddress)

0 commit comments

Comments
 (0)