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

Commit f6792c1

Browse files
committed
gcore_servergroup resource and data source added
gcore_securitygroup data source fixed
1 parent 582611a commit f6792c1

17 files changed

+642
-18
lines changed

docs/data-sources/gcore_securitygroup.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ Read-Only:
7272
- **port_range_max** (Number)
7373
- **port_range_min** (Number)
7474
- **protocol** (String)
75+
- **remote_ip_prefix** (String)
7576
- **updated_at** (String)
7677

7778

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_servergroup Data Source - terraform-provider-gcorelabs"
4+
subcategory: ""
5+
description: |-
6+
Represent server group data
7+
---
8+
9+
# gcore_servergroup (Data Source)
10+
11+
Represent server group data
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_servergroup" "default" {
32+
name = "default"
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_servergroup.default
39+
}
40+
```
41+
42+
<!-- schema generated by tfplugindocs -->
43+
## Schema
44+
45+
### Required
46+
47+
- **name** (String) Displayed server group name
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+
- **instances** (List of Object) Instances in this server group (see [below for nested schema](#nestedatt--instances))
60+
- **policy** (String) Server group policy. Available value is 'affinity', 'anti-affinity'
61+
62+
<a id="nestedatt--instances"></a>
63+
### Nested Schema for `instances`
64+
65+
Read-Only:
66+
67+
- **instance_id** (String)
68+
- **instance_name** (String)
69+
70+

docs/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ terraform {
1818
required_providers {
1919
gcore = {
2020
source = "G-Core/gcorelabs"
21-
version = "0.1.11"
21+
version = "0.1.12"
2222
}
2323
}
2424
}

docs/resources/gcore_instance.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ resource "gcore_instance" "instance" {
135135
- **region_id** (Number)
136136
- **region_name** (String)
137137
- **security_group** (Block List) Firewalls list (see [below for nested schema](#nestedblock--security_group))
138+
- **server_group** (String)
138139
- **status** (String)
139140
- **userdata** (String)
140141
- **username** (String)
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
---
2+
# generated by https://github.com/hashicorp/terraform-plugin-docs
3+
page_title: "gcore_servergroup Resource - terraform-provider-gcorelabs"
4+
subcategory: ""
5+
description: |-
6+
Represent server group resource
7+
---
8+
9+
# gcore_servergroup (Resource)
10+
11+
Represent server group resource
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_servergroup" "default" {
24+
name = "default"
25+
policy = "affinity"
26+
region_id = 1
27+
project_id = 1
28+
}
29+
```
30+
31+
<!-- schema generated by tfplugindocs -->
32+
## Schema
33+
34+
### Required
35+
36+
- **name** (String) Displayed server group name
37+
- **policy** (String) Server group policy. Available value is 'affinity', 'anti-affinity'
38+
39+
### Optional
40+
41+
- **id** (String) The ID of this resource.
42+
- **project_id** (Number)
43+
- **project_name** (String)
44+
- **region_id** (Number)
45+
- **region_name** (String)
46+
47+
### Read-Only
48+
49+
- **instances** (List of Object) Instances in this server group (see [below for nested schema](#nestedatt--instances))
50+
51+
<a id="nestedatt--instances"></a>
52+
### Nested Schema for `instances`
53+
54+
Read-Only:
55+
56+
- **instance_id** (String)
57+
- **instance_name** (String)
58+
59+
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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_servergroup" "default" {
17+
name = "default"
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_servergroup.default
24+
}

examples/provider/provider.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ terraform {
33
required_providers {
44
gcore = {
55
source = "G-Core/gcorelabs"
6-
version = "0.1.11"
6+
version = "0.1.12"
77
}
88
}
99
}
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_servergroup" "default" {
9+
name = "default"
10+
policy = "affinity"
11+
region_id = 1
12+
project_id = 1
13+
}

