@@ -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-
176147func loadTemplate (t * testing.T ) * yaml.Node {
177148 t .Helper ()
178149
0 commit comments