Skip to content

Commit e97c4ec

Browse files
authored
chore(manifest): apply new manifest validation (#2881)
<!-- Provide summary of changes --> Part of #2818 <!-- Issue number, if available. E.g. "Fixes #31", "Addresses #42, 77" --> By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the Apache 2.0 License.
1 parent 4efabf4 commit e97c4ec

22 files changed

+433
-212
lines changed

go.sum

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1313,6 +1313,7 @@ golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4f
13131313
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
13141314
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
13151315
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
1316+
golang.org/x/tools v0.1.2 h1:kRBLX7v7Af8W7Gdbbc908OJcdgtK8bOz9Uaj8/F1ACA=
13161317
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
13171318
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
13181319
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

internal/pkg/cli/job_deploy.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,9 @@ func (o *deployJobOpts) manifest() (interface{}, error) {
364364
if err != nil {
365365
return nil, fmt.Errorf("apply environment %s override: %s", o.envName, err)
366366
}
367+
if err := mft.Validate(); err != nil {
368+
return nil, fmt.Errorf("validate manifest against environment %s: %s", o.envName, err)
369+
}
367370
return envMft, nil
368371
}
369372

internal/pkg/cli/job_deploy_test.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,22 +202,27 @@ image:
202202
build:
203203
dockerfile: path/to/Dockerfile
204204
context: path
205-
`)
205+
on:
206+
schedule: "@daily"`)
206207
mockMftNoBuild := []byte(`name: mailer
207208
type: 'Scheduled Job'
208209
image:
209210
location: foo/bar
210-
`)
211+
on:
212+
schedule: "@daily"`)
211213
mockMftBuildString := []byte(`name: mailer
212214
type: 'Scheduled Job'
213215
image:
214216
build: path/to/Dockerfile
215-
`)
217+
on:
218+
schedule: "@daily"`)
216219
mockMftNoContext := []byte(`name: mailer
217220
type: 'Scheduled Job'
218221
image:
219222
build:
220-
dockerfile: path/to/Dockerfile`)
223+
dockerfile: path/to/Dockerfile
224+
on:
225+
schedule: "@daily"`)
221226

222227
tests := map[string]struct {
223228
inputSvc string

internal/pkg/cli/svc_deploy.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,9 @@ func (o *deploySvcOpts) manifest() (interface{}, error) {
455455
if err != nil {
456456
return nil, fmt.Errorf("apply environment %s override: %s", o.envName, err)
457457
}
458-
458+
if err := mft.Validate(); err != nil {
459+
return nil, fmt.Errorf("validate manifest against environment %s: %s", o.envName, err)
460+
}
459461
o.appliedManifest = envMft // cache the results.
460462
return envMft, nil
461463
}

internal/pkg/cli/svc_deploy_test.go

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ image:
220220
build:
221221
dockerfile: path/to/Dockerfile
222222
context: path
223+
port: 80
223224
`)
224225
mockManifestWithBadPlatform := []byte(`name: serviceA
225226
type: 'Load Balanced Web Service'
@@ -228,6 +229,7 @@ image:
228229
build:
229230
dockerfile: path/to/Dockerfile
230231
context: path
232+
port: 80
231233
`)
232234
mockManifestWithGoodPlatform := []byte(`name: serviceA
233235
type: 'Load Balanced Web Service'
@@ -236,22 +238,26 @@ image:
236238
build:
237239
dockerfile: path/to/Dockerfile
238240
context: path
241+
port: 80
239242
`)
240243
mockMftNoBuild := []byte(`name: serviceA
241244
type: 'Load Balanced Web Service'
242245
image:
243246
location: foo/bar
247+
port: 80
244248
`)
245249
mockMftBuildString := []byte(`name: serviceA
246250
type: 'Load Balanced Web Service'
247251
image:
248252
build: path/to/Dockerfile
253+
port: 80
249254
`)
250255
mockMftNoContext := []byte(`name: serviceA
251256
type: 'Load Balanced Web Service'
252257
image:
253258
build:
254-
dockerfile: path/to/Dockerfile`)
259+
dockerfile: path/to/Dockerfile
260+
port: 80`)
255261

256262
tests := map[string]struct {
257263
inputSvc string
@@ -830,6 +836,14 @@ func TestSvcDeployOpts_deploySvc(t *testing.T) {
830836
Name: aws.String(mockSvcName),
831837
},
832838
LoadBalancedWebServiceConfig: manifest.LoadBalancedWebServiceConfig{
839+
ImageConfig: manifest.ImageWithPortAndHealthcheck{
840+
ImageWithPort: manifest.ImageWithPort{
841+
Image: manifest.Image{
842+
Build: manifest.BuildArgsOrString{BuildString: aws.String("/Dockerfile")},
843+
},
844+
Port: aws.Uint16(80),
845+
},
846+
},
833847
RoutingRule: manifest.RoutingRule{
834848
Alias: tc.inAliases,
835849
},
@@ -1106,6 +1120,12 @@ func TestSvcDeployOpts_rdWebServiceStackConfiguration(t *testing.T) {
11061120
Name: aws.String(mockSvcName),
11071121
},
11081122
RequestDrivenWebServiceConfig: manifest.RequestDrivenWebServiceConfig{
1123+
ImageConfig: manifest.ImageWithPort{
1124+
Image: manifest.Image{
1125+
Build: manifest.BuildArgsOrString{BuildString: aws.String("/Dockerfile")},
1126+
},
1127+
Port: aws.Uint16(80),
1128+
},
11091129
RequestDrivenWebServiceHttpConfig: manifest.RequestDrivenWebServiceHttpConfig{
11101130
Alias: aws.String(tc.inAlias),
11111131
},
@@ -1249,7 +1269,13 @@ func TestSvcDeployOpts_stackConfiguration_worker(t *testing.T) {
12491269
Workload: manifest.Workload{
12501270
Name: aws.String(mockSvcName),
12511271
},
1252-
WorkerServiceConfig: manifest.WorkerServiceConfig{},
1272+
WorkerServiceConfig: manifest.WorkerServiceConfig{
1273+
ImageConfig: manifest.ImageWithHealthcheck{
1274+
Image: manifest.Image{
1275+
Build: manifest.BuildArgsOrString{BuildString: aws.String("/Dockerfile")},
1276+
},
1277+
},
1278+
},
12531279
}, nil
12541280
},
12551281
}

internal/pkg/cli/svc_package.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,9 @@ func (o *packageSvcOpts) getSvcTemplates(env *config.Environment) (*svcCfnTempla
362362
if err != nil {
363363
return nil, fmt.Errorf("apply environment %s override: %s", o.envName, err)
364364
}
365+
if err := mft.Validate(); err != nil {
366+
return nil, fmt.Errorf("validate manifest against environment %s: %s", o.envName, err)
367+
}
365368
imgNeedsBuild, err := manifest.ServiceDockerfileBuildRequired(envMft)
366369
if err != nil {
367370
return nil, err

internal/pkg/deploy/cloudformation/stack/lb_web_service_integration_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,16 @@ func TestLoadBalancedWebService_Template(t *testing.T) {
5858
for name, tc := range testCases {
5959
mft, err := manifest.UnmarshalWorkload(manifestBytes)
6060
require.NoError(t, err)
61+
6162
envMft, err := mft.ApplyEnv(tc.envName)
6263
require.NoError(t, err)
64+
65+
err = mft.Validate()
66+
require.NoError(t, err)
67+
6368
v, ok := envMft.(*manifest.LoadBalancedWebService)
6469
require.True(t, ok)
70+
6571
svcDiscoveryEndpointName := fmt.Sprintf("%s.%s.local", tc.envName, appName)
6672
serializer, err := stack.NewHTTPSLoadBalancedWebService(v, tc.envName, appName, stack.RuntimeConfig{
6773
ServiceDiscoveryEndpoint: svcDiscoveryEndpointName,

internal/pkg/deploy/cloudformation/stack/rd_web_svc_integration_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ func TestRDWS_Template(t *testing.T) {
3535
envMft, err := mft.ApplyEnv(envName)
3636
require.NoError(t, err, "apply test env to manifest")
3737

38+
err = mft.Validate()
39+
require.NoError(t, err)
40+
3841
v, ok := envMft.(*manifest.RequestDrivenWebService)
3942
require.True(t, ok)
4043

internal/pkg/deploy/cloudformation/stack/scheduled_job_integration_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,16 @@ func TestScheduledJob_Template(t *testing.T) {
3232
path := filepath.Join("testdata", "workloads", jobManifestPath)
3333
manifestBytes, err := ioutil.ReadFile(path)
3434
require.NoError(t, err)
35+
3536
mft, err := manifest.UnmarshalWorkload(manifestBytes)
3637
require.NoError(t, err)
38+
3739
envMft, err := mft.ApplyEnv(envName)
3840
require.NoError(t, err)
41+
42+
err = mft.Validate()
43+
require.NoError(t, err)
44+
3945
v, ok := envMft.(*manifest.ScheduledJob)
4046
require.True(t, ok)
4147

internal/pkg/deploy/cloudformation/stack/testdata/workloads/svc-manifest.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ memory: 512
2727
# Number of tasks that should be running in your service.
2828
count:
2929
range: 2-10
30+
cpu_percentage: 70
3031
storage:
3132
volumes:
3233
persistence:

0 commit comments

Comments
 (0)