@@ -142,7 +142,7 @@ func TestGetBasicUserDataAmazonLinux2(t *testing.T) {
142142 mounts = ctx .GetMountOpts ()
143143 )
144144
145- expectedData := `#!/bin/bash
145+ expectedDataLinux := `#!/bin/bash
146146foo
147147mkfs.xfs /dev/xvda
148148mkdir /mnt/foo
@@ -159,16 +159,90 @@ if [[ $(type -P $(which aws)) ]] && [[ $(type -P $(which jq)) ]] ; then
159159 fi
160160fi
161161set -o xtrace
162- /etc/eks/bootstrap.sh foo --use-max-pods false --kubelet-extra-args '--node-labels=foo=bar,instancemgr.keikoproj.io/image=ami-123456789012,node.kubernetes.io/role=instance-group-1 --register-with-taints=foo=bar:NoSchedule --eviction-hard=memory.available<300Mi,nodefs.available<5% --system-reserved=memory=2.5Gi --v=2 --max-pods=4'
162+ /etc/eks/bootstrap.sh foo --use-max-pods false --b64-cluster-ca dGVzdA== --apiserver-endpoint foo.amazonaws.com --dns-cluster-ip 172.20.0.10 -- kubelet-extra-args '--node-labels=foo=bar,instancemgr.keikoproj.io/image=ami-123456789012,node.kubernetes.io/role=instance-group-1 --register-with-taints=foo=bar:NoSchedule --eviction-hard=memory.available<300Mi,nodefs.available<5% --system-reserved=memory=2.5Gi --v=2 --max-pods=4'
163163set +o xtrace
164164bar`
165165 userData := ctx .GetBasicUserData ("foo" , args , kubeletArgs , userDataPayload , mounts )
166166 basicUserDataDecoded , _ := base64 .StdEncoding .DecodeString (userData )
167167 basicUserDataString := string (basicUserDataDecoded )
168- if basicUserDataString != expectedData {
169- t .Fatalf ("\n Expected: START>%v<END\n Got: START>%v<END" , expectedData , basicUserDataString )
168+ if basicUserDataString != expectedDataLinux {
169+ t .Fatalf ("\n Expected: START>%v<END\n Got: START>%v<END" , expectedDataLinux , basicUserDataString )
170170 }
171+ }
172+
173+ func TestGetBasicUserDataWindows (t * testing.T ) {
174+ var (
175+ k = MockKubernetesClientSet ()
176+ ig = MockInstanceGroup ()
177+ asgMock = NewAutoScalingMocker ()
178+ iamMock = NewIamMocker ()
179+ eksMock = NewEksMocker ()
180+ ec2Mock = NewEc2Mocker ()
181+ configuration = ig .GetEKSConfiguration ()
182+ )
183+
184+ w := MockAwsWorker (asgMock , iamMock , eksMock , ec2Mock )
185+ ctx := MockContext (ig , k , w )
186+
187+ configuration .BootstrapOptions = & v1alpha1.BootstrapOptions {
188+ MaxPods : 4 ,
189+ }
190+ configuration .Labels = map [string ]string {
191+ "foo" : "bar" ,
192+ }
193+ configuration .Taints = []corev1.Taint {
194+ {
195+ Key : "foo" ,
196+ Value : "bar" ,
197+ Effect : "NoSchedule" ,
198+ },
199+ }
200+
201+ configuration .BootstrapArguments = "--eviction-hard=memory.available<300Mi,nodefs.available<5% --system-reserved=memory=2.5Gi --v=2"
202+ configuration .UserData = []v1alpha1.UserDataStage {
203+ {
204+ Stage : "PreBootstrap" ,
205+ Data : "foo" ,
206+ },
207+ {
208+ Stage : "PostBootstrap" ,
209+ Data : "bar" ,
210+ },
211+ }
212+
213+ ig .Annotations [OsFamilyAnnotation ] = OsFamilyWindows
214+
215+ expectedDataWindows := `
216+ <powershell>
217+ foo
218+ [string]$EKSBinDir = "$env:ProgramFiles\Amazon\EKS"
219+ [string]$EKSBootstrapScriptName = 'Start-EKSBootstrap.ps1'
220+ [string]$EKSBootstrapScriptFile = "$EKSBinDir\$EKSBootstrapScriptName"
221+ [string]$IMDSToken=(curl -UseBasicParsing -Method PUT "http://169.254.169.254/latest/api/token" -H @{ "X-aws-ec2-metadata-token-ttl-seconds" = "21600"} | % { Echo $_.Content})
222+ [string]$InstanceID=(curl -UseBasicParsing -Method GET "http://169.254.169.254/latest/meta-data/instance-id" -H @{ "X-aws-ec2-metadata-token" = "$IMDSToken"} | % { Echo $_.Content})
223+ [string]$Lifecycle = Get-ASAutoScalingInstance $InstanceID | % { Echo $_.LifecycleState}
224+ if ($Lifecycle -like "*Warmed*") {
225+ Echo "Not starting Kubelet due to warmed state."
226+ & C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 –Schedule
227+ } else {
228+ & $EKSBootstrapScriptFile -EKSClusterName foo -Base64ClusterCA dGVzdA== -APIServerEndpoint foo.amazonaws.com -KubeletExtraArgs '--node-labels=foo=bar,instancemgr.keikoproj.io/image=ami-123456789012,node.kubernetes.io/role=instance-group-1 --register-with-taints=foo=bar:NoSchedule --eviction-hard=memory.available<300Mi,nodefs.available<5% --system-reserved=memory=2.5Gi --v=2 --max-pods=4' 3>&1 4>&1 5>&1 6>&1
229+ bar
230+ }
231+ </powershell>`
171232
233+ var (
234+ args = ctx .GetBootstrapArgs ()
235+ kubeletArgs = ctx .GetKubeletExtraArgs ()
236+ userDataPayload = ctx .GetUserDataStages ()
237+ mounts = ctx .GetMountOpts ()
238+ )
239+
240+ userData := ctx .GetBasicUserData ("foo" , args , kubeletArgs , userDataPayload , mounts )
241+ basicUserDataDecoded , _ := base64 .StdEncoding .DecodeString (userData )
242+ basicUserDataString := string (basicUserDataDecoded )
243+ if basicUserDataString != expectedDataWindows {
244+ t .Fatalf ("\n Expected: START>%v<END\n Got: START>%v<END" , expectedDataWindows , basicUserDataString )
245+ }
172246}
173247
174248func TestCustomNetworkingMaxPods (t * testing.T ) {
0 commit comments