@@ -181,6 +181,12 @@ func IntegrationIntegrationInstanceResource() *schema.Resource {
181181 StateFunc : tfresource .GetMd5Hash ,
182182 Sensitive : true ,
183183 },
184+ "is_disaster_recovery_enabled" : {
185+ Type : schema .TypeBool ,
186+ Optional : true ,
187+ Computed : true ,
188+ ForceNew : true ,
189+ },
184190 "is_file_server_enabled" : {
185191 Type : schema .TypeBool ,
186192 Optional : true ,
@@ -282,12 +288,16 @@ func IntegrationIntegrationInstanceResource() *schema.Resource {
282288 Type : schema .TypeInt ,
283289 Optional : true ,
284290 },
285-
286291 // "remove_oracle_managed_custom_endpoint_trigger": {
287292 // Type: schema.TypeInt,
288293 // Optional: true,
289294 // },
290295
296+ "failover_trigger" : {
297+ Type : schema .TypeInt ,
298+ Optional : true ,
299+ },
300+
291301 // Computed
292302 "attachments" : {
293303 Type : schema .TypeList ,
@@ -322,6 +332,56 @@ func IntegrationIntegrationInstanceResource() *schema.Resource {
322332 },
323333 },
324334 },
335+ "disaster_recovery_details" : {
336+ Type : schema .TypeList ,
337+ Computed : true ,
338+ Elem : & schema.Resource {
339+ Schema : map [string ]* schema.Schema {
340+ // Required
341+
342+ // Optional
343+
344+ // Computed
345+ "cross_region_integration_instance_details" : {
346+ Type : schema .TypeList ,
347+ Computed : true ,
348+ Elem : & schema.Resource {
349+ Schema : map [string ]* schema.Schema {
350+ // Required
351+
352+ // Optional
353+
354+ // Computed
355+ "id" : {
356+ Type : schema .TypeString ,
357+ Computed : true ,
358+ },
359+ "region" : {
360+ Type : schema .TypeString ,
361+ Computed : true ,
362+ },
363+ "role" : {
364+ Type : schema .TypeString ,
365+ Computed : true ,
366+ },
367+ "time_role_changed" : {
368+ Type : schema .TypeString ,
369+ Computed : true ,
370+ },
371+ },
372+ },
373+ },
374+ "regional_instance_url" : {
375+ Type : schema .TypeString ,
376+ Computed : true ,
377+ },
378+ "role" : {
379+ Type : schema .TypeString ,
380+ Computed : true ,
381+ },
382+ },
383+ },
384+ },
325385 "data_retention_period" : {
326386 Type : schema .TypeString ,
327387 Computed : true ,
@@ -367,6 +427,10 @@ func IntegrationIntegrationInstanceResource() *schema.Resource {
367427 Type : schema .TypeString ,
368428 Computed : true ,
369429 },
430+ "lifecycle_details" : {
431+ Type : schema .TypeString ,
432+ Computed : true ,
433+ },
370434 "private_endpoint_outbound_connection" : {
371435 Type : schema .TypeList ,
372436 Computed : true ,
@@ -445,6 +509,14 @@ func createIntegrationIntegrationInstance(d *schema.ResourceData, m interface{})
445509 return err
446510 }
447511 }
512+
513+ if _ , ok := sync .D .GetOkExists ("failover_trigger" ); ok {
514+ err := sync .DisasterRecoveryFailover ()
515+ if err != nil {
516+ return err
517+ }
518+ }
519+
448520 var powerOff = false
449521 if configState , ok := sync .D .GetOkExists ("state" ); ok {
450522 wantedState := oci_integration .IntegrationInstanceLifecycleStateEnum (strings .ToUpper (configState .(string )))
@@ -538,6 +610,22 @@ func updateIntegrationIntegrationInstance(d *schema.ResourceData, m interface{})
538610 }
539611 }
540612
613+ if _ , ok := sync .D .GetOkExists ("failover_trigger" ); ok && sync .D .HasChange ("failover_trigger" ) {
614+ oldRaw , newRaw := sync .D .GetChange ("failover_trigger" )
615+ oldValue := oldRaw .(int )
616+ newValue := newRaw .(int )
617+ if oldValue < newValue {
618+ err := sync .DisasterRecoveryFailover ()
619+
620+ if err != nil {
621+ return err
622+ }
623+ } else {
624+ sync .D .Set ("failover_trigger" , oldRaw )
625+ return fmt .Errorf ("new value of trigger should be greater than the old value" )
626+ }
627+ }
628+
541629 if err := tfresource .UpdateResource (d , sync ); err != nil {
542630 return err
543631 }
@@ -675,6 +763,11 @@ func (s *IntegrationIntegrationInstanceResourceCrud) Create() error {
675763 request .IsByol = & tmp
676764 }
677765
766+ if isDisasterRecoveryEnabled , ok := s .D .GetOkExists ("is_disaster_recovery_enabled" ); ok {
767+ tmp := isDisasterRecoveryEnabled .(bool )
768+ request .IsDisasterRecoveryEnabled = & tmp
769+ }
770+
678771 if isFileServerEnabled , ok := s .D .GetOkExists ("is_file_server_enabled" ); ok {
679772 tmp := isFileServerEnabled .(bool )
680773 request .IsFileServerEnabled = & tmp
@@ -1025,6 +1118,12 @@ func (s *IntegrationIntegrationInstanceResourceCrud) SetData() error {
10251118 s .D .Set ("defined_tags" , tfresource .DefinedTagsToMap (s .Res .DefinedTags ))
10261119 }
10271120
1121+ if s .Res .DisasterRecoveryDetails != nil {
1122+ s .D .Set ("disaster_recovery_details" , []interface {}{DisasterRecoveryDetailsToMap (s .Res .DisasterRecoveryDetails )})
1123+ } else {
1124+ s .D .Set ("disaster_recovery_details" , nil )
1125+ }
1126+
10281127 if s .Res .DisplayName != nil {
10291128 s .D .Set ("display_name" , * s .Res .DisplayName )
10301129 }
@@ -1051,6 +1150,10 @@ func (s *IntegrationIntegrationInstanceResourceCrud) SetData() error {
10511150 s .D .Set ("is_byol" , * s .Res .IsByol )
10521151 }
10531152
1153+ if s .Res .IsDisasterRecoveryEnabled != nil {
1154+ s .D .Set ("is_disaster_recovery_enabled" , * s .Res .IsDisasterRecoveryEnabled )
1155+ }
1156+
10541157 if s .Res .IsFileServerEnabled != nil {
10551158 s .D .Set ("is_file_server_enabled" , * s .Res .IsFileServerEnabled )
10561159 }
@@ -1059,6 +1162,10 @@ func (s *IntegrationIntegrationInstanceResourceCrud) SetData() error {
10591162 s .D .Set ("is_visual_builder_enabled" , * s .Res .IsVisualBuilderEnabled )
10601163 }
10611164
1165+ if s .Res .LifecycleDetails != nil {
1166+ s .D .Set ("lifecycle_details" , * s .Res .LifecycleDetails )
1167+ }
1168+
10621169 if s .Res .MessagePacks != nil {
10631170 s .D .Set ("message_packs" , * s .Res .MessagePacks )
10641171 }
@@ -1222,6 +1329,29 @@ func (s *IntegrationIntegrationInstanceResourceCrud) RemoveOracleManagedCustomEn
12221329 return nil
12231330}
12241331
1332+ func (s * IntegrationIntegrationInstanceResourceCrud ) DisasterRecoveryFailover () error {
1333+ request := oci_integration.DisasterRecoveryFailoverRequest {}
1334+
1335+ idTmp := s .D .Id ()
1336+ request .IntegrationInstanceId = & idTmp
1337+
1338+ request .RequestMetadata .RetryPolicy = tfresource .GetRetryPolicy (s .DisableNotFoundRetries , "integration" )
1339+
1340+ _ , err := s .Client .DisasterRecoveryFailover (context .Background (), request )
1341+ if err != nil {
1342+ return err
1343+ }
1344+
1345+ if waitErr := tfresource .WaitForUpdatedState (s .D , s ); waitErr != nil {
1346+ return waitErr
1347+ }
1348+
1349+ val := s .D .Get ("failover_trigger" )
1350+ s .D .Set ("failover_trigger" , val )
1351+
1352+ return nil
1353+ }
1354+
12251355func AttachmentDetailsToMap (obj oci_integration.AttachmentDetails ) map [string ]interface {} {
12261356 result := map [string ]interface {}{}
12271357
@@ -1327,7 +1457,41 @@ func CustomEndpointDetailsToMap(obj *oci_integration.CustomEndpointDetails) map[
13271457 result ["hostname" ] = string (* obj .Hostname )
13281458 }
13291459
1330- result ["managed_type" ] = string (obj .ManagedType )
1460+ return result
1461+ }
1462+
1463+ func CrossRegionIntegrationInstanceDetailsToMap (obj * oci_integration.CrossRegionIntegrationInstanceDetails ) map [string ]interface {} {
1464+ result := map [string ]interface {}{}
1465+
1466+ if obj .Id != nil {
1467+ result ["id" ] = string (* obj .Id )
1468+ }
1469+
1470+ if obj .Region != nil {
1471+ result ["region" ] = string (* obj .Region )
1472+ }
1473+
1474+ result ["role" ] = string (obj .Role )
1475+
1476+ if obj .TimeRoleChanged != nil {
1477+ result ["time_role_changed" ] = obj .TimeRoleChanged .String ()
1478+ }
1479+
1480+ return result
1481+ }
1482+
1483+ func DisasterRecoveryDetailsToMap (obj * oci_integration.DisasterRecoveryDetails ) map [string ]interface {} {
1484+ result := map [string ]interface {}{}
1485+
1486+ if obj .CrossRegionIntegrationInstanceDetails != nil {
1487+ result ["cross_region_integration_instance_details" ] = []interface {}{CrossRegionIntegrationInstanceDetailsToMap (obj .CrossRegionIntegrationInstanceDetails )}
1488+ }
1489+
1490+ if obj .RegionalInstanceUrl != nil {
1491+ result ["regional_instance_url" ] = string (* obj .RegionalInstanceUrl )
1492+ }
1493+
1494+ result ["role" ] = string (obj .Role )
13311495
13321496 return result
13331497}
0 commit comments