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

Commit 2eb98b4

Browse files
committed
resource_gcore_baremetal metadata fixed
resource_gcore_instance metadata fixed
1 parent 3d29f2b commit 2eb98b4

File tree

5 files changed

+134
-79
lines changed

5 files changed

+134
-79
lines changed

docs/resources/gcore_baremetal.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ resource "gcore_baremetal" "bm" {
5959
- **image_id** (String)
6060
- **keypair_name** (String)
6161
- **last_updated** (String)
62-
- **metadata** (Block List) (see [below for nested schema](#nestedblock--metadata))
62+
- **metadata** (Block List, Deprecated) (see [below for nested schema](#nestedblock--metadata))
63+
- **metadata_map** (Map of String)
6364
- **name_templates** (String)
6465
- **password** (String)
6566
- **project_id** (Number)

gcore/resource_gcore_baremetal.go

Lines changed: 82 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,10 @@ func resourceBmInstance() *schema.Resource {
172172
Optional: true,
173173
},
174174
"metadata": &schema.Schema{
175-
Type: schema.TypeList,
176-
Optional: true,
175+
Type: schema.TypeList,
176+
Optional: true,
177+
Deprecated: "Use metadata_map instead",
178+
ConflictsWith: []string{"metadata_map"},
177179
Elem: &schema.Resource{
178180
Schema: map[string]*schema.Schema{
179181
"key": {
@@ -187,6 +189,14 @@ func resourceBmInstance() *schema.Resource {
187189
},
188190
},
189191
},
192+
"metadata_map": &schema.Schema{
193+
Type: schema.TypeMap,
194+
Optional: true,
195+
ConflictsWith: []string{"metadata"},
196+
Elem: &schema.Schema{
197+
Type: schema.TypeString,
198+
},
199+
},
190200
"app_config": &schema.Schema{
191201
Type: schema.TypeMap,
192202
Optional: true,
@@ -290,6 +300,22 @@ func resourceBmInstanceCreate(ctx context.Context, d *schema.ResourceData, m int
290300
opts.NameTemplates = []string{nameTpl}
291301
}
292302

303+
if metadata, ok := d.GetOk("metadata"); ok {
304+
if len(metadata.([]interface{})) > 0 {
305+
md, err := extractKeyValue(metadata.([]interface{}))
306+
if err != nil {
307+
return diag.FromErr(err)
308+
}
309+
opts.Metadata = &md
310+
}
311+
} else if metadataRaw, ok := d.GetOk("metadata_map"); ok {
312+
md, err := extractMetadataMap(metadataRaw.(map[string]interface{}))
313+
if err != nil {
314+
return diag.FromErr(err)
315+
}
316+
opts.Metadata = &md
317+
}
318+
293319
results, err := bminstances.Create(client, opts).Extract()
294320
if err != nil {
295321
return diag.FromErr(err)
@@ -445,21 +471,34 @@ func resourceBmInstanceRead(ctx context.Context, d *schema.ResourceData, m inter
445471
return diag.FromErr(err)
446472
}
447473

448-
metadata := d.Get("metadata").([]interface{})
449-
sliced := make([]map[string]string, len(metadata))
450-
for i, data := range metadata {
451-
d := data.(map[string]interface{})
452-
mdata := make(map[string]string, 2)
453-
md, err := instances.MetadataGet(client, instanceID, d["key"].(string)).Extract()
454-
if err != nil {
455-
return diag.Errorf("cannot get metadata with key: %s. Error: %s", instanceID, err)
474+
if metadataRaw, ok := d.GetOk("metadata"); ok {
475+
metadata := metadataRaw.([]interface{})
476+
sliced := make([]map[string]string, len(metadata))
477+
for i, data := range metadata {
478+
d := data.(map[string]interface{})
479+
mdata := make(map[string]string, 2)
480+
md, err := instances.MetadataGet(client, instanceID, d["key"].(string)).Extract()
481+
if err != nil {
482+
return diag.Errorf("cannot get metadata with key: %s. Error: %s", instanceID, err)
483+
}
484+
mdata["key"] = md.Key
485+
mdata["value"] = md.Value
486+
sliced[i] = mdata
487+
}
488+
d.Set("metadata", sliced)
489+
} else {
490+
metadata := d.Get("metadata_map").(map[string]interface{})
491+
newMetadata := make(map[string]interface{}, len(metadata))
492+
for k, _ := range metadata {
493+
md, err := instances.MetadataGet(client, instanceID, k).Extract()
494+
if err != nil {
495+
return diag.Errorf("cannot get metadata with key: %s. Error: %s", instanceID, err)
496+
}
497+
newMetadata[k] = md.Value
498+
}
499+
if err := d.Set("metadata_map", newMetadata); err != nil {
500+
return diag.FromErr(err)
456501
}
457-
mdata["key"] = md.Key
458-
mdata["value"] = md.Value
459-
sliced[i] = mdata
460-
}
461-
if err := d.Set("metadata", sliced); err != nil {
462-
return diag.FromErr(err)
463502
}
464503

465504
addresses := []map[string][]map[string]string{}
@@ -526,6 +565,33 @@ func resourceBmInstanceUpdate(ctx context.Context, d *schema.ResourceData, m int
526565
return diag.Errorf("cannot create metadata. Error: %s", err)
527566
}
528567
}
568+
} else if d.HasChange("metadata_map") {
569+
omd, nmd := d.GetChange("metadata_map")
570+
if len(omd.(map[string]interface{})) > 0 {
571+
for k, _ := range omd.(map[string]interface{}) {
572+
err := instances.MetadataDelete(client, instanceID, k).Err
573+
if err != nil {
574+
return diag.Errorf("cannot delete metadata key: %s. Error: %s", k, err)
575+
}
576+
}
577+
}
578+
if len(nmd.(map[string]interface{})) > 0 {
579+
var MetaData []instances.MetadataOpts
580+
for k, v := range nmd.(map[string]interface{}) {
581+
md := instances.MetadataOpts{
582+
Key: k,
583+
Value: v.(string),
584+
}
585+
MetaData = append(MetaData, md)
586+
}
587+
createOpts := instances.MetadataSetOpts{
588+
Metadata: MetaData,
589+
}
590+
err := instances.MetadataCreate(client, instanceID, createOpts).Err
591+
if err != nil {
592+
return diag.Errorf("cannot create metadata. Error: %s", err)
593+
}
594+
}
529595
}
530596

531597
if d.HasChange("interface") {

gcore/resource_gcore_instance.go

Lines changed: 46 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -665,64 +665,60 @@ func resourceInstanceUpdate(ctx context.Context, d *schema.ResourceData, m inter
665665
}
666666
}
667667

668-
if _, ok := d.GetOk("metadata"); ok {
669-
if d.HasChange("metadata") {
670-
omd, nmd := d.GetChange("metadata")
671-
if len(omd.([]interface{})) > 0 {
672-
for _, data := range omd.([]interface{}) {
673-
d := data.(map[string]interface{})
674-
k := d["key"].(string)
675-
err := instances.MetadataDelete(client, instanceID, k).Err
676-
if err != nil {
677-
return diag.Errorf("cannot delete metadata key: %s. Error: %s", k, err)
678-
}
668+
if d.HasChange("metadata") {
669+
omd, nmd := d.GetChange("metadata")
670+
if len(omd.([]interface{})) > 0 {
671+
for _, data := range omd.([]interface{}) {
672+
d := data.(map[string]interface{})
673+
k := d["key"].(string)
674+
err := instances.MetadataDelete(client, instanceID, k).Err
675+
if err != nil {
676+
return diag.Errorf("cannot delete metadata key: %s. Error: %s", k, err)
679677
}
680678
}
681-
if len(nmd.([]interface{})) > 0 {
682-
var MetaData []instances.MetadataOpts
683-
for _, data := range nmd.([]interface{}) {
684-
d := data.(map[string]interface{})
685-
var md instances.MetadataOpts
686-
md.Key = d["key"].(string)
687-
md.Value = d["value"].(string)
688-
MetaData = append(MetaData, md)
689-
}
690-
createOpts := instances.MetadataSetOpts{
691-
Metadata: MetaData,
692-
}
693-
err := instances.MetadataCreate(client, instanceID, createOpts).Err
679+
}
680+
if len(nmd.([]interface{})) > 0 {
681+
var MetaData []instances.MetadataOpts
682+
for _, data := range nmd.([]interface{}) {
683+
d := data.(map[string]interface{})
684+
var md instances.MetadataOpts
685+
md.Key = d["key"].(string)
686+
md.Value = d["value"].(string)
687+
MetaData = append(MetaData, md)
688+
}
689+
createOpts := instances.MetadataSetOpts{
690+
Metadata: MetaData,
691+
}
692+
err := instances.MetadataCreate(client, instanceID, createOpts).Err
693+
if err != nil {
694+
return diag.Errorf("cannot create metadata. Error: %s", err)
695+
}
696+
}
697+
} else if d.HasChange("metadata_map") {
698+
omd, nmd := d.GetChange("metadata_map")
699+
if len(omd.(map[string]interface{})) > 0 {
700+
for k, _ := range omd.(map[string]interface{}) {
701+
err := instances.MetadataDelete(client, instanceID, k).Err
694702
if err != nil {
695-
return diag.Errorf("cannot create metadata. Error: %s", err)
703+
return diag.Errorf("cannot delete metadata key: %s. Error: %s", k, err)
696704
}
697705
}
698706
}
699-
} else if _, ok := d.GetOk("metadata_map"); ok {
700-
if d.HasChange("metadata_map") {
701-
omd, nmd := d.GetChange("metadata_map")
702-
if len(omd.(map[string]interface{})) > 0 {
703-
for k, _ := range omd.(map[string]interface{}) {
704-
err := instances.MetadataDelete(client, instanceID, k).Err
705-
if err != nil {
706-
return diag.Errorf("cannot delete metadata key: %s. Error: %s", k, err)
707-
}
707+
if len(nmd.(map[string]interface{})) > 0 {
708+
var MetaData []instances.MetadataOpts
709+
for k, v := range nmd.(map[string]interface{}) {
710+
md := instances.MetadataOpts{
711+
Key: k,
712+
Value: v.(string),
708713
}
714+
MetaData = append(MetaData, md)
709715
}
710-
if len(nmd.(map[string]interface{})) > 0 {
711-
var MetaData []instances.MetadataOpts
712-
for k, v := range nmd.(map[string]interface{}) {
713-
md := instances.MetadataOpts{
714-
Key: k,
715-
Value: v.(string),
716-
}
717-
MetaData = append(MetaData, md)
718-
}
719-
createOpts := instances.MetadataSetOpts{
720-
Metadata: MetaData,
721-
}
722-
err := instances.MetadataCreate(client, instanceID, createOpts).Err
723-
if err != nil {
724-
return diag.Errorf("cannot create metadata. Error: %s", err)
725-
}
716+
createOpts := instances.MetadataSetOpts{
717+
Metadata: MetaData,
718+
}
719+
err := instances.MetadataCreate(client, instanceID, createOpts).Err
720+
if err != nil {
721+
return diag.Errorf("cannot create metadata. Error: %s", err)
726722
}
727723
}
728724
}

go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ require (
88
github.com/G-Core/g-dns-sdk-go v0.1.2
99
github.com/G-Core/gcorelabs-storage-sdk-go v0.0.9
1010
github.com/G-Core/gcorelabscdn-go v0.1.2
11-
github.com/G-Core/gcorelabscloud-go v0.4.34
11+
github.com/G-Core/gcorelabscloud-go v0.4.35
1212
github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320
13+
github.com/hashicorp/terraform-exec v0.15.0 // indirect
1314
github.com/hashicorp/terraform-plugin-docs v0.5.1 // indirect
1415
github.com/hashicorp/terraform-plugin-sdk/v2 v2.7.0
1516
github.com/mattn/go-colorable v0.1.11 // indirect

go.sum

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ github.com/G-Core/gcorelabs-storage-sdk-go v0.0.9 h1:6uyKbknI8Q2pIJApPBf6JA0CN5O
4747
github.com/G-Core/gcorelabs-storage-sdk-go v0.0.9/go.mod h1:BZef79y4G28n8ic3x6iQWbW+mtpHPSUyJRfIRSkeAJw=
4848
github.com/G-Core/gcorelabscdn-go v0.1.2 h1:AiwZY3oIHL4wMJNmIlLgxw4eQmSqtQmkTzrkGpa7ckc=
4949
github.com/G-Core/gcorelabscdn-go v0.1.2/go.mod h1:iSGXaTvZBzDHQW+rKFS918BgFVpONcyLEijwh8WsXpE=
50-
github.com/G-Core/gcorelabscloud-go v0.4.34 h1:ZaPag1y7fh+jMzlsI6ZQ0Iwm/NsKyJP0KhBm9P9OX2M=
51-
github.com/G-Core/gcorelabscloud-go v0.4.34/go.mod h1:Z1MF80mWagEUrxygtYkvW/MJEYNmIUPsIEYBB3cKjOM=
50+
github.com/G-Core/gcorelabscloud-go v0.4.35 h1:SXgfWPEPRwodZ8l7Mv/Dt2ZTgOK2YKfZMpODI46JB8A=
51+
github.com/G-Core/gcorelabscloud-go v0.4.35/go.mod h1:Z1MF80mWagEUrxygtYkvW/MJEYNmIUPsIEYBB3cKjOM=
5252
github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg=
5353
github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
5454
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
@@ -385,11 +385,9 @@ github.com/hashicorp/hcl/v2 v2.3.0 h1:iRly8YaMwTBAKhn1Ybk7VSdzbnopghktCD031P8ggU
385385
github.com/hashicorp/hcl/v2 v2.3.0/go.mod h1:d+FwDBbOLvpAM3Z6J7gPj/VoAGkNe/gm352ZhjJ/Zv8=
386386
github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y=
387387
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
388-
github.com/hashicorp/terraform-exec v0.14.0 h1:UQoUcxKTZZXhyyK68Cwn4mApT4mnFPmEXPiqaHL9r+w=
389388
github.com/hashicorp/terraform-exec v0.14.0/go.mod h1:qrAASDq28KZiMPDnQ02sFS9udcqEkRly002EA2izXTA=
390389
github.com/hashicorp/terraform-exec v0.15.0 h1:cqjh4d8HYNQrDoEmlSGelHmg2DYDh5yayckvJ5bV18E=
391390
github.com/hashicorp/terraform-exec v0.15.0/go.mod h1:H4IG8ZxanU+NW0ZpDRNsvh9f0ul7C0nHP+rUR/CHs7I=
392-
github.com/hashicorp/terraform-json v0.12.0 h1:8czPgEEWWPROStjkWPUnTQDXmpmZPlkQAwYYLETaTvw=
393391
github.com/hashicorp/terraform-json v0.12.0/go.mod h1:pmbq9o4EuL43db5+0ogX10Yofv1nozM+wskr/bGFJpI=
394392
github.com/hashicorp/terraform-json v0.13.0 h1:Li9L+lKD1FO5RVFRM1mMMIBDoUHslOniyEi5CM+FWGY=
395393
github.com/hashicorp/terraform-json v0.13.0/go.mod h1:y5OdLBCT+rxbwnpxZs9kGL7R9ExU76+cpdY8zHwoazk=
@@ -476,16 +474,12 @@ github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kN
476474
github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA=
477475
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
478476
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
479-
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
480-
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
481477
github.com/mattn/go-colorable v0.1.11 h1:nQ+aFkoE2TMGc0b68U2OKSexC+eq46+XwZzWXHRmPYs=
482478
github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
483479
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
484480
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
485481
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
486482
github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
487-
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
488-
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
489483
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
490484
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
491485
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
@@ -610,7 +604,6 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
610604
github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8=
611605
github.com/zclconf/go-cty v1.2.1/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8=
612606
github.com/zclconf/go-cty v1.8.4/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk=
613-
github.com/zclconf/go-cty v1.9.1 h1:viqrgQwFl5UpSxc046qblj78wZXVDFnSOufaOTER+cc=
614607
github.com/zclconf/go-cty v1.9.1/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk=
615608
github.com/zclconf/go-cty v1.10.0 h1:mp9ZXQeIcN8kAwuqorjH+Q+njbJKjLrvB2yIh4q7U+0=
616609
github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk=
@@ -771,7 +764,6 @@ golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7w
771764
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
772765
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
773766
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
774-
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
775767
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
776768
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
777769
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -789,7 +781,6 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
789781
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
790782
golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
791783
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
792-
golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79 h1:RX8C8PRZc2hTIod4ds8ij+/4RQX3AqhYj3uOHmyaz4E=
793784
golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
794785
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
795786
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 h1:foEbQz/B0Oz6YIqu/69kfXPYeFQAuuMYFkjaqXzl5Wo=

0 commit comments

Comments
 (0)