Skip to content

Commit a4a8427

Browse files
committed
Add support for AMD SEV-SNP instances
This commit adds support for AMD SEV-SNP instances, so users can utilize confidential computing technologies on cluster nodes. Signed-off-by: Fangge Jin <fjin@redhat.com>
1 parent d1cc300 commit a4a8427

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed

pkg/actuators/machine/instances.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,7 @@ func launchInstance(machine *machinev1beta1.Machine, machineProviderConfig *mach
468468
MetadataOptions: getInstanceMetadataOptionsRequest(machineProviderConfig),
469469
InstanceMarketOptions: instanceMarketOptions,
470470
CapacityReservationSpecification: capacityReservationSpecification,
471+
CpuOptions: getCPUOptionsRequest(machineProviderConfig),
471472
}
472473

473474
if len(blockDeviceMappings) > 0 {
@@ -709,3 +710,26 @@ func getCapacityReservationSpecification(capacityReservationID string) (*ec2.Cap
709710
},
710711
}, nil
711712
}
713+
714+
func getCPUOptionsRequest(providerConfig *machinev1beta1.AWSMachineProviderConfig) *ec2.CpuOptionsRequest {
715+
if providerConfig.CPUOptions == nil {
716+
return nil
717+
}
718+
719+
cpuOptions := &ec2.CpuOptionsRequest{}
720+
721+
if providerConfig.CPUOptions.ConfidentialCompute != nil {
722+
switch *providerConfig.CPUOptions.ConfidentialCompute {
723+
case machinev1beta1.AWSConfidentialComputePolicySEVSNP:
724+
cpuOptions.AmdSevSnp = aws.String(ec2.AmdSevSnpSpecificationEnabled)
725+
case machinev1beta1.AWSConfidentialComputePolicyDisabled:
726+
cpuOptions.AmdSevSnp = aws.String(ec2.AmdSevSnpSpecificationDisabled)
727+
}
728+
}
729+
730+
if *cpuOptions == (ec2.CpuOptionsRequest{}) {
731+
return nil
732+
}
733+
734+
return cpuOptions
735+
}

pkg/actuators/machine/instances_test.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
mapierrors "github.com/openshift/machine-api-operator/pkg/controller/machine"
1717
mockaws "github.com/openshift/machine-api-provider-aws/pkg/client/mock"
1818
"k8s.io/apimachinery/pkg/runtime"
19+
"k8s.io/utils/ptr"
1920
"sigs.k8s.io/controller-runtime/pkg/client"
2021
"sigs.k8s.io/controller-runtime/pkg/client/fake"
2122
)
@@ -1695,3 +1696,53 @@ func TestGetCapacityReservationSpecification(t *testing.T) {
16951696
})
16961697
}
16971698
}
1699+
1700+
func TestGetCPUOptionsRequest(t *testing.T) {
1701+
testCases := []struct {
1702+
name string
1703+
providerConfig *machinev1beta1.AWSMachineProviderConfig
1704+
expectedRequest *ec2.CpuOptionsRequest
1705+
}{
1706+
{
1707+
name: "with CPUOptions unspecified",
1708+
providerConfig: &machinev1beta1.AWSMachineProviderConfig{},
1709+
expectedRequest: nil,
1710+
},
1711+
{
1712+
name: "with ConfidentialCompute set to AMD SEV-SNP",
1713+
providerConfig: &machinev1beta1.AWSMachineProviderConfig{
1714+
CPUOptions: &machinev1beta1.CPUOptions{
1715+
ConfidentialCompute: ptr.To(machinev1beta1.AWSConfidentialComputePolicySEVSNP),
1716+
},
1717+
},
1718+
expectedRequest: &ec2.CpuOptionsRequest{
1719+
AmdSevSnp: aws.String(ec2.AmdSevSnpSpecificationEnabled),
1720+
},
1721+
},
1722+
{
1723+
name: "with ConfidentialCompute disabled",
1724+
providerConfig: &machinev1beta1.AWSMachineProviderConfig{
1725+
CPUOptions: &machinev1beta1.CPUOptions{
1726+
ConfidentialCompute: ptr.To(machinev1beta1.AWSConfidentialComputePolicyDisabled),
1727+
},
1728+
},
1729+
expectedRequest: &ec2.CpuOptionsRequest{
1730+
AmdSevSnp: aws.String(ec2.AmdSevSnpSpecificationDisabled),
1731+
},
1732+
},
1733+
{
1734+
name: "with ConfidentialCompute unspecified",
1735+
providerConfig: &machinev1beta1.AWSMachineProviderConfig{
1736+
CPUOptions: &machinev1beta1.CPUOptions{},
1737+
},
1738+
expectedRequest: nil,
1739+
},
1740+
}
1741+
for _, tc := range testCases {
1742+
t.Run(tc.name, func(t *testing.T) {
1743+
g := gmg.NewWithT(t)
1744+
req := getCPUOptionsRequest(tc.providerConfig)
1745+
g.Expect(req).To(gmg.BeEquivalentTo(tc.expectedRequest))
1746+
})
1747+
}
1748+
}

0 commit comments

Comments
 (0)