From c2778b4e69bef3184b57d326a2d1fc1853f95a48 Mon Sep 17 00:00:00 2001 From: Eric Hole Date: Fri, 17 Aug 2018 09:25:44 -0700 Subject: [PATCH] First pass validation on image type --- pkg/apis/kops/validation/BUILD.bazel | 1 + pkg/apis/kops/validation/aws.go | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/pkg/apis/kops/validation/BUILD.bazel b/pkg/apis/kops/validation/BUILD.bazel index 086f9b8698..4f5ca49393 100644 --- a/pkg/apis/kops/validation/BUILD.bazel +++ b/pkg/apis/kops/validation/BUILD.bazel @@ -22,6 +22,7 @@ go_library( "//upup/pkg/fi:go_default_library", "//upup/pkg/fi/cloudup/awsup:go_default_library", "//vendor/github.com/blang/semver:go_default_library", + "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/validation:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/net:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", diff --git a/pkg/apis/kops/validation/aws.go b/pkg/apis/kops/validation/aws.go index 90eb38f6f5..e34558b8b5 100644 --- a/pkg/apis/kops/validation/aws.go +++ b/pkg/apis/kops/validation/aws.go @@ -19,6 +19,8 @@ package validation import ( "strings" + "fmt" + "github.com/golang/glog" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/kops/pkg/apis/kops" @@ -44,6 +46,8 @@ func awsValidateInstanceGroup(ig *kops.InstanceGroup) field.ErrorList { allErrs = append(allErrs, awsValidateMachineType(field.NewPath(ig.GetName(), "spec", "machineType"), ig.Spec.MachineType)...) + allErrs = append(allErrs, awsValidateAMIforNVMe(field.NewPath(ig.GetName(), "spec", "machineType"), ig)...) + return allErrs } @@ -79,3 +83,24 @@ func awsValidateMachineType(fieldPath *field.Path, machineType string) field.Err return allErrs } + +// TODO: make image validation smarter? graduate from jessie to stretch? This is quick and dirty because we keep getting reports +func awsValidateAMIforNVMe(fieldPath *field.Path, ig *kops.InstanceGroup) field.ErrorList { + // TODO: how can we put this list somewhere better? + NVMe_INSTANCE_PREFIXES := []string{"P3", "C5", "M5", "H1", "I3"} + + allErrs := field.ErrorList{} + + for _, prefix := range NVMe_INSTANCE_PREFIXES { + if strings.Contains(strings.ToUpper(ig.Spec.MachineType), strings.ToUpper(prefix)) { + glog.V(2).Infof("machineType %s requires an image based on stretch to operate. Trying to check compatibility", ig.Spec.MachineType) + if strings.Contains(ig.Spec.Image, "jessie") { + errString := fmt.Sprintf("%s cannot use machineType %s with image based on Debian jessie.", ig.Name, ig.Spec.MachineType) + allErrs = append(allErrs, field.Forbidden(fieldPath, errString)) + continue + } + } + + } + return allErrs +}