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

Commit 8353889

Browse files
committed
data-source gcore_network fixed
1 parent b5e8215 commit 8353889

File tree

5 files changed

+78
-23
lines changed

5 files changed

+78
-23
lines changed

gcore/data_source_gcore_network.go

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"log"
66

7+
"github.com/G-Core/gcorelabscloud-go/gcore/network/v1/availablenetworks"
78
"github.com/G-Core/gcorelabscloud-go/gcore/network/v1/networks"
89
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
910
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -81,35 +82,50 @@ func dataSourceNetworkRead(ctx context.Context, d *schema.ResourceData, m interf
8182
if err != nil {
8283
return diag.FromErr(err)
8384
}
85+
clientShared, err := CreateClient(provider, d, sharedNetworksPoint, versionPointV1)
86+
if err != nil {
87+
return diag.FromErr(err)
88+
}
8489

8590
name := d.Get("name").(string)
8691
nets, err := networks.ListAll(client)
8792
if err != nil {
8893
return diag.FromErr(err)
8994
}
9095

91-
var found bool
92-
var network networks.Network
93-
for _, n := range nets {
94-
if n.Name == name {
95-
network = n
96-
found = true
97-
break
96+
//todo refactor, also refactor inner func
97+
var rawNetwork map[string]interface{}
98+
network, found := findNetworkByName(name, nets)
99+
if !found {
100+
//trying to find among shared networks
101+
nets, err := availablenetworks.ListAll(clientShared)
102+
if err != nil {
103+
return diag.FromErr(err)
104+
}
105+
network, found := findSharedNetworkByName(name, nets)
106+
if !found {
107+
return diag.Errorf("network with name %s not found", name)
98108
}
99-
}
100109

101-
if !found {
102-
return diag.Errorf("network with name %s not found", name)
110+
rawNetwork, err = StructToMap(network)
111+
if err != nil {
112+
return diag.FromErr(err)
113+
}
114+
} else {
115+
rawNetwork, err = StructToMap(network)
116+
if err != nil {
117+
return diag.FromErr(err)
118+
}
103119
}
104120

105-
d.SetId(network.ID)
106-
d.Set("name", network.Name)
107-
d.Set("mtu", network.MTU)
108-
d.Set("type", network.Type)
109-
d.Set("region_id", network.RegionID)
110-
d.Set("project_id", network.ProjectID)
111-
d.Set("external", network.External)
112-
d.Set("shared", network.Shared)
121+
d.SetId(rawNetwork["id"].(string))
122+
d.Set("name", rawNetwork["name"])
123+
d.Set("mtu", rawNetwork["mtu"])
124+
d.Set("type", rawNetwork["type"])
125+
d.Set("region_id", rawNetwork["region_id"])
126+
d.Set("project_id", rawNetwork["project_id"])
127+
d.Set("external", rawNetwork["external"])
128+
d.Set("shared", rawNetwork["shared"])
113129

114130
log.Println("[DEBUG] Finish Network reading")
115131
return diags

gcore/resource_gcore_network.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
const networkDeleting int = 1200
1717
const networkCreatingTimeout int = 1200
1818
const networksPoint = "networks"
19+
const sharedNetworksPoint = "availablenetworks"
1920

2021
func resourceNetwork() *schema.Resource {
2122
return &schema.Resource{

gcore/utils.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package gcore
33
import (
44
"crypto/md5"
55
"encoding/binary"
6+
"encoding/json"
67
"fmt"
78
"io"
89
"log"
@@ -17,6 +18,8 @@ import (
1718
"github.com/G-Core/gcorelabscloud-go/gcore/instance/v1/types"
1819
"github.com/G-Core/gcorelabscloud-go/gcore/loadbalancer/v1/lbpools"
1920
typesLb "github.com/G-Core/gcorelabscloud-go/gcore/loadbalancer/v1/types"
21+
"github.com/G-Core/gcorelabscloud-go/gcore/network/v1/availablenetworks"
22+
"github.com/G-Core/gcorelabscloud-go/gcore/network/v1/networks"
2023
"github.com/G-Core/gcorelabscloud-go/gcore/project/v1/projects"
2124
"github.com/G-Core/gcorelabscloud-go/gcore/region/v1/regions"
2225
"github.com/G-Core/gcorelabscloud-go/gcore/router/v1/routers"
@@ -530,3 +533,40 @@ func extractSecurityGroupRuleMap(r interface{}, gid string) securitygroups.Creat
530533
}
531534
return opts
532535
}
536+
537+
//technical debt
538+
func findNetworkByName(name string, nets []networks.Network) (networks.Network, bool) {
539+
var found bool
540+
var network networks.Network
541+
for _, n := range nets {
542+
if n.Name == name {
543+
network = n
544+
found = true
545+
break
546+
}
547+
}
548+
return network, found
549+
}
550+
551+
//technical debt
552+
func findSharedNetworkByName(name string, nets []availablenetworks.Network) (availablenetworks.Network, bool) {
553+
var found bool
554+
var network availablenetworks.Network
555+
for _, n := range nets {
556+
if n.Name == name {
557+
network = n
558+
found = true
559+
break
560+
}
561+
}
562+
return network, found
563+
}
564+
565+
func StructToMap(obj interface{}) (newMap map[string]interface{}, err error) {
566+
data, err := json.Marshal(obj)
567+
if err != nil {
568+
return
569+
}
570+
err = json.Unmarshal(data, &newMap)
571+
return
572+
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/terraform-providers/terraform-provider-gcorelabs
33
go 1.14
44

55
require (
6-
github.com/G-Core/gcorelabscloud-go v0.3.39
6+
github.com/G-Core/gcorelabscloud-go v0.3.40
77
github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320
88
github.com/hashicorp/terraform-plugin-sdk/v2 v2.3.0
99
github.com/mitchellh/mapstructure v1.4.0

go.sum

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,8 @@ github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6L
4141
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
4242
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
4343
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
44-
github.com/G-Core/gcorelabscloud-go v0.3.37 h1:xomxPdZInL2o0RTCycGakPN0dS6GNKnQhL5uCW64hDk=
45-
github.com/G-Core/gcorelabscloud-go v0.3.37/go.mod h1:Z1MF80mWagEUrxygtYkvW/MJEYNmIUPsIEYBB3cKjOM=
46-
github.com/G-Core/gcorelabscloud-go v0.3.39 h1:v83n+dA3ktX5wlL5eoxsNjBd3I8lnxK+FuJaF5fLI+I=
47-
github.com/G-Core/gcorelabscloud-go v0.3.39/go.mod h1:Z1MF80mWagEUrxygtYkvW/MJEYNmIUPsIEYBB3cKjOM=
44+
github.com/G-Core/gcorelabscloud-go v0.3.40 h1:l5jBZkrWO4IyaRovthFmZp8XFUIl9IbY7s4zc/ogk4E=
45+
github.com/G-Core/gcorelabscloud-go v0.3.40/go.mod h1:Z1MF80mWagEUrxygtYkvW/MJEYNmIUPsIEYBB3cKjOM=
4846
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
4947
github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
5048
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=

0 commit comments

Comments
 (0)