Skip to content

Commit

Permalink
Add validation rules for nvidia
Browse files Browse the repository at this point in the history
  • Loading branch information
Ole Markus With committed Jul 17, 2021
1 parent 2f7f7fe commit 73aec4c
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 0 deletions.
18 changes: 18 additions & 0 deletions pkg/apis/kops/validation/validation.go
Expand Up @@ -208,6 +208,10 @@ func validateClusterSpec(spec *kops.ClusterSpec, c *kops.Cluster, fieldPath *fie
allErrs = append(allErrs, validateDockerConfig(spec.Docker, fieldPath.Child("docker"))...)
}

if spec.Nvidia != nil {
allErrs = append(allErrs, validateNvidiaConfig(spec, fieldPath.Child("nvidia"))...)
}

if spec.Assets != nil {
if spec.Assets.ContainerProxy != nil && spec.Assets.ContainerRegistry != nil {
allErrs = append(allErrs, field.Forbidden(fieldPath.Child("assets", "containerProxy"), "containerProxy cannot be used in conjunction with containerRegistry"))
Expand Down Expand Up @@ -1366,6 +1370,20 @@ func validateDockerConfig(config *kops.DockerConfig, fldPath *field.Path) field.
return allErrs
}

func validateNvidiaConfig(spec *kops.ClusterSpec, fldPath *field.Path) (allErrs field.ErrorList) {
nvidia := spec.Nvidia
if !fi.BoolValue(nvidia.Enabled) {
return allErrs
}
if kops.CloudProviderID(spec.CloudProvider) != kops.CloudProviderAWS {
allErrs = append(allErrs, field.Forbidden(fldPath, "Nvidia is only supported on AWS"))
}
if spec.ContainerRuntime != "containerd" {
allErrs = append(allErrs, field.Forbidden(fldPath, "Nvidia is only supported using containerd"))
}
return allErrs
}

func validateRollingUpdate(rollingUpdate *kops.RollingUpdate, fldpath *field.Path, onMasterInstanceGroup bool) field.ErrorList {
allErrs := field.ErrorList{}
var err error
Expand Down
42 changes: 42 additions & 0 deletions pkg/apis/kops/validation/validation_test.go
Expand Up @@ -1311,3 +1311,45 @@ func TestValidateSAExternalPermissions(t *testing.T) {
}

}

func Test_Validate_Nvdia(t *testing.T) {

grid := []struct {
Input kops.ClusterSpec
ExpectedErrors []string
}{
{
Input: kops.ClusterSpec{
Nvidia: &kops.NvidiaConfig{
Enabled: fi.Bool(true),
},
CloudProvider: "aws",
ContainerRuntime: "containerd",
},
},
{
Input: kops.ClusterSpec{
Nvidia: &kops.NvidiaConfig{
Enabled: fi.Bool(true),
},
CloudProvider: "gce",
ContainerRuntime: "containerd",
},
ExpectedErrors: []string{"Forbidden::nvidia"},
},
{
Input: kops.ClusterSpec{
Nvidia: &kops.NvidiaConfig{
Enabled: fi.Bool(true),
},
CloudProvider: "aws",
ContainerRuntime: "docker",
},
ExpectedErrors: []string{"Forbidden::nvidia"},
},
}
for _, g := range grid {
errs := validateNvidiaConfig(&g.Input, field.NewPath("nvidia"))
testErrors(t, g.Input, errs, g.ExpectedErrors)
}
}

0 comments on commit 73aec4c

Please sign in to comment.