Skip to content

Commit 9682221

Browse files
committed
Fix extended-metadata field in instances to correctly handle JSON
1 parent 74ce957 commit 9682221

File tree

4 files changed

+19
-3
lines changed

4 files changed

+19
-3
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
- Removing deprecated fields `content-length` and `content-type` from data source `oci_objectstorage_object_head`. `content_length` and `content_type` should be used instead
3131
- Removing `compartment_id` from resource `oci_core_drg_attachment` as an Optional field as the service does not accept it. The compartment of the VCN is the one used by the service. Keeping it as a computed field.
3232
- Removing deprecated field `db_data_size_in_mbs` from resource `oci_database_backup`. `database_size_in_gbs` should be used instead
33+
- Fixed `extended_metadata` field in `oci_core_instance` to correctly handle JSON [Issue #817](https://github.com/terraform-providers/terraform-provider-oci/issues/817)
3334

3435
## 3.33.0 (July 10, 2019)
3536

examples/compute/extended_metadata/extended_metadata.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ resource "oci_core_instance" "TFInstance1" {
105105
ssh_authorized_keys = "${var.ssh_public_key}"
106106
some_string = "stringA"
107107
nested_object = "{\"some_string\": \"stringB\", \"object\": {\"some_string\": \"stringC\"}}"
108+
array = "[\"stringA\", \"stringB\"]"
108109
}
109110
}
110111

