-
Notifications
You must be signed in to change notification settings - Fork 0
/
source_validation.go
80 lines (63 loc) · 2.4 KB
/
source_validation.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// Copyright 2019 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the License);
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an AS IS BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package v1alpha1
import (
"context"
"knative.dev/pkg/apis"
)
// Validate checks for errors in the Source's spec or status fields.
func (source *Source) Validate(ctx context.Context) (errs *apis.FieldError) {
// If we're specifically updating status, don't reject the change because
// of a spec issue.
if !apis.IsInStatusUpdate(ctx) {
errs = errs.Also(source.Spec.Validate(apis.WithinSpec(ctx)).ViaField("spec"))
}
return errs
}
// Validate makes sure that a SourceSpec is properly configured.
func (spec *SourceSpec) Validate(ctx context.Context) (errs *apis.FieldError) {
if spec.IsContainerBuild() && spec.IsBuildpackBuild() {
errs = errs.Also(apis.ErrMultipleOneOf("buildpackBuild", "containerImage"))
} else if spec.IsContainerBuild() {
errs = errs.Also(spec.ContainerImage.Validate(ctx))
} else if spec.IsBuildpackBuild() {
errs = errs.Also(spec.BuildpackBuild.Validate(ctx))
} else {
errs = errs.Also(apis.ErrMissingOneOf("buildpackBuild", "containerImage"))
}
return errs
}
// Validate makes sure that an SourceSpecContainerImage is properly configured.
func (containerImage *SourceSpecContainerImage) Validate(ctx context.Context) (errs *apis.FieldError) {
if containerImage.Image == "" {
errs = errs.Also(apis.ErrMissingField("image"))
}
return errs
}
// Validate makes sure that a SourceSpecBuildpackBuild is properly configured.
func (buildpackBuild *SourceSpecBuildpackBuild) Validate(ctx context.Context) (errs *apis.FieldError) {
if buildpackBuild.Source == "" {
errs = errs.Also(apis.ErrMissingField("source"))
}
if buildpackBuild.Stack == "" {
errs = errs.Also(apis.ErrMissingField("stack"))
}
if buildpackBuild.BuildpackBuilder == "" {
errs = errs.Also(apis.ErrMissingField("buildpackBuilder"))
}
if buildpackBuild.Image == "" {
errs = errs.Also(apis.ErrMissingField("image"))
}
return errs
}