Skip to content

Commit 75afbe3

Browse files
committed
Reapply "Added - Support for Autonomous Recovery Service - Long Term Archive Feature"
This reverts commit e072015.
1 parent e072015 commit 75afbe3

19 files changed

+1739
-4
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
variable "tenancy_ocid" {}
5+
variable "user_ocid" {}
6+
variable "fingerprint" {}
7+
variable "private_key_path" {}
8+
variable "region" {}
9+
variable "compartment_id" {}
10+
11+
variable "long_term_backup_defined_tags_value" {
12+
default = "value"
13+
}
14+
15+
variable "long_term_backup_display_name" {
16+
default = "displayName"
17+
}
18+
19+
variable "long_term_backup_freeform_tags" {
20+
default = { "bar-key" = "value" }
21+
}
22+
23+
variable "long_term_backup_id" {
24+
default = "id"
25+
}
26+
27+
variable "protected_database_id" {}
28+
29+
variable "long_term_backup_retention_period_retention_count" {
30+
default = 1
31+
}
32+
33+
variable "long_term_backup_retention_period_retention_period_type" {
34+
default = "YEAR"
35+
}
36+
37+
variable "long_term_backup_retention_point_in_time" {
38+
default = null
39+
}
40+
41+
variable "long_term_backup_retention_scn" {
42+
default = null
43+
}
44+
45+
variable "long_term_backup_state" {
46+
default = "ACTIVE"
47+
}
48+
49+
provider "oci" {
50+
tenancy_ocid = var.tenancy_ocid
51+
user_ocid = var.user_ocid
52+
fingerprint = var.fingerprint
53+
private_key_path = var.private_key_path
54+
region = var.region
55+
}
56+
57+
resource "oci_recovery_long_term_backup" "test_long_term_backup" {
58+
#Required
59+
protected_database_id = var.protected_database_id
60+
retention_period {
61+
#Required
62+
retention_count = var.long_term_backup_retention_period_retention_count
63+
retention_period_type = var.long_term_backup_retention_period_retention_period_type
64+
}
65+
66+
#Optional
67+
display_name = var.long_term_backup_display_name
68+
freeform_tags = var.long_term_backup_freeform_tags
69+
retention_point_in_time = var.long_term_backup_retention_point_in_time
70+
retention_scn = var.long_term_backup_retention_scn
71+
}
72+
73+
data "oci_recovery_long_term_backups" "test_long_term_backups" {
74+
#Required
75+
compartment_id = var.compartment_id
76+
77+
#Optional
78+
display_name = var.long_term_backup_display_name
79+
id = oci_recovery_long_term_backup.test_long_term_backup.id
80+
protected_database_id = var.protected_database_id
81+
state = var.long_term_backup_state
82+
}
83+

internal/integrationtest/recovery_long_term_backup_test.go

Lines changed: 371 additions & 0 deletions
Large diffs are not rendered by default.