gcore/data_source_gcore_securitygroup.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ func dataSourceSecurityGroup() *schema.Resource {
9595
Type: schema.TypeString,
9696
Computed: true,
9797
},
98+
"remote_ip_prefix": &schema.Schema{
99+
Type: schema.TypeString,
100+
Computed: true,
101+
},
98102
"updated_at": &schema.Schema{
99103
Type: schema.TypeString,
100104
Computed: true,
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
package gcore
2+
3+
import (
4+
"context"
5+
"log"
6+
7+
"github.com/G-Core/gcorelabscloud-go/gcore/servergroup/v1/servergroups"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10+
)
11+
12+
func dataSourceServerGroup() *schema.Resource {
13+
return &schema.Resource{
14+
ReadContext: dataSourceServerGroupRead,
15+
Description: "Represent server group data",
16+
Schema: map[string]*schema.Schema{
17+
"project_id": &schema.Schema{
18+
Type: schema.TypeInt,
19+
Optional: true,
20+
ExactlyOneOf: []string{
21+
"project_id",
22+
"project_name",
23+
},
24+
},
25+
"region_id": &schema.Schema{
26+
Type: schema.TypeInt,
27+
Optional: true,
28+
ExactlyOneOf: []string{
29+
"region_id",
30+
"region_name",
31+
},
32+
},
33+
"project_name": &schema.Schema{
34+
Type: schema.TypeString,
35+
Optional: true,
36+
ExactlyOneOf: []string{
37+
"project_id",
38+
"project_name",
39+
},
40+
},
41+
"region_name": &schema.Schema{
42+
Type: schema.TypeString,
43+
Optional: true,
44+
ExactlyOneOf: []string{
45+
"region_id",
46+
"region_name",
47+
},
48+
},
49+
"name": {
50+
Type: schema.TypeString,
51+
Description: "Displayed server group name",
52+
Required: true,
53+
},
54+
"policy": {
55+
Type: schema.TypeString,
56+
Description: "Server group policy. Available value is 'affinity', 'anti-affinity'",
57+
Computed: true,
58+
},
59+
"instances": {
60+
Type: schema.TypeList,
61+
Description: "Instances in this server group",
62+
Computed: true,
63+
Elem: &schema.Resource{
64+
Schema: map[string]*schema.Schema{
65+
"instance_id": {
66+
Type: schema.TypeString,
67+
Computed: true,
68+
},
69+
"instance_name": {
70+
Type: schema.TypeString,
71+
Computed: true,
72+
},
73+
},
74+
},
75+
},
76+
},
77+
}
78+
}
79+
80+
func dataSourceServerGroupRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
81+
log.Println("[DEBUG] Start ServerGroup reading")
82+
config := m.(*Config)
83+
provider := config.Provider
84+
85+
client, err := CreateClient(provider, d, serverGroupsPoint, versionPointV1)
86+
if err != nil {
87+
return diag.FromErr(err)
88+
}
89+
90+
var serverGroup servergroups.ServerGroup
91+
serverGroups, err := servergroups.ListAll(client)
92+
if err != nil {
93+
return diag.FromErr(err)
94+
}
95+
96+
var found bool
97+
name := d.Get("name").(string)
98+
for _, sg := range serverGroups {
99+
if sg.Name == name {
100+
serverGroup = sg
101+
found = true
102+
break
103+
}
104+
}
105+
106+
if !found {
107+
return diag.Errorf("server group with name %s not found", name)
108+
}
109+
110+
d.SetId(serverGroup.ServerGroupID)
111+
d.Set("name", name)
112+
d.Set("project_id", serverGroup.ProjectID)
113+
d.Set("region_id", serverGroup.RegionID)
114+
d.Set("policy", serverGroup.Policy.String())
115+
116+
instances := make([]map[string]string, len(serverGroup.Instances))
117+
for i, instance := range serverGroup.Instances {
118+
rawInstance := make(map[string]string)
119+
rawInstance["instance_id"] = instance.InstanceID
120+
rawInstance["instance_name"] = instance.InstanceName
121+
instances[i] = rawInstance
122+
}
123+
if err := d.Set("instances", instances); err != nil {
124+
return diag.FromErr(err)
125+
}
126+
127+
log.Println("[DEBUG] Finish ServerGroup reading")
128+
return nil
129+
}

0 commit comments

Comments
 (0)