Skip to content

Commit 31a9454

Browse files
Added Support For - Cross Region Volume Group Replication
1 parent b8f3f05 commit 31a9454

21 files changed

+918
-31
lines changed

internal/integrationtest/core_block_volume_replica_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,21 @@ import (
88
"testing"
99
"time"
1010

11+
"github.com/terraform-providers/terraform-provider-oci/internal/acctest"
12+
"github.com/terraform-providers/terraform-provider-oci/internal/utils"
13+
1114
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
1215
"github.com/hashicorp/terraform-plugin-sdk/terraform"
1316

1417
"github.com/terraform-providers/terraform-provider-oci/httpreplay"
15-
"github.com/terraform-providers/terraform-provider-oci/internal/acctest"
16-
"github.com/terraform-providers/terraform-provider-oci/internal/utils"
1718
)
1819

1920
var (
2021
blockVolumeReplicaSingularDataSourceRepresentation = map[string]interface{}{
2122
"block_volume_replica_id": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_core_block_volume_replicas.test_block_volume_replicas.block_volume_replicas.0.id}`},
2223
}
2324
blockVolumeReplicaDataSourceRepresentation = map[string]interface{}{
24-
"availability_domain": acctest.Representation{RepType: acctest.Required, Create: `NyKp:US-ASHBURN-AD-1`},
25+
"availability_domain": acctest.Representation{RepType: acctest.Required, Create: `KvuH:US-ASHBURN-AD-1`},
2526
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
2627
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`},
2728
"state": acctest.Representation{RepType: acctest.Optional, Create: `AVAILABLE`},
@@ -36,7 +37,7 @@ var (
3637

3738
//hardcode availability_domain here to meet the cross region replicas requirement
3839
dependenceVolumeBlockVolumeReplicasRepresentation = map[string]interface{}{
39-
"availability_domain": acctest.Representation{RepType: acctest.Required, Create: `NyKp:US-ASHBURN-AD-1`},
40+
"availability_domain": acctest.Representation{RepType: acctest.Required, Create: `KvuH:US-ASHBURN-AD-1`},
4041
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`},
4142
}
4243

internal/integrationtest/core_boot_volume_replica_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@ import (
88
"testing"
99
"time"
1010

11+
"github.com/terraform-providers/terraform-provider-oci/internal/acctest"
12+
"github.com/terraform-providers/terraform-provider-oci/internal/utils"
13+
1114
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
1215
"github.com/hashicorp/terraform-plugin-sdk/terraform"
1316

1417
"github.com/terraform-providers/terraform-provider-oci/httpreplay"
15-
"github.com/terraform-providers/terraform-provider-oci/internal/acctest"
16-
"github.com/terraform-providers/terraform-provider-oci/internal/utils"
1718
)
1819

1920
var (
@@ -36,7 +37,7 @@ var (
3637
"boot_volume_replicas_deletion": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`},
3738
}
3839
dependenceBootVolumeReplicasRepresentation = map[string]interface{}{
39-
"availability_domain": acctest.Representation{RepType: acctest.Required, Create: `NyKp:US-ASHBURN-AD-1`},
40+
"availability_domain": acctest.Representation{RepType: acctest.Required, Create: `KvuH:US-ASHBURN-AD-1`},
4041
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`},
4142
}
4243
BootVolumeReplicaResourceConfig = BootVolumeResourceDependencies
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
// Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package integrationtest
5+
6+
import (
7+
"fmt"
8+
"testing"
9+
"time"
10+
11+
"github.com/terraform-providers/terraform-provider-oci/internal/acctest"
12+
"github.com/terraform-providers/terraform-provider-oci/internal/utils"
13+
14+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
15+
"github.com/hashicorp/terraform-plugin-sdk/terraform"
16+
17+
"github.com/terraform-providers/terraform-provider-oci/httpreplay"
18+
)
19+
20+
var (
21+
volumeGroupReplicationRepresentation = map[string]interface{}{
22+
"availability_domain": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`},
23+
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
24+
"source_details": acctest.RepresentationGroup{RepType: acctest.Required, Group: volumeGroupSourceDetailsRepresentation},
25+
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`, Update: `displayName2`},
26+
"volume_group_replicas": acctest.RepresentationGroup{RepType: acctest.Optional, Group: volumeGroupVolumeGroupReplicasRepresentation},
27+
"volume_group_replicas_deletion": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`},
28+
"preserve_volume_replica": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `false`},
29+
}
30+
31+
//hardcode availability_domain here to meet the cross region replicas requirement
32+
volumeGroupVolumeGroupReplicasRepresentation = map[string]interface{}{
33+
"availability_domain": acctest.Representation{RepType: acctest.Required, Create: `KvuH:US-ASHBURN-AD-1`},
34+
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`},
35+
}
36+
)
37+
38+
// issue-routing-tag: core/blockStorage
39+
func TestCoreVolumeGroupReplicaResource_basic(t *testing.T) {
40+
httpreplay.SetScenario("TestCoreVolumeGroupReplicaResource_basic")
41+
defer httpreplay.SaveScenario()
42+
43+
config := acctest.ProviderTestConfig()
44+
45+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
46+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
47+
48+
resourceName := "oci_core_volume_group.test_volume_group"
49+
50+
createConfig := config + VolumeGroupRequiredOnlyResourceDependencies +
51+
acctest.GenerateResourceFromRepresentationMap("oci_core_volume_group", "test_volume_group", acctest.Optional, acctest.Create, volumeGroupReplicationRepresentation) +
52+
compartmentIdVariableStr
53+
54+
updateConfig := config + VolumeGroupRequiredOnlyResourceDependencies +
55+
acctest.GenerateResourceFromRepresentationMap("oci_core_volume_group", "test_volume_group", acctest.Optional, acctest.Update,
56+
acctest.RepresentationCopyWithRemovedProperties(volumeGroupReplicationRepresentation, []string{"volume_group_replicas"})) +
57+
compartmentIdVariableStr
58+
59+
acctest.ResourceTest(t, nil, []resource.TestStep{
60+
// Create Volume Group with Replication
61+
{
62+
Config: createConfig,
63+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
64+
resource.TestCheckResourceAttrSet(resourceName, "availability_domain"),
65+
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
66+
resource.TestCheckResourceAttr(resourceName, "display_name", "displayName"),
67+
resource.TestCheckResourceAttr(resourceName, "state", "AVAILABLE"),
68+
resource.TestCheckResourceAttr(resourceName, "volume_group_replicas.#", "1"),
69+
resource.TestCheckResourceAttrSet(resourceName, "volume_group_replicas.0.availability_domain"),
70+
resource.TestCheckResourceAttrSet(resourceName, "volume_group_replicas.0.display_name"),
71+
72+
func(s *terraform.State) (err error) {
73+
time.Sleep(2 * time.Minute)
74+
return
75+
},
76+
),
77+
},
78+
// Disable replication without preserve replica
79+
{
80+
Config: updateConfig,
81+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
82+
resource.TestCheckResourceAttrSet(resourceName, "availability_domain"),
83+
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
84+
resource.TestCheckResourceAttr(resourceName, "display_name", "displayName2"),
85+
resource.TestCheckResourceAttr(resourceName, "state", "AVAILABLE"),
86+
resource.TestCheckNoResourceAttr(resourceName, "volume_group_replicas"),
87+
88+
func(s *terraform.State) (err error) {
89+
time.Sleep(2 * time.Minute)
90+
return
91+
},
92+
),
93+
},
94+
// Delete
95+
{
96+
Config: updateConfig,
97+
Destroy: true,
98+
},
99+
})
100+
}

internal/integrationtest/core_volume_group_test.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,19 @@ import (
1010
"testing"
1111
"time"
1212

13+
"github.com/terraform-providers/terraform-provider-oci/internal/acctest"
14+
tf_client "github.com/terraform-providers/terraform-provider-oci/internal/client"
15+
"github.com/terraform-providers/terraform-provider-oci/internal/resourcediscovery"
16+
"github.com/terraform-providers/terraform-provider-oci/internal/tfresource"
17+
"github.com/terraform-providers/terraform-provider-oci/internal/utils"
18+
1319
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
1420
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
1521
"github.com/hashicorp/terraform-plugin-sdk/terraform"
1622
"github.com/oracle/oci-go-sdk/v55/common"
1723
oci_core "github.com/oracle/oci-go-sdk/v55/core"
1824

1925
"github.com/terraform-providers/terraform-provider-oci/httpreplay"
20-
"github.com/terraform-providers/terraform-provider-oci/internal/acctest"
21-
tf_client "github.com/terraform-providers/terraform-provider-oci/internal/client"
22-
"github.com/terraform-providers/terraform-provider-oci/internal/resourcediscovery"
23-
"github.com/terraform-providers/terraform-provider-oci/internal/tfresource"
24-
"github.com/terraform-providers/terraform-provider-oci/internal/utils"
2526
)
2627

2728
var (
@@ -79,6 +80,7 @@ var (
7980
}
8081
` +
8182
AvailabilityDomainConfig +
83+
utils.VolumeBackupPolicyDependency +
8284
VolumeBackupPolicyRequiredOnlyResource
8385
VolumeGroupRequiredOnlyResourceDependencies = AvailabilityDomainConfig + SourceVolumeListDependency
8486
VolumeGroupAsDependency = acctest.GenerateResourceFromRepresentationMap("oci_core_volume_group", "test_volume_group", acctest.Required, acctest.Create, volumeGroupRepresentation) + SourceVolumeListDependency

internal/integrationtest/core_volume_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ var (
6161
"vpus_per_gb": acctest.Representation{RepType: acctest.Optional, Create: `10`, Update: `20`},
6262
}
6363
volumeBlockVolumeReplicasRepresentation = map[string]interface{}{
64-
"availability_domain": acctest.Representation{RepType: acctest.Required, Create: `NyKp:US-ASHBURN-AD-1`},
64+
"availability_domain": acctest.Representation{RepType: acctest.Required, Create: `KvuH:US-ASHBURN-AD-1`},
6565
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`},
6666
}
6767
volumeSourceDetailsRepresentation = map[string]interface{}{

internal/service/core/core_block_volume_replica_data_source.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ func CoreBlockVolumeReplicaDataSource() *schema.Resource {
6565
Type: schema.TypeString,
6666
Computed: true,
6767
},
68+
"volume_group_replica_id": {
69+
Type: schema.TypeString,
70+
Computed: true,
71+
},
6872
},
6973
}
7074
}
@@ -149,5 +153,9 @@ func (s *CoreBlockVolumeReplicaDataSourceCrud) SetData() error {
149153
s.D.Set("time_last_synced", s.Res.TimeLastSynced.String())
150154
}
151155

156+
if s.Res.VolumeGroupReplicaId != nil {
157+
s.D.Set("volume_group_replica_id", *s.Res.VolumeGroupReplicaId)
158+
}
159+
152160
return nil
153161
}

internal/service/core/core_block_volume_replicas_data_source.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@ func CoreBlockVolumeReplicasDataSource() *schema.Resource {
9191
Type: schema.TypeString,
9292
Computed: true,
9393
},
94+
"volume_group_replica_id": {
95+
Type: schema.TypeString,
96+
Computed: true,
97+
},
9498
},
9599
},
96100
},
@@ -207,6 +211,10 @@ func (s *CoreBlockVolumeReplicasDataSourceCrud) SetData() error {
207211
blockVolumeReplica["time_last_synced"] = r.TimeLastSynced.String()
208212
}
209213

214+
if r.VolumeGroupReplicaId != nil {
215+
blockVolumeReplica["volume_group_replica_id"] = *r.VolumeGroupReplicaId
216+
}
217+
210218
resources = append(resources, blockVolumeReplica)
211219
}
212220

internal/service/core/core_boot_volume_replica_data_source.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ func CoreBootVolumeReplicaDataSource() *schema.Resource {
6969
Type: schema.TypeString,
7070
Computed: true,
7171
},
72+
"volume_group_replica_id": {
73+
Type: schema.TypeString,
74+
Computed: true,
75+
},
7276
},
7377
}
7478
}
@@ -157,5 +161,9 @@ func (s *CoreBootVolumeReplicaDataSourceCrud) SetData() error {
157161
s.D.Set("time_last_synced", s.Res.TimeLastSynced.String())
158162
}
159163

164+
if s.Res.VolumeGroupReplicaId != nil {
165+
s.D.Set("volume_group_replica_id", *s.Res.VolumeGroupReplicaId)
166+
}
167+
160168
return nil
161169
}

internal/service/core/core_boot_volume_replicas_data_source.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ func CoreBootVolumeReplicasDataSource() *schema.Resource {
9595
Type: schema.TypeString,
9696
Computed: true,
9797
},
98+
"volume_group_replica_id": {
99+
Type: schema.TypeString,
100+
Computed: true,
101+
},
98102
},
99103
},
100104
},
@@ -215,6 +219,10 @@ func (s *CoreBootVolumeReplicasDataSourceCrud) SetData() error {
215219
bootVolumeReplica["time_last_synced"] = r.TimeLastSynced.String()
216220
}
217221

222+
if r.VolumeGroupReplicaId != nil {
223+
bootVolumeReplica["volume_group_replica_id"] = *r.VolumeGroupReplicaId
224+
}
225+
218226
resources = append(resources, bootVolumeReplica)
219227
}
220228

0 commit comments

Comments
 (0)