|
89 | 89 | import software.amazon.awssdk.services.ec2.Ec2Client; |
90 | 90 | import software.amazon.awssdk.services.ec2.model.BlockDeviceMapping; |
91 | 91 | import software.amazon.awssdk.services.ec2.model.CancelSpotInstanceRequestsRequest; |
| 92 | +import software.amazon.awssdk.services.ec2.model.CpuOptionsRequest; |
92 | 93 | import software.amazon.awssdk.services.ec2.model.CreateTagsRequest; |
93 | 94 | import software.amazon.awssdk.services.ec2.model.CreditSpecificationRequest; |
94 | 95 | import software.amazon.awssdk.services.ec2.model.DescribeImagesRequest; |
|
119 | 120 | import software.amazon.awssdk.services.ec2.model.InstanceTypeHypervisor; |
120 | 121 | import software.amazon.awssdk.services.ec2.model.InstanceTypeInfo; |
121 | 122 | import software.amazon.awssdk.services.ec2.model.MarketType; |
| 123 | +import software.amazon.awssdk.services.ec2.model.NestedVirtualizationSpecification; |
122 | 124 | import software.amazon.awssdk.services.ec2.model.NitroEnclavesSupport; |
123 | 125 | import software.amazon.awssdk.services.ec2.model.Placement; |
124 | 126 | import software.amazon.awssdk.services.ec2.model.RequestSpotInstancesRequest; |
@@ -254,6 +256,8 @@ public class SlaveTemplate implements Describable<SlaveTemplate> { |
254 | 256 |
|
255 | 257 | private Boolean enclaveEnabled; |
256 | 258 |
|
| 259 | + private Boolean nestedVirtualizationEnabled; |
| 260 | + |
257 | 261 | private transient /* almost final */ Set<LabelAtom> labelSet; |
258 | 262 |
|
259 | 263 | private transient /* almost final */ Set<String> securityGroupSet; |
@@ -2074,6 +2078,15 @@ public Boolean getEnclaveEnabled() { |
2074 | 2078 | return enclaveEnabled; |
2075 | 2079 | } |
2076 | 2080 |
|
| 2081 | + public boolean getNestedVirtualizationEnabled() { |
| 2082 | + return nestedVirtualizationEnabled != null && nestedVirtualizationEnabled; |
| 2083 | + } |
| 2084 | + |
| 2085 | + @DataBoundSetter |
| 2086 | + public void setNestedVirtualizationEnabled(boolean nestedVirtualizationEnabled) { |
| 2087 | + this.nestedVirtualizationEnabled = nestedVirtualizationEnabled; |
| 2088 | + } |
| 2089 | + |
2077 | 2090 | public DescribableList<NodeProperty<?>, NodePropertyDescriptor> getNodeProperties() { |
2078 | 2091 | return Objects.requireNonNull(nodeProperties); |
2079 | 2092 | } |
@@ -2323,6 +2336,13 @@ HashMap<RunInstancesRequest, List<Filter>> makeRunInstancesRequestAndFilters( |
2323 | 2336 | riRequestBuilder.enclaveOptions(enclaveOptionsRequestBuilder.build()); |
2324 | 2337 | } |
2325 | 2338 |
|
| 2339 | + if (getNestedVirtualizationEnabled()) { |
| 2340 | + riRequestBuilder.cpuOptions(CpuOptionsRequest.builder() |
| 2341 | + .nestedVirtualization(NestedVirtualizationSpecification.ENABLED) |
| 2342 | + .build()); |
| 2343 | + logProvisionInfo("Setting CPU Options: NestedVirtualization=enabled"); |
| 2344 | + } |
| 2345 | + |
2326 | 2346 | HashMap<RunInstancesRequest, List<Filter>> ret = new HashMap<>(); |
2327 | 2347 | ret.put(riRequestBuilder.build(), diFilters); |
2328 | 2348 | return ret; |
@@ -3744,5 +3764,15 @@ public FormValidation doCheckEnclaveEnabled( |
3744 | 3764 | } |
3745 | 3765 | return FormValidation.ok(); |
3746 | 3766 | } |
| 3767 | + |
| 3768 | + public FormValidation doCheckNestedVirtualizationEnabled(@QueryParameter boolean nestedVirtualizationEnabled) { |
| 3769 | + if (nestedVirtualizationEnabled) { |
| 3770 | + return FormValidation.warning( |
| 3771 | + "Nested virtualization is only supported on specific instance families (for example C8i, M8i, R8i)" |
| 3772 | + + " and requires an AMI with a compatible L1 hypervisor (KVM or Hyper-V)." |
| 3773 | + + " Enabling it automatically disables Virtual Secure Mode (VSM)."); |
| 3774 | + } |
| 3775 | + return FormValidation.ok(); |
| 3776 | + } |
3747 | 3777 | } |
3748 | 3778 | } |
0 commit comments