Skip to content
This repository was archived by the owner on Mar 1, 2023. It is now read-only.

Commit 9351680

Browse files
alexk53Alexandr Sokolov
andauthored
gore_loadbalancerv2 resource and data-source added (#89)
gcore_loadbalancer resource and data-source deprecated Co-authored-by: Alexandr Sokolov <[email protected]>
1 parent ad25370 commit 9351680

File tree

10 files changed

+510
-81
lines changed

10 files changed

+510
-81
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
---
2+
# generated by https://github.com/hashicorp/terraform-plugin-docs
3+
page_title: "gcore_loadbalancerv2 Data Source - terraform-provider-gcorelabs"
4+
subcategory: ""
5+
description: |-
6+
7+
---
8+
9+
# gcore_loadbalancerv2 (Data Source)
10+
11+
12+
13+
## Example Usage
14+
15+
```terraform
16+
provider gcore {
17+
user_name = "test"
18+
password = "test"
19+
gcore_platform = "https://api.gcdn.co"
20+
gcore_api = "https://api.cloud.gcorelabs.com"
21+
}
22+
23+
data "gcore_project" "pr" {
24+
name = "test"
25+
}
26+
27+
data "gcore_region" "rg" {
28+
name = "ED-10 Preprod"
29+
}
30+
31+
data "gcore_loadbalancerv2" "lb" {
32+
name = "test-lb"
33+
region_id = data.gcore_region.rg.id
34+
project_id = data.gcore_project.pr.id
35+
}
36+
37+
output "view" {
38+
value = data.gcore_loadbalancerv2.lb
39+
}
40+
```
41+
42+
<!-- schema generated by tfplugindocs -->
43+
## Schema
44+
45+
### Required
46+
47+
- `name` (String)
48+
49+
### Optional
50+
51+
- `id` (String) The ID of this resource.
52+
- `project_id` (Number)
53+
- `project_name` (String)
54+
- `region_id` (Number)
55+
- `region_name` (String)
56+
57+
### Read-Only
58+
59+
- `vip_address` (String)
60+
- `vip_port_id` (String)
61+
62+
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
---
2+
# generated by https://github.com/hashicorp/terraform-plugin-docs
3+
page_title: "gcore_loadbalancerv2 Resource - terraform-provider-gcorelabs"
4+
subcategory: ""
5+
description: |-
6+
Represent load balancer without nested listener
7+
---
8+
9+
# gcore_loadbalancerv2 (Resource)
10+
11+
Represent load balancer without nested listener
12+
13+
## Example Usage
14+
15+
```terraform
16+
provider gcore {
17+
user_name = "test"
18+
password = "test"
19+
gcore_platform = "https://api.gcdn.co"
20+
gcore_api = "https://api.cloud.gcorelabs.com"
21+
}
22+
23+
resource "gcore_loadbalancerv2" "lb" {
24+
project_id = 1
25+
region_id = 1
26+
name = "test"
27+
flavor = "lb1-1-2"
28+
}
29+
```
30+
31+
<!-- schema generated by tfplugindocs -->
32+
## Schema
33+
34+
### Required
35+
36+
- `name` (String)
37+
38+
### Optional
39+
40+
- `flavor` (String)
41+
- `id` (String) The ID of this resource.
42+
- `last_updated` (String)
43+
- `project_id` (Number)
44+
- `project_name` (String)
45+
- `region_id` (Number)
46+
- `region_name` (String)
47+
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
48+
- `vip_network_id` (String)
49+
- `vip_subnet_id` (String)
50+
51+
### Read-Only
52+
53+
- `vip_address` (String) Load balancer IP address
54+
55+
<a id="nestedblock--timeouts"></a>
56+
### Nested Schema for `timeouts`
57+
58+
Optional:
59+
60+
- `create` (String)
61+
- `delete` (String)
62+
63+
## Import
64+
65+
Import is supported using the following syntax:
66+
67+
```shell
68+
# import using <project_id>:<region_id>:<loadbalancer_id> format
69+
terraform import gcore_loadbalancer.loadbalancer1 1:6:447d2959-8ae0-4ca0-8d47-9f050a3637d7
70+
```
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
provider gcore {
2+
user_name = "test"
3+
password = "test"
4+
gcore_platform = "https://api.gcdn.co"
5+
gcore_api = "https://api.cloud.gcorelabs.com"
6+
}
7+
8+
data "gcore_project" "pr" {
9+
name = "test"
10+
}
11+
12+
data "gcore_region" "rg" {
13+
name = "ED-10 Preprod"
14+
}
15+
16+
data "gcore_loadbalancerv2" "lb" {
17+
name = "test-lb"
18+
region_id = data.gcore_region.rg.id
19+
project_id = data.gcore_project.pr.id
20+
}
21+
22+
output "view" {
23+
value = data.gcore_loadbalancerv2.lb
24+
}
25+
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# import using <project_id>:<region_id>:<loadbalancer_id> format
2+
terraform import gcore_loadbalancer.loadbalancer1 1:6:447d2959-8ae0-4ca0-8d47-9f050a3637d7
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
provider gcore {
2+
user_name = "test"
3+
password = "test"
4+
gcore_platform = "https://api.gcdn.co"
5+
gcore_api = "https://api.cloud.gcorelabs.com"
6+
}
7+
8+
resource "gcore_loadbalancerv2" "lb" {
9+
project_id = 1
10+
region_id = 1
11+
name = "test"
12+
flavor = "lb1-1-2"
13+
}

gcore/data_source_gcore_loadbalancer.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ import (
1414

1515
func dataSourceLoadBalancer() *schema.Resource {
1616
return &schema.Resource{
17-
ReadContext: dataSourceLoadBalancerRead,
17+
ReadContext: dataSourceLoadBalancerRead,
18+
DeprecationMessage: "!> **WARNING:** This data-source is deprecated and will be removed in the next major version. Use gcore_loadbalancerv2 data-source instead",
1819
Schema: map[string]*schema.Schema{
1920
"project_id": &schema.Schema{
2021
Type: schema.TypeInt,
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
package gcore
2+
3+
import (
4+
"context"
5+
"log"
6+
7+
"github.com/G-Core/gcorelabscloud-go/gcore/loadbalancer/v1/loadbalancers"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10+
)
11+
12+
func dataSourceLoadBalancerV2() *schema.Resource {
13+
return &schema.Resource{
14+
ReadContext: dataSourceLoadBalancerV2Read,
15+
Schema: map[string]*schema.Schema{
16+
"project_id": &schema.Schema{
17+
Type: schema.TypeInt,
18+
Optional: true,
19+
ExactlyOneOf: []string{
20+
"project_id",
21+
"project_name",
22+
},
23+
},
24+
"region_id": &schema.Schema{
25+
Type: schema.TypeInt,
26+
Optional: true,
27+
ExactlyOneOf: []string{
28+
"region_id",
29+
"region_name",
30+
},
31+
},
32+
"project_name": &schema.Schema{
33+
Type: schema.TypeString,
34+
Optional: true,
35+
ExactlyOneOf: []string{
36+
"project_id",
37+
"project_name",
38+
},
39+
},
40+
"region_name": &schema.Schema{
41+
Type: schema.TypeString,
42+
Optional: true,
43+
ExactlyOneOf: []string{
44+
"region_id",
45+
"region_name",
46+
},
47+
},
48+
"name": &schema.Schema{
49+
Type: schema.TypeString,
50+
Required: true,
51+
},
52+
"vip_address": &schema.Schema{
53+
Type: schema.TypeString,
54+
Computed: true,
55+
},
56+
"vip_port_id": &schema.Schema{
57+
Type: schema.TypeString,
58+
Computed: true,
59+
},
60+
},
61+
}
62+
}
63+
64+
func dataSourceLoadBalancerV2Read(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
65+
log.Println("[DEBUG] Start LoadBalancer reading")
66+
var diags diag.Diagnostics
67+
config := m.(*Config)
68+
provider := config.Provider
69+
70+
client, err := CreateClient(provider, d, LoadBalancersPoint, versionPointV1)
71+
if err != nil {
72+
return diag.FromErr(err)
73+
}
74+
75+
name := d.Get("name").(string)
76+
lbs, err := loadbalancers.ListAll(client)
77+
if err != nil {
78+
return diag.FromErr(err)
79+
}
80+
81+
var found bool
82+
var lb loadbalancers.LoadBalancer
83+
for _, l := range lbs {
84+
if l.Name == name {
85+
lb = l
86+
found = true
87+
break
88+
}
89+
}
90+
91+
if !found {
92+
return diag.Errorf("load balancer with name %s not found", name)
93+
}
94+
95+
d.SetId(lb.ID)
96+
d.Set("project_id", lb.ProjectID)
97+
d.Set("region_id", lb.RegionID)
98+
d.Set("name", lb.Name)
99+
d.Set("vip_address", lb.VipAddress.String())
100+
d.Set("vip_port_id", lb.VipPortID)
101+
102+
log.Println("[DEBUG] Finish LoadBalancer reading")
103+
return diags
104+
}

gcore/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ func Provider() *schema.Provider {
100100
"gcore_reservedfixedip": resourceReservedFixedIP(),
101101
"gcore_floatingip": resourceFloatingIP(),
102102
"gcore_loadbalancer": resourceLoadBalancer(),
103+
"gcore_loadbalancerv2": resourceLoadBalancerV2(),
103104
"gcore_lblistener": resourceLbListener(),
104105
"gcore_lbpool": resourceLBPool(),
105106
"gcore_lbmember": resourceLBMember(),
@@ -131,6 +132,7 @@ func Provider() *schema.Provider {
131132
"gcore_subnet": dataSourceSubnet(),
132133
"gcore_router": dataSourceRouter(),
133134
"gcore_loadbalancer": dataSourceLoadBalancer(),
135+
"gcore_loadbalancerv2": dataSourceLoadBalancerV2(),
134136
"gcore_lblistener": dataSourceLBListener(),
135137
"gcore_lbpool": dataSourceLBPool(),
136138
"gcore_instance": dataSourceInstance(),

0 commit comments

Comments
 (0)