Skip to content

Commit 197e498

Browse files
committed
Remove CloudFormation changes from benchmark PR
1 parent 57d3cad commit 197e498

2 files changed

Lines changed: 32 additions & 125 deletions

File tree

deploy/aws/cloudformation/template.yaml

Lines changed: 18 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,12 @@ Metadata:
1111
- SubnetId
1212
- AllowedApiCidr
1313
- ApiPort
14-
- EnableHttpIngress
15-
- EnableHttpsIngress
16-
- AllowedIngressCidr
1714
- Label:
1815
default: Instance
1916
Parameters:
2017
- InstanceType
2118
- RootVolumeSize
2219
- DataVolumeSize
23-
- DataVolumeIops
24-
- DataVolumeThroughput
2520
- AmiSsmParameter
2621
- Label:
2722
default: Access
@@ -46,12 +41,6 @@ Metadata:
4641
default: Hypeman API access CIDR
4742
ApiPort:
4843
default: Hypeman API port
49-
EnableHttpIngress:
50-
default: Enable HTTP ingress
51-
EnableHttpsIngress:
52-
default: Enable HTTPS ingress
53-
AllowedIngressCidr:
54-
default: Hypeman ingress access CIDR
5544
EnableSSH:
5645
default: Enable SSH
5746
AllowedSshCidr:
@@ -62,10 +51,6 @@ Metadata:
6251
default: Root volume size
6352
DataVolumeSize:
6453
default: Hypeman data volume size
65-
DataVolumeIops:
66-
default: Hypeman data volume IOPS
67-
DataVolumeThroughput:
68-
default: Hypeman data volume throughput
6954
HypemanVersion:
7055
default: Hypeman release
7156
HypemanBranch:
@@ -98,21 +83,6 @@ Parameters:
9883
MinValue: 1
9984
MaxValue: 65535
10085
Description: Hypeman API port exposed to AllowedApiCidr.
101-
EnableHttpIngress:
102-
Type: String
103-
Default: "false"
104-
AllowedValues: ["true", "false"]
105-
Description: Open port 80 from AllowedIngressCidr for Hypeman HTTP ingress traffic.
106-
EnableHttpsIngress:
107-
Type: String
108-
Default: "false"
109-
AllowedValues: ["true", "false"]
110-
Description: Open port 443 from AllowedIngressCidr for Hypeman HTTPS ingress traffic.
111-
AllowedIngressCidr:
112-
Type: String
113-
Default: 127.0.0.1/32
114-
Description: Client CIDR allowed to reach Hypeman ingress ports when enabled. Use your current public IP /32 or a trusted VPN CIDR; avoid 0.0.0.0/0.
115-
AllowedPattern: "^([0-9]{1,3}\\.){3}[0-9]{1,3}/([0-9]|[1-2][0-9]|3[0-2])$"
11686
EnableSSH:
11787
Type: String
11888
Default: "false"
@@ -139,18 +109,6 @@ Parameters:
139109
MinValue: 50
140110
MaxValue: 16384
141111
Description: Hypeman data EBS volume size in GiB. This volume is formatted as XFS and mounted at /var/lib/hypeman.
142-
DataVolumeIops:
143-
Type: Number
144-
Default: 3000
145-
MinValue: 3000
146-
MaxValue: 80000
147-
Description: Provisioned IOPS for the Hypeman data gp3 EBS volume. High values may require a larger DataVolumeSize.
148-
DataVolumeThroughput:
149-
Type: Number
150-
Default: 125
151-
MinValue: 125
152-
MaxValue: 2000
153-
Description: Provisioned throughput in MiB/s for the Hypeman data gp3 EBS volume. High values may require higher DataVolumeIops.
154112
HypemanVersion:
155113
Type: String
156114
Default: latest
@@ -170,8 +128,6 @@ Parameters:
170128

171129
Conditions:
172130
UseSSH: !Equals [!Ref EnableSSH, "true"]
173-
UseHttpIngress: !Equals [!Ref EnableHttpIngress, "true"]
174-
UseHttpsIngress: !Equals [!Ref EnableHttpsIngress, "true"]
175131

