Skip to content

Commit 437cb25

Browse files
Merge pull request #1 from Uddipaan-Hazarika/rollback_dsource
rollback_dsource -> dsource_update
2 parents ffa24f8 + ecfd105 commit 437cb25

File tree

5 files changed

+75
-9
lines changed

5 files changed

+75
-9
lines changed

examples/vdb/postgresql/snapshot/main.tf

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,6 @@ resource "delphix_vdb" "example" {
4141
postgresPort = 5434
4242
configSettingsStg = [{ propertyName: "timezone", value:"GMT", commentProperty:false}]
4343
})
44-
additional_mount_points = [{
45-
shared_path = "/",
46-
mount_path = "/work",
47-
environment_id = "environment-123"
48-
}]
4944

5045
post_snapshot {
5146
name = "string"

internal/provider/resource_appdata_dsource.go

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ func resourceAppdataDsource() *schema.Resource {
2626
Type: schema.TypeString,
2727
Optional: true,
2828
},
29+
"rollback_on_failure": {
30+
Type: schema.TypeBool,
31+
Optional: true,
32+
Default: false,
33+
},
2934
"source_value": {
3035
Type: schema.TypeString,
3136
Required: true,
@@ -473,9 +478,28 @@ func resourceAppdataDsourceCreate(ctx context.Context, d *schema.ResourceData, m
473478

474479
tflog.Info(ctx, DLPX+INFO+"Job result is "+job_res)
475480

481+
rollback_on_failure := d.Get("rollback_on_failure").(bool)
482+
476483
if job_res == Failed || job_res == Canceled || job_res == Abandoned {
477-
d.SetId("")
478484
tflog.Error(ctx, DLPX+ERROR+"Job "+job_res+" "+*apiRes.Job.Id+"!")
485+
if rollback_on_failure {
486+
if job_res == Failed {
487+
res := isSnapSyncFailure(*apiRes.Job.Id, ctx, client)
488+
if res {
489+
deleteDiags := resourceDsourceDelete(ctx, d, meta)
490+
if deleteDiags.HasError() {
491+
return deleteDiags
492+
}
493+
d.SetId("")
494+
}
495+
}
496+
} else {
497+
readDiags := resourceDsourceRead(ctx, d, meta)
498+
499+
if readDiags.HasError() {
500+
return readDiags
501+
}
502+
}
479503
return diag.Errorf("[NOT OK] Job %s %s with error %s", *apiRes.Job.Id, job_res, job_err)
480504
}
481505

@@ -491,7 +515,6 @@ func resourceAppdataDsourceCreate(ctx context.Context, d *schema.ResourceData, m
491515
}
492516

493517
func resourceDsourceRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
494-
495518
client := meta.(*apiClient).client
496519

497520
dsource_id := d.Id()
@@ -527,6 +550,12 @@ func resourceDsourceRead(ctx context.Context, d *schema.ResourceData, meta inter
527550
return diag.Errorf("Error occured in type casting.")
528551
}
529552

553+
_, rollback_on_failure_exists := d.GetOk("rollback_on_failure")
554+
if !rollback_on_failure_exists {
555+
// its an import or upgrade, set to default value
556+
d.Set("rollback_on_failure", false)
557+
}
558+
530559
d.Set("id", result.GetId())
531560
d.Set("database_type", result.GetDatabaseType())
532561
d.Set("name", result.GetName())

internal/provider/resource_oracle_dsource.go

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ func resourceOracleDsource() *schema.Resource {
2727
Type: schema.TypeString,
2828
Optional: true,
2929
},
30+
"rollback_on_failure": {
31+
Type: schema.TypeBool,
32+
Optional: true,
33+
Default: false,
34+
},
3035
"source_value": {
3136
Type: schema.TypeString,
3237
Required: true,
@@ -790,9 +795,28 @@ func resourceOracleDsourceCreate(ctx context.Context, d *schema.ResourceData, me
790795

791796
tflog.Info(ctx, DLPX+INFO+"Job result is "+job_res)
792797

798+
rollback_on_failure := d.Get("rollback_on_failure").(bool)
799+
793800
if job_res == Failed || job_res == Canceled || job_res == Abandoned {
794-
d.SetId("")
795801
tflog.Error(ctx, DLPX+ERROR+"Job "+job_res+" "+*apiRes.Job.Id+"!")
802+
if rollback_on_failure {
803+
if job_res == Failed {
804+
res := isSnapSyncFailure(*apiRes.Job.Id, ctx, client)
805+
if res {
806+
deleteDiags := resourceOracleDsourceDelete(ctx, d, meta)
807+
if deleteDiags.HasError() {
808+
return deleteDiags
809+
}
810+
d.SetId("")
811+
}
812+
}
813+
} else {
814+
readDiags := resourceOracleDsourceRead(ctx, d, meta)
815+
816+
if readDiags.HasError() {
817+
return readDiags
818+
}
819+
}
796820
return diag.Errorf("[NOT OK] Job %s %s with error %s", *apiRes.Job.Id, job_res, job_err)
797821
}
798822

@@ -844,6 +868,12 @@ func resourceOracleDsourceRead(ctx context.Context, d *schema.ResourceData, meta
844868
return diag.Errorf("Error occured in type casting.")
845869
}
846870

871+
_, rollback_on_failure_exists := d.GetOk("rollback_on_failure")
872+
if !rollback_on_failure_exists {
873+
// its an import or upgrade, set to default value
874+
d.Set("rollback_on_failure", false)
875+
}
876+
847877
ops_pre_sync_Raw, _ := d.Get("ops_pre_sync").([]interface{})
848878
oldOpsPreSync := toSourceOperationArray(ops_pre_sync_Raw)
849879

internal/provider/resource_vdb.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1592,7 +1592,7 @@ func resourceVdbRead(ctx context.Context, d *schema.ResourceData, meta interface
15921592
d.Set("post_stop", flattenVDbHooks(result.GetHooks().PostStop))
15931593
d.Set("pre_rollback", flattenVDbHooks(result.GetHooks().PreRollback))
15941594
d.Set("post_rollback", flattenVDbHooks(result.GetHooks().PostRollback))
1595-
if !*result.IsAppdata {
1595+
if !result.GetIsAppdata() {
15961596
d.Set("database_name", result.GetDatabaseName())
15971597
}
15981598

internal/provider/utility.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,3 +361,15 @@ func toIntArray(array interface{}) []int32 {
361361
}
362362
return items
363363
}
364+
365+
func isSnapSyncFailure(job_id string, ctx context.Context, client *dctapi.APIClient) bool {
366+
res, httpRes, _ := client.JobsAPI.GetJobById(ctx, job_id).Execute()
367+
if httpRes.StatusCode == 200 && len(res.GetTasks()) != 0 {
368+
tflog.Info(ctx, "Status of task 1 is "+res.GetTasks()[0].GetStatus())
369+
if res.GetTasks()[0].GetStatus() == "COMPLETED" {
370+
tflog.Info(ctx, "rolling back Dsource")
371+
return true
372+
}
373+
}
374+
return false
375+
}

0 commit comments

Comments
 (0)