Skip to content

Commit 13f79e5

Browse files
committed
aws dedicated host test updates
1 parent 4450fad commit 13f79e5

1 file changed

Lines changed: 158 additions & 37 deletions

File tree

pkg/webhooks/machine_webhook_test.go

Lines changed: 158 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -326,15 +326,83 @@ func TestMachineCreation(t *testing.T) {
326326
ID: ptr.To[string]("ami"),
327327
},
328328
InstanceType: "test",
329-
HostPlacement: &machinev1beta1.HostPlacement{
330-
Affinity: ptr.To(machinev1beta1.HostAffinityAnyAvailable),
329+
Placement: machinev1beta1.Placement{
330+
Tenancy: machinev1beta1.HostTenancy,
331+
Host: &machinev1beta1.HostPlacement{
332+
Affinity: ptr.To(machinev1beta1.HostAffinityAnyAvailable),
333+
},
331334
},
332335
},
333336
},
334337
expectedError: "",
335338
},
336339
{
337-
name: "configure host placement with invalid affinity",
340+
name: "configure host placement with AnyAvailable affinity and with ID",
341+
platformType: osconfigv1.AWSPlatformType,
342+
clusterID: "aws-cluster",
343+
providerSpecValue: &kruntime.RawExtension{
344+
Object: &machinev1beta1.AWSMachineProviderConfig{
345+
AMI: machinev1beta1.AWSResourceReference{ID: ptr.To[string]("ami")},
346+
InstanceType: "test",
347+
Placement: machinev1beta1.Placement{
348+
Tenancy: machinev1beta1.HostTenancy,
349+
Host: &machinev1beta1.HostPlacement{
350+
Affinity: ptr.To(machinev1beta1.HostAffinityAnyAvailable),
351+
DedicatedHost: &machinev1beta1.DedicatedHost{
352+
ID: "h-1234567890abcdef0",
353+
},
354+
},
355+
},
356+
},
357+
},
358+
expectedError: "",
359+
},
360+
{
361+
name: "configure host placement with AnyAvailable affinity and without ID",
362+
platformType: osconfigv1.AWSPlatformType,
363+
clusterID: "aws-cluster",
364+
providerSpecValue: &kruntime.RawExtension{
365+
Object: &machinev1beta1.AWSMachineProviderConfig{
366+
AMI: machinev1beta1.AWSResourceReference{
367+
ID: ptr.To[string]("ami"),
368+
},
369+
InstanceType: "test",
370+
Placement: machinev1beta1.Placement{
371+
Tenancy: machinev1beta1.HostTenancy,
372+
Host: &machinev1beta1.HostPlacement{
373+
Affinity: ptr.To(machinev1beta1.HostAffinityDedicatedHost),
374+
DedicatedHost: &machinev1beta1.DedicatedHost{},
375+
},
376+
},
377+
},
378+
},
379+
expectedError: "admission webhook \"validation.machine.machine.openshift.io\" denied the request: spec.placement.host.dedicatedHost.id: Required value: id is required and must start with 'h-' followed by 17 lowercase hexadecimal characters (0-9 and a-f)",
380+
},
381+
{
382+
name: "configure host placement with AnyAvailable affinity and empty ID",
383+
platformType: osconfigv1.AWSPlatformType,
384+
clusterID: "aws-cluster",
385+
providerSpecValue: &kruntime.RawExtension{
386+
Object: &machinev1beta1.AWSMachineProviderConfig{
387+
AMI: machinev1beta1.AWSResourceReference{
388+
ID: ptr.To[string]("ami"),
389+
},
390+
InstanceType: "test",
391+
Placement: machinev1beta1.Placement{
392+
Tenancy: machinev1beta1.HostTenancy,
393+
Host: &machinev1beta1.HostPlacement{
394+
Affinity: ptr.To(machinev1beta1.HostAffinityDedicatedHost),
395+
DedicatedHost: &machinev1beta1.DedicatedHost{
396+
ID: "",
397+
},
398+
},
399+
},
400+
},
401+
},
402+
expectedError: "admission webhook \"validation.machine.machine.openshift.io\" denied the request: spec.placement.host.dedicatedHost.id: Required value: id is required and must start with 'h-' followed by 17 lowercase hexadecimal characters (0-9 and a-f)",
403+
},
404+
{
405+
name: "configure host placement with AnyAvailable affinity and invalid ID",
338406
platformType: osconfigv1.AWSPlatformType,
339407
clusterID: "aws-cluster",
340408
providerSpecValue: &kruntime.RawExtension{
@@ -343,15 +411,21 @@ func TestMachineCreation(t *testing.T) {
343411
ID: ptr.To[string]("ami"),
344412
},
345413
InstanceType: "test",
346-
HostPlacement: &machinev1beta1.HostPlacement{
347-
Affinity: ptr.To(machinev1beta1.HostAffinity("invalid")),
414+
Placement: machinev1beta1.Placement{
415+
Tenancy: machinev1beta1.HostTenancy,
416+
Host: &machinev1beta1.HostPlacement{
417+
Affinity: ptr.To(machinev1beta1.HostAffinityAnyAvailable),
418+
DedicatedHost: &machinev1beta1.DedicatedHost{
419+
ID: "invalid",
420+
},
421+
},
348422
},
349423
},
350424
},
351-
expectedError: "admission webhook \"validation.machine.machine.openshift.io\" denied the request: spec.hostPlacement.affinity: Invalid value: \"invalid\": affinity must be either AnyAvailable or DedicatedHost",
425+
expectedError: "admission webhook \"validation.machine.machine.openshift.io\" denied the request: spec.placement.host.dedicatedHost.id: Invalid value: \"invalid\": id must start with 'h-' followed by 17 lowercase hexadecimal characters (0-9 and a-f)",
352426
},
353427
{
354-
name: "configure host placement dedicatedHost without dedicatedHost",
428+
name: "configure host placement with invalid affinity",
355429
platformType: osconfigv1.AWSPlatformType,
356430
clusterID: "aws-cluster",
357431
providerSpecValue: &kruntime.RawExtension{
@@ -360,15 +434,18 @@ func TestMachineCreation(t *testing.T) {
360434
ID: ptr.To[string]("ami"),
361435
},
362436
InstanceType: "test",
363-
HostPlacement: &machinev1beta1.HostPlacement{
364-
Affinity: ptr.To(machinev1beta1.HostAffinityDedicatedHost),
437+
Placement: machinev1beta1.Placement{
438+
Tenancy: machinev1beta1.HostTenancy,
439+
Host: &machinev1beta1.HostPlacement{
440+
Affinity: ptr.To(machinev1beta1.HostAffinity("invalid")),
441+
},
365442
},
366443
},
367444
},
368-
expectedError: "admission webhook \"validation.machine.machine.openshift.io\" denied the request: spec.hostPlacement.dedicatedHost: Required value: dedicatedHost is required when affinity is DedicatedHost",
445+
expectedError: "admission webhook \"validation.machine.machine.openshift.io\" denied the request: spec.placement.host.affinity: Invalid value: \"invalid\": hostAffinity must be either AnyAvailable or DedicatedHost",
369446
},
370447
{
371-
name: "configure host placement dedicatedHost with valid ID",
448+
name: "configure host placement with DedicatedHost affinity and valid ID",
372449
platformType: osconfigv1.AWSPlatformType,
373450
clusterID: "aws-cluster",
374451
providerSpecValue: &kruntime.RawExtension{
@@ -377,79 +454,121 @@ func TestMachineCreation(t *testing.T) {
377454
ID: ptr.To[string]("ami"),
378455
},
379456
InstanceType: "test",
380-
HostPlacement: &machinev1beta1.HostPlacement{
381-
Affinity: ptr.To(machinev1beta1.HostAffinityDedicatedHost),
382-
DedicatedHost: &machinev1beta1.DedicatedHost{ID: "h-1234567890abcdef0"},
457+
Placement: machinev1beta1.Placement{
458+
Tenancy: machinev1beta1.HostTenancy,
459+
Host: &machinev1beta1.HostPlacement{
460+
Affinity: ptr.To(machinev1beta1.HostAffinityDedicatedHost),
461+
DedicatedHost: &machinev1beta1.DedicatedHost{
462+
ID: "h-1234567890abcdef0",
463+
},
464+
},
383465
},
384466
},
385467
},
386468
expectedError: "",
387469
},
388470
{
389-
name: "configure host placement AnyAvailable forbids dedicatedHost",
471+
name: "configure host placement with DedicatedHost affinity and empty ID",
472+
platformType: osconfigv1.AWSPlatformType,
473+
clusterID: "aws-cluster",
474+
providerSpecValue: &kruntime.RawExtension{
475+
Object: &machinev1beta1.AWSMachineProviderConfig{
476+
AMI: machinev1beta1.AWSResourceReference{ID: ptr.To[string]("ami")},
477+
InstanceType: "test",
478+
Placement: machinev1beta1.Placement{
479+
Tenancy: machinev1beta1.HostTenancy,
480+
Host: &machinev1beta1.HostPlacement{
481+
Affinity: ptr.To(machinev1beta1.HostAffinityDedicatedHost),
482+
DedicatedHost: &machinev1beta1.DedicatedHost{
483+
ID: "",
484+
},
485+
},
486+
},
487+
},
488+
},
489+
expectedError: "admission webhook \"validation.machine.machine.openshift.io\" denied the request: spec.placement.host.dedicatedHost.id: Required value: id is required and must start with 'h-' followed by 17 lowercase hexadecimal characters (0-9 and a-f)",
490+
},
491+
{
492+
name: "configure host placement with DedicatedHost affinity and ID not set",
390493
platformType: osconfigv1.AWSPlatformType,
391494
clusterID: "aws-cluster",
392495
providerSpecValue: &kruntime.RawExtension{
393496
Object: &machinev1beta1.AWSMachineProviderConfig{
394497
AMI: machinev1beta1.AWSResourceReference{ID: ptr.To[string]("ami")},
395498
InstanceType: "test",
396-
HostPlacement: &machinev1beta1.HostPlacement{
397-
Affinity: ptr.To(machinev1beta1.HostAffinityAnyAvailable),
398-
DedicatedHost: &machinev1beta1.DedicatedHost{ID: "h-09dcf61cb388b0149"},
499+
Placement: machinev1beta1.Placement{
500+
Tenancy: machinev1beta1.HostTenancy,
501+
Host: &machinev1beta1.HostPlacement{
502+
Affinity: ptr.To(machinev1beta1.HostAffinityDedicatedHost),
503+
DedicatedHost: &machinev1beta1.DedicatedHost{},
504+
},
399505
},
400506
},
401507
},
402-
expectedError: "admission webhook \"validation.machine.machine.openshift.io\" denied the request: spec.hostPlacement.dedicatedHost: Forbidden: dedicatedHost is required when affinity is DedicatedHost, and forbidden otherwise",
508+
expectedError: "admission webhook \"validation.machine.machine.openshift.io\" denied the request: spec.placement.host.dedicatedHost.id: Required value: id is required and must start with 'h-' followed by 17 lowercase hexadecimal characters (0-9 and a-f)",
403509
},
404510
{
405-
name: "configure host placement dedicatedHost with empty ID",
511+
name: "configure host placement with DedicatedHost affinity and invalid ID",
406512
platformType: osconfigv1.AWSPlatformType,
407513
clusterID: "aws-cluster",
408514
providerSpecValue: &kruntime.RawExtension{
409515
Object: &machinev1beta1.AWSMachineProviderConfig{
410516
AMI: machinev1beta1.AWSResourceReference{ID: ptr.To[string]("ami")},
411517
InstanceType: "test",
412-
HostPlacement: &machinev1beta1.HostPlacement{
413-
Affinity: ptr.To(machinev1beta1.HostAffinityDedicatedHost),
414-
DedicatedHost: &machinev1beta1.DedicatedHost{ID: ""},
518+
Placement: machinev1beta1.Placement{
519+
Tenancy: machinev1beta1.HostTenancy,
520+
Host: &machinev1beta1.HostPlacement{
521+
Affinity: ptr.To(machinev1beta1.HostAffinityDedicatedHost),
522+
DedicatedHost: &machinev1beta1.DedicatedHost{
523+
ID: "invalid",
524+
},
525+
},
415526
},
416527
},
417528
},
418-
expectedError: "admission webhook \"validation.machine.machine.openshift.io\" denied the request: spec.hostPlacement.dedicatedHost.id: Required value: id is required and must start with 'h-' followed by 17 lowercase hexadecimal characters (0-9 and a-f)",
529+
expectedError: "admission webhook \"validation.machine.machine.openshift.io\" denied the request: spec.placement.host.dedicatedHost.id: Invalid value: \"invalid\": id must start with 'h-' followed by 17 lowercase hexadecimal characters (0-9 and a-f)",
419530
},
420531
{
421-
name: "configure host placement dedicatedHost with ID not set",
532+
name: "configure dedicated tenancy with host placement",
422533
platformType: osconfigv1.AWSPlatformType,
423534
clusterID: "aws-cluster",
424535
providerSpecValue: &kruntime.RawExtension{
425536
Object: &machinev1beta1.AWSMachineProviderConfig{
426537
AMI: machinev1beta1.AWSResourceReference{ID: ptr.To[string]("ami")},
427538
InstanceType: "test",
428-
HostPlacement: &machinev1beta1.HostPlacement{
429-
Affinity: ptr.To(machinev1beta1.HostAffinityDedicatedHost),
430-
DedicatedHost: &machinev1beta1.DedicatedHost{},
539+
Placement: machinev1beta1.Placement{
540+
Tenancy: machinev1beta1.DedicatedTenancy,
541+
Host: &machinev1beta1.HostPlacement{
542+
Affinity: ptr.To(machinev1beta1.HostAffinityDedicatedHost),
543+
DedicatedHost: &machinev1beta1.DedicatedHost{
544+
ID: "h-1234567890abcdef0",
545+
},
546+
},
431547
},
432548
},
433549
},
434-
expectedError: "admission webhook \"validation.machine.machine.openshift.io\" denied the request: spec.hostPlacement.dedicatedHost.id: Required value: id is required and must start with 'h-' followed by 17 lowercase hexadecimal characters (0-9 and a-f)",
550+
expectedError: "admission webhook \"validation.machine.machine.openshift.io\" denied the request: spec.placement.host: Forbidden: host may only be specified when tenancy is 'host'",
435551
},
436552
{
437-
name: "configure host placement dedicatedHost with invalid ID",
553+
name: "configure default tenancy with host placement",
438554
platformType: osconfigv1.AWSPlatformType,
439555
clusterID: "aws-cluster",
440556
providerSpecValue: &kruntime.RawExtension{
441557
Object: &machinev1beta1.AWSMachineProviderConfig{
442558
AMI: machinev1beta1.AWSResourceReference{ID: ptr.To[string]("ami")},
443559
InstanceType: "test",
444-
HostPlacement: &machinev1beta1.HostPlacement{
445-
Affinity: ptr.To(machinev1beta1.HostAffinityDedicatedHost),
446-
DedicatedHost: &machinev1beta1.DedicatedHost{
447-
ID: "invalid",
560+
Placement: machinev1beta1.Placement{
561+
Tenancy: machinev1beta1.DefaultTenancy,
562+
Host: &machinev1beta1.HostPlacement{
563+
Affinity: ptr.To(machinev1beta1.HostAffinityDedicatedHost),
564+
DedicatedHost: &machinev1beta1.DedicatedHost{
565+
ID: "h-1234567890abcdef0",
566+
},
448567
},
449568
},
450569
},
451570
},
452-
expectedError: "admission webhook \"validation.machine.machine.openshift.io\" denied the request: spec.hostPlacement.dedicatedHost.id: Invalid value: \"invalid\": id must start with 'h-' followed by 17 lowercase hexadecimal characters (0-9 and a-f)",
571+
expectedError: "admission webhook \"validation.machine.machine.openshift.io\" denied the request: spec.placement.host: Forbidden: host may only be specified when tenancy is 'host'",
453572
},
454573
{
455574
name: "with VolumeType set to gp3 and Throughput set under minium value",
@@ -1677,12 +1796,14 @@ func TestMachineCreation(t *testing.T) {
16771796

16781797
gs.Expect(statusError.Status().Message).To(ContainSubstring(tc.expectedError))
16791798
} else {
1799+
// Ensure creation succeeded and refresh the object from the API server so we see defaults set by the mutating webhook.
1800+
gs.Expect(err).To(BeNil())
1801+
gs.Expect(c.Get(ctx, client.ObjectKey{Namespace: m.Namespace, Name: m.Name}, m)).To(Succeed())
16801802
if tc.presetClusterID {
16811803
gs.Expect(m.Labels[machinev1beta1.MachineClusterIDLabel]).To(BeIdenticalTo(presetClusterID))
16821804
} else {
16831805
gs.Expect(m.Labels[machinev1beta1.MachineClusterIDLabel]).To(BeIdenticalTo(tc.clusterID))
16841806
}
1685-
gs.Expect(err).To(BeNil())
16861807
}
16871808
})
16881809
}
@@ -2656,7 +2777,7 @@ func TestValidateAWSProviderSpec(t *testing.T) {
26562777
p.Placement.Tenancy = "invalid"
26572778
},
26582779
expectedOk: false,
2659-
expectedError: "providerSpec.tenancy: Invalid value: \"invalid\": Invalid providerSpec.tenancy, the only allowed options are: default, dedicated, host",
2780+
expectedError: "providerSpec.tenancy: Invalid value: \"invalid\": Invalid providerSpec.tenancy, the only allowed options are: default, dedicated, host, or omitted",
26602781
},
26612782
{
26622783
testCase: "fail if placementGroupPartition is set, but placementGroupName is empty",

0 commit comments

Comments
 (0)