internal/integrationtest/recovery_protected_database_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ var (
3737

3838
RecoveryProtectedDatabaseDataSourceRepresentation = map[string]interface{}{
3939
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
40+
"backup_cloud_location": acctest.Representation{RepType: acctest.Optional, Create: `OCI`},
4041
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`, Update: `displayName2`},
4142
"id": acctest.Representation{RepType: acctest.Optional, Create: `${oci_recovery_protected_database.test_protected_database.id}`},
4243
"protection_policy_id": acctest.Representation{RepType: acctest.Optional, Create: `${data.oci_recovery_protection_policy.test_protection_policy.id}`},
@@ -61,12 +62,12 @@ var (
6162
"deletion_schedule": acctest.Representation{RepType: acctest.Optional, Create: `DELETE_AFTER_72_HOURS`},
6263
"freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"bar-key": "value"}, Update: map[string]string{"Department": "Accounting"}},
6364
"is_redo_logs_shipped": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`},
64-
"subscription_id": acctest.Representation{RepType: acctest.Optional, Create: `ocid1.organizationssubscription.oc1..amaaaaaa6jqx4paaa2rxk42owtrtvwkhauvoqb2equbymlvdrlv5tclvvvta`, Update: `ocid1.organizationssubscription.oc1..amaaaaaa6jqx4paaa2rxk42owtrtvwkhauvoqb2equbymlvdrlv5tclvvita`},
6565
"lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: recoveryIgnoreDefinedTagsRepresentation},
6666
}
6767
RecoveryProtectedDatabaseRecoveryServiceSubnetsRepresentation = map[string]interface{}{
6868
"recovery_service_subnet_id": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_recovery_recovery_service_subnet.test_recovery_service_subnet.id}`},
6969
}
70+
7071
RecoveryProtectedDatabaseResourceDependencies = acctest.GenerateResourceFromRepresentationMap("oci_core_subnet", "test_subnet", acctest.Required, acctest.Create, CoreSubnetRepresentation) +
7172
acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Required, acctest.Create, CoreVcnRepresentation) +
7273
acctest.GenerateResourceFromRepresentationMap("oci_recovery_protection_policy", "test_protection_policy", acctest.Required, acctest.Create, RecoveryProtectionPolicyRepresentation) +
@@ -164,7 +165,6 @@ func TestRecoveryProtectedDatabaseResource_basic(t *testing.T) {
164165
resource.TestCheckResourceAttrSet(resourceName, "protection_policy_id"),
165166
resource.TestCheckResourceAttr(resourceName, "recovery_service_subnets.#", "1"),
166167
resource.TestCheckResourceAttrSet(resourceName, "recovery_service_subnets.0.recovery_service_subnet_id"),
167-
resource.TestCheckResourceAttrSet(resourceName, "subscription_id"),
168168
resource.TestCheckResourceAttrSet(resourceName, "vpc_user_name"),
169169

170170
func(s *terraform.State) (err error) {
@@ -200,7 +200,6 @@ func TestRecoveryProtectedDatabaseResource_basic(t *testing.T) {
200200
resource.TestCheckResourceAttrSet(resourceName, "protection_policy_id"),
201201
resource.TestCheckResourceAttr(resourceName, "recovery_service_subnets.#", "1"),
202202
resource.TestCheckResourceAttrSet(resourceName, "recovery_service_subnets.0.recovery_service_subnet_id"),
203-
resource.TestCheckResourceAttrSet(resourceName, "subscription_id"),
204203
resource.TestCheckResourceAttrSet(resourceName, "vpc_user_name"),
205204

206205
func(s *terraform.State) (err error) {
@@ -231,7 +230,6 @@ func TestRecoveryProtectedDatabaseResource_basic(t *testing.T) {
231230
resource.TestCheckResourceAttrSet(resourceName, "protection_policy_id"),
232231
resource.TestCheckResourceAttr(resourceName, "recovery_service_subnets.#", "1"),
233232
resource.TestCheckResourceAttrSet(resourceName, "recovery_service_subnets.0.recovery_service_subnet_id"),
234-
resource.TestCheckResourceAttrSet(resourceName, "subscription_id"),
235233
resource.TestCheckResourceAttrSet(resourceName, "vpc_user_name"),
236234

237235
func(s *terraform.State) (err error) {
@@ -250,6 +248,7 @@ func TestRecoveryProtectedDatabaseResource_basic(t *testing.T) {
250248
compartmentIdVariableStr + RecoveryProtectedDatabaseResourceStaticDependencies +
251249
acctest.GenerateResourceFromRepresentationMap("oci_recovery_protected_database", "test_protected_database", acctest.Optional, acctest.Update, RecoveryProtectedDatabaseRepresentation),
252250
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
251+
resource.TestCheckResourceAttr(datasourceName, "backup_cloud_location", "OCI"),
253252
resource.TestCheckResourceAttr(datasourceName, "compartment_id", compartmentId),
254253
resource.TestCheckResourceAttr(datasourceName, "display_name", "displayName2"),
255254
resource.TestCheckResourceAttrSet(datasourceName, "id"),
@@ -269,6 +268,7 @@ func TestRecoveryProtectedDatabaseResource_basic(t *testing.T) {
269268
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
270269
resource.TestCheckResourceAttrSet(singularDatasourceName, "protected_database_id"),
271270

271+
resource.TestCheckResourceAttrSet(singularDatasourceName, "backup_cloud_location"),
272272
resource.TestCheckResourceAttr(singularDatasourceName, "compartment_id", compartmentId),
273273
resource.TestCheckResourceAttr(singularDatasourceName, "database_size", "S"),
274274
resource.TestCheckResourceAttr(singularDatasourceName, "db_unique_name", "dbUniqueName"),

internal/service/recovery/recovery_export.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,23 @@ var exportRecoveryProtectionPolicyHints = &tf_export.TerraformResourceHints{
4949
},
5050
}
5151

52+
var exportRecoveryLongTermBackupHints = &tf_export.TerraformResourceHints{
53+
ResourceClass: "oci_recovery_long_term_backup",
54+
DatasourceClass: "oci_recovery_long_term_backups",
55+
DatasourceItemsAttr: "long_term_backup_collection",
56+
IsDatasourceCollection: true,
57+
ResourceAbbreviation: "long_term_backup",
58+
RequireResourceRefresh: true,
59+
DiscoverableLifecycleStates: []string{
60+
string(oci_recovery.LongTermBackupLifecycleStateActive),
61+
},
62+
}
63+
5264
var recoveryResourceGraph = tf_export.TerraformResourceGraph{
5365
"oci_identity_compartment": {
5466
{TerraformResourceHints: exportRecoveryRecoveryServiceSubnetHints},
5567
{TerraformResourceHints: exportRecoveryProtectedDatabaseHints},
5668
{TerraformResourceHints: exportRecoveryProtectionPolicyHints},
69+
{TerraformResourceHints: exportRecoveryLongTermBackupHints},
5770
},
5871
}
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package recovery
5+
6+
import (
7+
"context"
8+
"time"
9+
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11+
oci_recovery "github.com/oracle/oci-go-sdk/v65/recovery"
12+
13+
"github.com/oracle/terraform-provider-oci/internal/client"
14+
"github.com/oracle/terraform-provider-oci/internal/tfresource"
15+
)
16+
17+
func RecoveryLongTermBackupDataSource() *schema.Resource {
18+
fieldMap := make(map[string]*schema.Schema)
19+
fieldMap["long_term_backup_id"] = &schema.Schema{
20+
Type: schema.TypeString,
21+
Required: true,
22+
}
23+
return tfresource.GetSingularDataSourceItemSchema(RecoveryLongTermBackupResource(), fieldMap, readSingularRecoveryLongTermBackup)
24+
}
25+
26+
func readSingularRecoveryLongTermBackup(d *schema.ResourceData, m interface{}) error {
27+
sync := &RecoveryLongTermBackupDataSourceCrud{}
28+
sync.D = d
29+
sync.Client = m.(*client.OracleClients).DatabaseRecoveryClient()
30+
31+
return tfresource.ReadResource(sync)
32+
}
33+
34+
type RecoveryLongTermBackupDataSourceCrud struct {
35+
D *schema.ResourceData
36+
Client *oci_recovery.DatabaseRecoveryClient
37+
Res *oci_recovery.GetLongTermBackupResponse
38+
}
39+
40+
func (s *RecoveryLongTermBackupDataSourceCrud) VoidState() {
41+
s.D.SetId("")
42+
}
43+
44+
func (s *RecoveryLongTermBackupDataSourceCrud) Get() error {
45+
request := oci_recovery.GetLongTermBackupRequest{}
46+
47+
if longTermBackupId, ok := s.D.GetOkExists("long_term_backup_id"); ok {
48+
tmp := longTermBackupId.(string)
49+
request.LongTermBackupId = &tmp
50+
}
51+
52+
request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(false, "recovery")
53+
54+
response, err := s.Client.GetLongTermBackup(context.Background(), request)
55+
if err != nil {
56+
return err
57+
}
58+
59+
s.Res = &response
60+
return nil
61+
}
62+
63+
func (s *RecoveryLongTermBackupDataSourceCrud) SetData() error {
64+
if s.Res == nil {
65+
return nil
66+
}
67+
68+
s.D.SetId(*s.Res.Id)
69+
70+
if s.Res.CompartmentId != nil {
71+
s.D.Set("compartment_id", *s.Res.CompartmentId)
72+
}
73+
74+
if s.Res.DatabaseIdentifier != nil {
75+
s.D.Set("database_identifier", *s.Res.DatabaseIdentifier)
76+
}
77+
78+
if s.Res.DatabaseSizeInGBs != nil {
79+
s.D.Set("database_size_in_gbs", *s.Res.DatabaseSizeInGBs)
80+
}
81+
82+
if s.Res.DefinedTags != nil {
83+
s.D.Set("defined_tags", tfresource.DefinedTagsToMap(s.Res.DefinedTags))
84+
}
85+
86+
if s.Res.DisplayName != nil {
87+
s.D.Set("display_name", *s.Res.DisplayName)
88+
}
89+
90+
s.D.Set("freeform_tags", s.Res.FreeformTags)
91+
92+
if s.Res.LifecycleDetails != nil {
93+
s.D.Set("lifecycle_details", *s.Res.LifecycleDetails)
94+
}
95+
96+
s.D.Set("lifecycle_substate", s.Res.LifecycleSubstate)
97+
98+
if s.Res.ProtectedDatabaseId != nil {
99+
s.D.Set("protected_database_id", *s.Res.ProtectedDatabaseId)
100+
}
101+
102+
retentionPeriod := []interface{}{}
103+
for _, item := range s.Res.RetentionPeriod {
104+
retentionPeriod = append(retentionPeriod, RetentionPeriodValueToMap(item))
105+
}
106+
s.D.Set("retention_period", retentionPeriod)
107+
108+
if s.Res.RetentionPointInTime != nil {
109+
s.D.Set("retention_point_in_time", s.Res.RetentionPointInTime.Format(time.RFC3339Nano))
110+
}
111+
112+
if s.Res.RetentionScn != nil {
113+
s.D.Set("retention_scn", *s.Res.RetentionScn)
114+
}
115+
116+
if s.Res.RetentionUntilDateTime != nil {
117+
s.D.Set("retention_until_date_time", s.Res.RetentionUntilDateTime.String())
118+
}
119+
120+
if s.Res.RmanTag != nil {
121+
s.D.Set("rman_tag", *s.Res.RmanTag)
122+
}
123+
124+
s.D.Set("state", s.Res.LifecycleState)
125+
126+
if s.Res.SystemTags != nil {
127+
s.D.Set("system_tags", tfresource.SystemTagsToMap(s.Res.SystemTags))
128+
}
129+
130+
if s.Res.TimeBackupCompleted != nil {
131+
s.D.Set("time_backup_completed", s.Res.TimeBackupCompleted.String())
132+
}
133+
134+
if s.Res.TimeBackupInitiated != nil {
135+
s.D.Set("time_backup_initiated", s.Res.TimeBackupInitiated.String())
136+
}
137+
138+
if s.Res.TimeCreated != nil {
139+
s.D.Set("time_created", s.Res.TimeCreated.String())
140+
}
141+
142+
if s.Res.TimeUpdated != nil {
143+
s.D.Set("time_updated", s.Res.TimeUpdated.String())
144+
}
145+
146+
return nil
147+
}

0 commit comments

Comments
 (0)