diff --git a/pkg/cloud/azure/actuators/machine/reconciler.go b/pkg/cloud/azure/actuators/machine/reconciler.go index c384cf65..57b348bd 100644 --- a/pkg/cloud/azure/actuators/machine/reconciler.go +++ b/pkg/cloud/azure/actuators/machine/reconciler.go @@ -800,6 +800,11 @@ func (s *Reconciler) getOrCreateAvailabilitySet() (string, error) { return "", nil } + if s.scope.MachineConfig.SpotVMOptions != nil { + klog.V(4).Infof("MachineSet %s uses spot instances, skipping availability set creation", s.scope.Machine.Name) + return "", nil + } + klog.V(4).Infof("No availability zones were found for %s, an availability set will be created", s.scope.Machine.Name) if err := s.availabilitySetsSvc.CreateOrUpdate(context.Background(), &availabilitysets.Spec{ diff --git a/pkg/cloud/azure/actuators/machine/reconciler_test.go b/pkg/cloud/azure/actuators/machine/reconciler_test.go index 60c91a1a..9ad406d1 100644 --- a/pkg/cloud/azure/actuators/machine/reconciler_test.go +++ b/pkg/cloud/azure/actuators/machine/reconciler_test.go @@ -333,6 +333,7 @@ func TestCreateAvailabilitySet(t *testing.T) { availabilitySetsSvc func() *mock_azure.MockService availabilityZonesSvc func() *mock_azure.MockService inputASName string + spotVMOptions *machinev1.SpotVMOptions }{ { name: "Error when availability zones client fails", @@ -414,6 +415,22 @@ func TestCreateAvailabilitySet(t *testing.T) { return availabilitySetsSvc }, }, + { + name: "Skip availability set creation when using Spot instances", + availabilityZonesSvc: func() *mock_azure.MockService { + availabilityZonesSvc := mock_azure.NewMockService(mockCtrl) + availabilityZonesSvc.EXPECT().Get(gomock.Any(), gomock.Any()).Return([]string{}, nil).Times(1) + return availabilityZonesSvc + }, + availabilitySetsSvc: func() *mock_azure.MockService { + availabilitySetsSvc := mock_azure.NewMockService(mockCtrl) + availabilitySetsSvc.EXPECT().CreateOrUpdate(gomock.Any(), gomock.Any()).Return(nil).Times(0) + return availabilitySetsSvc + }, + spotVMOptions: &machinev1.SpotVMOptions{ + MaxPrice: resource.NewQuantity(-1, resource.DecimalSI), + }, + }, { name: "Skip availability set creation when name was specified in provider spec", labels: map[string]string{}, @@ -486,6 +503,7 @@ func TestCreateAvailabilitySet(t *testing.T) { MachineConfig: &machinev1.AzureMachineProviderSpec{ VMSize: "Standard_D2_v2", AvailabilitySet: tc.inputASName, + SpotVMOptions: tc.spotVMOptions, }, }, }