Skip to content

Commit e44120a

Browse files
bfugateravinitp
authored andcommitted
Bug Fix - move capacity_reservation_id update to the same request as shape update
1 parent 2a59957 commit e44120a

File tree

2 files changed

+101
-4
lines changed

2 files changed

+101
-4
lines changed

internal/integrationtest/core_instance_test.go

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -892,6 +892,35 @@ data "oci_kms_keys" "test_keys_dependency_RSA" {
892892
"subnet_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_subnet.test_subnet.id}`},
893893
"state": acctest.Representation{RepType: acctest.Optional, Create: `STOPPED`, Update: `RUNNING`},
894894
}
895+
instanceUpdateShapeAndCapacityReservation = map[string]interface{}{
896+
"availability_domain": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`},
897+
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
898+
"shape": acctest.Representation{RepType: acctest.Required, Create: `VM.Standard2.1`, Update: `VM.Standard2.2`},
899+
"capacity_reservation_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_compute_capacity_reservation.before_test_compute_capacity_reservation.id}`, Update: `${oci_core_compute_capacity_reservation.after_test_compute_capacity_reservation.id}`},
900+
"create_vnic_details": acctest.RepresentationGroup{RepType: acctest.Required, Group: CoreInstanceCreateVnicDetailsRepresentation},
901+
"display_name": acctest.Representation{RepType: acctest.Required, Create: `displayName`},
902+
"source_details": acctest.RepresentationGroup{RepType: acctest.Required, Group: CoreInstanceSourceDetailsRepresentation},
903+
}
904+
createCapacityReservationForInstanceBeforeUpdate = map[string]interface{}{
905+
"availability_domain": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`},
906+
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
907+
"instance_reservation_configs": acctest.RepresentationGroup{RepType: acctest.Required, Group: setCapacityReservationShapeBeforeUpdate},
908+
"is_default_reservation": acctest.Representation{RepType: acctest.Required, Create: `false`},
909+
}
910+
setCapacityReservationShapeBeforeUpdate = map[string]interface{}{
911+
"instance_shape": acctest.Representation{RepType: acctest.Required, Create: `VM.Standard2.1`},
912+
"reserved_count": acctest.Representation{RepType: acctest.Required, Create: `1`},
913+
}
914+
createCapacityReservationForInstanceAfterUpdate = map[string]interface{}{
915+
"availability_domain": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`},
916+
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
917+
"instance_reservation_configs": acctest.RepresentationGroup{RepType: acctest.Required, Group: setCapacityReservationShapeAfterUpdate},
918+
"is_default_reservation": acctest.Representation{RepType: acctest.Required, Create: `false`},
919+
}
920+
setCapacityReservationShapeAfterUpdate = map[string]interface{}{
921+
"instance_shape": acctest.Representation{RepType: acctest.Required, Create: `VM.Standard2.2`},
922+
"reserved_count": acctest.Representation{RepType: acctest.Required, Create: `1`},
923+
}
895924
)
896925

897926
// issue-routing-tag: core/computeSharedOwnershipVmAndBm
@@ -1879,6 +1908,73 @@ func TestCoreInstanceResource_updateBootVolumeKmsKey(t *testing.T) {
18791908
})
18801909
}
18811910

