-
Notifications
You must be signed in to change notification settings - Fork 13
/
platform.go
62 lines (57 loc) · 2.65 KB
/
platform.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
package validation
import (
"errors"
"k8s.io/apimachinery/pkg/util/validation/field"
"github.com/openshift/installer/pkg/types/openstack"
"github.com/openshift/installer/pkg/validate"
)
// ValidatePlatform checks that the specified platform is valid.
func ValidatePlatform(p *openstack.Platform, fldPath *field.Path, fetcher ValidValuesFetcher) field.ErrorList {
allErrs := field.ErrorList{}
validClouds, err := fetcher.GetCloudNames()
if err != nil {
allErrs = append(allErrs, field.InternalError(fldPath.Child("cloud"), errors.New("could not retrieve valid clouds")))
} else if !isValidValue(p.Cloud, validClouds) {
allErrs = append(allErrs, field.NotSupported(fldPath.Child("cloud"), p.Cloud, validClouds))
} else {
validRegions, err := fetcher.GetRegionNames(p.Cloud)
if err != nil {
allErrs = append(allErrs, field.InternalError(fldPath.Child("region"), errors.New("could not retrieve valid regions")))
} else if !isValidValue(p.Region, validRegions) {
allErrs = append(allErrs, field.NotSupported(fldPath.Child("region"), p.Region, validRegions))
}
validImages, err := fetcher.GetImageNames(p.Cloud)
if err != nil {
allErrs = append(allErrs, field.InternalError(fldPath.Child("baseImage"), errors.New("could not retrieve valid images")))
} else if !isValidValue(p.BaseImage, validImages) {
allErrs = append(allErrs, field.NotSupported(fldPath.Child("baseImage"), p.BaseImage, validImages))
}
validNetworks, err := fetcher.GetNetworkNames(p.Cloud)
if err != nil {
allErrs = append(allErrs, field.InternalError(fldPath.Child("externalNetwork"), errors.New("could not retrieve valid networks")))
} else if !isValidValue(p.ExternalNetwork, validNetworks) {
allErrs = append(allErrs, field.NotSupported(fldPath.Child("externalNetwork"), p.ExternalNetwork, validNetworks))
}
validFlavors, err := fetcher.GetFlavorNames(p.Cloud)
if err != nil {
allErrs = append(allErrs, field.InternalError(fldPath.Child("computeFlavor"), errors.New("could not retrieve valid flavors")))
} else if !isValidValue(p.FlavorName, validFlavors) {
allErrs = append(allErrs, field.NotSupported(fldPath.Child("computeFlavor"), p.FlavorName, validFlavors))
}
}
if p.DefaultMachinePlatform != nil {
allErrs = append(allErrs, ValidateMachinePool(p.DefaultMachinePlatform, fldPath.Child("defaultMachinePlatform"))...)
}
if err := validate.SubnetCIDR(&p.NetworkCIDRBlock.IPNet); err != nil {
allErrs = append(allErrs, field.Invalid(fldPath.Child("NetworkCIDRBlock"), p.NetworkCIDRBlock, err.Error()))
}
return allErrs
}
func isValidValue(s string, validValues []string) bool {
for _, v := range validValues {
if s == v {
return true
}
}
return false
}