oci/core_instance_resource.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1202,7 +1202,7 @@ func InstanceAgentConfigToMap(obj *oci_core.InstanceAgentConfig) map[string]inte
12021202
func mapToExtendedMetadata(rm map[string]interface{}) (map[string]interface{}, error) {
12031203
result := make(map[string]interface{})
12041204
for k, v := range rm {
1205-
val := make(map[string]interface{})
1205+
var val interface{}
12061206
//Use the string value that was passed if it is not a valid JSON string
12071207
if err := json.Unmarshal([]byte(v.(string)), &val); err == nil {
12081208
result[k] = val

oci/core_instance_resource_test.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ func (s *ResourceCoreInstanceTestSuite) TestAccResourceCoreInstance_basic() {
9595
extended_metadata = {
9696
keyA = "valA"
9797
keyB = "{\"keyB1\": \"valB1\", \"keyB2\": {\"keyB2\": \"valB2\"}}"
98+
keyC = "[\"valC1\", \"valC2\"]"
9899
}
99100
timeouts {
100101
create = "15m"
@@ -122,9 +123,10 @@ func (s *ResourceCoreInstanceTestSuite) TestAccResourceCoreInstance_basic() {
122123
resource.TestCheckResourceAttr(s.ResourceName, "metadata.%", "2"),
123124
resource.TestCheckResourceAttr(s.ResourceName, "metadata.user_data", "ZWNobyBoZWxsbw=="),
124125
resource.TestCheckResourceAttrSet(s.ResourceName, "metadata.ssh_authorized_keys"),
125-
resource.TestCheckResourceAttr(s.ResourceName, "extended_metadata.%", "2"),
126+
resource.TestCheckResourceAttr(s.ResourceName, "extended_metadata.%", "3"),
126127
resource.TestCheckResourceAttr(s.ResourceName, "extended_metadata.keyA", "valA"),
127128
resource.TestCheckResourceAttr(s.ResourceName, "extended_metadata.keyB", "{\"keyB1\": \"valB1\", \"keyB2\": {\"keyB2\": \"valB2\"}}"),
129+
resource.TestCheckResourceAttr(s.ResourceName, "extended_metadata.keyC", "[\"valC1\", \"valC2\"]"),
128130
resource.TestCheckResourceAttr(s.ResourceName, "defined_tags.%", "1"),
129131
resource.TestCheckResourceAttr(s.ResourceName, "freeform_tags.%", "1"),
130132
resource.TestCheckResourceAttrSet(s.ResourceName, "region"),
@@ -167,6 +169,7 @@ func (s *ResourceCoreInstanceTestSuite) TestAccResourceCoreInstance_basic() {
167169
extended_metadata = {
168170
keyA = "valA"
169171
keyB = "{\"keyB1\": \"valB1\", \"keyB2\": {\"keyB2\": \"valB2\"}}"
172+
keyC = "[\"valC1\", \"valC2\"]"
170173
}
171174
timeouts {
172175
create = "15m"
@@ -196,6 +199,7 @@ func (s *ResourceCoreInstanceTestSuite) TestAccResourceCoreInstance_basic() {
196199
extended_metadata = {
197200
keyA = "valA"
198201
keyB = "{\"keyB1\": \"valB1\", \"keyB2\": {\"keyB2\": \"valB2\"}}"
202+
keyC = "[\"valC1\", \"valC2\"]"
199203
}
200204
timeouts {
201205
create = "15m"
@@ -226,6 +230,7 @@ func (s *ResourceCoreInstanceTestSuite) TestAccResourceCoreInstance_basic() {
226230
extended_metadata = {
227231
keyA = "valA"
228232
keyB = "{\"keyB1\": \"valB1\", \"keyB2\": {\"keyB2\": \"valB2\"}}"
233+
keyC = "[\"valC1\", \"valC2\"]"
229234
}
230235
}`,
231236
Check: resource.ComposeAggregateTestCheckFunc(
@@ -256,6 +261,7 @@ func (s *ResourceCoreInstanceTestSuite) TestAccResourceCoreInstance_basic() {
256261
extended_metadata = {
257262
keyA = "valA"
258263
keyB = "{\"keyB1\": \"valB1\", \"keyB2\": {\"keyB2\": \"valB2\"}}"
264+
keyC = "[\"valC1\", \"valC2\"]"
259265
}
260266
create_vnic_details {
261267
subnet_id = "${oci_core_subnet.t.id}"
@@ -303,6 +309,7 @@ func (s *ResourceCoreInstanceTestSuite) TestAccResourceCoreInstance_basic() {
303309
extended_metadata = {
304310
keyA = "valA"
305311
keyB = "{\"keyB1\": \"valB1\", \"keyB2\": {\"keyB2\": \"valB2\"}}"
312+
keyC = "[\"valC1\", \"valC2\"]"
306313
}
307314
create_vnic_details {
308315
subnet_id = "${oci_core_subnet.t.id}"
@@ -337,6 +344,7 @@ func (s *ResourceCoreInstanceTestSuite) TestAccResourceCoreInstance_basic() {
337344
extended_metadata = {
338345
keyA = "valA"
339346
keyB = "{\"keyB1\": \"valB1\", \"keyB2\": {\"keyB2\": \"valB2\"}}"
347+
keyC = "[\"valC1\", \"valC2\"]"
340348
}
341349
create_vnic_details {
342350
subnet_id = "${oci_core_subnet.t.id}"
@@ -385,6 +393,7 @@ func (s *ResourceCoreInstanceTestSuite) TestAccResourceCoreInstance_basic() {
385393
extended_metadata = {
386394
keyA = "valA"
387395
keyB = "{\"keyB1\": \"valB1\", \"keyB2\": {\"keyB2\": \"valB2\"}}"
396+
keyC = "[\"valC1\", \"valC2\"]"
388397
}
389398
create_vnic_details {
390399
subnet_id = "${oci_core_subnet.t.id}"
@@ -439,6 +448,7 @@ func (s *ResourceCoreInstanceTestSuite) TestAccResourceCoreInstance_basic() {
439448
extended_metadata = {
440449
keyA = "valA"
441450
keyB = "{\"keyB1\": \"valB1\", \"keyB2\": {\"keyB2\": \"valB2\"}}"
451+
keyC = "[\"valC1\", \"valC2\"]"
442452
}
443453
create_vnic_details {
444454
subnet_id = "${oci_core_subnet.t.id}"
@@ -507,6 +517,7 @@ func (s *ResourceCoreInstanceTestSuite) TestAccResourceCoreInstance_customdiff()
507517
extended_metadata = {
508518
keyA = "valA"
509519
keyB = "{\"keyB1\": \"valB1\", \"keyB2\": {\"keyB2\": \"valB2\"}}"
520+
keyC = "[\"valC1\", \"valC2\"]"
510521
}
511522
create_vnic_details {
512523
subnet_id = "${oci_core_subnet.t.id}"
@@ -563,6 +574,7 @@ func (s *ResourceCoreInstanceTestSuite) TestAccResourceCoreInstance_customdiff()
563574
extended_metadata = {
564575
keyA = "valA"
565576
keyB = "{\"keyB1\": \"valB1\", \"keyB2\": {\"keyB2\": \"valB2\"}}"
577+
keyC = "[\"valC1\", \"valC2\"]"
566578
}
567579
create_vnic_details {
568580
subnet_id = "${oci_core_subnet.t.id}"
@@ -948,6 +960,7 @@ func (s *ResourceCoreInstanceTestSuite) TestAccResourceCoreInstance_fetchVnicWhe
948960
extended_metadata = {
949961
keyA = "valA"
950962
keyB = "{\"keyB1\": \"valB1\", \"keyB2\": {\"keyB2\": \"valB2\"}}"
963+
keyC = "[\"valC1\", \"valC2\"]"
951964
}
952965
timeouts {
953966
create = "15m"
@@ -983,9 +996,10 @@ func (s *ResourceCoreInstanceTestSuite) TestAccResourceCoreInstance_fetchVnicWhe
983996
resource.TestCheckResourceAttr(s.ResourceName, "metadata.%", "2"),
984997
resource.TestCheckResourceAttr(s.ResourceName, "metadata.user_data", "ZWNobyBoZWxsbw=="),
985998
resource.TestCheckResourceAttrSet(s.ResourceName, "metadata.ssh_authorized_keys"),
986-
resource.TestCheckResourceAttr(s.ResourceName, "extended_metadata.%", "2"),
999+
resource.TestCheckResourceAttr(s.ResourceName, "extended_metadata.%", "3"),
9871000
resource.TestCheckResourceAttr(s.ResourceName, "extended_metadata.keyA", "valA"),
9881001
resource.TestCheckResourceAttr(s.ResourceName, "extended_metadata.keyB", "{\"keyB1\": \"valB1\", \"keyB2\": {\"keyB2\": \"valB2\"}}"),
1002+
resource.TestCheckResourceAttr(s.ResourceName, "extended_metadata.keyC", "[\"valC1\", \"valC2\"]"),
9891003
resource.TestCheckResourceAttr(s.ResourceName, "defined_tags.%", "1"),
9901004
resource.TestCheckResourceAttr(s.ResourceName, "freeform_tags.%", "1"),
9911005
resource.TestCheckResourceAttrSet(s.ResourceName, "region"),

0 commit comments

Comments
 (0)