Skip to content

Commit 442ab82

Browse files
abrafi2024sagarp337
authored andcommitted
Added - Support for IPA-Graceful Termination of Instance in Instance Pool
1 parent 46c3f3e commit 442ab82

9 files changed

+474
-139
lines changed

internal/integrationtest/core_instance_pool_test.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ var (
5555
"defined_tags": acctest.Representation{RepType: acctest.Optional, Create: `${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "value")}`, Update: `${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "updatedValue")}`},
5656
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `backend-servers-pool`, Update: `displayName2`},
5757
"freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}},
58+
"lifecycle_management": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstancePoolLifecycleManagementRepresentation},
5859
"load_balancers": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstancePoolLoadBalancersRepresentation},
5960
"instance_display_name_formatter": acctest.Representation{RepType: acctest.Optional, Create: `host-$${launchCount}`, Update: `host2-$${launchCount}`},
6061
"instance_hostname_formatter": acctest.Representation{RepType: acctest.Optional, Create: `host-$${launchCount}`, Update: `host2-$${launchCount}`},
@@ -124,6 +125,11 @@ var (
124125
"primary_subnet_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_subnet.test_subnet.id}`},
125126
"secondary_vnic_subnets": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstancePoolPlacementConfigurationsSecondaryVnicSubnetsRepresentation},
126127
}
128+
129+
CoreInstancePoolLifecycleManagementRepresentation = map[string]interface{}{
130+
"lifecycle_actions": acctest.RepresentationGroup{RepType: acctest.Required, Group: CoreInstancePoolLifecycleManagementLifecycleActionsRepresentation},
131+
}
132+
127133
CoreInstancePoolPlacementConfigurationsRepresentationIpv6 = map[string]interface{}{
128134
"availability_domain": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`},
129135
"fault_domains": acctest.Representation{RepType: acctest.Optional, Create: []string{`FAULT-DOMAIN-1`}, Update: []string{`FAULT-DOMAIN-2`}},
@@ -186,6 +192,11 @@ var (
186192
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `backend-servers`, Update: `displayName2`},
187193
"freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}},
188194
}
195+
196+
CoreInstancePoolLifecycleManagementLifecycleActionsRepresentation = map[string]interface{}{
197+
"pre_termination": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstancePoolLifecycleManagementLifecycleActionsPreTerminationRepresentation},
198+
}
199+
189200
CoreInstancePoolInstanceConfigurationInstanceDetailsPoolRepresentation = map[string]interface{}{
190201
"instance_type": acctest.Representation{RepType: acctest.Required, Create: `compute`},
191202
"secondary_vnics": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstancePoolInstanceConfigurationInstanceDetailsSecondaryVnicsPoolRepresentation},
@@ -196,6 +207,17 @@ var (
196207
//the display_name should be the same as in the secondary_vnic_subnets
197208
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `backend-servers-pool`},
198209
}
210+
211+
CoreInstancePoolLifecycleManagementLifecycleActionsPreTerminationRepresentation = map[string]interface{}{
212+
"is_enabled": acctest.Representation{RepType: acctest.Required, Create: `false`, Update: `true`},
213+
"on_timeout": acctest.RepresentationGroup{RepType: acctest.Required, Group: CoreInstancePoolLifecycleManagementLifecycleActionsPreTerminationOnTimeoutRepresentation},
214+
"timeout": acctest.Representation{RepType: acctest.Required, Create: `10`, Update: `11`},
215+
}
216+
CoreInstancePoolLifecycleManagementLifecycleActionsPreTerminationOnTimeoutRepresentation = map[string]interface{}{
217+
"preserve_block_volume_mode": acctest.Representation{RepType: acctest.Required, Create: `PRESERVE_ALWAYS`, Update: `PRESERVE_ON_TIMEOUT`},
218+
"preserve_boot_volume_mode": acctest.Representation{RepType: acctest.Required, Create: `PRESERVE_ALWAYS`, Update: `PRESERVE_ON_TIMEOUT`},
219+
}
220+
199221
CoreInstancePoolInstanceConfigurationInstanceDetailsLaunchDetailsPoolRepresentation = map[string]interface{}{
200222
"compartment_id": acctest.Representation{RepType: acctest.Optional, Create: `${var.compartment_id}`},
201223
"create_vnic_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstancePoolInstanceConfigurationInstanceDetailsLaunchDetailsCreateVnicDetailsPoolRepresentation},
@@ -330,6 +352,14 @@ func TestCoreInstancePoolResource_basic(t *testing.T) {
330352
resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"),
331353
resource.TestCheckResourceAttrSet(resourceName, "id"),
332354
resource.TestCheckResourceAttrSet(resourceName, "instance_configuration_id"),
355+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.#", "1"),
356+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.#", "1"),
357+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.#", "1"),
358+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.is_enabled", "false"),
359+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.on_timeout.#", "1"),
360+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.on_timeout.0.preserve_block_volume_mode", "PRESERVE_ALWAYS"),
361+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.on_timeout.0.preserve_boot_volume_mode", "PRESERVE_ALWAYS"),
362+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.timeout", "10"),
333363
resource.TestCheckResourceAttr(resourceName, "instance_display_name_formatter", "host-${launchCount}"),
334364
resource.TestCheckResourceAttr(resourceName, "instance_hostname_formatter", "host-${launchCount}"),
335365
resource.TestCheckResourceAttr(resourceName, "load_balancers.#", "1"),
@@ -376,6 +406,14 @@ func TestCoreInstancePoolResource_basic(t *testing.T) {
376406
resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"),
377407
resource.TestCheckResourceAttrSet(resourceName, "id"),
378408
resource.TestCheckResourceAttrSet(resourceName, "instance_configuration_id"),
409+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.#", "1"),
410+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.#", "1"),
411+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.#", "1"),
412+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.is_enabled", "false"),
413+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.on_timeout.#", "1"),
414+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.on_timeout.0.preserve_block_volume_mode", "PRESERVE_ALWAYS"),
415+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.on_timeout.0.preserve_boot_volume_mode", "PRESERVE_ALWAYS"),
416+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.timeout", "10"),
379417
resource.TestCheckResourceAttr(resourceName, "instance_display_name_formatter", "host-${launchCount}"),
380418
resource.TestCheckResourceAttr(resourceName, "instance_hostname_formatter", "host-${launchCount}"),
381419
resource.TestCheckResourceAttr(resourceName, "load_balancers.#", "1"),
@@ -417,6 +455,14 @@ func TestCoreInstancePoolResource_basic(t *testing.T) {
417455
resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"),
418456
resource.TestCheckResourceAttrSet(resourceName, "id"),
419457
resource.TestCheckResourceAttrSet(resourceName, "instance_configuration_id"),
458+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.#", "1"),
459+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.#", "1"),
460+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.#", "1"),
461+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.is_enabled", "true"),
462+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.on_timeout.#", "1"),
463+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.on_timeout.0.preserve_block_volume_mode", "PRESERVE_ON_TIMEOUT"),
464+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.on_timeout.0.preserve_boot_volume_mode", "PRESERVE_ON_TIMEOUT"),
465+
resource.TestCheckResourceAttr(resourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.timeout", "11"),
420466
resource.TestCheckResourceAttr(resourceName, "instance_display_name_formatter", "host2-${launchCount}"),
421467
resource.TestCheckResourceAttr(resourceName, "instance_hostname_formatter", "host2-${launchCount}"),
422468
resource.TestCheckResourceAttr(resourceName, "load_balancers.#", "1"),
@@ -700,6 +746,14 @@ func TestCoreInstancePoolResource_basic(t *testing.T) {
700746
resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "displayName2"),
701747
resource.TestCheckResourceAttr(singularDatasourceName, "freeform_tags.%", "1"),
702748
resource.TestCheckResourceAttrSet(singularDatasourceName, "id"),
749+
resource.TestCheckResourceAttr(singularDatasourceName, "lifecycle_management.#", "1"),
750+
resource.TestCheckResourceAttr(singularDatasourceName, "lifecycle_management.0.lifecycle_actions.#", "1"),
751+
resource.TestCheckResourceAttr(singularDatasourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.#", "1"),
752+
resource.TestCheckResourceAttr(singularDatasourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.is_enabled", "true"),
753+
resource.TestCheckResourceAttr(singularDatasourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.on_timeout.#", "1"),
754+
resource.TestCheckResourceAttr(singularDatasourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.on_timeout.0.preserve_block_volume_mode", "PRESERVE_ON_TIMEOUT"),
755+
resource.TestCheckResourceAttr(singularDatasourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.on_timeout.0.preserve_boot_volume_mode", "PRESERVE_ON_TIMEOUT"),
756+
resource.TestCheckResourceAttr(singularDatasourceName, "lifecycle_management.0.lifecycle_actions.0.pre_termination.0.timeout", "11"),
703757
resource.TestCheckResourceAttr(singularDatasourceName, "instance_display_name_formatter", "host2-${launchCount}"),
704758
resource.TestCheckResourceAttr(singularDatasourceName, "instance_hostname_formatter", "host2-${launchCount}"),
705759
resource.TestCheckResourceAttr(singularDatasourceName, "load_balancers.#", "1"),

internal/service/core/core_instance_pool_data_source.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,12 @@ func (s *CoreInstancePoolDataSourceCrud) SetData() error {
9292
s.D.Set("instance_hostname_formatter", *s.Res.InstanceHostnameFormatter)
9393
}
9494

95+
if s.Res.LifecycleManagement != nil {
96+
s.D.Set("lifecycle_management", []interface{}{InstancePoolLifecycleManagementDetailsToMap(s.Res.LifecycleManagement)})
97+
} else {
98+
s.D.Set("lifecycle_management", nil)
99+
}
100+
95101
loadBalancers := []interface{}{}
96102
for _, item := range s.Res.LoadBalancers {
97103
if item.LifecycleState != oci_core.InstancePoolLoadBalancerAttachmentLifecycleStateDetached {

0 commit comments

Comments
 (0)