Skip to content

Commit 9b96c8f

Browse files
committed
Update DeleteInstance to use InstanceSpec
1 parent 0614560 commit 9b96c8f

File tree

4 files changed

+29
-62
lines changed

4 files changed

+29
-62
lines changed

controllers/openstackcluster_controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,8 @@ func deleteBastion(scope *scope.Scope, cluster *clusterv1.Cluster, openStackClus
222222
}
223223
}
224224

225-
machineSpec := &openStackCluster.Spec.Bastion.Instance
226-
if err = computeService.DeleteInstance(openStackCluster, machineSpec, instanceName, instanceStatus); err != nil {
225+
instanceSpec := bastionToInstanceSpec(openStackCluster, cluster.Name)
226+
if err = computeService.DeleteInstance(openStackCluster, instanceSpec, instanceStatus); err != nil {
227227
handleUpdateOSCError(openStackCluster, errors.Errorf("failed to delete bastion: %v", err))
228228
return errors.Errorf("failed to delete bastion: %v", err)
229229
}

controllers/openstackmachine_controller.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,14 @@ func (r *OpenStackMachineReconciler) reconcileDelete(ctx context.Context, scope
248248
}
249249
}
250250

251-
if err := computeService.DeleteInstance(openStackMachine, &openStackMachine.Spec, openStackMachine.Name, instanceStatus); err != nil {
251+
instanceSpec, err := machineToInstanceSpec(openStackCluster, machine, openStackMachine, "")
252+
if err != nil {
253+
err = errors.Errorf("machine spec is invalid: %v", err)
254+
handleUpdateMachineError(scope.Logger, openStackMachine, err)
255+
return ctrl.Result{}, err
256+
}
257+
258+
if err := computeService.DeleteInstance(openStackMachine, instanceSpec, instanceStatus); err != nil {
252259
handleUpdateMachineError(scope.Logger, openStackMachine, errors.Errorf("error deleting OpenStack instance %s with ID %s: %v", instanceStatus.Name(), instanceStatus.ID(), err))
253260
return ctrl.Result{}, nil
254261
}

pkg/cloud/services/compute/instance.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ func (s *Service) GetManagementPort(openStackCluster *infrav1.OpenStackCluster,
507507
return &allPorts[0], nil
508508
}
509509

510-
func (s *Service) DeleteInstance(eventObject runtime.Object, openStackMachineSpec *infrav1.OpenStackMachineSpec, instanceName string, instanceStatus *InstanceStatus) error {
510+
func (s *Service) DeleteInstance(eventObject runtime.Object, instanceSpec *InstanceSpec, instanceStatus *InstanceStatus) error {
511511
if instanceStatus == nil {
512512
/*
513513
We create a boot-from-volume instance in 2 steps:
@@ -527,9 +527,9 @@ func (s *Service) DeleteInstance(eventObject runtime.Object, openStackMachineSpe
527527
Note that we don't need to separately delete the root volume when deleting the instance because
528528
DeleteOnTermination will ensure it is deleted in that case.
529529
*/
530-
rootVolume := openStackMachineSpec.RootVolume
530+
rootVolume := instanceSpec.RootVolume
531531
if hasRootVolume(rootVolume) {
532-
name := rootVolumeName(instanceName)
532+
name := rootVolumeName(instanceSpec.Name)
533533
volume, err := s.getVolumeByName(name)
534534
if err != nil {
535535
return err

pkg/cloud/services/compute/instance_test.go

Lines changed: 16 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ import (
4040
. "github.com/onsi/gomega"
4141
. "github.com/onsi/gomega/gstruct"
4242
gomegatypes "github.com/onsi/gomega/types"
43-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4443
"k8s.io/apimachinery/pkg/runtime"
4544
"k8s.io/utils/pointer"
4645

@@ -530,7 +529,6 @@ const (
530529

531530
openStackMachineName = "test-openstack-machine"
532531
portName = "test-openstack-machine-0"
533-
namespace = "test-namespace"
534532
imageName = "test-image"
535533
flavorName = "test-flavor"
536534
sshKeyName = "test-ssh-key"
@@ -553,31 +551,6 @@ func getDefaultOpenStackCluster() *infrav1.OpenStackCluster {
553551
}
554552
}
555553

556-
func getDefaultOpenStackMachine() *infrav1.OpenStackMachine {
557-
return &infrav1.OpenStackMachine{
558-
ObjectMeta: metav1.ObjectMeta{
559-
Name: openStackMachineName,
560-
Namespace: namespace,
561-
},
562-
Spec: infrav1.OpenStackMachineSpec{
563-
// ProviderID is set by the controller
564-
// InstanceID is set by the controller
565-
// FloatingIP is only used by the cluster controller for the Bastion
566-
// TODO: Test Networks, Ports, Subnet, and Trunk separately
567-
CloudName: "test-cloud",
568-
Flavor: flavorName,
569-
Image: imageName,
570-
SSHKeyName: sshKeyName,
571-
Tags: []string{"test-tag"},
572-
ServerMetadata: map[string]string{
573-
"test-metadata": "test-value",
574-
},
575-
ConfigDrive: pointer.BoolPtr(true),
576-
ServerGroupID: serverGroupUUID,
577-
},
578-
}
579-
}
580-
581554
func getDefaultInstanceSpec() *InstanceSpec {
582555
return &InstanceSpec{
583556
Name: openStackMachineName,
@@ -1046,15 +1019,6 @@ func TestService_ReconcileInstance(t *testing.T) {
10461019
func TestService_DeleteInstance(t *testing.T) {
10471020
RegisterTestingT(t)
10481021

1049-
const instanceUUID = "7b8a2800-c615-4f52-9b75-d2ba60a2af66"
1050-
const portUUID = "94f3e9cb-89d5-4313-ad6d-44035722342b"
1051-
1052-
const instanceName = "test-instance"
1053-
1054-
getEventObject := func() runtime.Object {
1055-
return &infrav1.OpenStackMachine{}
1056-
}
1057-
10581022
getDefaultInstanceStatus := func() *InstanceStatus {
10591023
return &InstanceStatus{
10601024
server: &ServerExt{
@@ -1065,27 +1029,23 @@ func TestService_DeleteInstance(t *testing.T) {
10651029
}
10661030
}
10671031

1068-
getDefaultOpenStackMachineSpec := func() *infrav1.OpenStackMachineSpec {
1069-
return &getDefaultOpenStackMachine().Spec
1070-
}
1071-
10721032
// *******************
10731033
// START OF TEST CASES
10741034
// *******************
10751035

10761036
tests := []struct {
1077-
name string
1078-
eventObject runtime.Object
1079-
getOpenStackMachineSpec func() *infrav1.OpenStackMachineSpec
1080-
getInstanceStatus func() *InstanceStatus
1081-
expect func(computeRecorder *MockClientMockRecorder, networkRecorder *mock_networking.MockNetworkClientMockRecorder)
1082-
wantErr bool
1037+
name string
1038+
eventObject runtime.Object
1039+
instanceSpec func() *InstanceSpec
1040+
instanceStatus func() *InstanceStatus
1041+
expect func(computeRecorder *MockClientMockRecorder, networkRecorder *mock_networking.MockNetworkClientMockRecorder)
1042+
wantErr bool
10831043
}{
10841044
{
1085-
name: "Defaults",
1086-
eventObject: getEventObject(),
1087-
getOpenStackMachineSpec: getDefaultOpenStackMachineSpec,
1088-
getInstanceStatus: getDefaultInstanceStatus,
1045+
name: "Defaults",
1046+
eventObject: &infrav1.OpenStackMachine{},
1047+
instanceSpec: getDefaultInstanceSpec,
1048+
instanceStatus: getDefaultInstanceStatus,
10891049
expect: func(computeRecorder *MockClientMockRecorder, networkRecorder *mock_networking.MockNetworkClientMockRecorder) {
10901050
computeRecorder.ListAttachedInterfaces(instanceUUID).Return([]attachinterfaces.Interface{
10911051
{
@@ -1109,18 +1069,18 @@ func TestService_DeleteInstance(t *testing.T) {
11091069
},
11101070
{
11111071
name: "Dangling volume",
1112-
eventObject: getEventObject(),
1113-
getOpenStackMachineSpec: func() *infrav1.OpenStackMachineSpec {
1114-
spec := getDefaultOpenStackMachineSpec()
1072+
eventObject: &infrav1.OpenStackMachine{},
1073+
instanceSpec: func() *InstanceSpec {
1074+
spec := getDefaultInstanceSpec()
11151075
spec.RootVolume = &infrav1.RootVolume{
11161076
Size: 50,
11171077
}
11181078
return spec
11191079
},
1120-
getInstanceStatus: func() *InstanceStatus { return nil },
1080+
instanceStatus: func() *InstanceStatus { return nil },
11211081
expect: func(computeRecorder *MockClientMockRecorder, networkRecorder *mock_networking.MockNetworkClientMockRecorder) {
11221082
// Fetch volume by name
1123-
volumeName := fmt.Sprintf("%s-root", instanceName)
1083+
volumeName := fmt.Sprintf("%s-root", openStackMachineName)
11241084
computeRecorder.ListVolumes(volumes.ListOpts{
11251085
AllTenants: false,
11261086
Name: volumeName,
@@ -1157,7 +1117,7 @@ func TestService_DeleteInstance(t *testing.T) {
11571117
"", mockNetworkClient, logr.Discard(),
11581118
),
11591119
}
1160-
if err := s.DeleteInstance(tt.eventObject, tt.getOpenStackMachineSpec(), instanceName, tt.getInstanceStatus()); (err != nil) != tt.wantErr {
1120+
if err := s.DeleteInstance(tt.eventObject, tt.instanceSpec(), tt.instanceStatus()); (err != nil) != tt.wantErr {
11611121
t.Errorf("Service.DeleteInstance() error = %v, wantErr %v", err, tt.wantErr)
11621122
}
11631123
})

0 commit comments

Comments
 (0)