Skip to content

Commit 3aed153

Browse files
lm-oracleMaxrovr
authored andcommitted
Added - Support for GoldenGate - Resource Locking
1 parent 5471f12 commit 3aed153

26 files changed

+1267
-15
lines changed

examples/goldengate/Certificate/main.tf

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ variable "password" {}
1313
// for certificate - base64 encoded
1414
variable "certificate_content" {}
1515

16+
variable "is_lock_override" {
17+
default = false
18+
}
19+
1620
provider "oci" {
1721
tenancy_ocid = var.tenancy_ocid
1822
user_ocid = var.user_ocid
@@ -40,4 +44,7 @@ resource "oci_golden_gate_deployment_certificate" "certificate" {
4044
deployment_id = oci_golden_gate_deployment.test_deployment.id
4145
key = "certificate"
4246
certificate_content = var.certificate_content
47+
lifecycle {
48+
ignore_changes = [is_lock_override]
49+
}
4350
}

examples/goldengate/Connection/main.tf

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,18 @@ variable "subnet_id" {}
99
variable "vault_id" {}
1010
variable "kms_key_id" {}
1111

12+
variable "locks_type" {
13+
default = "FULL"
14+
}
15+
16+
variable "locks_message" {
17+
default = "message"
18+
}
19+
20+
variable "is_lock_override" {
21+
default = true
22+
}
23+
1224
variable "username" {
1325
default = "admin"
1426
}
@@ -76,4 +88,12 @@ resource "oci_golden_gate_connection" "test_connection"{
7688

7789
#Optional for Postgresql connection_type
7890
private_ip = var.private_ip
91+
locks {
92+
type = var.locks_type
93+
message = var.locks_message
94+
}
95+
is_lock_override = var.is_lock_override
96+
lifecycle {
97+
ignore_changes = [defined_tags, locks, freeform_tags, is_lock_override]
98+
}
7999
}

examples/goldengate/ConnectionAssignment/main.tf

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ variable "host"{
2222
variable "port" {
2323
default = "14"
2424
}
25+
variable "is_lock_override" {
26+
default = false
27+
}
2528
provider "oci" {
2629
tenancy_ocid = var.tenancy_ocid
2730
user_ocid = var.user_ocid
@@ -34,6 +37,10 @@ resource "oci_golden_gate_connection_assignment" "test_connection_assignment"{
3437
#Required
3538
connection_id = oci_golden_gate_connection.test_connection.id
3639
deployment_id = var.deployment_ocid
40+
is_lock_override = var.is_lock_override
41+
lifecycle {
42+
ignore_changes = [is_lock_override]
43+
}
3744
}
3845

3946
resource "oci_golden_gate_connection" "test_connection"{

examples/goldengate/Deployment/main.tf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ resource "oci_golden_gate_deployment_backup" "test_deployment_backup" {
9090
lifecycle {
9191
ignore_changes = [defined_tags, system_tags, freeform_tags]
9292
}
93+
locks {}
9394
}
9495

9596
resource "oci_golden_gate_deployment" "test_deployment" {
@@ -106,6 +107,7 @@ resource "oci_golden_gate_deployment" "test_deployment" {
106107
admin_username = var.deployment_ogg_data_admin_username
107108
deployment_name = var.deployment_ogg_data_deployment_name
108109
}
110+
locks {}
109111
}
110112

111113
resource "oci_golden_gate_deployment" "test_deployment_GOLDENGATE" {

internal/integrationtest/golden_gate_connection_test.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,14 +120,22 @@ var (
120120
"routing_method": acctest.Representation{RepType: acctest.Optional, Create: `SHARED_DEPLOYMENT_ENDPOINT`, Update: `DEDICATED_ENDPOINT`},
121121
}
122122

123+
connectionLocksRepresentation = map[string]interface{}{
124+
"type": acctest.Representation{RepType: acctest.Required, Create: `FULL`},
125+
"message": acctest.Representation{RepType: acctest.Optional, Create: `message`},
126+
}
127+
123128
ConnectionTestDescriptors = []ConnectionTestDescriptor{
124-
// AmazonS3
129+
// AmazonS3, create a locked resource, only for this type. Resource locking is generic it applies the same way for the other types
125130
{connectionType: oci_golden_gate.ConnectionTypeAmazonS3, technologyType: oci_golden_gate.TechnologyTypeAmazonS3,
126131
representation: map[string]interface{}{
127132
// Override compartment to test move compartment too.
128133
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`, Update: `${var.compartment_id_for_move}`},
129134
"access_key_id": acctest.Representation{RepType: acctest.Required, Create: `AKIAIOSFODNN7EXAMPLE`, Update: `AKIAIOSFODNN7UPDATED`},
130135
"secret_access_key": acctest.Representation{RepType: acctest.Required, Create: `mysecret`},
136+
"locks": acctest.RepresentationGroup{RepType: acctest.Optional, Group: connectionLocksRepresentation},
137+
"is_lock_override": acctest.Representation{RepType: acctest.Required, Create: `true`, Update: `true`},
138+
"lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: ignoreDefinedTagsAndLocks},
131139
},
132140
},
133141

@@ -504,6 +512,7 @@ var (
504512
"core_site_xml",
505513
"secret_access_key",
506514
"service_account_key_file",
515+
"is_lock_override",
507516
}
508517
)
509518

@@ -760,6 +769,9 @@ func sweepGoldenGateConnectionResource(compartment string) error {
760769

761770
deleteConnectionRequest.ConnectionId = &connectionId
762771

772+
var overrideLock = true
773+
deleteConnectionRequest.IsLockOverride = &overrideLock
774+
763775
deleteConnectionRequest.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(true, "golden_gate")
764776
_, error := goldenGateClient.DeleteConnection(context.Background(), deleteConnectionRequest)
765777
if error != nil {

internal/integrationtest/golden_gate_deployment_backup_test.go

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,21 @@ func TestGoldenGateDeploymentBackupResource_basic(t *testing.T) {
6868
"lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: ignoreDefinedTagsChangesRepresentation},
6969
}
7070

71+
deploymentBackupLocksRepresentation = map[string]interface{}{
72+
"type": acctest.Representation{RepType: acctest.Required, Create: `FULL`},
73+
"message": acctest.Representation{RepType: acctest.Required, Create: `message`},
74+
}
75+
76+
ignoreDefinedTagsAndLocks = map[string]interface{}{
77+
"ignore_changes": acctest.Representation{RepType: acctest.Required, Create: []string{`locks`, `defined_tags`, `is_lock_override`}},
78+
}
79+
80+
lockedDeploymentBackupRepresentation = acctest.RepresentationCopyWithNewProperties(deploymentBackupRepresentation, map[string]interface{}{
81+
"locks": acctest.RepresentationGroup{RepType: acctest.Required, Group: deploymentBackupLocksRepresentation},
82+
"is_lock_override": acctest.Representation{RepType: acctest.Required, Create: `true`, Update: `true`},
83+
"lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: ignoreDefinedTagsAndLocks},
84+
})
85+
7186
DeploymentBackupRequiredOnlyResource = acctest.GenerateResourceFromRepresentationMap("oci_golden_gate_deployment_backup", "test_deployment_backup", acctest.Required, acctest.Create, deploymentBackupRepresentation)
7287

7388
deploymentBackupDataSourceFilterRepresentation = map[string]interface{}{
@@ -106,10 +121,10 @@ func TestGoldenGateDeploymentBackupResource_basic(t *testing.T) {
106121
acctest.GenerateResourceFromRepresentationMap("oci_golden_gate_deployment_backup", "test_deployment_backup", acctest.Optional, acctest.Create, deploymentBackupRepresentation))
107122

108123
acctest.ResourceTest(t, testAccCheckGoldenGateDeploymentBackupDestroy, []resource.TestStep{
109-
// verify Create
124+
// verify Create with Lock
110125
{
111126
Config: config +
112-
acctest.GenerateResourceFromRepresentationMap("oci_golden_gate_deployment_backup", "test_deployment_backup", acctest.Required, acctest.Create, deploymentBackupRepresentation),
127+
acctest.GenerateResourceFromRepresentationMap("oci_golden_gate_deployment_backup", "test_deployment_backup", acctest.Required, acctest.Create, lockedDeploymentBackupRepresentation),
113128
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
114129
resource.TestCheckResourceAttrSet(resourceName, "bucket"),
115130
resource.TestCheckResourceAttr(resourceName, "compartment_id", testCompartmentId),
@@ -118,6 +133,9 @@ func TestGoldenGateDeploymentBackupResource_basic(t *testing.T) {
118133
resource.TestCheckResourceAttr(resourceName, "display_name", "demoDeploymentBackup"),
119134
resource.TestCheckResourceAttrSet(resourceName, "namespace"),
120135
resource.TestCheckResourceAttr(resourceName, "object", "object"),
136+
resource.TestCheckResourceAttr(resourceName, "locks.0.type", "FULL"),
137+
resource.TestCheckResourceAttr(resourceName, "locks.0.message", "message"),
138+
resource.TestCheckResourceAttrSet(resourceName, "locks.0.time_created"),
121139

122140
func(s *terraform.State) (err error) {
123141
resId, err = acctest.FromInstanceState(s, resourceName, "id")
@@ -126,7 +144,7 @@ func TestGoldenGateDeploymentBackupResource_basic(t *testing.T) {
126144
),
127145
},
128146

129-
// delete before next Create
147+
// delete Locked before next Create
130148
{
131149
Config: config,
132150
},
@@ -334,6 +352,9 @@ func sweepGoldenGateDeploymentBackupResource(compartment string) error {
334352

335353
deleteDeploymentBackupRequest.DeploymentBackupId = &deploymentBackupId
336354

355+
var overrideLock = true
356+
deleteDeploymentBackupRequest.IsLockOverride = &overrideLock
357+
337358
deleteDeploymentBackupRequest.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(true, "golden_gate")
338359
_, error := goldenGateClient.DeleteDeploymentBackup(context.Background(), deleteDeploymentBackupRequest)
339360
if error != nil {

internal/integrationtest/golden_gate_deployment_test.go

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,21 @@ func TestGoldenGateDeploymentResource_basic(t *testing.T) {
144144
"maintenance_window": acctest.RepresentationGroup{RepType: acctest.Required, Group: deploymentMaintenanceWindowRepresentation},
145145
}
146146

147+
deploymentLocksRepresentation = map[string]interface{}{
148+
"type": acctest.Representation{RepType: acctest.Required, Create: `FULL`},
149+
"message": acctest.Representation{RepType: acctest.Optional, Create: `message`},
150+
}
151+
152+
ignoreDefinedTagsAndLocks = map[string]interface{}{
153+
"ignore_changes": acctest.Representation{RepType: acctest.Required, Create: []string{`locks`, `defined_tags`, `is_lock_override`}},
154+
}
155+
156+
lockedDeploymentRepresentation = acctest.RepresentationCopyWithNewProperties(goldenGateDeploymentRepresentation, map[string]interface{}{
157+
"locks": acctest.RepresentationGroup{RepType: acctest.Optional, Group: deploymentLocksRepresentation},
158+
"is_lock_override": acctest.Representation{RepType: acctest.Required, Create: `true`, Update: `true`},
159+
"lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: ignoreDefinedTagsAndLocks},
160+
})
161+
147162
goldenGateDeploymentSingularDataSourceRepresentation = map[string]interface{}{
148163
"deployment_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_golden_gate_deployment.depl_test_ggs_deployment.id}`},
149164
}
@@ -558,36 +573,43 @@ func TestGoldenGateDeploymentResource_basic(t *testing.T) {
558573
Config: config,
559574
},
560575
/* Start/stop/upgrade test*/
561-
// 0. create a new deployment and stop it right after the creation
576+
// 0. create a new and locked deployment and stop it right after the creation
562577
{
563578
Config: config +
564579
acctest.GenerateResourceFromRepresentationMap("oci_golden_gate_deployment", "depl_test_ggs_deployment", acctest.Optional, acctest.Create,
565-
acctest.RepresentationCopyWithNewProperties(goldenGateDeploymentRepresentation, map[string]interface{}{
580+
acctest.RepresentationCopyWithNewProperties(lockedDeploymentRepresentation, map[string]interface{}{
566581
"state": acctest.Representation{RepType: acctest.Optional, Create: string(oci_golden_gate.LifecycleStateInactive)},
567582
"ogg_data": acctest.RepresentationGroup{RepType: acctest.Required, Group: oggDataForUpgradeRepresentation},
568583
})),
569584
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
570585
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
571586
resource.TestCheckResourceAttr(resourceName, "state", string(oci_golden_gate.LifecycleStateInactive)),
572587
resource.TestCheckResourceAttr(resourceName, "ogg_data.0.ogg_version", baseOggVersion),
588+
resource.TestCheckResourceAttr(resourceName, "locks.0.type", "FULL"),
589+
resource.TestCheckResourceAttr(resourceName, "locks.0.message", "message"),
590+
resource.TestCheckResourceAttrSet(resourceName, "locks.0.time_created"),
591+
573592
func(s *terraform.State) (err error) {
574593
resId, err = acctest.FromInstanceState(s, resourceName, "id")
575594
return err
576595
},
577596
),
578597
},
579-
// 1. start the deployment and upgrade it at the same time
598+
// 1. start the locked deployment and upgrade it at the same time
580599
{
581600
Config: config +
582601
acctest.GenerateResourceFromRepresentationMap("oci_golden_gate_deployment", "depl_test_ggs_deployment", acctest.Optional, acctest.Update,
583-
acctest.RepresentationCopyWithNewProperties(goldenGateDeploymentRepresentation, map[string]interface{}{
602+
acctest.RepresentationCopyWithNewProperties(lockedDeploymentRepresentation, map[string]interface{}{
584603
"state": acctest.Representation{RepType: acctest.Optional, Create: string(oci_golden_gate.LifecycleStateActive)},
585604
"ogg_data": acctest.RepresentationGroup{RepType: acctest.Required, Group: oggDataForUpgradeRepresentation},
586605
})),
587606
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
588607
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
589608
resource.TestCheckResourceAttr(resourceName, "state", string(oci_golden_gate.LifecycleStateActive)),
590609
resource.TestCheckResourceAttr(resourceName, "ogg_data.0.ogg_version", upgradedOggVersion),
610+
resource.TestCheckResourceAttr(resourceName, "locks.0.type", "FULL"),
611+
resource.TestCheckResourceAttr(resourceName, "locks.0.message", "message"),
612+
resource.TestCheckResourceAttrSet(resourceName, "locks.0.time_created"),
591613
func(s *terraform.State) (err error) {
592614
resId2, err = acctest.FromInstanceState(s, resourceName, "id")
593615
if resId != resId2 {
@@ -731,6 +753,9 @@ func sweepGoldenGateDeploymentResource(compartment string) error {
731753

732754
deleteDeploymentRequest.DeploymentId = &deploymentId
733755

756+
var overrideLock = true
757+
deleteDeploymentRequest.IsLockOverride = &overrideLock
758+
734759
deleteDeploymentRequest.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(true, "golden_gate")
735760
_, error := goldenGateClient.DeleteDeployment(context.Background(), deleteDeploymentRequest)
736761
if error != nil {

internal/service/golden_gate/golden_gate_connection_assignment_resource.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ func GoldenGateConnectionAssignmentResource() *schema.Resource {
4242
},
4343

4444
// Optional
45+
"is_lock_override": {
46+
Type: schema.TypeBool,
47+
Optional: true,
48+
Computed: true,
49+
ForceNew: true,
50+
},
4551

4652
// Computed
4753
"alias_name": {
@@ -127,6 +133,11 @@ func (s *GoldenGateConnectionAssignmentResourceCrud) Create() error {
127133
request.DeploymentId = &tmp
128134
}
129135

136+
if isLockOverride, ok := s.D.GetOkExists("is_lock_override"); ok {
137+
tmp := isLockOverride.(bool)
138+
request.IsLockOverride = &tmp
139+
}
140+
130141
request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "golden_gate")
131142
response, err := s.Client.CreateConnectionAssignment(context.Background(), request)
132143

@@ -265,6 +276,11 @@ func (s *GoldenGateConnectionAssignmentResourceCrud) Delete() error {
265276
tmp := s.D.Id()
266277
request.ConnectionAssignmentId = &tmp
267278

279+
if isLockOverride, ok := s.D.GetOkExists("is_lock_override"); ok {
280+
tmp := isLockOverride.(bool)
281+
request.IsLockOverride = &tmp
282+
}
283+
268284
request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "golden_gate")
269285

270286
response, err := s.Client.DeleteConnectionAssignment(context.Background(), request)

0 commit comments

Comments
 (0)