Skip to content

Commit 147544a

Browse files
authored
Merge pull request #1075 from terraform-providers/release_merge_v3.77.0
Candidate for release_v3.77.0
2 parents fd46d33 + ff5e207 commit 147544a

12 files changed

+155
-18
lines changed

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,14 @@
11
## 3.77.0 (Unreleased)
2+
3+
### Added
4+
- Support resource discovery for `streaming` resources
5+
- Support resource discovery for `healthChecks` resources
6+
- Support resource discovery for `events` resources
7+
8+
### Fixed
9+
- Fixed DNS outage causing problems for DNS records
10+
- Fixed string values to escape TF characters in resource discovery
11+
212
## 3.76.0 (May 19, 2020)
313

414
### Added

oci/crud_helpers.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,12 @@ func ResourceDeprecatedForAnother(deprecatedResourceName string, newResourceName
636636
return fmt.Sprintf("The '%s' resource has been deprecated. Please use '%s' instead.", deprecatedResourceName, newResourceName)
637637
}
638638

639+
func resourceNotFoundErrorMessage(resourceName string, reason string) error {
640+
// Use this function to generate an error message for any resource that is not found. The message is specially
641+
// formatted so that it is detected by the handleMissingResourceError function correctly. Do not change the message format.
642+
return fmt.Errorf("%s not found. %s \n", resourceName, reason)
643+
}
644+
639645
// GenerateDataSourceID generates an ID for the data source based on the current time stamp.
640646
func GenerateDataSourceID() string {
641647
// Important, if you don't have an ID, make one up for your datasource

oci/dns_record_resource.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,8 @@ func findItem(rc *[]oci_dns.Record, r *schema.ResourceData) (*oci_dns.Record, er
368368
}
369369
}
370370

371-
return nil, fmt.Errorf("target %s record could not be matched against data %s\nfrom set %+v", rType, rData, rc)
371+
reason := fmt.Sprintf("Target %s record could not be matched against data %s\nfrom set %+v", rType, rData, rc)
372+
return nil, resourceNotFoundErrorMessage("DNS record", reason)
372373
}
373374

374375
// Match dns service transforms of rdata

