Skip to content

Commit 4d91e07

Browse files
committed
machine_webhook: Add validation for CPUOptions in AWSMachineProviderConfig
This change introduces webhook validation for the CPUOptions field in AWSMachineProviderConfig. The validation ensures that if cpuOptions is provided, its confidentialCompute value is either empty or one of the supported policies: - Disabled - AMDEncryptedVirtualizationNestedPaging Signed-off-by: Fangge Jin <[email protected]>
1 parent d19bdda commit 4d91e07

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed

pkg/webhooks/machine_webhook.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -868,6 +868,35 @@ func validateAWS(m *machinev1beta1.Machine, config *admissionConfig) (bool, []st
868868
)
869869
}
870870

871+
if providerSpec.CPUOptions != nil {
872+
if *providerSpec.CPUOptions == (machinev1beta1.CPUOptions{}) {
873+
errs = append(
874+
errs,
875+
field.Invalid(
876+
field.NewPath("providerSpec", "CPUOptions"),
877+
"{}",
878+
"At least one field must be set if cpuOptions is provided",
879+
),
880+
)
881+
}
882+
883+
if providerSpec.CPUOptions.ConfidentialCompute != nil {
884+
switch *providerSpec.CPUOptions.ConfidentialCompute {
885+
case machinev1beta1.AWSConfidentialComputePolicyDisabled, machinev1beta1.AWSConfidentialComputePolicySEVSNP:
886+
// Valid values
887+
default:
888+
errs = append(
889+
errs,
890+
field.Invalid(
891+
field.NewPath("providerSpec", "CPUOptions", "ConfidentialCompute"),
892+
providerSpec.CPUOptions.ConfidentialCompute,
893+
fmt.Sprintf("Allowed values are %s, %s and omitted", machinev1beta1.AWSConfidentialComputePolicyDisabled, machinev1beta1.AWSConfidentialComputePolicySEVSNP),
894+
),
895+
)
896+
}
897+
}
898+
}
899+
871900
if len(errs) > 0 {
872901
return false, warnings, errs
873902
}

pkg/webhooks/machine_webhook_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2610,6 +2610,52 @@ func TestValidateAWSProviderSpec(t *testing.T) {
26102610
expectedOk: false,
26112611
expectedError: "providerSpec.metadataServiceOptions.authentication: Invalid value: \"Boom\": Allowed values are either 'Optional' or 'Required'",
26122612
},
2613+
{
2614+
testCase: "with cpuOptions empty",
2615+
modifySpec: func(p *machinev1beta1.AWSMachineProviderConfig) {
2616+
p.CPUOptions = &machinev1beta1.CPUOptions{}
2617+
},
2618+
expectedOk: false,
2619+
expectedError: "providerSpec.CPUOptions: Invalid value: \"{}\": At least one field must be set if cpuOptions is provided",
2620+
},
2621+
{
2622+
testCase: "with confidentialCompute set to AMD SEV-SNP",
2623+
modifySpec: func(p *machinev1beta1.AWSMachineProviderConfig) {
2624+
p.CPUOptions = &machinev1beta1.CPUOptions{
2625+
ConfidentialCompute: ptr.To(machinev1beta1.AWSConfidentialComputePolicySEVSNP),
2626+
}
2627+
},
2628+
expectedOk: true,
2629+
},
2630+
{
2631+
testCase: "with confidentialCompute disabled",
2632+
modifySpec: func(p *machinev1beta1.AWSMachineProviderConfig) {
2633+
p.CPUOptions = &machinev1beta1.CPUOptions{
2634+
ConfidentialCompute: ptr.To(machinev1beta1.AWSConfidentialComputePolicyDisabled),
2635+
}
2636+
},
2637+
expectedOk: true,
2638+
},
2639+
{
2640+
testCase: "with confidentialCompute set to invalid value",
2641+
modifySpec: func(p *machinev1beta1.AWSMachineProviderConfig) {
2642+
p.CPUOptions = &machinev1beta1.CPUOptions{
2643+
ConfidentialCompute: ptr.To(machinev1beta1.AWSConfidentialComputePolicy("invalid")),
2644+
}
2645+
},
2646+
expectedOk: false,
2647+
expectedError: "providerSpec.CPUOptions.ConfidentialCompute: Invalid value: \"invalid\": Allowed values are Disabled, AMDEncryptedVirtualizationNestedPaging and omitted",
2648+
},
2649+
{
2650+
testCase: "with confidentialCompute empty",
2651+
modifySpec: func(p *machinev1beta1.AWSMachineProviderConfig) {
2652+
p.CPUOptions = &machinev1beta1.CPUOptions{
2653+
ConfidentialCompute: ptr.To(machinev1beta1.AWSConfidentialComputePolicy("")),
2654+
}
2655+
},
2656+
expectedOk: false,
2657+
expectedError: "providerSpec.CPUOptions.ConfidentialCompute: Invalid value: \"\": Allowed values are Disabled, AMDEncryptedVirtualizationNestedPaging and omitted",
2658+
},
26132659
{
26142660
testCase: "with invalid GroupVersionKind",
26152661
modifySpec: func(p *machinev1beta1.AWSMachineProviderConfig) {

0 commit comments

Comments
 (0)