1911+
func TestCoreInstanceResource_updateShapeAndCapacityReservation(t *testing.T) {
1912+
httpreplay.SetScenario("TestCoreInstanceResource_updateShapeAndCapacityReservation")
1913+
defer httpreplay.SaveScenario()
1914+
1915+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
1916+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
1917+
1918+
resourceName := "oci_core_instance.test_instance"
1919+
1920+
capacityReservationConfig :=
1921+
utils.OciImageIdsVariable +
1922+
acctest.GenerateResourceFromRepresentationMap("oci_core_network_security_group", "test_network_security_group", acctest.Required, acctest.Create, CoreNetworkSecurityGroupRepresentation) +
1923+
acctest.GenerateResourceFromRepresentationMap("oci_core_subnet", "test_subnet", acctest.Required, acctest.Create, acctest.RepresentationCopyWithNewProperties(CoreSubnetRepresentation, map[string]interface{}{
1924+
"dns_label": acctest.Representation{RepType: acctest.Required, Create: `dnslabel`},
1925+
})) +
1926+
acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Required, acctest.Create, acctest.RepresentationCopyWithNewProperties(CoreVcnRepresentation, map[string]interface{}{
1927+
"dns_label": acctest.Representation{RepType: acctest.Required, Create: `dnslabel`},
1928+
})) +
1929+
acctest.GenerateResourceFromRepresentationMap("oci_core_vlan", "test_vlan", acctest.Required, acctest.Create,
1930+
acctest.GetUpdatedRepresentationCopy("cidr_block", acctest.Representation{RepType: acctest.Required, Create: `10.0.1.0/30`}, CoreVlanRepresentation)) +
1931+
AvailabilityDomainConfig +
1932+
DefinedTagsDependencies +
1933+
CoreKeyResourceDependencyConfig +
1934+
acctest.ProviderTestConfig() + compartmentIdVariableStr +
1935+
acctest.GenerateResourceFromRepresentationMap("oci_core_compute_capacity_reservation", "before_test_compute_capacity_reservation", acctest.Required, acctest.Create, createCapacityReservationForInstanceBeforeUpdate) +
1936+
acctest.GenerateResourceFromRepresentationMap("oci_core_compute_capacity_reservation", "after_test_compute_capacity_reservation", acctest.Required, acctest.Create, createCapacityReservationForInstanceAfterUpdate)
1937+
1938+
var resId, resId2 string
1939+
instanceCreationConfig := capacityReservationConfig +
1940+
acctest.GenerateResourceFromRepresentationMap("oci_core_instance", "test_instance", acctest.Required, acctest.Create,
1941+
instanceUpdateShapeAndCapacityReservation)
1942+
// Save TF content to Create resource with optional properties.
1943+
acctest.SaveConfigContent(instanceCreationConfig, "core", "instance", t)
1944+
1945+
acctest.ResourceTest(t, testAccCheckCoreInstanceDestroy, []resource.TestStep{
1946+
// verify Create
1947+
{
1948+
Config: instanceCreationConfig,
1949+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
1950+
resource.TestCheckResourceAttr(resourceName, "shape", "VM.Standard2.1"),
1951+
1952+
func(s *terraform.State) (err error) {
1953+
resId, err = acctest.FromInstanceState(s, resourceName, "id")
1954+
return err
1955+
},
1956+
),
1957+
},
1958+
// verify update to add kms key id in source details
1959+
{
1960+
Config: capacityReservationConfig +
1961+
acctest.GenerateResourceFromRepresentationMap("oci_core_instance", "test_instance", acctest.Required, acctest.Update,
1962+
instanceUpdateShapeAndCapacityReservation),
1963+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
1964+
resource.TestCheckResourceAttr(resourceName, "shape", "VM.Standard2.2"),
1965+
1966+
func(s *terraform.State) (err error) {
1967+
resId2, err = acctest.FromInstanceState(s, resourceName, "id")
1968+
if resId != resId2 {
1969+
return fmt.Errorf("resource recreated when it was supposed to be updated")
1970+
}
1971+
return err
1972+
},
1973+
),
1974+
},
1975+
})
1976+
}
1977+
18821978
// this test uses a hard coded cluster placement group due to Platform team will not implement
18831979
// Terraform provider for MVP stage
18841980
func TestCoreInstanceResource_clusterPlacementGroup(t *testing.T) {

internal/service/core/core_instance_resource.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1501,10 +1501,6 @@ func (s *CoreInstanceResourceCrud) Update() error {
15011501
}
15021502
}
15031503

1504-
if capacityReservationId, ok := s.D.GetOkExists("capacity_reservation_id"); ok {
1505-
tmp := capacityReservationId.(string)
1506-
request.CapacityReservationId = &tmp
1507-
}
15081504
if dedicatedVmHostId, ok := s.D.GetOkExists("dedicated_vm_host_id"); ok {
15091505
tmp := dedicatedVmHostId.(string)
15101506
request.DedicatedVmHostId = &tmp
@@ -4075,6 +4071,11 @@ func (s *CoreInstanceResourceCrud) updateOptionsViaWorkRequest() error {
40754071
}
40764072
}
40774073

4074+
if capacityReservationId, ok := s.D.GetOkExists("capacity_reservation_id"); ok {
4075+
tmp := capacityReservationId.(string)
4076+
request.CapacityReservationId = &tmp
4077+
}
4078+
40784079
if platformConfig, ok := s.D.GetOkExists("platform_config"); ok && s.D.HasChange("platform_config") {
40794080
if tmpList := platformConfig.([]interface{}); len(tmpList) > 0 {
40804081
fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "platform_config", 0)

0 commit comments

Comments
 (0)