Skip to content

Commit 0f6b333

Browse files
committed
Don't require an InstanceSpec for DeleteInstance
DeleteInstance requires very little data from InstanceSpec. The 2 methods to create an InstanceSpec, bastionToInstanceSpec and machineToInstanceSpec, require more state than is required by DeleteInstance, and have failure modes which are not relevant to DeleteInstance.
1 parent 18226ed commit 0f6b333

File tree

4 files changed

+12
-26
lines changed

4 files changed

+12
-26
lines changed

controllers/openstackcluster_controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,8 +231,8 @@ func deleteBastion(scope *scope.Scope, cluster *clusterv1.Cluster, openStackClus
231231
}
232232
}
233233

234-
instanceSpec := bastionToInstanceSpec(openStackCluster, cluster.Name)
235-
if err = computeService.DeleteInstance(openStackCluster, instanceSpec, instanceStatus); err != nil {
234+
rootVolume := openStackCluster.Spec.Bastion.Instance.RootVolume
235+
if err = computeService.DeleteInstance(openStackCluster, instanceStatus, instanceName, rootVolume); err != nil {
236236
handleUpdateOSCError(openStackCluster, errors.Errorf("failed to delete bastion: %v", err))
237237
return errors.Errorf("failed to delete bastion: %v", err)
238238
}

controllers/openstackmachine_controller.go

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -278,15 +278,7 @@ func (r *OpenStackMachineReconciler) reconcileDelete(ctx context.Context, scope
278278
}
279279
}
280280

281-
instanceSpec, err := machineToInstanceSpec(openStackCluster, machine, openStackMachine, "")
282-
if err != nil {
283-
err = errors.Errorf("machine spec is invalid: %v", err)
284-
handleUpdateMachineError(scope.Logger, openStackMachine, err)
285-
conditions.MarkFalse(openStackMachine, infrav1.InstanceReadyCondition, infrav1.InvalidMachineSpecReason, clusterv1.ConditionSeverityError, err.Error())
286-
return ctrl.Result{}, err
287-
}
288-
289-
if err := computeService.DeleteInstance(openStackMachine, instanceSpec, instanceStatus); err != nil {
281+
if err := computeService.DeleteInstance(openStackMachine, instanceStatus, openStackMachine.Name, openStackMachine.Spec.RootVolume); err != nil {
290282
handleUpdateMachineError(scope.Logger, openStackMachine, errors.Errorf("error deleting OpenStack instance %s with ID %s: %v", instanceStatus.Name(), instanceStatus.ID(), err))
291283
conditions.MarkFalse(openStackMachine, infrav1.InstanceReadyCondition, infrav1.InstanceDeleteFailedReason, clusterv1.ConditionSeverityError, "Deleting instance failed: %v", err)
292284
return ctrl.Result{}, nil

pkg/cloud/services/compute/instance.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,7 @@ func (s *Service) GetManagementPort(openStackCluster *infrav1.OpenStackCluster,
513513
return &allPorts[0], nil
514514
}
515515

516-
func (s *Service) DeleteInstance(eventObject runtime.Object, instanceSpec *InstanceSpec, instanceStatus *InstanceStatus) error {
516+
func (s *Service) DeleteInstance(eventObject runtime.Object, instanceStatus *InstanceStatus, instanceName string, rootVolume *infrav1.RootVolume) error {
517517
if instanceStatus == nil {
518518
/*
519519
We create a boot-from-volume instance in 2 steps:
@@ -533,9 +533,8 @@ func (s *Service) DeleteInstance(eventObject runtime.Object, instanceSpec *Insta
533533
Note that we don't need to separately delete the root volume when deleting the instance because
534534
DeleteOnTermination will ensure it is deleted in that case.
535535
*/
536-
rootVolume := instanceSpec.RootVolume
537536
if hasRootVolume(rootVolume) {
538-
name := rootVolumeName(instanceSpec.Name)
537+
name := rootVolumeName(instanceName)
539538
volume, err := s.getVolumeByName(name)
540539
if err != nil {
541540
return err

pkg/cloud/services/compute/instance_test.go

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,15 +1031,14 @@ func TestService_DeleteInstance(t *testing.T) {
10311031
tests := []struct {
10321032
name string
10331033
eventObject runtime.Object
1034-
instanceSpec func() *InstanceSpec
10351034
instanceStatus func() *InstanceStatus
1035+
rootVolume *infrav1.RootVolume
10361036
expect func(computeRecorder *MockClientMockRecorder, networkRecorder *mock_networking.MockNetworkClientMockRecorder)
10371037
wantErr bool
10381038
}{
10391039
{
10401040
name: "Defaults",
10411041
eventObject: &infrav1.OpenStackMachine{},
1042-
instanceSpec: getDefaultInstanceSpec,
10431042
instanceStatus: getDefaultInstanceStatus,
10441043
expect: func(computeRecorder *MockClientMockRecorder, networkRecorder *mock_networking.MockNetworkClientMockRecorder) {
10451044
computeRecorder.ListAttachedInterfaces(instanceUUID).Return([]attachinterfaces.Interface{
@@ -1063,16 +1062,12 @@ func TestService_DeleteInstance(t *testing.T) {
10631062
wantErr: false,
10641063
},
10651064
{
1066-
name: "Dangling volume",
1067-
eventObject: &infrav1.OpenStackMachine{},
1068-
instanceSpec: func() *InstanceSpec {
1069-
spec := getDefaultInstanceSpec()
1070-
spec.RootVolume = &infrav1.RootVolume{
1071-
Size: 50,
1072-
}
1073-
return spec
1074-
},
1065+
name: "Dangling volume",
1066+
eventObject: &infrav1.OpenStackMachine{},
10751067
instanceStatus: func() *InstanceStatus { return nil },
1068+
rootVolume: &infrav1.RootVolume{
1069+
Size: 50,
1070+
},
10761071
expect: func(computeRecorder *MockClientMockRecorder, networkRecorder *mock_networking.MockNetworkClientMockRecorder) {
10771072
// Fetch volume by name
10781073
volumeName := fmt.Sprintf("%s-root", openStackMachineName)
@@ -1112,7 +1107,7 @@ func TestService_DeleteInstance(t *testing.T) {
11121107
"", mockNetworkClient, logr.Discard(),
11131108
),
11141109
}
1115-
if err := s.DeleteInstance(tt.eventObject, tt.instanceSpec(), tt.instanceStatus()); (err != nil) != tt.wantErr {
1110+
if err := s.DeleteInstance(tt.eventObject, tt.instanceStatus(), openStackMachineName, tt.rootVolume); (err != nil) != tt.wantErr {
11161111
t.Errorf("Service.DeleteInstance() error = %v, wantErr %v", err, tt.wantErr)
11171112
}
11181113
})

0 commit comments

Comments
 (0)