diff --git a/pkg/apis/eksctl.io/v1alpha5/validation.go b/pkg/apis/eksctl.io/v1alpha5/validation.go index 5cc34b8c57..97bd12a8a9 100644 --- a/pkg/apis/eksctl.io/v1alpha5/validation.go +++ b/pkg/apis/eksctl.io/v1alpha5/validation.go @@ -645,7 +645,7 @@ func ValidateNodeGroup(i int, ng *NodeGroup) error { } } - if ng.AMI != "" && ng.OverrideBootstrapCommand == nil && ng.AMIFamily != NodeImageFamilyBottlerocket { + if ng.AMI != "" && ng.OverrideBootstrapCommand == nil && ng.AMIFamily != NodeImageFamilyBottlerocket && !IsWindowsImage(ng.AMIFamily) { return errors.Errorf("%[1]s.overrideBootstrapCommand is required when using a custom AMI (%[1]s.ami)", path) } @@ -681,6 +681,10 @@ func ValidateNodeGroup(i int, ng *NodeGroup) error { return fieldNotSupported("kubeletExtraConfig") } + if IsWindowsImage(ng.AMIFamily) && ng.OverrideBootstrapCommand != nil { + return fieldNotSupported("overrideBootstrapCommand") + } + if ng.AMIFamily == NodeImageFamilyBottlerocket { if ng.PreBootstrapCommands != nil { return fieldNotSupported("preBootstrapCommands") diff --git a/pkg/apis/eksctl.io/v1alpha5/validation_test.go b/pkg/apis/eksctl.io/v1alpha5/validation_test.go index f760dbb166..bc66477cc0 100644 --- a/pkg/apis/eksctl.io/v1alpha5/validation_test.go +++ b/pkg/apis/eksctl.io/v1alpha5/validation_test.go @@ -146,6 +146,23 @@ var _ = Describe("ClusterConfig validation", func() { ng0.AMIFamily = api.NodeImageFamilyBottlerocket Expect(api.ValidateNodeGroup(0, ng0)).To(Succeed()) }) + It("should not require overrideBootstrapCommand if ami is set and type is Windows", func() { + cfg := api.NewClusterConfig() + ng0 := cfg.NewNodeGroup() + ng0.Name = "node-group" + ng0.AMI = "ami-1234" + ng0.AMIFamily = api.NodeImageFamilyWindowsServer2019CoreContainer + Expect(api.ValidateNodeGroup(0, ng0)).To(Succeed()) + }) + It("should throw an error if overrideBootstrapCommand is set and type is Windows", func() { + cfg := api.NewClusterConfig() + ng0 := cfg.NewNodeGroup() + ng0.Name = "node-group" + ng0.AMI = "ami-1234" + ng0.AMIFamily = api.NodeImageFamilyWindowsServer2019CoreContainer + ng0.OverrideBootstrapCommand = aws.String("echo 'yo'") + Expect(api.ValidateNodeGroup(0, ng0)).To(MatchError(ContainSubstring("overrideBootstrapCommand is not supported for WindowsServer2019CoreContainer nodegroups"))) + }) It("should accept ami with a overrideBootstrapCommand set", func() { cfg := api.NewClusterConfig() ng0 := cfg.NewNodeGroup()