176132
Resources:
177133
HypemanSecurityGroup:
@@ -185,22 +141,6 @@ Resources:
185141
ToPort: !Ref ApiPort
186142
CidrIp: !Ref AllowedApiCidr
187143
Description: Hypeman API
188-
- !If
189-
- UseHttpIngress
190-
- IpProtocol: tcp
191-
FromPort: 80
192-
ToPort: 80
193-
CidrIp: !Ref AllowedIngressCidr
194-
Description: Hypeman HTTP ingress
195-
- !Ref AWS::NoValue
196-
- !If
197-
- UseHttpsIngress
198-
- IpProtocol: tcp
199-
FromPort: 443
200-
ToPort: 443
201-
CidrIp: !Ref AllowedIngressCidr
202-
Description: Hypeman HTTPS ingress
203-
- !Ref AWS::NoValue
204144
- !If
205145
- UseSSH
206146
- IpProtocol: tcp
@@ -246,10 +186,9 @@ Resources:
246186
Roles:
247187
- !Ref HypemanInstanceRole
248188

249-
# CloudFormation's typed EC2 instance block device mapping does not expose gp3
250-
# throughput, and EC2 resources do not expose CpuOptions.NestedVirtualization
251-
# yet. This helper creates a minimal launch template for those fields; the
252-
# Hypeman EC2 instance itself remains a normal stack-managed resource.
189+
# CloudFormation's typed EC2 resources do not expose CpuOptions.NestedVirtualization yet.
190+
# This helper creates only the launch template that carries that EC2 API option;
191+
# the Hypeman EC2 instance itself remains a normal stack-managed resource.
253192
NestedVirtualizationLaunchTemplateRole:
254193
Type: AWS::IAM::Role
255194
Properties:
@@ -346,24 +285,12 @@ Resources:
346285
stack_uuid = event["StackId"].rsplit("/", 1)[-1]
347286
return f"{event['ResourceProperties']['NamePrefix']}-{stack_uuid}"
348287
349-
def create_launch_template(name, props):
288+
def create_launch_template(name):
350289
payload = {
351290
"Action": "CreateLaunchTemplate",
352291
"Version": "2016-11-15",
353292
"LaunchTemplateName": name,
354293
"LaunchTemplateData.CpuOptions.NestedVirtualization": "enabled",
355-
"LaunchTemplateData.BlockDeviceMapping.1.DeviceName": "/dev/sda1",
356-
"LaunchTemplateData.BlockDeviceMapping.1.Ebs.VolumeSize": props["RootVolumeSize"],
357-
"LaunchTemplateData.BlockDeviceMapping.1.Ebs.VolumeType": "gp3",
358-
"LaunchTemplateData.BlockDeviceMapping.1.Ebs.Encrypted": "true",
359-
"LaunchTemplateData.BlockDeviceMapping.1.Ebs.DeleteOnTermination": "true",
360-
"LaunchTemplateData.BlockDeviceMapping.2.DeviceName": "/dev/sdf",
361-
"LaunchTemplateData.BlockDeviceMapping.2.Ebs.VolumeSize": props["DataVolumeSize"],
362-
"LaunchTemplateData.BlockDeviceMapping.2.Ebs.VolumeType": "gp3",
363-
"LaunchTemplateData.BlockDeviceMapping.2.Ebs.Iops": props["DataVolumeIops"],
364-
"LaunchTemplateData.BlockDeviceMapping.2.Ebs.Throughput": props["DataVolumeThroughput"],
365-
"LaunchTemplateData.BlockDeviceMapping.2.Ebs.Encrypted": "true",
366-
"LaunchTemplateData.BlockDeviceMapping.2.Ebs.DeleteOnTermination": "true",
367294
"TagSpecification.1.ResourceType": "launch-template",
368295
"TagSpecification.1.Tag.1.Key": "Name",
369296
"TagSpecification.1.Tag.1.Value": name,
@@ -399,7 +326,7 @@ Resources:
399326
return
400327
if request_type == "Update":
401328
delete_launch_template(physical_id)
402-
data = create_launch_template(launch_template_name(event), event["ResourceProperties"])
329+
data = create_launch_template(launch_template_name(event))
403330
send(event, context, "SUCCESS", data, physical_id=data["LaunchTemplateId"])
404331
except Exception as exc:
405332
traceback.print_exc()
@@ -410,10 +337,6 @@ Resources:
410337
Properties:
411338
ServiceToken: !GetAtt NestedVirtualizationLaunchTemplateFunction.Arn
412339
NamePrefix: hypeman
413-
RootVolumeSize: !Ref RootVolumeSize
414-
DataVolumeSize: !Ref DataVolumeSize
415-
DataVolumeIops: !Ref DataVolumeIops
416-
DataVolumeThroughput: !Ref DataVolumeThroughput
417340

418341
HypemanHost:
419342
Type: AWS::EC2::Instance
@@ -428,6 +351,19 @@ Resources:
428351
- !Ref HypemanSecurityGroup
429352
IamInstanceProfile: !Ref HypemanInstanceProfile
430353
KeyName: !If [UseSSH, !Ref KeyName, !Ref AWS::NoValue]
354+
BlockDeviceMappings:
355+
- DeviceName: /dev/sda1
356+
Ebs:
357+
VolumeSize: !Ref RootVolumeSize
358+
VolumeType: gp3
359+
Encrypted: true
360+
DeleteOnTermination: true
361+
- DeviceName: /dev/sdf
362+
Ebs:
363+
VolumeSize: !Ref DataVolumeSize
364+
VolumeType: gp3
365+
Encrypted: true
366+
DeleteOnTermination: true
431367
Tags:
432368
- Key: Name
433369
Value: !Sub ${AWS::StackName}-hypeman

deploy/aws/cloudformation/template_test.go

Lines changed: 14 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,10 @@ func TestQuickstartParameters(t *testing.T) {
1616
assertDefault(t, parameters, "InstanceType", "c8i.2xlarge")
1717
assertDefault(t, parameters, "AllowedApiCidr", "127.0.0.1/32")
1818
assertDefault(t, parameters, "ApiPort", "8080")
19-
assertDefault(t, parameters, "EnableHttpIngress", "false")
20-
assertDefault(t, parameters, "EnableHttpsIngress", "false")
21-
assertDefault(t, parameters, "AllowedIngressCidr", "127.0.0.1/32")
2219
assertDefault(t, parameters, "EnableSSH", "false")
2320
assertDefault(t, parameters, "AllowedSshCidr", "127.0.0.1/32")
2421
assertDefault(t, parameters, "RootVolumeSize", "30")
2522
assertDefault(t, parameters, "DataVolumeSize", "100")
26-
assertDefault(t, parameters, "DataVolumeIops", "3000")
27-
assertDefault(t, parameters, "DataVolumeThroughput", "125")
2823
assertDefault(t, parameters, "HypemanVersion", "latest")
2924
assertDefault(t, parameters, "HypemanCliVersion", "latest")
3025

@@ -36,10 +31,6 @@ func TestQuickstartParameters(t *testing.T) {
3631
assertContains(t, scalar(t, apiCidr["Description"]), "current public IP /32")
3732
assertContains(t, scalar(t, apiCidr["Description"]), "avoid 0.0.0.0/0")
3833

39-
ingressCidr := requireMapping(t, parameters["AllowedIngressCidr"])
40-
assertContains(t, scalar(t, ingressCidr["Description"]), "current public IP /32")
41-
assertContains(t, scalar(t, ingressCidr["Description"]), "avoid 0.0.0.0/0")
42-
4334
metadata := requireMapping(t, requireField(t, root, "Metadata"))
4435
cfnInterface := requireMapping(t, requireField(t, metadata, "AWS::CloudFormation::Interface"))
4536
groups := requireSequence(t, requireField(t, cfnInterface, "ParameterGroups"))
@@ -63,19 +54,16 @@ func TestCloudFormationLaunchContract(t *testing.T) {
6354
securityGroup := requireMapping(t, requireField(t, resources, "HypemanSecurityGroup"))
6455
sgProperties := requireMapping(t, requireField(t, securityGroup, "Properties"))
6556
ingress := requireSequence(t, requireField(t, sgProperties, "SecurityGroupIngress"))
66-
if len(ingress.Content) != 4 {
67-
t.Fatalf("expected API ingress, HTTP ingress, HTTPS ingress, and SSH ingress, got %d entries", len(ingress.Content))
57+
if len(ingress.Content) != 2 {
58+
t.Fatalf("expected API ingress and conditional SSH ingress, got %d entries", len(ingress.Content))
6859
}
6960

7061
apiIngress := requireMapping(t, ingress.Content[0])
7162
assertRef(t, requireField(t, apiIngress, "FromPort"), "ApiPort")
7263
assertRef(t, requireField(t, apiIngress, "ToPort"), "ApiPort")
7364
assertRef(t, requireField(t, apiIngress, "CidrIp"), "AllowedApiCidr")
7465

75-
assertConditionalIngress(t, ingress.Content[1], "UseHttpIngress", "80", "AllowedIngressCidr")
76-
assertConditionalIngress(t, ingress.Content[2], "UseHttpsIngress", "443", "AllowedIngressCidr")
77-
78-
sshIngress := ingress.Content[3]
66+
sshIngress := ingress.Content[1]
7967
if sshIngress.Tag != "!If" {
8068
t.Fatalf("expected SSH ingress to be conditional !If, got %s", sshIngress.Tag)
8169
}
@@ -99,14 +87,6 @@ func TestCloudFormationLaunchContract(t *testing.T) {
9987
zipFile := scalar(t, requireField(t, code, "ZipFile"))
10088
assertContains(t, zipFile, `"Action": "CreateLaunchTemplate"`)
10189
assertContains(t, zipFile, `"LaunchTemplateData.CpuOptions.NestedVirtualization": "enabled"`)
102-
assertContains(t, zipFile, `"LaunchTemplateData.BlockDeviceMapping.2.Ebs.Iops": props["DataVolumeIops"]`)
103-
assertContains(t, zipFile, `"LaunchTemplateData.BlockDeviceMapping.2.Ebs.Throughput": props["DataVolumeThroughput"]`)
104-
105-
launchTemplateProperties := requireMapping(t, requireField(t, launchTemplate, "Properties"))
106-
assertRef(t, requireField(t, launchTemplateProperties, "RootVolumeSize"), "RootVolumeSize")
107-
assertRef(t, requireField(t, launchTemplateProperties, "DataVolumeSize"), "DataVolumeSize")
108-
assertRef(t, requireField(t, launchTemplateProperties, "DataVolumeIops"), "DataVolumeIops")
109-
assertRef(t, requireField(t, launchTemplateProperties, "DataVolumeThroughput"), "DataVolumeThroughput")
11090

11191
host := requireMapping(t, requireField(t, resources, "HypemanHost"))
11292
if got := scalar(t, requireField(t, host, "Type")); got != "AWS::EC2::Instance" {
@@ -117,6 +97,17 @@ func TestCloudFormationLaunchContract(t *testing.T) {
11797
assertGetAtt(t, requireField(t, hostLaunchTemplate, "LaunchTemplateId"), "NestedVirtualizationLaunchTemplate.LaunchTemplateId")
11898
assertGetAtt(t, requireField(t, hostLaunchTemplate, "Version"), "NestedVirtualizationLaunchTemplate.VersionNumber")
11999

100+
blockDeviceMappings := requireSequence(t, requireField(t, hostProperties, "BlockDeviceMappings"))
101+
if len(blockDeviceMappings.Content) != 2 {
102+
t.Fatalf("expected root and Hypeman data block device mappings, got %d", len(blockDeviceMappings.Content))
103+
}
104+
dataDevice := requireMapping(t, blockDeviceMappings.Content[1])
105+
if got := scalar(t, requireField(t, dataDevice, "DeviceName")); got != "/dev/sdf" {
106+
t.Fatalf("data device name = %q, want /dev/sdf", got)
107+
}
108+
dataEBS := requireMapping(t, requireField(t, dataDevice, "Ebs"))
109+
assertRef(t, requireField(t, dataEBS, "VolumeSize"), "DataVolumeSize")
110+
120111
userData := nodeText(requireField(t, hostProperties, "UserData"))
121112
assertContains(t, userData, "curl -fsSL https://raw.githubusercontent.com/kernel/hypeman/main/scripts/install.sh | bash")
122113
assertContains(t, userData, "xfsprogs")
@@ -153,26 +144,6 @@ func TestQuickstartOutputs(t *testing.T) {
153144
assertContains(t, scalar(t, requireField(t, requireMapping(t, outputs["CreateTokenCommand"]), "Value")), "hypeman-create-token")
154145
}
155146

156-
func assertConditionalIngress(t *testing.T, node *yaml.Node, condition, port, cidrRef string) {
157-
t.Helper()
158-
159-
if node.Tag != "!If" {
160-
t.Fatalf("expected ingress to be conditional !If, got %s", node.Tag)
161-
}
162-
parts := requireSequence(t, node)
163-
if got := scalar(t, parts.Content[0]); got != condition {
164-
t.Fatalf("expected condition %q, got %q", condition, got)
165-
}
166-
rule := requireMapping(t, parts.Content[1])
167-
if got := scalar(t, requireField(t, rule, "FromPort")); got != port {
168-
t.Fatalf("expected FromPort %s, got %q", port, got)
169-
}
170-
if got := scalar(t, requireField(t, rule, "ToPort")); got != port {
171-
t.Fatalf("expected ToPort %s, got %q", port, got)
172-
}
173-
assertRef(t, requireField(t, rule, "CidrIp"), cidrRef)
174-
}
175-
176147
func loadTemplate(t *testing.T) *yaml.Node {
177148
t.Helper()
178149

0 commit comments

Comments
 (0)