Skip to content

Commit c007460

Browse files
committed
update admission webhooks
1 parent 0378805 commit c007460

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

api/v1beta2/awsmachine_webhook.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ func (*awsMachineWebhook) ValidateCreate(_ context.Context, obj runtime.Object)
7878
allErrs = append(allErrs, r.Spec.AdditionalTags.Validate()...)
7979
allErrs = append(allErrs, r.validateNetworkElasticIPPool()...)
8080
allErrs = append(allErrs, r.validateInstanceMarketType()...)
81+
allErrs = append(allErrs, r.validateCapacityReservation()...)
8182

8283
return nil, aggregateObjErrors(r.GroupVersionKind().GroupKind(), r.Name, allErrs)
8384
}
@@ -378,6 +379,14 @@ func (r *AWSMachine) validateNetworkElasticIPPool() field.ErrorList {
378379
return allErrs
379380
}
380381

382+
func (r *AWSMachine) validateCapacityReservation() field.ErrorList {
383+
var allErrs field.ErrorList
384+
if r.Spec.CapacityReservationID != nil && r.Spec.CapacityReservationPreference != CapacityReservationPreferenceOnly || r.Spec.CapacityReservationPreference == "" {
385+
allErrs = append(allErrs, field.Forbidden(field.NewPath("spec", "capacityReservationPreference"), "capacityReservationPreference may only be set to capacity-reservations-only when a target reservation is specified"))
386+
}
387+
return allErrs
388+
}
389+
381390
func (r *AWSMachine) validateInstanceMarketType() field.ErrorList {
382391
var allErrs field.ErrorList
383392
if r.Spec.MarketType == MarketTypeCapacityBlock && r.Spec.SpotMarketOptions != nil {

api/v1beta2/awsmachine_webhook_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,38 @@ func TestAWSMachineCreate(t *testing.T) {
261261
},
262262
wantErr: false,
263263
},
264+
{
265+
name: "invalid case, CapacityReservationId is set and CapacityReservationPreference is not `capacity-reservation-only`",
266+
machine: &AWSMachine{
267+
Spec: AWSMachineSpec{
268+
InstanceType: "test",
269+
CapacityReservationID: aws.String("cr-12345678901234567"),
270+
CapacityReservationPreference: CapacityReservationPreferenceNone,
271+
},
272+
},
273+
wantErr: true,
274+
},
275+
{
276+
name: "valid CapacityReservationId is set and CapacityReservationPreference is not specified",
277+
machine: &AWSMachine{
278+
Spec: AWSMachineSpec{
279+
InstanceType: "test",
280+
CapacityReservationID: aws.String("cr-12345678901234567"),
281+
},
282+
},
283+
wantErr: false,
284+
},
285+
{
286+
name: "valid CapacityReservationId is set and CapacityReservationPreference is `capacity-reservation-only`",
287+
machine: &AWSMachine{
288+
Spec: AWSMachineSpec{
289+
InstanceType: "test",
290+
CapacityReservationID: aws.String("cr-12345678901234567"),
291+
CapacityReservationPreference: CapacityReservationPreferenceOnly,
292+
},
293+
},
294+
wantErr: false,
295+
},
264296
{
265297
name: "empty instance type not allowed",
266298
machine: &AWSMachine{

0 commit comments

Comments
 (0)