oci/events_rule_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ var (
3232
ruleDataSourceRepresentation = map[string]interface{}{
3333
"compartment_id": Representation{repType: Required, create: `${var.compartment_id}`},
3434
"display_name": Representation{repType: Optional, create: `This rule sends a notification upon completion of DbaaS backup`, update: `displayName2`},
35-
"state": Representation{repType: Optional, create: `ACTIVE`},
35+
"state": Representation{repType: Optional, create: `INACTIVE`},
3636
"filter": RepresentationGroup{Required, ruleDataSourceFilterRepresentation}}
3737
ruleDataSourceFilterRepresentation = map[string]interface{}{
3838
"name": Representation{repType: Required, create: `id`},
@@ -44,7 +44,7 @@ var (
4444
"compartment_id": Representation{repType: Required, create: `${var.compartment_id}`},
4545
"condition": Representation{repType: Required, create: `{\"eventType\":\"com.oraclecloud.databaseservice.autonomous.database.backup.end\"}`, update: `{}`},
4646
"display_name": Representation{repType: Required, create: `This rule sends a notification upon completion of DbaaS backup`, update: `displayName2`},
47-
"is_enabled": Representation{repType: Required, create: `false`, update: `true`},
47+
"is_enabled": Representation{repType: Required, create: `true`, update: `false`},
4848
"defined_tags": Representation{repType: Optional, create: `${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "value")}`, update: `${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "updatedValue")}`},
4949
"description": Representation{repType: Optional, create: `description`, update: `description2`},
5050
"freeform_tags": Representation{repType: Optional, create: map[string]string{"Department": "Finance"}, update: map[string]string{"Department": "Accounting"}},
@@ -137,7 +137,7 @@ func TestEventsRuleResource_basic(t *testing.T) {
137137
resource.TestCheckResourceAttr(resourceName, "display_name", "This rule sends a notification upon completion of DbaaS backup"),
138138
resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"),
139139
resource.TestCheckResourceAttrSet(resourceName, "id"),
140-
resource.TestCheckResourceAttr(resourceName, "is_enabled", "false"),
140+
resource.TestCheckResourceAttr(resourceName, "is_enabled", "true"),
141141
resource.TestCheckResourceAttrSet(resourceName, "state"),
142142
resource.TestCheckResourceAttrSet(resourceName, "time_created"),
143143

@@ -180,7 +180,7 @@ func TestEventsRuleResource_basic(t *testing.T) {
180180
resource.TestCheckResourceAttr(resourceName, "display_name", "This rule sends a notification upon completion of DbaaS backup"),
181181
resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"),
182182
resource.TestCheckResourceAttrSet(resourceName, "id"),
183-
resource.TestCheckResourceAttr(resourceName, "is_enabled", "false"),
183+
resource.TestCheckResourceAttr(resourceName, "is_enabled", "true"),
184184
resource.TestCheckResourceAttrSet(resourceName, "state"),
185185
resource.TestCheckResourceAttrSet(resourceName, "time_created"),
186186

@@ -239,7 +239,7 @@ func TestEventsRuleResource_basic(t *testing.T) {
239239
resource.TestCheckResourceAttr(resourceName, "display_name", "displayName2"),
240240
resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"),
241241
resource.TestCheckResourceAttrSet(resourceName, "id"),
242-
resource.TestCheckResourceAttr(resourceName, "is_enabled", "true"),
242+
resource.TestCheckResourceAttr(resourceName, "is_enabled", "false"),
243243
resource.TestCheckResourceAttrSet(resourceName, "state"),
244244
resource.TestCheckResourceAttrSet(resourceName, "time_created"),
245245

@@ -261,7 +261,7 @@ func TestEventsRuleResource_basic(t *testing.T) {
261261
Check: resource.ComposeAggregateTestCheckFunc(
262262
resource.TestCheckResourceAttr(datasourceName, "compartment_id", compartmentId),
263263
resource.TestCheckResourceAttr(datasourceName, "display_name", "displayName2"),
264-
resource.TestCheckResourceAttr(datasourceName, "state", "ACTIVE"),
264+
resource.TestCheckResourceAttr(datasourceName, "state", "INACTIVE"),
265265

266266
resource.TestCheckResourceAttr(datasourceName, "rules.#", "1"),
267267
resource.TestCheckResourceAttr(datasourceName, "rules.0.compartment_id", compartmentId),
@@ -271,7 +271,7 @@ func TestEventsRuleResource_basic(t *testing.T) {
271271
resource.TestCheckResourceAttr(datasourceName, "rules.0.display_name", "displayName2"),
272272
resource.TestCheckResourceAttr(datasourceName, "rules.0.freeform_tags.%", "1"),
273273
resource.TestCheckResourceAttrSet(datasourceName, "rules.0.id"),
274-
resource.TestCheckResourceAttr(datasourceName, "rules.0.is_enabled", "true"),
274+
resource.TestCheckResourceAttr(datasourceName, "rules.0.is_enabled", "false"),
275275
resource.TestCheckResourceAttrSet(datasourceName, "rules.0.state"),
276276
resource.TestCheckResourceAttrSet(datasourceName, "rules.0.time_created"),
277277
),
@@ -293,7 +293,7 @@ func TestEventsRuleResource_basic(t *testing.T) {
293293
resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "displayName2"),
294294
resource.TestCheckResourceAttr(singularDatasourceName, "freeform_tags.%", "1"),
295295
resource.TestCheckResourceAttrSet(singularDatasourceName, "id"),
296-
resource.TestCheckResourceAttr(singularDatasourceName, "is_enabled", "true"),
296+
resource.TestCheckResourceAttr(singularDatasourceName, "is_enabled", "false"),
297297
resource.TestCheckResourceAttrSet(singularDatasourceName, "state"),
298298
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_created"),
299299
),

oci/export_compartment.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -648,7 +648,7 @@ func getHCLStringFromMap(builder *strings.Builder, sourceAttributes map[string]i
648648
v = varOverride
649649
builder.WriteString(fmt.Sprintf("%s = %v\n", tfAttribute, v))
650650
} else {
651-
builder.WriteString(fmt.Sprintf("%s = %q\n", tfAttribute, v))
651+
builder.WriteString(fmt.Sprintf("%s = %q\n", tfAttribute, escapeTFStrings(v)))
652652
}
653653
continue
654654
case int, bool, float64:
@@ -680,7 +680,7 @@ func getHCLStringFromMap(builder *strings.Builder, sourceAttributes map[string]i
680680
trueListVal = varOverride
681681
builder.WriteString(fmt.Sprintf("%v,\n", trueListVal))
682682
} else {
683-
builder.WriteString(fmt.Sprintf("%q,\n", trueListVal))
683+
builder.WriteString(fmt.Sprintf("%q,\n", escapeTFStrings(trueListVal)))
684684
}
685685
case int, bool, float64:
686686
builder.WriteString(fmt.Sprintf("\"%v\",\n", trueListVal))
@@ -719,7 +719,7 @@ func getHCLStringFromMap(builder *strings.Builder, sourceAttributes map[string]i
719719
mapVal = varOverride
720720
builder.WriteString(fmt.Sprintf("\"%s\" = %v\n", mapKey, mapVal))
721721
} else {
722-
builder.WriteString(fmt.Sprintf("\"%s\" = %q\n", mapKey, mapVal))
722+
builder.WriteString(fmt.Sprintf("\"%s\" = %q\n", mapKey, escapeTFStrings(mapVal)))
723723
}
724724
case int, bool, float64:
725725
builder.WriteString(fmt.Sprintf("\"%s\" = \"%v\"\n", mapKey, mapVal))
@@ -998,6 +998,13 @@ func convertResourceDataToMap(schemaMap map[string]*schema.Schema, d *schema.Res
998998
return result
999999
}
10001000

1001+
// This function should only be used to escape TF-characters in strings
1002+
func escapeTFStrings(val string) string {
1003+
val = strings.ReplaceAll(val, "%{", "%%{")
1004+
val = strings.ReplaceAll(val, "${", "$${")
1005+
return val
1006+
}
1007+
10011008
func generateTerraformNameFromResource(resourceAttributes map[string]interface{}, resourceSchema map[string]*schema.Schema) (string, error) {
10021009
possibleNameAttributes := []string{
10031010
"display_name",

oci/export_definitions.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@ import (
55
oci_containerengine "github.com/oracle/oci-go-sdk/containerengine"
66
oci_core "github.com/oracle/oci-go-sdk/core"
77
oci_database "github.com/oracle/oci-go-sdk/database"
8+
oci_events "github.com/oracle/oci-go-sdk/events"
89
oci_functions "github.com/oracle/oci-go-sdk/functions"
910
oci_identity "github.com/oracle/oci-go-sdk/identity"
1011
oci_limits "github.com/oracle/oci-go-sdk/limits"
1112
oci_load_balancer "github.com/oracle/oci-go-sdk/loadbalancer"
13+
oci_streaming "github.com/oracle/oci-go-sdk/streaming"
1214
)
1315

1416
// Hints for discovering and exporting this resource to configuration and state files
@@ -380,6 +382,17 @@ var exportDatabaseDbSystemHints = &TerraformResourceHints{
380382
},
381383
}
382384

385+
var exportEventsRuleHints = &TerraformResourceHints{
386+
resourceClass: "oci_events_rule",
387+
datasourceClass: "oci_events_rules",
388+
datasourceItemsAttr: "rules",
389+
resourceAbbreviation: "rule",
390+
requireResourceRefresh: true,
391+
discoverableLifecycleStates: []string{
392+
string(oci_events.RuleLifecycleStateActive),
393+
},
394+
}
395+
383396
var exportFunctionsApplicationHints = &TerraformResourceHints{
384397
resourceClass: "oci_functions_application",
385398
datasourceClass: "oci_functions_applications",
@@ -402,6 +415,22 @@ var exportFunctionsFunctionHints = &TerraformResourceHints{
402415
},
403416
}
404417

418+
var exportHealthChecksHttpMonitorHints = &TerraformResourceHints{
419+
resourceClass: "oci_health_checks_http_monitor",
420+
datasourceClass: "oci_health_checks_http_monitors",
421+
datasourceItemsAttr: "http_monitors",
422+
resourceAbbreviation: "http_monitor",
423+
requireResourceRefresh: true,
424+
}
425+
426+
var exportHealthChecksPingMonitorHints = &TerraformResourceHints{
427+
resourceClass: "oci_health_checks_ping_monitor",
428+
datasourceClass: "oci_health_checks_ping_monitors",
429+
datasourceItemsAttr: "ping_monitors",
430+
resourceAbbreviation: "ping_monitor",
431+
requireResourceRefresh: true,
432+
}
433+
405434
var exportIdentityApiKeyHints = &TerraformResourceHints{
406435
resourceClass: "oci_identity_api_key",
407436
datasourceClass: "oci_identity_api_keys",
@@ -656,3 +685,35 @@ var exportObjectStorageNamespaceHints = &TerraformResourceHints{
656685
datasourceClass: "oci_objectstorage_namespace",
657686
resourceAbbreviation: "namespace",
658687
}
688+
689+
var exportStreamingConnectHarnessHints = &TerraformResourceHints{
690+
resourceClass: "oci_streaming_connect_harness",
691+
datasourceClass: "oci_streaming_connect_harnesses",
692+
datasourceItemsAttr: "connect_harness",
693+
resourceAbbreviation: "connect_harness",
694+
discoverableLifecycleStates: []string{
695+
string(oci_streaming.ConnectHarnessLifecycleStateActive),
696+
},
697+
}
698+
699+
var exportStreamingStreamPoolHints = &TerraformResourceHints{
700+
resourceClass: "oci_streaming_stream_pool",
701+
datasourceClass: "oci_streaming_stream_pools",
702+
datasourceItemsAttr: "stream_pools",
703+
resourceAbbreviation: "stream_pool",
704+
requireResourceRefresh: true,
705+
discoverableLifecycleStates: []string{
706+
string(oci_streaming.StreamPoolLifecycleStateActive),
707+
},
708+
}
709+
710+
var exportStreamingStreamHints = &TerraformResourceHints{
711+
resourceClass: "oci_streaming_stream",
712+
datasourceClass: "oci_streaming_streams",
713+
datasourceItemsAttr: "streams",
714+
resourceAbbreviation: "stream",
715+
requireResourceRefresh: true,
716+
discoverableLifecycleStates: []string{
717+
string(oci_streaming.StreamLifecycleStateActive),
718+
},
719+
}

oci/export_graphs.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,12 @@ var compartmentResourceGraphs = map[string]TerraformResourceGraph{
2828
"containerengine": containerengineResourceGraph,
2929
"core": coreResourceGraph,
3030
"database": databaseResourceGraph,
31+
"events": eventsResourceGraph,
3132
"functions": functionsResourceGraph,
33+
"health_checks": healthChecksResourceGraph,
3234
"load_balancer": loadBalancerResourceGraph,
3335
"object_storage": objectStorageResourceGraph,
36+
"streaming": streamingResourceGraph,
3437
"tagging": taggingResourceGraph,
3538
}
3639

@@ -170,6 +173,12 @@ var databaseResourceGraph = TerraformResourceGraph{
170173
},
171174
}
172175

176+
var eventsResourceGraph = TerraformResourceGraph{
177+
"oci_identity_compartment": {
178+
{TerraformResourceHints: exportEventsRuleHints},
179+
},
180+
}
181+
173182
var functionsResourceGraph = TerraformResourceGraph{
174183
"oci_identity_compartment": {
175184
{TerraformResourceHints: exportFunctionsApplicationHints},
@@ -184,6 +193,13 @@ var functionsResourceGraph = TerraformResourceGraph{
184193
},
185194
}
186195

196+
var healthChecksResourceGraph = TerraformResourceGraph{
197+
"oci_identity_compartment": {
198+
{TerraformResourceHints: exportHealthChecksHttpMonitorHints},
199+
{TerraformResourceHints: exportHealthChecksPingMonitorHints},
200+
},
201+
}
202+
187203
var identityResourceGraph = TerraformResourceGraph{
188204
"oci_identity_tenancy": {
189205
{TerraformResourceHints: exportIdentityAuthenticationPolicyHints},
@@ -329,6 +345,14 @@ var objectStorageResourceGraph = TerraformResourceGraph{
329345
},
330346
}
331347

348+
var streamingResourceGraph = TerraformResourceGraph{
349+
"oci_identity_compartment": {
350+
{TerraformResourceHints: exportStreamingConnectHarnessHints},
351+
{TerraformResourceHints: exportStreamingStreamPoolHints},
352+
{TerraformResourceHints: exportStreamingStreamHints},
353+
},
354+
}
355+
332356
var taggingResourceGraph = TerraformResourceGraph{
333357
"oci_identity_compartment": {
334358
{TerraformResourceHints: exportIdentityTagDefaultHints},

oci/export_resource_helpers.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ func init() {
104104

105105
exportObjectStorageBucketHints.getIdFn = getObjectStorageBucketId
106106

107+
exportStreamingStreamHints.processDiscoveredResourcesFn = processStreamingStream
108+
107109
exportContainerengineNodePoolHints.processDiscoveredResourcesFn = processContainerengineNodePool
108110
}
109111

@@ -122,6 +124,18 @@ func processContainerengineNodePool(clients *OracleClients, resources []*OCIReso
122124
return resources, nil
123125
}
124126

127+
func processStreamingStream(clients *OracleClients, resources []*OCIResource) ([]*OCIResource, error) {
128+
for _, streamingStream := range resources {
129+
// compartment_id conflict with stream_pool_id
130+
if _, exists := streamingStream.sourceAttributes["compartment_id"]; exists {
131+
if _, ok := streamingStream.sourceAttributes["stream_pool_id"]; ok {
132+
delete(streamingStream.sourceAttributes, "stream_pool_id")
133+
}
134+
}
135+
}
136+
return resources, nil
137+
}
138+
125139
// Custom functions to alter behavior of resource discovery and resource HCL representation
126140

127141
func processInstances(clients *OracleClients, resources []*OCIResource) ([]*OCIResource, error) {

oci/marketplace_listing_package_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ func TestMarketplaceListingPackageResource_basic(t *testing.T) {
8080
resource.TestCheckResourceAttr(singularDatasourceName, "pricing.#", "1"),
8181
resource.TestCheckResourceAttrSet(singularDatasourceName, "pricing.0.rate"),
8282
resource.TestCheckResourceAttrSet(singularDatasourceName, "pricing.0.type"),
83-
resource.TestCheckResourceAttrSet(singularDatasourceName, "pricing.0.currency"),
8483
resource.TestCheckResourceAttrSet(singularDatasourceName, "resource_id"),
8584
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_created"),
8685
resource.TestCheckResourceAttrSet(singularDatasourceName, "version"),

oci/marketplace_listing_test.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,16 +93,13 @@ func TestMarketplaceListingResource_basic(t *testing.T) {
9393
resource.TestCheckResourceAttrSet(singularDatasourceName, "package_type"),
9494
resource.TestCheckResourceAttrSet(singularDatasourceName, "publisher.#"),
9595
resource.TestCheckResourceAttrSet(singularDatasourceName, "regions.#"),
96-
resource.TestCheckResourceAttrSet(singularDatasourceName, "release_notes"),
9796
resource.TestCheckResourceAttrSet(singularDatasourceName, "screenshots.#"),
9897
resource.TestCheckResourceAttrSet(singularDatasourceName, "short_description"),
9998
resource.TestCheckResourceAttrSet(singularDatasourceName, "support_contacts.#"),
10099
resource.TestCheckResourceAttrSet(singularDatasourceName, "support_links.#"),
101100
resource.TestCheckResourceAttrSet(singularDatasourceName, "system_requirements"),
102101
resource.TestCheckResourceAttrSet(singularDatasourceName, "tagline"),
103-
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_released"),
104102
resource.TestCheckResourceAttrSet(singularDatasourceName, "usage_information"),
105-
resource.TestCheckResourceAttrSet(singularDatasourceName, "version"),
106103
resource.TestCheckResourceAttrSet(singularDatasourceName, "videos.#"),
107104
),
108105
},

0 commit comments

Comments
 (0)