From d1d4de57f6d1c560fca53f59d7ccc854d5e52510 Mon Sep 17 00:00:00 2001 From: Abel Hu Date: Thu, 14 Dec 2023 03:31:21 +0000 Subject: [PATCH] feat: return error details in Windows CSE --- parts/windows/csecmd.ps1 | 4 +- parts/windows/kuberneteswindowssetup.ps1 | 22 +++-- parts/windows/windowscsehelper.ps1 | 70 +++++++++++++- parts/windows/windowscsehelper.tests.ps1 | 17 +++- .../AKSWindows2019+CustomCloud/CSECommand | 2 +- .../AKSWindows2019+CustomCloud/CustomData | 24 +++-- .../AKSWindows2019+CustomVnet/CSECommand | 2 +- .../AKSWindows2019+CustomVnet/CustomData | 24 +++-- .../CSECommand | 2 +- .../CustomData | 24 +++-- .../testdata/AKSWindows2019+K8S116/CSECommand | 2 +- .../testdata/AKSWindows2019+K8S116/CustomData | 24 +++-- .../testdata/AKSWindows2019+K8S117/CSECommand | 2 +- .../testdata/AKSWindows2019+K8S117/CustomData | 24 +++-- .../testdata/AKSWindows2019+K8S118/CSECommand | 2 +- .../testdata/AKSWindows2019+K8S118/CustomData | 24 +++-- .../AKSWindows2019+K8S119+CSI/CSECommand | 2 +- .../AKSWindows2019+K8S119+CSI/CustomData | 24 +++-- .../AKSWindows2019+K8S119+FIPS/CSECommand | 2 +- .../AKSWindows2019+K8S119+FIPS/CustomData | 24 +++-- .../testdata/AKSWindows2019+K8S119/CSECommand | 2 +- .../testdata/AKSWindows2019+K8S119/CustomData | 24 +++-- .../CSECommand | 2 +- .../CustomData | 24 +++-- .../AKSWindows2019+ManagedIdentity/CSECommand | 2 +- .../AKSWindows2019+ManagedIdentity/CustomData | 24 +++-- .../AKSWindows2019+SecurityProfile/CSECommand | 2 +- .../AKSWindows2019+SecurityProfile/CustomData | 24 +++-- pkg/templates/templates_generated.go | 96 ++++++++++++++++--- 29 files changed, 363 insertions(+), 158 deletions(-) diff --git a/parts/windows/csecmd.ps1 b/parts/windows/csecmd.ps1 index 267fc5e1e44..fde9cf9fc51 100644 --- a/parts/windows/csecmd.ps1 +++ b/parts/windows/csecmd.ps1 @@ -16,7 +16,7 @@ $arguments = ' -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; -if (!(Test-Path $inputFile)) { echo 49 | Out-File -FilePath '%SYSTEMDRIVE%\AzureData\CSEResult.log' -Encoding utf8; exit; }; +if (!(Test-Path $inputFile)) { throw 'ExitCode: |49|, Output: |WINDOWS_CSE_ERROR_NO_CUSTOM_DATA_BIN|, Error: |C:\AzureData\CustomData.bin does not exist.|' }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); -\" >> %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log 2>&1; if (!(Test-Path %SYSTEMDRIVE%\AzureData\CSEResult.log)) { exit 50; }; $code=(Get-Content %SYSTEMDRIVE%\AzureData\CSEResult.log); exit $code \ No newline at end of file +\" \ No newline at end of file diff --git a/parts/windows/kuberneteswindowssetup.ps1 b/parts/windows/kuberneteswindowssetup.ps1 index fae93f55810..826c565b073 100644 --- a/parts/windows/kuberneteswindowssetup.ps1 +++ b/parts/windows/kuberneteswindowssetup.ps1 @@ -70,7 +70,7 @@ param( $StartTime=Get-Date $global:ExitCode=0 $global:ErrorMessage="" - +Start-Transcript -Path $LogFile # These globals will not change between nodes in the same cluster, so they are not # passed as powershell parameters @@ -511,15 +511,19 @@ finally { # Generate CSE result so it can be returned as the CSE response in csecmd.ps1 $ExecutionDuration=$(New-Timespan -Start $StartTime -End $(Get-Date)) - Write-Log "CSE ExecutionDuration: $ExecutionDuration" - - # Windows CSE does not return any error message so we cannot generate below content as the response - # $JsonString = "ExitCode: `"{0}`", Output: `"{1}`", Error: `"{2}`", ExecDuration: `"{3}`"" -f $global:ExitCode, "", $global:ErrorMessage, $ExecutionDuration.TotalSeconds - Write-Log "Generate CSE result to $CSEResultFilePath : $global:ExitCode" - echo $global:ExitCode | Out-File -FilePath $CSEResultFilePath -Encoding utf8 + Write-Log "CSE ExecutionDuration: $ExecutionDuration. ExitCode: $global:ExitCode" + Stop-Transcript - # Flush stdout to C:\AzureData\CustomDataSetupScript.log - [Console]::Out.Flush() + # Remove the parameters in the log file to avoid leaking secrets + $logs=Get-Content $LogFile | Where-Object {$_ -notmatch "^Host Application: "} + $logs | Set-Content $LogFile Upload-GuestVMLogs -ExitCode $global:ExitCode + if ($global:ExitCode -ne 0) { + # $JsonString = "ExitCode: |{0}|, Output: |{1}|, Error: |{2}|" + # Max length of the full error message returned by Windows CSE is ~256. We use 240 to be safe. + $errorMessageLength = "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: ||".Length + $turncatedErrorMessage = $global:ErrorMessage.Substring(0, [Math]::Min(240 - $errorMessageLength, $global:ErrorMessage.Length)) + throw "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: |$turncatedErrorMessage|" + } } diff --git a/parts/windows/windowscsehelper.ps1 b/parts/windows/windowscsehelper.ps1 index 290e82d204f..608dc4e46bc 100644 --- a/parts/windows/windowscsehelper.ps1 +++ b/parts/windows/windowscsehelper.ps1 @@ -2,6 +2,8 @@ # It is better to define functions in the scripts under staging/cse/windows. # Define all exit codes in Windows CSE +# It must match `[A-Z_]+` +$global:WINDOWS_CSE_SUCCESS=0 $global:WINDOWS_CSE_ERROR_UNKNOWN=1 # For unexpected error caught by the catch block in kuberneteswindowssetup.ps1 $global:WINDOWS_CSE_ERROR_DOWNLOAD_FILE_WITH_RETRY=2 $global:WINDOWS_CSE_ERROR_INVOKE_EXECUTABLE=3 @@ -64,6 +66,71 @@ $global:WINDOWS_CSE_ERROR_GPU_DRIVER_INVALID_SIGNATURE=59 $global:WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_EXCEPTION=60 $global:WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_URL_NOT_EXE=61 +# Please add new error code for downloading new packages in RP code too +$global:ErrorCodeNames = @( + "WINDOWS_CSE_SUCCESS", + "WINDOWS_CSE_ERROR_UNKNOWN", + "WINDOWS_CSE_ERROR_DOWNLOAD_FILE_WITH_RETRY", + "WINDOWS_CSE_ERROR_INVOKE_EXECUTABLE", + "WINDOWS_CSE_ERROR_FILE_NOT_EXIST", + "WINDOWS_CSE_ERROR_CHECK_API_SERVER_CONNECTIVITY", + "WINDOWS_CSE_ERROR_PAUSE_IMAGE_NOT_EXIST", + "WINDOWS_CSE_ERROR_GET_SUBNET_PREFIX", + "WINDOWS_CSE_ERROR_GENERATE_TOKEN_FOR_ARM", + "WINDOWS_CSE_ERROR_NETWORK_INTERFACES_NOT_EXIST", + "WINDOWS_CSE_ERROR_NETWORK_ADAPTER_NOT_EXIST", + "WINDOWS_CSE_ERROR_MANAGEMENT_IP_NOT_EXIST", + "WINDOWS_CSE_ERROR_CALICO_SERVICE_ACCOUNT_NOT_EXIST", + "WINDOWS_CSE_ERROR_CONTAINERD_NOT_INSTALLED", + "WINDOWS_CSE_ERROR_CONTAINERD_NOT_RUNNING", + "WINDOWS_CSE_ERROR_OPENSSH_NOT_INSTALLED", + "WINDOWS_CSE_ERROR_OPENSSH_FIREWALL_NOT_CONFIGURED", + "WINDOWS_CSE_ERROR_INVALID_PARAMETER_IN_AZURE_CONFIG", + "WINDOWS_CSE_ERROR_NO_DOCKER_TO_BUILD_PAUSE_CONTAINER", + "WINDOWS_CSE_ERROR_GET_CA_CERTIFICATES", + "WINDOWS_CSE_ERROR_DOWNLOAD_CA_CERTIFICATES", + "WINDOWS_CSE_ERROR_EMPTY_CA_CERTIFICATES", + "WINDOWS_CSE_ERROR_ENABLE_SECURE_TLS", + "WINDOWS_CSE_ERROR_GMSA_EXPAND_ARCHIVE", + "WINDOWS_CSE_ERROR_GMSA_ENABLE_POWERSHELL_PRIVILEGE", + "WINDOWS_CSE_ERROR_GMSA_SET_REGISTRY_PERMISSION", + "WINDOWS_CSE_ERROR_GMSA_SET_REGISTRY_VALUES", + "WINDOWS_CSE_ERROR_GMSA_IMPORT_CCGEVENTS", + "WINDOWS_CSE_ERROR_GMSA_IMPORT_CCGAKVPPLUGINEVENTS", + "WINDOWS_CSE_ERROR_NOT_FOUND_MANAGEMENT_IP", + "WINDOWS_CSE_ERROR_NOT_FOUND_BUILD_NUMBER", + "WINDOWS_CSE_ERROR_NOT_FOUND_PROVISIONING_SCRIPTS", + "WINDOWS_CSE_ERROR_START_NODE_RESET_SCRIPT_TASK", + "WINDOWS_CSE_ERROR_DOWNLOAD_CSE_PACKAGE", + "WINDOWS_CSE_ERROR_DOWNLOAD_KUBERNETES_PACKAGE", + "WINDOWS_CSE_ERROR_DOWNLOAD_CNI_PACKAGE", + "WINDOWS_CSE_ERROR_DOWNLOAD_HNS_MODULE", + "WINDOWS_CSE_ERROR_DOWNLOAD_CALICO_PACKAGE", + "WINDOWS_CSE_ERROR_DOWNLOAD_GMSA_PACKAGE", + "WINDOWS_CSE_ERROR_DOWNLOAD_CSI_PROXY_PACKAGE", + "WINDOWS_CSE_ERROR_DOWNLOAD_CONTAINERD_PACKAGE", + "WINDOWS_CSE_ERROR_SET_TCP_DYNAMIC_PORT_RANGE", + "WINDOWS_CSE_ERROR_BUILD_DOCKER_PAUSE_CONTAINER", + "WINDOWS_CSE_ERROR_PULL_PAUSE_IMAGE", + "WINDOWS_CSE_ERROR_BUILD_TAG_PAUSE_IMAGE", + "WINDOWS_CSE_ERROR_CONTAINERD_BINARY_EXIST", + "WINDOWS_CSE_ERROR_SET_TCP_EXCLUDE_PORT_RANGE", + "WINDOWS_CSE_ERROR_SET_UDP_DYNAMIC_PORT_RANGE", + "WINDOWS_CSE_ERROR_SET_UDP_EXCLUDE_PORT_RANGE", + "WINDOWS_CSE_ERROR_NO_CUSTOM_DATA_BIN", + "WINDOWS_CSE_ERROR_NO_CSE_RESULT_LOG", + "WINDOWS_CSE_ERROR_COPY_LOG_COLLECTION_SCRIPTS", + "WINDOWS_CSE_ERROR_RESIZE_OS_DRIVE", + "WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_FAILED", + "WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_TIMEOUT", + "WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_VM_SIZE_NOT_SUPPORTED", + "WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_URL_NOT_SET", + "WINDOWS_CSE_ERROR_GPU_SKU_INFO_NOT_FOUND", + "WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_DOWNLOAD_FAILURE", + "WINDOWS_CSE_ERROR_GPU_DRIVER_INVALID_SIGNATURE", + "WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_EXCEPTION", + "WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_URL_NOT_EXE" +) # NOTE: KubernetesVersion does not contain "v" $global:MinimalKubernetesVersionWithLatestContainerd = "1.28.0" # Will change it to the correct version when we support new Windows containerd version @@ -150,7 +217,8 @@ function Set-ExitCode ) Write-Log "Set ExitCode to $ExitCode and exit. Error: $ErrorMessage" $global:ExitCode=$ExitCode - $global:ErrorMessage=$ErrorMessage + # we use | as the separator as a workaround since " or ' do not work as expected per the testings + $global:ErrorMessage=($ErrorMessage -replace '\|', '%7C') exit $ExitCode } diff --git a/parts/windows/windowscsehelper.tests.ps1 b/parts/windows/windowscsehelper.tests.ps1 index ebb2fa667a4..5d49a2b88c7 100644 --- a/parts/windows/windowscsehelper.tests.ps1 +++ b/parts/windows/windowscsehelper.tests.ps1 @@ -119,5 +119,18 @@ Describe 'Get-WindowsVersion and Get-WindowsPauseVersion' { $expectedPauseVersion = "ltsc2022" $windowsPauseVersion | Should -Be $expectedPauseVersion } - -} \ No newline at end of file +} + +Describe 'Validate Exit Codes' { + It 'should succeed' { + for($i=0; $i -lt $global:ErrorCodeNames.Length; $i++) { + $name=$global:ErrorCodeNames[$i] + $name | Should -Match '[A-Z_]+' + + Write-Host "Validating $name" + $ErrorCode = Get-Variable "$name" -ValueOnly + $ErrorCode | Should -Be $i + Write-Host "Validated $name" + } + } +} diff --git a/pkg/agent/testdata/AKSWindows2019+CustomCloud/CSECommand b/pkg/agent/testdata/AKSWindows2019+CustomCloud/CSECommand index d837b942e90..48f43436640 100644 --- a/pkg/agent/testdata/AKSWindows2019+CustomCloud/CSECommand +++ b/pkg/agent/testdata/AKSWindows2019+CustomCloud/CSECommand @@ -1 +1 @@ -powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''akscustom'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { echo 49 | Out-File -FilePath '%SYSTEMDRIVE%\AzureData\CSEResult.log' -Encoding utf8; exit; }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " >> %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log 2>&1; if (!(Test-Path %SYSTEMDRIVE%\AzureData\CSEResult.log)) { exit 50; }; $code=(Get-Content %SYSTEMDRIVE%\AzureData\CSEResult.log); exit $code \ No newline at end of file +powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''akscustom'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { throw 'ExitCode: |49|, Output: |WINDOWS_CSE_ERROR_NO_CUSTOM_DATA_BIN|, Error: |C:\AzureData\CustomData.bin does not exist.|' }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " \ No newline at end of file diff --git a/pkg/agent/testdata/AKSWindows2019+CustomCloud/CustomData b/pkg/agent/testdata/AKSWindows2019+CustomCloud/CustomData index 2f53d79fcc2..c05f8df6e6d 100644 --- a/pkg/agent/testdata/AKSWindows2019+CustomCloud/CustomData +++ b/pkg/agent/testdata/AKSWindows2019+CustomCloud/CustomData @@ -70,7 +70,7 @@ param( $StartTime=Get-Date $global:ExitCode=0 $global:ErrorMessage="" - +Start-Transcript -Path $LogFile # These globals will not change between nodes in the same cluster, so they are not # passed as powershell parameters @@ -189,7 +189,7 @@ $global:TLSBootstrapToken = "" $global:IsDisableWindowsOutboundNat = [System.Convert]::ToBoolean("false"); # Base64 representation of ZIP archive -$zippedFiles = "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" +$zippedFiles = "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" $global:KubeClusterConfigPath = "c:\k\kubeclusterconfig.json" $fipsEnabled = [System.Convert]::ToBoolean("false") @@ -507,15 +507,19 @@ finally { # Generate CSE result so it can be returned as the CSE response in csecmd.ps1 $ExecutionDuration=$(New-Timespan -Start $StartTime -End $(Get-Date)) - Write-Log "CSE ExecutionDuration: $ExecutionDuration" - - # Windows CSE does not return any error message so we cannot generate below content as the response - # $JsonString = "ExitCode: `"{0}`", Output: `"{1}`", Error: `"{2}`", ExecDuration: `"{3}`"" -f $global:ExitCode, "", $global:ErrorMessage, $ExecutionDuration.TotalSeconds - Write-Log "Generate CSE result to $CSEResultFilePath : $global:ExitCode" - echo $global:ExitCode | Out-File -FilePath $CSEResultFilePath -Encoding utf8 + Write-Log "CSE ExecutionDuration: $ExecutionDuration. ExitCode: $global:ExitCode" + Stop-Transcript - # Flush stdout to C:\AzureData\CustomDataSetupScript.log - [Console]::Out.Flush() + # Remove the parameters in the log file to avoid leaking secrets + $logs=Get-Content $LogFile | Where-Object {$_ -notmatch "^Host Application: "} + $logs | Set-Content $LogFile Upload-GuestVMLogs -ExitCode $global:ExitCode + if ($global:ExitCode -ne 0) { + # $JsonString = "ExitCode: |{0}|, Output: |{1}|, Error: |{2}|" + # Max length of the full error message returned by Windows CSE is ~256. We use 240 to be safe. + $errorMessageLength = "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: ||".Length + $turncatedErrorMessage = $global:ErrorMessage.Substring(0, [Math]::Min(240 - $errorMessageLength, $global:ErrorMessage.Length)) + throw "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: |$turncatedErrorMessage|" + } } diff --git a/pkg/agent/testdata/AKSWindows2019+CustomVnet/CSECommand b/pkg/agent/testdata/AKSWindows2019+CustomVnet/CSECommand index a2b9043f044..f903f048ca9 100644 --- a/pkg/agent/testdata/AKSWindows2019+CustomVnet/CSECommand +++ b/pkg/agent/testdata/AKSWindows2019+CustomVnet/CSECommand @@ -1 +1 @@ -powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { echo 49 | Out-File -FilePath '%SYSTEMDRIVE%\AzureData\CSEResult.log' -Encoding utf8; exit; }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " >> %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log 2>&1; if (!(Test-Path %SYSTEMDRIVE%\AzureData\CSEResult.log)) { exit 50; }; $code=(Get-Content %SYSTEMDRIVE%\AzureData\CSEResult.log); exit $code \ No newline at end of file +powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { throw 'ExitCode: |49|, Output: |WINDOWS_CSE_ERROR_NO_CUSTOM_DATA_BIN|, Error: |C:\AzureData\CustomData.bin does not exist.|' }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " \ No newline at end of file diff --git a/pkg/agent/testdata/AKSWindows2019+CustomVnet/CustomData b/pkg/agent/testdata/AKSWindows2019+CustomVnet/CustomData index 75cd2697e63..52d33bad06d 100644 --- a/pkg/agent/testdata/AKSWindows2019+CustomVnet/CustomData +++ b/pkg/agent/testdata/AKSWindows2019+CustomVnet/CustomData @@ -70,7 +70,7 @@ param( $StartTime=Get-Date $global:ExitCode=0 $global:ErrorMessage="" - +Start-Transcript -Path $LogFile # These globals will not change between nodes in the same cluster, so they are not # passed as powershell parameters @@ -189,7 +189,7 @@ $global:TLSBootstrapToken = "" $global:IsDisableWindowsOutboundNat = [System.Convert]::ToBoolean("false"); # Base64 representation of ZIP archive -$zippedFiles = "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" +$zippedFiles = "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" $global:KubeClusterConfigPath = "c:\k\kubeclusterconfig.json" $fipsEnabled = [System.Convert]::ToBoolean("false") @@ -501,15 +501,19 @@ finally { # Generate CSE result so it can be returned as the CSE response in csecmd.ps1 $ExecutionDuration=$(New-Timespan -Start $StartTime -End $(Get-Date)) - Write-Log "CSE ExecutionDuration: $ExecutionDuration" - - # Windows CSE does not return any error message so we cannot generate below content as the response - # $JsonString = "ExitCode: `"{0}`", Output: `"{1}`", Error: `"{2}`", ExecDuration: `"{3}`"" -f $global:ExitCode, "", $global:ErrorMessage, $ExecutionDuration.TotalSeconds - Write-Log "Generate CSE result to $CSEResultFilePath : $global:ExitCode" - echo $global:ExitCode | Out-File -FilePath $CSEResultFilePath -Encoding utf8 + Write-Log "CSE ExecutionDuration: $ExecutionDuration. ExitCode: $global:ExitCode" + Stop-Transcript - # Flush stdout to C:\AzureData\CustomDataSetupScript.log - [Console]::Out.Flush() + # Remove the parameters in the log file to avoid leaking secrets + $logs=Get-Content $LogFile | Where-Object {$_ -notmatch "^Host Application: "} + $logs | Set-Content $LogFile Upload-GuestVMLogs -ExitCode $global:ExitCode + if ($global:ExitCode -ne 0) { + # $JsonString = "ExitCode: |{0}|, Output: |{1}|, Error: |{2}|" + # Max length of the full error message returned by Windows CSE is ~256. We use 240 to be safe. + $errorMessageLength = "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: ||".Length + $turncatedErrorMessage = $global:ErrorMessage.Substring(0, [Math]::Min(240 - $errorMessageLength, $global:ErrorMessage.Length)) + throw "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: |$turncatedErrorMessage|" + } } diff --git a/pkg/agent/testdata/AKSWindows2019+EnablePrivateClusterHostsConfigAgent/CSECommand b/pkg/agent/testdata/AKSWindows2019+EnablePrivateClusterHostsConfigAgent/CSECommand index a2b9043f044..f903f048ca9 100644 --- a/pkg/agent/testdata/AKSWindows2019+EnablePrivateClusterHostsConfigAgent/CSECommand +++ b/pkg/agent/testdata/AKSWindows2019+EnablePrivateClusterHostsConfigAgent/CSECommand @@ -1 +1 @@ -powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { echo 49 | Out-File -FilePath '%SYSTEMDRIVE%\AzureData\CSEResult.log' -Encoding utf8; exit; }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " >> %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log 2>&1; if (!(Test-Path %SYSTEMDRIVE%\AzureData\CSEResult.log)) { exit 50; }; $code=(Get-Content %SYSTEMDRIVE%\AzureData\CSEResult.log); exit $code \ No newline at end of file +powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { throw 'ExitCode: |49|, Output: |WINDOWS_CSE_ERROR_NO_CUSTOM_DATA_BIN|, Error: |C:\AzureData\CustomData.bin does not exist.|' }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " \ No newline at end of file diff --git a/pkg/agent/testdata/AKSWindows2019+EnablePrivateClusterHostsConfigAgent/CustomData b/pkg/agent/testdata/AKSWindows2019+EnablePrivateClusterHostsConfigAgent/CustomData index 9cd80ad3f8e..cf63575c0c3 100644 --- a/pkg/agent/testdata/AKSWindows2019+EnablePrivateClusterHostsConfigAgent/CustomData +++ b/pkg/agent/testdata/AKSWindows2019+EnablePrivateClusterHostsConfigAgent/CustomData @@ -70,7 +70,7 @@ param( $StartTime=Get-Date $global:ExitCode=0 $global:ErrorMessage="" - +Start-Transcript -Path $LogFile # These globals will not change between nodes in the same cluster, so they are not # passed as powershell parameters @@ -189,7 +189,7 @@ $global:TLSBootstrapToken = "" $global:IsDisableWindowsOutboundNat = [System.Convert]::ToBoolean("false"); # Base64 representation of ZIP archive -$zippedFiles = "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" +$zippedFiles = "UEsDBBQACAAIAAAAAAAAAAAAAAAAAAAAAAAcAAAAd2luZG93cy93aW5kb3dzY3NlaGVscGVyLnBzMdRcW3PbOpJ+96/oYrQTu04o3+LkxKe4NQxFOxxLpIqk7GSSFA9MwhI2FKEFQDueTP77FsCLSF1oOTP7MHlwFLE/dKPR6O4PoPMCwhnhwGNGFgIIh5zjBASFBN+RDMMt4iSGXJAU7vIsFoRmfO8FOEr2FguBWUO6FgGSgZjhclwOeZZgBlygKcmmhzHHhw8kS+gD7+/tvYBBgUZpCvg7ERDTBKshbgohsAK7UDrPuYA5EvEM/vxs6n+Pvv72515vmtJblJ7fOO7AuwkiK7CjYGJZdhAYRxuf2r7v+dHEvXK9G9c4hhdwQRnkGf6+wLHACWDGKIMY5dOZgNtHNZdYqb1NafxN2vYtv8UswwLzcioci3zRX/DjDpUD78YdeuYgunCGdnTjhB8i3w79T8ZJB8hxr70rO7I/2tYkNN8PbeO0Q1qN7HphZH90gtB43SFqfbCtq8gcO1Fg+9e2H1me69pW6Fw74SfjrAM5NieBHTkj87Kp600H4tIOo2Dy3rXDaOzbF85H422ntGv7ZmhHoXdlu9GF50emPzJ+74C4dnjj+VeR44a2f2FadtCw7N0OQHNgjkPbb6COu6JnZLrmpT2y3TByxk1Q1/pb5tCxPOVux7Ij07K8iRs20V2BYHluaDqu7Q8UwnGD0BwO7YFx3BUQKyh/4rqOe2kcd0WGN7bdIPiwqqYrJCrIhePbN+ZwqLCW5144lxNfgruiw3GvzaEziMamb45suQqOG5l/n/h2OYRx3BUurhcNPOvK9qPQi95PnOGgjNB67sZxV+zI4LTMyLL90LlwLDO0A+O4K2bqfbyKOukKGXs0Dj+tQ7oCxnblho8C25K+CIeBcdIVIZejwIzsj2PTHUSmb31wrm3jpCs4CkChZOzd2H7wwR4Oo7HvXDtD+9I2TrrCRKEDO4x8+9IJQv9TNLb9kRMEjucaJ13Rso68NocT6Y3OJCJRzmjs+WFkWZf2te2GgXHSmUnaEPPqejweTi4dtwJ35hQvjC68iTto73bjpDOf1KAiEt3J6L3tG6ddkbHEjH3v2pH+c9zLKLB8ZxwGxmlXiASh6csUMrAj35YuLVBRaAZXxmlXtCyjOLCjsWldmZe2cdoVLjXiavLe9l07tIMlsCtSlqpcZ4noipAa8cENopE3mMi61xUcjT2pkmytpSs8apCKkxrSFRQNrzlyuT5+WuJ2yxnLhFwBX3cFh1zT0BpHg0+uOXKsSMWyb7oS1xUYRfiViXE1H77uCozxROaAZY03XncFRaEnNC/bkM7OY+mC945r+p+qbqUrIio/2B+t4WRgt/zQFRgSNxls9l9XbFS4Tfq6s0ZkTYLQG0UDMzTlBI3X7+AF+FjkTPbFhFcNJk2w7CVjjuN5IntHeJjhDKzzL+Y/coYHSKAvVs4FncuP/VuSQUIxh4wK2Spz8YQZgcoJk2EYDb1L4+zoX7AisH3M81T0Uzrd3QjLG3+SuiPLGw5la+m5dVY76wpe3w6cv9uRF0QDX1axs86yN54UYn7VrZhK04XpyL7lrLMCbsGGzsj2JqFx1lkAt4CvR5EyX+b1YDKWkSPt6KyIW4aa+EUrFdihcdZZHMeTKLiaRI574S0LinHWWR23KF3yFNMZTnzbOOtsn5qjFI1c4Fy6ZqiQXTlxm377o2WP5SfjTVdmfMpn9kfbeHMsKeY4xYhjQEkCGX5oBv4dZZDQhyylKCHZVD1eoPgbmhYc1B8XcoLS2hJbwi2aYBfNMQcD/rq/BwCgNU0sKaj2av1RYX3JP7cLbGOL2xFrVHG7aJsnbpfrJInbYRsZ4nbxNXrYJbqJG26X7yKGT6PWWOF2yBZG2OHaJ9hgB3ILE9wZUbLA7fIbGeDT4lvYX2fEdjO/jiV6kvV1x9sKEdthH+6M2Mj0OsRXWV6H4esM7ynh7ezuCeQWZvccVMHqnkCsMrqdxVfZXFesbGRyuwCaLG4X+U0Mbjuui73tEpFL5raD9Dpr2wHUYGw7SC/Z2g7Cbaa2A6DJ0nYQX2Nou2DW2FnH4m1lZtsxXaxsO2qVkT01/gob26kuNJnY03NeZ0XdmM0M7GnMc/SsM69u2RY96vLRVhKzHbRCYDpyWid5eT6uJC7PB24kLc8fpkFYusHrZOX5ylaJyo4jrJCUHVGbCMrzoQ1you0dSHLieqF9Dlf1hdI1ZpzQBtWPaSYQyUC712oOMiIZmaN0DXVDxGyIBObCKlCYJWCAdtw/+b1/pMELuCFpCvEMZVMMRICgxfUWZQzHAu5L5eoI4AEDzxcLyoTiRdV9XLwcuRSvzQoEuk3xUvW4oFLSgvvj/pv+ybGO/pEz3D8+vCUZYgTzw+Vw+oqMXt6t6WievHndF4j1p//Q9l5AOMOQqll2GbPqh7Yxb/vvnrKlIbLFlL298gr1jqQCM2B4Tu/lsuWFkxmKBWYc9r8cHcDDjMQzQAxDjBYiZziRDDPjfN7H3zHQXCxyUXg+pdMpTkDMGM2nM1jQB8z4DKfpXqnIV4rcPE05/IBeBDrDixTFGF5+OXr5Cl6+hJ97lXBI5pgLNF/AD9B6+5dY6AMkMOgXlM2RAHpwDr1IU4jyDhduGBFYH9Lpfm+OOUdTfAA/VLD35nwKBlRfwz+X46vnBdIrZiOF95rjDkqyfUFS7N1j9kGIRTnwGDE0L6i0/PNZ/RsLzPZHKEuQoOxR6hUsxwdfP3PBSDb9Wov3Jix99cvgAeaCZEiaOEZitvNAJBONUezvRFg0weqbgz311wu4IEwG6gzH3+R24xgDuQMkYwbDAxGz4rIczTFk8gfhgFKGUfIIMYpnOAFa3KdffxgUKyCRrhQ14LPj9aXFX8/PL7G4KB/sS2+UBvQ4RiyeqXOKA/UNuYP9EHOhSyBU28WSugaEVevcxko9AyJzBGWPS2V8fxX+amneK4UK1BDeQvr26/m5mabVOATzwqCfe7Vdpca+RfNMgJ5hOGoaVIclaBNOsmnloSpv0buGd3Sw6OJRSilX3zE6h16l4fPR1wO5HKtLr9W6JFh3BJ5D6agaCHoDtDaC2lcxLmcmf+KU47ZX45zhMaOCxjTljaVRj0m2SeBz8MgFnvddLPqBfE7EYyURPi7w1/PzQmKA71CeilewC4Knp2WcyD93lGEUz2C/tyjlZIqqxrGzfF4s/TVKc8yfNumguXZQLfH6/PSMijL3cqh1r4I3+u43YwloSf/cW//UNpjdkxiPKcnECGVoipl0yMo05F5fUbl0V4+myZjRKcOcjxm+wwxnsdyVvfVvl6CNiJcBSXEm0kdZr0iW45cNNdUJpUy0TG7GchoDgqYZ5YLEvB8IunhAIpaZIBCICRc/NIJKsMcVb/YQm6rI+jFhxJAJ4w8YYTGjiaFdYqH9AV6u9rixGuA/W+P4WLBH3aLzOcoSqD9oTnZPv2Hdx1wUw2qgm1JloViXOII5nBUfHwc4RY8BjmmWcDg+Wq5e+e5N2/oAC71Kt7D81Gt8xxhlo7JIaReIpEXBbR73yln3QUmqErghZNrOV27eb+wYFdBlCjQXCyfjZDoT3EoJLvNXTzYDq6Hcw/fyuQEuftC92/+RvZc2IjGjnN6JvrlYpCRWDq9G7A+QQDI4ZE/B+7bEhzjFc+k7bcPg/bJCaHINq7K7UXDM6AIzQTD/rFUVRPsqw7hKpZtQI7l+Mf+sDXKmLB3xAtR2mJ2iBcfJiKQp4cXqtkfb5rx+yFD8Tc1zv1B50FieJ7bT5p25qYxUnsFJUSVkSGyvCz9bzUwzCPd2bmKM7uahu/cwtrYwzXhX3xbuakw1wALq/SGnWP9Dblj8nYjlXmiOVky9vv4oQUa73Xkh6ULOZT+IeNHR4AVi0mj5BYIHyr4hRvMsAU7kKmlAGbyEhCqWIx9LwfotvAVmahih1mHK20Y0zDP2W9Y2W+F/ylb4v95aLwtfqPcLl2Y3l3JMuVjQrMhXiAmLzhe5bJ7LdW240WIYSYsAZSARgswxCMRVd8cKeNGvjUrPoUJHsdsD2bDkKU5CxL+ZxRPd/o7jXGDQlq2+JAVFysznMldoy9z6p1ZaqddmFj3Hn1qpccFIFpMFSjcpHdcP9QnHzEkg+BSE9gjk/GgmKzeU1dGM46IR8/NsiO9xCh/IdIa5KNdcMDKdqoUivPABrfZZr3pWWPA3ehuWX+imAKhpyEHfTJIy7+8fnx3IRIdl7gDdq8dSr5iSbV4EvfRj5Wl9OcWGK/TKgNo02cepl1QlqHIqxJVT0Z38uWD0nsjuUq55c119PCVcYLZqjPypkq9WRoNejaiB7mSLXJQZvzGtjUGGk51irBnHBU6vW/VfSEtrmeUiT9OnWZHRu0Mp38yuKmsmvCTgU5xhhlJY5GxBeZlhik2qfsiyqrtUtIhKZcfBFkZQzB2SStsSoe55V8xYlkIZT0WfL3+q8K9FYUU3/HdR0ItqsNrZN+vKblYU71DwRnV5ATMhFvz88JALFH+j95jdpfShH9P5ITo8fX129u7s7PXhm3dvj0/eLBdeTiLE8wVliD0ulZecfYFY0W9UrWOLNkqc/FfZL1YLCL2sJJkl6DInydfzcxc/yE+l9A7e2/8bJVnpyNISNfRBK3TbjeTOcdtg49coJQkS2KXCzdPUY/Z8IR73N4VkqWZnor996BniM3Xs1Rhd9rn/hqHbDULZMP+/jNvqvsvNqP6SIbvfI2DA0R/wBzR33jqleAGDopindAqq1y8qvfo4R4/1USbHGSeC3GNIkECtMRpbSBkGPQLn0IuL9Wr3r6x4m+kv9XLCX6WqWmbZxW+iED3y22+tLwpyCvoU187eREHFjNEH6EWtB21OpAiYHqQYL7b5dwlq95QlbSoaAhlWu++Ejt6wHu2pHN4a4fPXdkwPCRc7DvBkb0sy0R4+TekDTirJ4szj6KCNWN8NMjA7Zdq80oDjrdEtlz5dLv0fKkC2lBopC36eqZ6g4d7aTdDv95fB+peNMvVjFXhDMwjtj05oeQNbHYiQbN0rq/HYNKmhodgYOIE843kcY87v8jR9LE4b69+ygZZObWsE65X3OkJZ/onLo4sN+2+lTsIOpjcN37Tt13aR+uu55wL29xnKuey0WBlQqkhvWK12n2VyjpnQJV22VQXffZt2nUPL8WRl3DnJP30AvbmVKvW0Wqnn+q4eZeWN0E1UWXb75QXS+5ykiZvPbzErlZd5XFEC2USUBxKPoH24Go7OvwTeRXhj+vaX+oTkS3UZ5YZfrJzJlqK8AdMO+uUXSs82I6pbtrI/um3YZGwxVknyByLUAWkD0fShdvz27ZtTDX5Uk9KOfz96pzW2gnZydPr696ZEKnh8cnRy0pY6O33Xkjo5/dCS+NGLVKlSku800GX9k9+lGLTTo9N3b7WfDbik0SdHJ2fNIcqT4h2P1jreNd70tsyWEzhB4Y5kiSIv5aUaKF9Cppx53lqM1RO5rUE1RjnH/3mLuknqmQu7aYj/9IV1Mi5QmurLy1v9PeI40b1MX9556831biTeZyTd3lJDfX/4LLjrvCfZgLBfglo0u/slrPTBLwNbLwzslXXiBTjFJeMCcfFqeSnYdI+6mQRZkGHiD9Vv/paHp5veDShfo+6rwe3vaL5I8TloFblFMdfnRAZSX92x42SK+xkWjTv46teED++P+kf9128239MXz7Zc0EvdIa1fY5jnqSCLFG94bYC/ggcMNEsfgePibAVnyYKSTIDsxDY55N8xt8LGm4bqdR/CrQx+oM3fO26/qrF5vbBs2lTPpx1qwGnjjY5zpRbguA9luYRbPEP3hLLikrpwQbXYpfRJXyYRdfi5wUqSgaDTaVq8Vq9ezyjPd4AymFFxR77vld1u2492lvAbImb72qFWtyTNk52ltD+UYdjGl4ee8eqrHsYT76UomDRn/3Ppza/rO+Sgb9H5AjEc0obYL7yHc6Cyeus6u8PkLW+v1NCGd67Wg2J9GtJrU3VAxkDMUCaXBP9vjorLjl+Yjown0fUizobZVf/HQNkhtmnBr8woxZwX0/lXpsCLTv9XprChisjc2/7itw3j7BXg9UoHehu8MpZel5xG9VHfltWkWVlALytFXTL2fv5fAAAA//9QSwcIJuGfCsgRAAD1QQAAUEsDBBQACAAIAAAAAAAAAAAAAAAAAAAAAAAUAAAAd2luZG93cy9zZW5kbG9ncy5wczGsU09P204Qve+nmN+SQyL97NhBRIXWLTSlYJU/EYZKLeWwjSf2ivWutTt2WyG+e7U2IVBA6qF78sy8eTNvZvxmgwEAhNmXk9N5lmad5d9FrYzIHQhQpoDvjc4VAhmgEqE0jmBpLFgkK7EVClop4KBBR5+Pj0zhQtbTftjPZmfp/Dw9Pfm3zP6di2v0NLWwokJCC2YJAr6mc1hKhaBF1RE3XcH/4UcpFyVIBw41rSoeGkd7BWq6p/UFfWTcVl3gyBSAOq+N1BSyjbfsclblCum91LnUxXB0xboOhh3DpSMrdXHVGYO5oJKNGJNLGP43PEdHgXf1gdEIbjqYRWqsZreMDQ6MUBkJwj1bOEhgt0fwY6TS5DzhB0j8de+7sJInvCSqd8bjePoqnG6G8WQ7jKfjSixKqXH8bmGqOimMUM6TrjIPUeRoHU92b/jPoHJBi9ZJo3nCJ1E8CeI42Iz4Lbt90BAkMBimujXXGJyho74j2H3U8Si8Nxkb9Jt+Scm8+QslO5uTrcn0wSpWKan+KBXypJvkU1n323xG31YQbQdRfMe0Bi2URE3BwliLSpA0Wvo+X8L58+IJ3/uUzbL9uWoKqV+CrstHYRxGT2FGk5AarS+4Hnk4W/nXX2n+Z3JbCT8bZYogx1qZXxVq8kTDZ5nOjMJUOxJ6gUfS0SOHxy1l0dhO/p114v+jwNVKEvBvIR9dRv15+wN55iLWa/8dAAD//1BLBwiFX+NRIQIAAF4EAABQSwECFAAUAAgACAAAAAAAJuGfCsgRAAD1QQAAHAAAAAAAAAAAAAAAAAAAAAAAd2luZG93cy93aW5kb3dzY3NlaGVscGVyLnBzMVBLAQIUABQACAAIAAAAAACFX+NRIQIAAF4EAAAUAAAAAAAAAAAAAAAAABISAAB3aW5kb3dzL3NlbmRsb2dzLnBzMVBLBQYAAAAAAgACAIwAAAB1FAAAAAA=" $global:KubeClusterConfigPath = "c:\k\kubeclusterconfig.json" $fipsEnabled = [System.Convert]::ToBoolean("false") @@ -501,15 +501,19 @@ finally { # Generate CSE result so it can be returned as the CSE response in csecmd.ps1 $ExecutionDuration=$(New-Timespan -Start $StartTime -End $(Get-Date)) - Write-Log "CSE ExecutionDuration: $ExecutionDuration" - - # Windows CSE does not return any error message so we cannot generate below content as the response - # $JsonString = "ExitCode: `"{0}`", Output: `"{1}`", Error: `"{2}`", ExecDuration: `"{3}`"" -f $global:ExitCode, "", $global:ErrorMessage, $ExecutionDuration.TotalSeconds - Write-Log "Generate CSE result to $CSEResultFilePath : $global:ExitCode" - echo $global:ExitCode | Out-File -FilePath $CSEResultFilePath -Encoding utf8 + Write-Log "CSE ExecutionDuration: $ExecutionDuration. ExitCode: $global:ExitCode" + Stop-Transcript - # Flush stdout to C:\AzureData\CustomDataSetupScript.log - [Console]::Out.Flush() + # Remove the parameters in the log file to avoid leaking secrets + $logs=Get-Content $LogFile | Where-Object {$_ -notmatch "^Host Application: "} + $logs | Set-Content $LogFile Upload-GuestVMLogs -ExitCode $global:ExitCode + if ($global:ExitCode -ne 0) { + # $JsonString = "ExitCode: |{0}|, Output: |{1}|, Error: |{2}|" + # Max length of the full error message returned by Windows CSE is ~256. We use 240 to be safe. + $errorMessageLength = "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: ||".Length + $turncatedErrorMessage = $global:ErrorMessage.Substring(0, [Math]::Min(240 - $errorMessageLength, $global:ErrorMessage.Length)) + throw "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: |$turncatedErrorMessage|" + } } diff --git a/pkg/agent/testdata/AKSWindows2019+K8S116/CSECommand b/pkg/agent/testdata/AKSWindows2019+K8S116/CSECommand index a2b9043f044..f903f048ca9 100644 --- a/pkg/agent/testdata/AKSWindows2019+K8S116/CSECommand +++ b/pkg/agent/testdata/AKSWindows2019+K8S116/CSECommand @@ -1 +1 @@ -powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { echo 49 | Out-File -FilePath '%SYSTEMDRIVE%\AzureData\CSEResult.log' -Encoding utf8; exit; }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " >> %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log 2>&1; if (!(Test-Path %SYSTEMDRIVE%\AzureData\CSEResult.log)) { exit 50; }; $code=(Get-Content %SYSTEMDRIVE%\AzureData\CSEResult.log); exit $code \ No newline at end of file +powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { throw 'ExitCode: |49|, Output: |WINDOWS_CSE_ERROR_NO_CUSTOM_DATA_BIN|, Error: |C:\AzureData\CustomData.bin does not exist.|' }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " \ No newline at end of file diff --git a/pkg/agent/testdata/AKSWindows2019+K8S116/CustomData b/pkg/agent/testdata/AKSWindows2019+K8S116/CustomData index d84fe402764..1d109047413 100644 --- a/pkg/agent/testdata/AKSWindows2019+K8S116/CustomData +++ b/pkg/agent/testdata/AKSWindows2019+K8S116/CustomData @@ -70,7 +70,7 @@ param( $StartTime=Get-Date $global:ExitCode=0 $global:ErrorMessage="" - +Start-Transcript -Path $LogFile # These globals will not change between nodes in the same cluster, so they are not # passed as powershell parameters @@ -189,7 +189,7 @@ $global:TLSBootstrapToken = "" $global:IsDisableWindowsOutboundNat = [System.Convert]::ToBoolean("false"); # Base64 representation of ZIP archive -$zippedFiles = "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" +$zippedFiles = "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" $global:KubeClusterConfigPath = "c:\k\kubeclusterconfig.json" $fipsEnabled = [System.Convert]::ToBoolean("false") @@ -501,15 +501,19 @@ finally { # Generate CSE result so it can be returned as the CSE response in csecmd.ps1 $ExecutionDuration=$(New-Timespan -Start $StartTime -End $(Get-Date)) - Write-Log "CSE ExecutionDuration: $ExecutionDuration" - - # Windows CSE does not return any error message so we cannot generate below content as the response - # $JsonString = "ExitCode: `"{0}`", Output: `"{1}`", Error: `"{2}`", ExecDuration: `"{3}`"" -f $global:ExitCode, "", $global:ErrorMessage, $ExecutionDuration.TotalSeconds - Write-Log "Generate CSE result to $CSEResultFilePath : $global:ExitCode" - echo $global:ExitCode | Out-File -FilePath $CSEResultFilePath -Encoding utf8 + Write-Log "CSE ExecutionDuration: $ExecutionDuration. ExitCode: $global:ExitCode" + Stop-Transcript - # Flush stdout to C:\AzureData\CustomDataSetupScript.log - [Console]::Out.Flush() + # Remove the parameters in the log file to avoid leaking secrets + $logs=Get-Content $LogFile | Where-Object {$_ -notmatch "^Host Application: "} + $logs | Set-Content $LogFile Upload-GuestVMLogs -ExitCode $global:ExitCode + if ($global:ExitCode -ne 0) { + # $JsonString = "ExitCode: |{0}|, Output: |{1}|, Error: |{2}|" + # Max length of the full error message returned by Windows CSE is ~256. We use 240 to be safe. + $errorMessageLength = "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: ||".Length + $turncatedErrorMessage = $global:ErrorMessage.Substring(0, [Math]::Min(240 - $errorMessageLength, $global:ErrorMessage.Length)) + throw "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: |$turncatedErrorMessage|" + } } diff --git a/pkg/agent/testdata/AKSWindows2019+K8S117/CSECommand b/pkg/agent/testdata/AKSWindows2019+K8S117/CSECommand index a2b9043f044..f903f048ca9 100644 --- a/pkg/agent/testdata/AKSWindows2019+K8S117/CSECommand +++ b/pkg/agent/testdata/AKSWindows2019+K8S117/CSECommand @@ -1 +1 @@ -powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { echo 49 | Out-File -FilePath '%SYSTEMDRIVE%\AzureData\CSEResult.log' -Encoding utf8; exit; }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " >> %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log 2>&1; if (!(Test-Path %SYSTEMDRIVE%\AzureData\CSEResult.log)) { exit 50; }; $code=(Get-Content %SYSTEMDRIVE%\AzureData\CSEResult.log); exit $code \ No newline at end of file +powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { throw 'ExitCode: |49|, Output: |WINDOWS_CSE_ERROR_NO_CUSTOM_DATA_BIN|, Error: |C:\AzureData\CustomData.bin does not exist.|' }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " \ No newline at end of file diff --git a/pkg/agent/testdata/AKSWindows2019+K8S117/CustomData b/pkg/agent/testdata/AKSWindows2019+K8S117/CustomData index a745aba33e2..8af5d7f42be 100644 --- a/pkg/agent/testdata/AKSWindows2019+K8S117/CustomData +++ b/pkg/agent/testdata/AKSWindows2019+K8S117/CustomData @@ -70,7 +70,7 @@ param( $StartTime=Get-Date $global:ExitCode=0 $global:ErrorMessage="" - +Start-Transcript -Path $LogFile # These globals will not change between nodes in the same cluster, so they are not # passed as powershell parameters @@ -189,7 +189,7 @@ $global:TLSBootstrapToken = "" $global:IsDisableWindowsOutboundNat = [System.Convert]::ToBoolean("false"); # Base64 representation of ZIP archive -$zippedFiles = "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" +$zippedFiles = "UEsDBBQACAAIAAAAAAAAAAAAAAAAAAAAAAAcAAAAd2luZG93cy93aW5kb3dzY3NlaGVscGVyLnBzMdRcW3PbOpJ+96/oYrQTu04o3+LkxKe4NQxFOxxLpIqk7GSSFA9MwhI2FKEFQDueTP77FsCLSF1oOTP7MHlwFLE/dKPR6O4PoPMCwhnhwGNGFgIIh5zjBASFBN+RDMMt4iSGXJAU7vIsFoRmfO8FOEr2FguBWUO6FgGSgZjhclwOeZZgBlygKcmmhzHHhw8kS+gD7+/tvYBBgUZpCvg7ERDTBKshbgohsAK7UDrPuYA5EvEM/vxs6n+Pvv72515vmtJblJ7fOO7AuwkiK7CjYGJZdhAYRxuf2r7v+dHEvXK9G9c4hhdwQRnkGf6+wLHACWDGKIMY5dOZgNtHNZdYqb1NafxN2vYtv8UswwLzcioci3zRX/DjDpUD78YdeuYgunCGdnTjhB8i3w79T8ZJB8hxr70rO7I/2tYkNN8PbeO0Q1qN7HphZH90gtB43SFqfbCtq8gcO1Fg+9e2H1me69pW6Fw74SfjrAM5NieBHTkj87Kp600H4tIOo2Dy3rXDaOzbF85H422ntGv7ZmhHoXdlu9GF50emPzJ+74C4dnjj+VeR44a2f2FadtCw7N0OQHNgjkPbb6COu6JnZLrmpT2y3TByxk1Q1/pb5tCxPOVux7Ij07K8iRs20V2BYHluaDqu7Q8UwnGD0BwO7YFx3BUQKyh/4rqOe2kcd0WGN7bdIPiwqqYrJCrIhePbN+ZwqLCW5144lxNfgruiw3GvzaEziMamb45suQqOG5l/n/h2OYRx3BUurhcNPOvK9qPQi95PnOGgjNB67sZxV+zI4LTMyLL90LlwLDO0A+O4K2bqfbyKOukKGXs0Dj+tQ7oCxnblho8C25K+CIeBcdIVIZejwIzsj2PTHUSmb31wrm3jpCs4CkChZOzd2H7wwR4Oo7HvXDtD+9I2TrrCRKEDO4x8+9IJQv9TNLb9kRMEjucaJ13Rso68NocT6Y3OJCJRzmjs+WFkWZf2te2GgXHSmUnaEPPqejweTi4dtwJ35hQvjC68iTto73bjpDOf1KAiEt3J6L3tG6ddkbHEjH3v2pH+c9zLKLB8ZxwGxmlXiASh6csUMrAj35YuLVBRaAZXxmlXtCyjOLCjsWldmZe2cdoVLjXiavLe9l07tIMlsCtSlqpcZ4noipAa8cENopE3mMi61xUcjT2pkmytpSs8apCKkxrSFRQNrzlyuT5+WuJ2yxnLhFwBX3cFh1zT0BpHg0+uOXKsSMWyb7oS1xUYRfiViXE1H77uCozxROaAZY03XncFRaEnNC/bkM7OY+mC945r+p+qbqUrIio/2B+t4WRgt/zQFRgSNxls9l9XbFS4Tfq6s0ZkTYLQG0UDMzTlBI3X7+AF+FjkTPbFhFcNJk2w7CVjjuN5IntHeJjhDKzzL+Y/coYHSKAvVs4FncuP/VuSQUIxh4wK2Spz8YQZgcoJk2EYDb1L4+zoX7AisH3M81T0Uzrd3QjLG3+SuiPLGw5la+m5dVY76wpe3w6cv9uRF0QDX1axs86yN54UYn7VrZhK04XpyL7lrLMCbsGGzsj2JqFx1lkAt4CvR5EyX+b1YDKWkSPt6KyIW4aa+EUrFdihcdZZHMeTKLiaRI574S0LinHWWR23KF3yFNMZTnzbOOtsn5qjFI1c4Fy6ZqiQXTlxm377o2WP5SfjTVdmfMpn9kfbeHMsKeY4xYhjQEkCGX5oBv4dZZDQhyylKCHZVD1eoPgbmhYc1B8XcoLS2hJbwi2aYBfNMQcD/rq/BwCgNU0sKaj2av1RYX3JP7cLbGOL2xFrVHG7aJsnbpfrJInbYRsZ4nbxNXrYJbqJG26X7yKGT6PWWOF2yBZG2OHaJ9hgB3ILE9wZUbLA7fIbGeDT4lvYX2fEdjO/jiV6kvV1x9sKEdthH+6M2Mj0OsRXWV6H4esM7ynh7ezuCeQWZvccVMHqnkCsMrqdxVfZXFesbGRyuwCaLG4X+U0Mbjuui73tEpFL5raD9Dpr2wHUYGw7SC/Z2g7Cbaa2A6DJ0nYQX2Nou2DW2FnH4m1lZtsxXaxsO2qVkT01/gob26kuNJnY03NeZ0XdmM0M7GnMc/SsM69u2RY96vLRVhKzHbRCYDpyWid5eT6uJC7PB24kLc8fpkFYusHrZOX5ylaJyo4jrJCUHVGbCMrzoQ1you0dSHLieqF9Dlf1hdI1ZpzQBtWPaSYQyUC712oOMiIZmaN0DXVDxGyIBObCKlCYJWCAdtw/+b1/pMELuCFpCvEMZVMMRICgxfUWZQzHAu5L5eoI4AEDzxcLyoTiRdV9XLwcuRSvzQoEuk3xUvW4oFLSgvvj/pv+ybGO/pEz3D8+vCUZYgTzw+Vw+oqMXt6t6WievHndF4j1p//Q9l5AOMOQqll2GbPqh7Yxb/vvnrKlIbLFlL298gr1jqQCM2B4Tu/lsuWFkxmKBWYc9r8cHcDDjMQzQAxDjBYiZziRDDPjfN7H3zHQXCxyUXg+pdMpTkDMGM2nM1jQB8z4DKfpXqnIV4rcPE05/IBeBDrDixTFGF5+OXr5Cl6+hJ97lXBI5pgLNF/AD9B6+5dY6AMkMOgXlM2RAHpwDr1IU4jyDhduGBFYH9Lpfm+OOUdTfAA/VLD35nwKBlRfwz+X46vnBdIrZiOF95rjDkqyfUFS7N1j9kGIRTnwGDE0L6i0/PNZ/RsLzPZHKEuQoOxR6hUsxwdfP3PBSDb9Wov3Jix99cvgAeaCZEiaOEZitvNAJBONUezvRFg0weqbgz311wu4IEwG6gzH3+R24xgDuQMkYwbDAxGz4rIczTFk8gfhgFKGUfIIMYpnOAFa3KdffxgUKyCRrhQ14LPj9aXFX8/PL7G4KB/sS2+UBvQ4RiyeqXOKA/UNuYP9EHOhSyBU28WSugaEVevcxko9AyJzBGWPS2V8fxX+amneK4UK1BDeQvr26/m5mabVOATzwqCfe7Vdpca+RfNMgJ5hOGoaVIclaBNOsmnloSpv0buGd3Sw6OJRSilX3zE6h16l4fPR1wO5HKtLr9W6JFh3BJ5D6agaCHoDtDaC2lcxLmcmf+KU47ZX45zhMaOCxjTljaVRj0m2SeBz8MgFnvddLPqBfE7EYyURPi7w1/PzQmKA71CeilewC4Knp2WcyD93lGEUz2C/tyjlZIqqxrGzfF4s/TVKc8yfNumguXZQLfH6/PSMijL3cqh1r4I3+u43YwloSf/cW//UNpjdkxiPKcnECGVoipl0yMo05F5fUbl0V4+myZjRKcOcjxm+wwxnsdyVvfVvl6CNiJcBSXEm0kdZr0iW45cNNdUJpUy0TG7GchoDgqYZ5YLEvB8IunhAIpaZIBCICRc/NIJKsMcVb/YQm6rI+jFhxJAJ4w8YYTGjiaFdYqH9AV6u9rixGuA/W+P4WLBH3aLzOcoSqD9oTnZPv2Hdx1wUw2qgm1JloViXOII5nBUfHwc4RY8BjmmWcDg+Wq5e+e5N2/oAC71Kt7D81Gt8xxhlo7JIaReIpEXBbR73yln3QUmqErghZNrOV27eb+wYFdBlCjQXCyfjZDoT3EoJLvNXTzYDq6Hcw/fyuQEuftC92/+RvZc2IjGjnN6JvrlYpCRWDq9G7A+QQDI4ZE/B+7bEhzjFc+k7bcPg/bJCaHINq7K7UXDM6AIzQTD/rFUVRPsqw7hKpZtQI7l+Mf+sDXKmLB3xAtR2mJ2iBcfJiKQp4cXqtkfb5rx+yFD8Tc1zv1B50FieJ7bT5p25qYxUnsFJUSVkSGyvCz9bzUwzCPd2bmKM7uahu/cwtrYwzXhX3xbuakw1wALq/SGnWP9Dblj8nYjlXmiOVky9vv4oQUa73Xkh6ULOZT+IeNHR4AVi0mj5BYIHyr4hRvMsAU7kKmlAGbyEhCqWIx9LwfotvAVmahih1mHK20Y0zDP2W9Y2W+F/ylb4v95aLwtfqPcLl2Y3l3JMuVjQrMhXiAmLzhe5bJ7LdW240WIYSYsAZSARgswxCMRVd8cKeNGvjUrPoUJHsdsD2bDkKU5CxL+ZxRPd/o7jXGDQlq2+JAVFysznMldoy9z6p1ZaqddmFj3Hn1qpccFIFpMFSjcpHdcP9QnHzEkg+BSE9gjk/GgmKzeU1dGM46IR8/NsiO9xCh/IdIa5KNdcMDKdqoUivPABrfZZr3pWWPA3ehuWX+imAKhpyEHfTJIy7+8fnx3IRIdl7gDdq8dSr5iSbV4EvfRj5Wl9OcWGK/TKgNo02cepl1QlqHIqxJVT0Z38uWD0nsjuUq55c119PCVcYLZqjPypkq9WRoNejaiB7mSLXJQZvzGtjUGGk51irBnHBU6vW/VfSEtrmeUiT9OnWZHRu0Mp38yuKmsmvCTgU5xhhlJY5GxBeZlhik2qfsiyqrtUtIhKZcfBFkZQzB2SStsSoe55V8xYlkIZT0WfL3+q8K9FYUU3/HdR0ItqsNrZN+vKblYU71DwRnV5ATMhFvz88JALFH+j95jdpfShH9P5ITo8fX129u7s7PXhm3dvj0/eLBdeTiLE8wVliD0ulZecfYFY0W9UrWOLNkqc/FfZL1YLCL2sJJkl6DInydfzcxc/yE+l9A7e2/8bJVnpyNISNfRBK3TbjeTOcdtg49coJQkS2KXCzdPUY/Z8IR73N4VkqWZnor996BniM3Xs1Rhd9rn/hqHbDULZMP+/jNvqvsvNqP6SIbvfI2DA0R/wBzR33jqleAGDopindAqq1y8qvfo4R4/1USbHGSeC3GNIkECtMRpbSBkGPQLn0IuL9Wr3r6x4m+kv9XLCX6WqWmbZxW+iED3y22+tLwpyCvoU187eREHFjNEH6EWtB21OpAiYHqQYL7b5dwlq95QlbSoaAhlWu++Ejt6wHu2pHN4a4fPXdkwPCRc7DvBkb0sy0R4+TekDTirJ4szj6KCNWN8NMjA7Zdq80oDjrdEtlz5dLv0fKkC2lBopC36eqZ6g4d7aTdDv95fB+peNMvVjFXhDMwjtj05oeQNbHYiQbN0rq/HYNKmhodgYOIE843kcY87v8jR9LE4b69+ygZZObWsE65X3OkJZ/onLo4sN+2+lTsIOpjcN37Tt13aR+uu55wL29xnKuey0WBlQqkhvWK12n2VyjpnQJV22VQXffZt2nUPL8WRl3DnJP30AvbmVKvW0Wqnn+q4eZeWN0E1UWXb75QXS+5ykiZvPbzErlZd5XFEC2USUBxKPoH24Go7OvwTeRXhj+vaX+oTkS3UZ5YZfrJzJlqK8AdMO+uUXSs82I6pbtrI/um3YZGwxVknyByLUAWkD0fShdvz27ZtTDX5Uk9KOfz96pzW2gnZydPr696ZEKnh8cnRy0pY6O33Xkjo5/dCS+NGLVKlSku800GX9k9+lGLTTo9N3b7WfDbik0SdHJ2fNIcqT4h2P1jreNd70tsyWEzhB4Y5kiSIv5aUaKF9Cppx53lqM1RO5rUE1RjnH/3mLuknqmQu7aYj/9IV1Mi5QmurLy1v9PeI40b1MX9556831biTeZyTd3lJDfX/4LLjrvCfZgLBfglo0u/slrPTBLwNbLwzslXXiBTjFJeMCcfFqeSnYdI+6mQRZkGHiD9Vv/paHp5veDShfo+6rwe3vaL5I8TloFblFMdfnRAZSX92x42SK+xkWjTv46teED++P+kf9128239MXz7Zc0EvdIa1fY5jnqSCLFG94bYC/ggcMNEsfgePibAVnyYKSTIDsxDY55N8xt8LGm4bqdR/CrQx+oM3fO26/qrF5vbBs2lTPpx1qwGnjjY5zpRbguA9luYRbPEP3hLLikrpwQbXYpfRJXyYRdfi5wUqSgaDTaVq8Vq9ezyjPd4AymFFxR77vld1u2492lvAbImb72qFWtyTNk52ltD+UYdjGl4ee8eqrHsYT76UomDRn/3Ppza/rO+Sgb9H5AjEc0obYL7yHc6Cyeus6u8PkLW+v1NCGd67Wg2J9GtJrU3VAxkDMUCaXBP9vjorLjl+Yjown0fUizobZVf/HQNkhtmnBr8woxZwX0/lXpsCLTv9XprChisjc2/7itw3j7BXg9UoHehu8MpZel5xG9VHfltWkWVlALytFXTL2fv5fAAAA//9QSwcIJuGfCsgRAAD1QQAAUEsDBBQACAAIAAAAAAAAAAAAAAAAAAAAAAAUAAAAd2luZG93cy9zZW5kbG9ncy5wczGsU09P204Qve+nmN+SQyL97NhBRIXWLTSlYJU/EYZKLeWwjSf2ivWutTt2WyG+e7U2IVBA6qF78sy8eTNvZvxmgwEAhNmXk9N5lmad5d9FrYzIHQhQpoDvjc4VAhmgEqE0jmBpLFgkK7EVClop4KBBR5+Pj0zhQtbTftjPZmfp/Dw9Pfm3zP6di2v0NLWwokJCC2YJAr6mc1hKhaBF1RE3XcH/4UcpFyVIBw41rSoeGkd7BWq6p/UFfWTcVl3gyBSAOq+N1BSyjbfsclblCum91LnUxXB0xboOhh3DpSMrdXHVGYO5oJKNGJNLGP43PEdHgXf1gdEIbjqYRWqsZreMDQ6MUBkJwj1bOEhgt0fwY6TS5DzhB0j8de+7sJInvCSqd8bjePoqnG6G8WQ7jKfjSixKqXH8bmGqOimMUM6TrjIPUeRoHU92b/jPoHJBi9ZJo3nCJ1E8CeI42Iz4Lbt90BAkMBimujXXGJyho74j2H3U8Si8Nxkb9Jt+Scm8+QslO5uTrcn0wSpWKan+KBXypJvkU1n323xG31YQbQdRfMe0Bi2URE3BwliLSpA0Wvo+X8L58+IJ3/uUzbL9uWoKqV+CrstHYRxGT2FGk5AarS+4Hnk4W/nXX2n+Z3JbCT8bZYogx1qZXxVq8kTDZ5nOjMJUOxJ6gUfS0SOHxy1l0dhO/p114v+jwNVKEvBvIR9dRv15+wN55iLWa/8dAAD//1BLBwiFX+NRIQIAAF4EAABQSwECFAAUAAgACAAAAAAAJuGfCsgRAAD1QQAAHAAAAAAAAAAAAAAAAAAAAAAAd2luZG93cy93aW5kb3dzY3NlaGVscGVyLnBzMVBLAQIUABQACAAIAAAAAACFX+NRIQIAAF4EAAAUAAAAAAAAAAAAAAAAABISAAB3aW5kb3dzL3NlbmRsb2dzLnBzMVBLBQYAAAAAAgACAIwAAAB1FAAAAAA=" $global:KubeClusterConfigPath = "c:\k\kubeclusterconfig.json" $fipsEnabled = [System.Convert]::ToBoolean("false") @@ -501,15 +501,19 @@ finally { # Generate CSE result so it can be returned as the CSE response in csecmd.ps1 $ExecutionDuration=$(New-Timespan -Start $StartTime -End $(Get-Date)) - Write-Log "CSE ExecutionDuration: $ExecutionDuration" - - # Windows CSE does not return any error message so we cannot generate below content as the response - # $JsonString = "ExitCode: `"{0}`", Output: `"{1}`", Error: `"{2}`", ExecDuration: `"{3}`"" -f $global:ExitCode, "", $global:ErrorMessage, $ExecutionDuration.TotalSeconds - Write-Log "Generate CSE result to $CSEResultFilePath : $global:ExitCode" - echo $global:ExitCode | Out-File -FilePath $CSEResultFilePath -Encoding utf8 + Write-Log "CSE ExecutionDuration: $ExecutionDuration. ExitCode: $global:ExitCode" + Stop-Transcript - # Flush stdout to C:\AzureData\CustomDataSetupScript.log - [Console]::Out.Flush() + # Remove the parameters in the log file to avoid leaking secrets + $logs=Get-Content $LogFile | Where-Object {$_ -notmatch "^Host Application: "} + $logs | Set-Content $LogFile Upload-GuestVMLogs -ExitCode $global:ExitCode + if ($global:ExitCode -ne 0) { + # $JsonString = "ExitCode: |{0}|, Output: |{1}|, Error: |{2}|" + # Max length of the full error message returned by Windows CSE is ~256. We use 240 to be safe. + $errorMessageLength = "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: ||".Length + $turncatedErrorMessage = $global:ErrorMessage.Substring(0, [Math]::Min(240 - $errorMessageLength, $global:ErrorMessage.Length)) + throw "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: |$turncatedErrorMessage|" + } } diff --git a/pkg/agent/testdata/AKSWindows2019+K8S118/CSECommand b/pkg/agent/testdata/AKSWindows2019+K8S118/CSECommand index a2b9043f044..f903f048ca9 100644 --- a/pkg/agent/testdata/AKSWindows2019+K8S118/CSECommand +++ b/pkg/agent/testdata/AKSWindows2019+K8S118/CSECommand @@ -1 +1 @@ -powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { echo 49 | Out-File -FilePath '%SYSTEMDRIVE%\AzureData\CSEResult.log' -Encoding utf8; exit; }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " >> %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log 2>&1; if (!(Test-Path %SYSTEMDRIVE%\AzureData\CSEResult.log)) { exit 50; }; $code=(Get-Content %SYSTEMDRIVE%\AzureData\CSEResult.log); exit $code \ No newline at end of file +powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { throw 'ExitCode: |49|, Output: |WINDOWS_CSE_ERROR_NO_CUSTOM_DATA_BIN|, Error: |C:\AzureData\CustomData.bin does not exist.|' }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " \ No newline at end of file diff --git a/pkg/agent/testdata/AKSWindows2019+K8S118/CustomData b/pkg/agent/testdata/AKSWindows2019+K8S118/CustomData index 97635b85fb4..f0f569da832 100644 --- a/pkg/agent/testdata/AKSWindows2019+K8S118/CustomData +++ b/pkg/agent/testdata/AKSWindows2019+K8S118/CustomData @@ -70,7 +70,7 @@ param( $StartTime=Get-Date $global:ExitCode=0 $global:ErrorMessage="" - +Start-Transcript -Path $LogFile # These globals will not change between nodes in the same cluster, so they are not # passed as powershell parameters @@ -189,7 +189,7 @@ $global:TLSBootstrapToken = "" $global:IsDisableWindowsOutboundNat = [System.Convert]::ToBoolean("false"); # Base64 representation of ZIP archive -$zippedFiles = "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" +$zippedFiles = "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" $global:KubeClusterConfigPath = "c:\k\kubeclusterconfig.json" $fipsEnabled = [System.Convert]::ToBoolean("false") @@ -501,15 +501,19 @@ finally { # Generate CSE result so it can be returned as the CSE response in csecmd.ps1 $ExecutionDuration=$(New-Timespan -Start $StartTime -End $(Get-Date)) - Write-Log "CSE ExecutionDuration: $ExecutionDuration" - - # Windows CSE does not return any error message so we cannot generate below content as the response - # $JsonString = "ExitCode: `"{0}`", Output: `"{1}`", Error: `"{2}`", ExecDuration: `"{3}`"" -f $global:ExitCode, "", $global:ErrorMessage, $ExecutionDuration.TotalSeconds - Write-Log "Generate CSE result to $CSEResultFilePath : $global:ExitCode" - echo $global:ExitCode | Out-File -FilePath $CSEResultFilePath -Encoding utf8 + Write-Log "CSE ExecutionDuration: $ExecutionDuration. ExitCode: $global:ExitCode" + Stop-Transcript - # Flush stdout to C:\AzureData\CustomDataSetupScript.log - [Console]::Out.Flush() + # Remove the parameters in the log file to avoid leaking secrets + $logs=Get-Content $LogFile | Where-Object {$_ -notmatch "^Host Application: "} + $logs | Set-Content $LogFile Upload-GuestVMLogs -ExitCode $global:ExitCode + if ($global:ExitCode -ne 0) { + # $JsonString = "ExitCode: |{0}|, Output: |{1}|, Error: |{2}|" + # Max length of the full error message returned by Windows CSE is ~256. We use 240 to be safe. + $errorMessageLength = "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: ||".Length + $turncatedErrorMessage = $global:ErrorMessage.Substring(0, [Math]::Min(240 - $errorMessageLength, $global:ErrorMessage.Length)) + throw "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: |$turncatedErrorMessage|" + } } diff --git a/pkg/agent/testdata/AKSWindows2019+K8S119+CSI/CSECommand b/pkg/agent/testdata/AKSWindows2019+K8S119+CSI/CSECommand index a2b9043f044..f903f048ca9 100644 --- a/pkg/agent/testdata/AKSWindows2019+K8S119+CSI/CSECommand +++ b/pkg/agent/testdata/AKSWindows2019+K8S119+CSI/CSECommand @@ -1 +1 @@ -powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { echo 49 | Out-File -FilePath '%SYSTEMDRIVE%\AzureData\CSEResult.log' -Encoding utf8; exit; }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " >> %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log 2>&1; if (!(Test-Path %SYSTEMDRIVE%\AzureData\CSEResult.log)) { exit 50; }; $code=(Get-Content %SYSTEMDRIVE%\AzureData\CSEResult.log); exit $code \ No newline at end of file +powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { throw 'ExitCode: |49|, Output: |WINDOWS_CSE_ERROR_NO_CUSTOM_DATA_BIN|, Error: |C:\AzureData\CustomData.bin does not exist.|' }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " \ No newline at end of file diff --git a/pkg/agent/testdata/AKSWindows2019+K8S119+CSI/CustomData b/pkg/agent/testdata/AKSWindows2019+K8S119+CSI/CustomData index c6e9e7ecc04..9a8294a7033 100644 --- a/pkg/agent/testdata/AKSWindows2019+K8S119+CSI/CustomData +++ b/pkg/agent/testdata/AKSWindows2019+K8S119+CSI/CustomData @@ -70,7 +70,7 @@ param( $StartTime=Get-Date $global:ExitCode=0 $global:ErrorMessage="" - +Start-Transcript -Path $LogFile # These globals will not change between nodes in the same cluster, so they are not # passed as powershell parameters @@ -189,7 +189,7 @@ $global:TLSBootstrapToken = "" $global:IsDisableWindowsOutboundNat = [System.Convert]::ToBoolean("false"); # Base64 representation of ZIP archive -$zippedFiles = "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" +$zippedFiles = "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" $global:KubeClusterConfigPath = "c:\k\kubeclusterconfig.json" $fipsEnabled = [System.Convert]::ToBoolean("false") @@ -501,15 +501,19 @@ finally { # Generate CSE result so it can be returned as the CSE response in csecmd.ps1 $ExecutionDuration=$(New-Timespan -Start $StartTime -End $(Get-Date)) - Write-Log "CSE ExecutionDuration: $ExecutionDuration" - - # Windows CSE does not return any error message so we cannot generate below content as the response - # $JsonString = "ExitCode: `"{0}`", Output: `"{1}`", Error: `"{2}`", ExecDuration: `"{3}`"" -f $global:ExitCode, "", $global:ErrorMessage, $ExecutionDuration.TotalSeconds - Write-Log "Generate CSE result to $CSEResultFilePath : $global:ExitCode" - echo $global:ExitCode | Out-File -FilePath $CSEResultFilePath -Encoding utf8 + Write-Log "CSE ExecutionDuration: $ExecutionDuration. ExitCode: $global:ExitCode" + Stop-Transcript - # Flush stdout to C:\AzureData\CustomDataSetupScript.log - [Console]::Out.Flush() + # Remove the parameters in the log file to avoid leaking secrets + $logs=Get-Content $LogFile | Where-Object {$_ -notmatch "^Host Application: "} + $logs | Set-Content $LogFile Upload-GuestVMLogs -ExitCode $global:ExitCode + if ($global:ExitCode -ne 0) { + # $JsonString = "ExitCode: |{0}|, Output: |{1}|, Error: |{2}|" + # Max length of the full error message returned by Windows CSE is ~256. We use 240 to be safe. + $errorMessageLength = "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: ||".Length + $turncatedErrorMessage = $global:ErrorMessage.Substring(0, [Math]::Min(240 - $errorMessageLength, $global:ErrorMessage.Length)) + throw "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: |$turncatedErrorMessage|" + } } diff --git a/pkg/agent/testdata/AKSWindows2019+K8S119+FIPS/CSECommand b/pkg/agent/testdata/AKSWindows2019+K8S119+FIPS/CSECommand index a2b9043f044..f903f048ca9 100644 --- a/pkg/agent/testdata/AKSWindows2019+K8S119+FIPS/CSECommand +++ b/pkg/agent/testdata/AKSWindows2019+K8S119+FIPS/CSECommand @@ -1 +1 @@ -powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { echo 49 | Out-File -FilePath '%SYSTEMDRIVE%\AzureData\CSEResult.log' -Encoding utf8; exit; }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " >> %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log 2>&1; if (!(Test-Path %SYSTEMDRIVE%\AzureData\CSEResult.log)) { exit 50; }; $code=(Get-Content %SYSTEMDRIVE%\AzureData\CSEResult.log); exit $code \ No newline at end of file +powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { throw 'ExitCode: |49|, Output: |WINDOWS_CSE_ERROR_NO_CUSTOM_DATA_BIN|, Error: |C:\AzureData\CustomData.bin does not exist.|' }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " \ No newline at end of file diff --git a/pkg/agent/testdata/AKSWindows2019+K8S119+FIPS/CustomData b/pkg/agent/testdata/AKSWindows2019+K8S119+FIPS/CustomData index 42195615316..0e49a34e529 100644 --- a/pkg/agent/testdata/AKSWindows2019+K8S119+FIPS/CustomData +++ b/pkg/agent/testdata/AKSWindows2019+K8S119+FIPS/CustomData @@ -70,7 +70,7 @@ param( $StartTime=Get-Date $global:ExitCode=0 $global:ErrorMessage="" - +Start-Transcript -Path $LogFile # These globals will not change between nodes in the same cluster, so they are not # passed as powershell parameters @@ -189,7 +189,7 @@ $global:TLSBootstrapToken = "" $global:IsDisableWindowsOutboundNat = [System.Convert]::ToBoolean("false"); # Base64 representation of ZIP archive -$zippedFiles = "UEsDBBQACAAIAAAAAAAAAAAAAAAAAAAAAAAcAAAAd2luZG93cy93aW5kb3dzY3NlaGVscGVyLnBzMdRb3XLbOpK+91N0yaqJXSeU/+LkxKe4NQwF2xxLpIqk7GSSFAemYAkbiuACoB1PNu++BfBHpCzRPpnZi8mFooj9dTcaH7obALML4YIKEDGnmQQqIBdkBpLBjNzRlMAtFjSGXNIE7vI0lpSlYmcXHC17S6QkvCFdiwBNQS5IqVdAns4IByHxnKbzg1iQgweaztiDGOzs7MKwQOMkAfKdSojZjGgVN4UQ2AHa6c8TdouTsxvHHXo3QWQHKEK+7/nR1L1yvRvXPIJdOGcc8pR8z0gsyQwI54xDjPP5QsLto/YpxjJewG3C4m/Kxrf8lvCUSCJKlwSReTbIxFGHyaF34448axidOyMU3TjhZeSj0P9kHneAHPfau0IR+ojsaWh9GCHzpENaa3a9MEIfnSA033SI2pfIvoqsiRMFyL9GfmR7rovs0Ll2wk/maQdyYk0DFDlj66Jp620H4gKFUTD94KIwmvjo3PlovuuUdpFvhSgKvSvkRueeH1n+2Py9A+Ki8MbzryLHDZF/btkoaHj2/gVAa2hNQuQ3UEeHHbCx5VoXaIzcMHImTVDX/NvWyLE9HW7HRpFl297UDZvoLiLYnhtajov8oUY4bhBaoxEamkddhFhD+VPXddwL86iLGd4EuUFwuW6mixIV5Nzx0Y01Gmms7bnnzsXUV+AudjjutTVyhtHE8q0xUrPguJH196mPShXmURddXC8aevYV8qPQiz5MndGwZGg9dvOoizuKnLYV2cgPnXPHtkIUmEddnKnX8TrquIsyaDwJPz2FdBEGuWrBRwGyVSzCUWAedzHkYhxYEfo4sdxhZPn2pXONzOMuchSAwsjEu0F+cIlGo2jiO9fOCF0g87iLJhodoDDy0YUThP6naIL8sRMEjueax11seYq8tkZTFY3OJKJQznji+WFk2xfoGrlhYB53ZpI2xLq6nkxG0wvHrcCdOcULo3Nv6g7bq9087swnNahgojsdf0C+edLFjBVm4nvXjoqf415Ege07kzAwT7ooEoSWr1LIEEU+UiEtUFFoBVfmSRdbViwOUDSx7CvrApknXXSpEVfTD8h3UYiCFbCLKStTrrNCdDGkRly6QTT2hlNV97rI0ViTOsnWVrroUYM0T2pIFykaUXPUdH38tMK9LGesEnIFfNNFDjWnoT2Jhp9ca+zYkeayb7kK10WMgn5lYlzPh2+6iDGZqhywqvHmmy5SFHZC66IN6ew8ViH44LiW/6nqVroYUcUBfbRH0yFqxaGLGAo3HW6OXxc3Ktwme91ZI7KnQeiNo6EVWmqA5pv3sAs+kTlX/S0VVYPJZkT1krEg8XKmekd4WJAU7LMv1j9zToZY4i92LiRbqq+DW5rCjBEBKZOq5RXyGTcCnROmozAaeRfm6eG/4EWAfCLyRA4SNn+5E7Y3+aRsR7Y3GqnW0nPrrHbaRV4fBc7fUeQF0dBXVey0s+xNpoWYX3UrlrZ0bjmqbzntrIBbsKEzRt40NE87C+AW8PU40u6rvB5MJ4o5yo/OirhF1dQvWqkAheZpZ3GcTKPgaho57rm3KijmaWd13GJ0tU+xnNHUR+ZpZ/vU1FI0coFz4VqhRnblxG320UcbTdQ3821XZnwuZugjMt8e7ai9ouuF6Ayu6k3bNeGCssZyilkqMU2hd9+rLY5pSpc4eYK6oXIxwpIIaRcowmdgQu9ocPz74LAHu3BDkwTiBU7nBKhUW129hWSck1jCfWlcL7MHAiLPMsYlpOSh3rvGK82leO1WIPFtQlamJzj+hudEeXB/NHg7OD4ysFq4g6ODW5piTok4WKkz1mSMcv9q4OXs7ZuBxHww/2dvR+3wCSR6lF3OrMeh7cy7wfvnfGmIbHFlZ6c8brijiSQcOFmyezVteRFkjmNJuIC9L4f78LCg8QIwVxv2TOaczFRuS4VYDsh3AiyXWS6LyCdsPiczkAvO8vkCMvZAuFiQJNkpDfnakJsniYAf0I/A4CRLcEzg1ZfDV6/h1Sv4uVMJh3RJhMTLDH5Ar793QaQxxJKAcc74Ektg+2fQj3oaUZ53wA2nkhgjNt/rL4kQeE724ccOAEB/KeZgQvUz/O9Kv35eIL1iNEp4p6l3yB7ShOHZOU2Id0/4pZRZqXiCOV7u6a/qz2f9byIJ3xvjdIYl44/KruQ52f/6WUhO0/nXWrw/5cnrXwYPiZA0xcrFCZaLFyuiqWxoQd+ptNmM6F/2d/Rfu3BOuSLqgsTf1HIThAC9A6w4Q+CBykVxsISXBFL1QQXghBM8e4QYxwsyA1acPV1fDosZUEhXiZrw2fEGyuOvZ2cXRJ6XD/ZUNEoH+oJgHi/AhL/u7etf6B3shURIQwGhWi62sjWkvJrnNlbZGVKVIxh/XBkTe+vw1yv3XmtUoFV4mYrt17MzK0kqPZSIwqGfO7VfpcWBzfJUgpESOGw6VNMSelNB03kVoSpvsbtGdAywWfaopHSo7zhbQr+y8Pnw676ajvWp79W2FNhwJFlCGagaCEYD9ESDXlcxKUemPkkiSDuqcc7JhDPJYpaIxtToxzTdJPA5eBSSLAcukYNAPafysZIIHzPy9eyskBiSO5wn8jW8BCGSk5In6s8d4wTHC9jrZ6WcSlGVHpTmy2Lqr3GSE/G8S/vNuYNqip+Oz0iZLHOvgNr2Onhj7H4zV4CW9M+dp9/aDvN7GpMJo6kc4xTPCVcBWRuGWutrJlfh6rNkNuFszokQE07uCCdprFZl/+mvK9BGxKuAJiSVyaOqVzTNyauGmVmZNFWi5WoxlsMYUjxPmZA0FoNAsuwBy1hlgkBiLl3y0CCV5I9r0exjPtfM+jHl1FQJ4w8YE7lgM7N3QWTvD/ByvcbNdYL/bOnxieSPhs2WS5zOoP7Sc9J79o0YPhGyUNsDw1ImC8OGwlEi4LT4+jgkCX4MSMzSmYCjw9Xslefbbe8DIo0q3cLqW7/xm9pCjMsi1TvHNCkKbhVMlRfUqAegJXUJ3ECZdvB1mPcaK0YTukyBVpY5qaDzhRR2QkmZv/qqGVincp/cq+cmuOTB8G7/W/VevTGNORPsTg6sLEtorANeaRyozY4ih+opxAApfEgSslSx621QPigrRE/NYVV2NwpOOMsIl5SIz72qgvS+KhpXqXQTaqzmLxafe8Oca0/HogC1A4YSnAkyG9MkoaKY3ba2bcEbhBzH3/Q49wqT+43peWY5bV6Zm8pIFRkyK6qEosT2uvCz1cw0Sbjz4ibG7G4eunsPc2sL0+S7/rUIV2OoAZFQrw81xPofasGS71Su1kJTWzH0aqIqkNlud+rHDaD51Cl9HbZCNqM5YUJmLC1SBubSZsssV/1rGdrGSGxOsFQLGKegEJIuCUgsdIPFC3jRMo1L53Fho1hwgeoZ8oTMQiy+WcUTA30ncS4J9FbdturLi6yVL9Vy7a3S2z96pZdG7WZR9v/RKy1mnKYxzXCyyeikfmhMBeHODIJPQYjGoMbHUlU8oSxQVhwXvZCfpyNyTxK4pPMFEVKb2QXJ6XxOeHFuomPAKqr3q2eFB39jt2H5g2FJgHonsD+wZrMy9e4dne6rXEPU8gXDq3XpG1G6LYpglHGsIm2shtgIhVE5ULumWil9p6pAVVAhroKK79Rnxtk9VQ2emvPmvPpkToUkfN0Z9anzX69kg1Fp7IHhpFkuy6TbGNZGkpHZizjW5HGBM+pu+Rcyw5PFfZ4nyfMbE7N/hxOxeYNTeTMV5R54TlLCcQJZzjMmykVe5Az9oSqb4TLZ2itUfuxvacqLscOssrZCqN5y3Y1VNVJ8Klpt9anpX4vCmm34r6KmFgl5vblupvaXeVEcFYpGgt+FhZSZODs4EBLH39g94XcJexjEbHmAD07enJ6+Pz19c/D2/buj47eriVeDCMkyYxzzx5XxctucYV6U/Kp7a+3cFE79q2zZqgmEflru80rQRU5nX8/OXPKgvpXSL4je3t8YTctAlp5o1fst6rZ7uRfztrEhvsYJnWFJXCbdPEk8jpaZfNzbRMnSzIv32ttVL7BY6JOnhnbVav4bVLdrdNmz/r/obTXA5WLUfynK7vUpmHD4B/wBzZX3tKvfhSHTp4YJm4NutwVVLZH+usSP9WmiIKmgkt4TmGGJWzoaS0g7Bn0KZ9CPi/lqt5C8OLT/Sz2d8FdlqpZZNdKbuvg+/e231g/F/hCMOamDvWkXKBecPUA/aj1ob0v0HsgIEkKybfFdgdptXblzKRoCRauXr4SO9qzW9lwOb2n4/LXN6REV8oUKnm0vaSrb6pOEPZBZJVkcOxzutxFPV4MiZqdMe2tnwtFWdqupT1ZT/4cmyJZSo2TBz1PdEzTCW4cJBoPBiqx/2ShTP9bEG1lBiD46oe0NkT6ToOnTqKzzselSw0KxMMgM8lTkcUyEuMuT5LE48KtfCoOWzd5WBhtV9DqorP7E5enBhvW3VifhBa43Hd+07J+sIv3Xn92ao+8LnAvVafGSULpIb5itdp9lCUG4NNSOFekK/vJl2nUUrPSpyvjiJP/8GfDmVqq002ql/mzsai1rF5+bdquq2y/vcD7kNJm5+fKW8NJ4mcf1lkA1EeWZwCP0Lq9G47MvgXce3lg++lIfUnyp7oPc8Iudc9VSlJdQvf1B+YO2s82J6qKr7I9uGz6ZW5zVkuKBSn1G2UA0Y9g7evfu7UkPflSD6h39fvi+11gKvePDkze/NyUSKeLjw+PjttTpyfuW1PHJZUviRz/SpUpLvu+Boeqf+i0h0Ds5PHn/rvezAZdEyOPD49OmivKw9oWnWx1X6pte7dlyCCYZ3NF0pjcv5b0W6FhCqoN51pqM9UOxraSa4FyQ/7xJ3ST1Jyd2k4r/9Il1UiFxkhir+1PjAxZkZnipsbp2Nprz3Ui8fyLp9lcW6iu8PwV3nQ80HVL+S1CbpXe/hFUx+GVg685+p6wTu+AU93wZFvL16l6uGR59OQiqIMPUH+kX1cvzy03X81lx4z3QytF3vMwScga9anOLY2EsqSLSQF9zk9mcDFIiG9fg1VvtB/eHg8PBm7ebr8qLZ1vuyJXtkNVvEizzRNIsIRtu7sVreCDA0uQRBCnOVkg6yxhNJahObFNA/h1jK3y8aZh+GkO4VeQH1ny9vv22xOb5Iqpp0z1f76AHgjVeqjjTZgGOBlCWS7glC3xPGS/uiYsQVJNdSh8PVBLRh58bvKQpSDafJ0T3UPoNifJ8BxiHBZN39PtO2e2244jSmbihcrHXO+jVLUnzZGcl7Y8UDdv48tAzXn/bwnzm1RANU+7sfS6j+fXpCtkf2GyZYU5C1hD7hVdh9nVWb90od7i85QWSGtqIztVTUjwdhoraXB+QcZALnKopIf+T4+K+4ReGo/gku96F2TC66r/ElB1ie1vwKyNKiBDFcP6VIYii0/+VIWyoIir3tn/4bYOenQL8tNKB0Qav6TLqktOoPvrXspo0KwsYZaWoS8bOz/8LAAD//1BLBwjK1HOl/A8AAKQ0AABQSwMEFAAIAAgAAAAAAAAAAAAAAAAAAAAAABQAAAB3aW5kb3dzL3NlbmRsb2dzLnBzMaxTT0/bThC976eY35JDIv3s2EFEhdYtNKVglT8Rhkot5bCNJ/aK9a61O3ZbIb57tTYhUEDqoXvyzLx5M29m/GaDAQCE2ZeT03mWZp3l30WtjMgdCFCmgO+NzhUCGaASoTSOYGksWCQrsRUKWingoEFHn4+PTOFC1tN+2M9mZ+n8PD09+bfM/p2La/Q0tbCiQkILZgkCvqZzWEqFoEXVETddwf/hRykXJUgHDjWtKh4aR3sFarqn9QV9ZNxWXeDIFIA6r43UFLKNt+xyVuUK6b3UudTFcHTFug6GHcOlIyt1cdUZg7mgko0Yk0sY/jc8R0eBd/WB0QhuOphFaqxmt4wNDoxQGQnCPVs4SGC3R/BjpNLkPOEHSPx177uwkie8JKp3xuN4+iqcbobxZDuMp+NKLEqpcfxuYao6KYxQzpOuMg9R5GgdT3Zv+M+gckGL1kmjecInUTwJ4jjYjPgtu33QECQwGKa6NdcYnKGjviPYfdTxKLw3GRv0m35Jybz5CyU7m5OtyfTBKlYpqf4oFfKkm+RTWffbfEbfVhBtB1F8x7QGLZRETcHCWItKkDRa+j5fwvnz4gnf+5TNsv25agqpX4Kuy0dhHEZPYUaTkBqtL7geeThb+ddfaf5nclsJPxtliiDHWplfFWryRMNnmc6MwlQ7EnqBR9LRI4fHLWXR2E7+nXXi/6PA1UoS8G8hH11G/Xn7A3nmItZr/x0AAP//UEsHCIVf41EhAgAAXgQAAFBLAQIUABQACAAIAAAAAADK1HOl/A8AAKQ0AAAcAAAAAAAAAAAAAAAAAAAAAAB3aW5kb3dzL3dpbmRvd3Njc2VoZWxwZXIucHMxUEsBAhQAFAAIAAgAAAAAAIVf41EhAgAAXgQAABQAAAAAAAAAAAAAAAAARhAAAHdpbmRvd3Mvc2VuZGxvZ3MucHMxUEsFBgAAAAACAAIAjAAAAKkSAAAAAA==" +$zippedFiles = "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" $global:KubeClusterConfigPath = "c:\k\kubeclusterconfig.json" $fipsEnabled = [System.Convert]::ToBoolean("true") @@ -501,15 +501,19 @@ finally { # Generate CSE result so it can be returned as the CSE response in csecmd.ps1 $ExecutionDuration=$(New-Timespan -Start $StartTime -End $(Get-Date)) - Write-Log "CSE ExecutionDuration: $ExecutionDuration" - - # Windows CSE does not return any error message so we cannot generate below content as the response - # $JsonString = "ExitCode: `"{0}`", Output: `"{1}`", Error: `"{2}`", ExecDuration: `"{3}`"" -f $global:ExitCode, "", $global:ErrorMessage, $ExecutionDuration.TotalSeconds - Write-Log "Generate CSE result to $CSEResultFilePath : $global:ExitCode" - echo $global:ExitCode | Out-File -FilePath $CSEResultFilePath -Encoding utf8 + Write-Log "CSE ExecutionDuration: $ExecutionDuration. ExitCode: $global:ExitCode" + Stop-Transcript - # Flush stdout to C:\AzureData\CustomDataSetupScript.log - [Console]::Out.Flush() + # Remove the parameters in the log file to avoid leaking secrets + $logs=Get-Content $LogFile | Where-Object {$_ -notmatch "^Host Application: "} + $logs | Set-Content $LogFile Upload-GuestVMLogs -ExitCode $global:ExitCode + if ($global:ExitCode -ne 0) { + # $JsonString = "ExitCode: |{0}|, Output: |{1}|, Error: |{2}|" + # Max length of the full error message returned by Windows CSE is ~256. We use 240 to be safe. + $errorMessageLength = "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: ||".Length + $turncatedErrorMessage = $global:ErrorMessage.Substring(0, [Math]::Min(240 - $errorMessageLength, $global:ErrorMessage.Length)) + throw "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: |$turncatedErrorMessage|" + } } diff --git a/pkg/agent/testdata/AKSWindows2019+K8S119/CSECommand b/pkg/agent/testdata/AKSWindows2019+K8S119/CSECommand index a2b9043f044..f903f048ca9 100644 --- a/pkg/agent/testdata/AKSWindows2019+K8S119/CSECommand +++ b/pkg/agent/testdata/AKSWindows2019+K8S119/CSECommand @@ -1 +1 @@ -powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { echo 49 | Out-File -FilePath '%SYSTEMDRIVE%\AzureData\CSEResult.log' -Encoding utf8; exit; }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " >> %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log 2>&1; if (!(Test-Path %SYSTEMDRIVE%\AzureData\CSEResult.log)) { exit 50; }; $code=(Get-Content %SYSTEMDRIVE%\AzureData\CSEResult.log); exit $code \ No newline at end of file +powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { throw 'ExitCode: |49|, Output: |WINDOWS_CSE_ERROR_NO_CUSTOM_DATA_BIN|, Error: |C:\AzureData\CustomData.bin does not exist.|' }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " \ No newline at end of file diff --git a/pkg/agent/testdata/AKSWindows2019+K8S119/CustomData b/pkg/agent/testdata/AKSWindows2019+K8S119/CustomData index aca8a21177c..6eb69875b98 100644 --- a/pkg/agent/testdata/AKSWindows2019+K8S119/CustomData +++ b/pkg/agent/testdata/AKSWindows2019+K8S119/CustomData @@ -70,7 +70,7 @@ param( $StartTime=Get-Date $global:ExitCode=0 $global:ErrorMessage="" - +Start-Transcript -Path $LogFile # These globals will not change between nodes in the same cluster, so they are not # passed as powershell parameters @@ -189,7 +189,7 @@ $global:TLSBootstrapToken = "" $global:IsDisableWindowsOutboundNat = [System.Convert]::ToBoolean("false"); # Base64 representation of ZIP archive -$zippedFiles = "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" +$zippedFiles = "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" $global:KubeClusterConfigPath = "c:\k\kubeclusterconfig.json" $fipsEnabled = [System.Convert]::ToBoolean("false") @@ -501,15 +501,19 @@ finally { # Generate CSE result so it can be returned as the CSE response in csecmd.ps1 $ExecutionDuration=$(New-Timespan -Start $StartTime -End $(Get-Date)) - Write-Log "CSE ExecutionDuration: $ExecutionDuration" - - # Windows CSE does not return any error message so we cannot generate below content as the response - # $JsonString = "ExitCode: `"{0}`", Output: `"{1}`", Error: `"{2}`", ExecDuration: `"{3}`"" -f $global:ExitCode, "", $global:ErrorMessage, $ExecutionDuration.TotalSeconds - Write-Log "Generate CSE result to $CSEResultFilePath : $global:ExitCode" - echo $global:ExitCode | Out-File -FilePath $CSEResultFilePath -Encoding utf8 + Write-Log "CSE ExecutionDuration: $ExecutionDuration. ExitCode: $global:ExitCode" + Stop-Transcript - # Flush stdout to C:\AzureData\CustomDataSetupScript.log - [Console]::Out.Flush() + # Remove the parameters in the log file to avoid leaking secrets + $logs=Get-Content $LogFile | Where-Object {$_ -notmatch "^Host Application: "} + $logs | Set-Content $LogFile Upload-GuestVMLogs -ExitCode $global:ExitCode + if ($global:ExitCode -ne 0) { + # $JsonString = "ExitCode: |{0}|, Output: |{1}|, Error: |{2}|" + # Max length of the full error message returned by Windows CSE is ~256. We use 240 to be safe. + $errorMessageLength = "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: ||".Length + $turncatedErrorMessage = $global:ErrorMessage.Substring(0, [Math]::Min(240 - $errorMessageLength, $global:ErrorMessage.Length)) + throw "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: |$turncatedErrorMessage|" + } } diff --git a/pkg/agent/testdata/AKSWindows2019+KubeletClientTLSBootstrapping/CSECommand b/pkg/agent/testdata/AKSWindows2019+KubeletClientTLSBootstrapping/CSECommand index a2b9043f044..f903f048ca9 100644 --- a/pkg/agent/testdata/AKSWindows2019+KubeletClientTLSBootstrapping/CSECommand +++ b/pkg/agent/testdata/AKSWindows2019+KubeletClientTLSBootstrapping/CSECommand @@ -1 +1 @@ -powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { echo 49 | Out-File -FilePath '%SYSTEMDRIVE%\AzureData\CSEResult.log' -Encoding utf8; exit; }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " >> %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log 2>&1; if (!(Test-Path %SYSTEMDRIVE%\AzureData\CSEResult.log)) { exit 50; }; $code=(Get-Content %SYSTEMDRIVE%\AzureData\CSEResult.log); exit $code \ No newline at end of file +powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { throw 'ExitCode: |49|, Output: |WINDOWS_CSE_ERROR_NO_CUSTOM_DATA_BIN|, Error: |C:\AzureData\CustomData.bin does not exist.|' }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " \ No newline at end of file diff --git a/pkg/agent/testdata/AKSWindows2019+KubeletClientTLSBootstrapping/CustomData b/pkg/agent/testdata/AKSWindows2019+KubeletClientTLSBootstrapping/CustomData index 43004408dc7..a5c4b291d87 100644 --- a/pkg/agent/testdata/AKSWindows2019+KubeletClientTLSBootstrapping/CustomData +++ b/pkg/agent/testdata/AKSWindows2019+KubeletClientTLSBootstrapping/CustomData @@ -70,7 +70,7 @@ param( $StartTime=Get-Date $global:ExitCode=0 $global:ErrorMessage="" - +Start-Transcript -Path $LogFile # These globals will not change between nodes in the same cluster, so they are not # passed as powershell parameters @@ -189,7 +189,7 @@ $global:TLSBootstrapToken = "07401b.f395accd246ae52d" $global:IsDisableWindowsOutboundNat = [System.Convert]::ToBoolean("false"); # Base64 representation of ZIP archive -$zippedFiles = "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" +$zippedFiles = "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" $global:KubeClusterConfigPath = "c:\k\kubeclusterconfig.json" $fipsEnabled = [System.Convert]::ToBoolean("false") @@ -501,15 +501,19 @@ finally { # Generate CSE result so it can be returned as the CSE response in csecmd.ps1 $ExecutionDuration=$(New-Timespan -Start $StartTime -End $(Get-Date)) - Write-Log "CSE ExecutionDuration: $ExecutionDuration" - - # Windows CSE does not return any error message so we cannot generate below content as the response - # $JsonString = "ExitCode: `"{0}`", Output: `"{1}`", Error: `"{2}`", ExecDuration: `"{3}`"" -f $global:ExitCode, "", $global:ErrorMessage, $ExecutionDuration.TotalSeconds - Write-Log "Generate CSE result to $CSEResultFilePath : $global:ExitCode" - echo $global:ExitCode | Out-File -FilePath $CSEResultFilePath -Encoding utf8 + Write-Log "CSE ExecutionDuration: $ExecutionDuration. ExitCode: $global:ExitCode" + Stop-Transcript - # Flush stdout to C:\AzureData\CustomDataSetupScript.log - [Console]::Out.Flush() + # Remove the parameters in the log file to avoid leaking secrets + $logs=Get-Content $LogFile | Where-Object {$_ -notmatch "^Host Application: "} + $logs | Set-Content $LogFile Upload-GuestVMLogs -ExitCode $global:ExitCode + if ($global:ExitCode -ne 0) { + # $JsonString = "ExitCode: |{0}|, Output: |{1}|, Error: |{2}|" + # Max length of the full error message returned by Windows CSE is ~256. We use 240 to be safe. + $errorMessageLength = "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: ||".Length + $turncatedErrorMessage = $global:ErrorMessage.Substring(0, [Math]::Min(240 - $errorMessageLength, $global:ErrorMessage.Length)) + throw "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: |$turncatedErrorMessage|" + } } diff --git a/pkg/agent/testdata/AKSWindows2019+ManagedIdentity/CSECommand b/pkg/agent/testdata/AKSWindows2019+ManagedIdentity/CSECommand index 1300beb7a95..292421a72d2 100644 --- a/pkg/agent/testdata/AKSWindows2019+ManagedIdentity/CSECommand +++ b/pkg/agent/testdata/AKSWindows2019+ManagedIdentity/CSECommand @@ -1 +1 @@ -powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -UserAssignedClientID ''userAssignedID'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''msi'' -AADClientSecret '''' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { echo 49 | Out-File -FilePath '%SYSTEMDRIVE%\AzureData\CSEResult.log' -Encoding utf8; exit; }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " >> %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log 2>&1; if (!(Test-Path %SYSTEMDRIVE%\AzureData\CSEResult.log)) { exit 50; }; $code=(Get-Content %SYSTEMDRIVE%\AzureData\CSEResult.log); exit $code \ No newline at end of file +powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -UserAssignedClientID ''userAssignedID'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''msi'' -AADClientSecret '''' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { throw 'ExitCode: |49|, Output: |WINDOWS_CSE_ERROR_NO_CUSTOM_DATA_BIN|, Error: |C:\AzureData\CustomData.bin does not exist.|' }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " \ No newline at end of file diff --git a/pkg/agent/testdata/AKSWindows2019+ManagedIdentity/CustomData b/pkg/agent/testdata/AKSWindows2019+ManagedIdentity/CustomData index 7bf186f2b26..e1883ba6d7d 100644 --- a/pkg/agent/testdata/AKSWindows2019+ManagedIdentity/CustomData +++ b/pkg/agent/testdata/AKSWindows2019+ManagedIdentity/CustomData @@ -70,7 +70,7 @@ param( $StartTime=Get-Date $global:ExitCode=0 $global:ErrorMessage="" - +Start-Transcript -Path $LogFile # These globals will not change between nodes in the same cluster, so they are not # passed as powershell parameters @@ -189,7 +189,7 @@ $global:TLSBootstrapToken = "" $global:IsDisableWindowsOutboundNat = [System.Convert]::ToBoolean("false"); # Base64 representation of ZIP archive -$zippedFiles = "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" +$zippedFiles = "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" $global:KubeClusterConfigPath = "c:\k\kubeclusterconfig.json" $fipsEnabled = [System.Convert]::ToBoolean("false") @@ -501,15 +501,19 @@ finally { # Generate CSE result so it can be returned as the CSE response in csecmd.ps1 $ExecutionDuration=$(New-Timespan -Start $StartTime -End $(Get-Date)) - Write-Log "CSE ExecutionDuration: $ExecutionDuration" - - # Windows CSE does not return any error message so we cannot generate below content as the response - # $JsonString = "ExitCode: `"{0}`", Output: `"{1}`", Error: `"{2}`", ExecDuration: `"{3}`"" -f $global:ExitCode, "", $global:ErrorMessage, $ExecutionDuration.TotalSeconds - Write-Log "Generate CSE result to $CSEResultFilePath : $global:ExitCode" - echo $global:ExitCode | Out-File -FilePath $CSEResultFilePath -Encoding utf8 + Write-Log "CSE ExecutionDuration: $ExecutionDuration. ExitCode: $global:ExitCode" + Stop-Transcript - # Flush stdout to C:\AzureData\CustomDataSetupScript.log - [Console]::Out.Flush() + # Remove the parameters in the log file to avoid leaking secrets + $logs=Get-Content $LogFile | Where-Object {$_ -notmatch "^Host Application: "} + $logs | Set-Content $LogFile Upload-GuestVMLogs -ExitCode $global:ExitCode + if ($global:ExitCode -ne 0) { + # $JsonString = "ExitCode: |{0}|, Output: |{1}|, Error: |{2}|" + # Max length of the full error message returned by Windows CSE is ~256. We use 240 to be safe. + $errorMessageLength = "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: ||".Length + $turncatedErrorMessage = $global:ErrorMessage.Substring(0, [Math]::Min(240 - $errorMessageLength, $global:ErrorMessage.Length)) + throw "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: |$turncatedErrorMessage|" + } } diff --git a/pkg/agent/testdata/AKSWindows2019+SecurityProfile/CSECommand b/pkg/agent/testdata/AKSWindows2019+SecurityProfile/CSECommand index a2b9043f044..f903f048ca9 100644 --- a/pkg/agent/testdata/AKSWindows2019+SecurityProfile/CSECommand +++ b/pkg/agent/testdata/AKSWindows2019+SecurityProfile/CSECommand @@ -1 +1 @@ -powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { echo 49 | Out-File -FilePath '%SYSTEMDRIVE%\AzureData\CSEResult.log' -Encoding utf8; exit; }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " >> %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log 2>&1; if (!(Test-Path %SYSTEMDRIVE%\AzureData\CSEResult.log)) { exit 50; }; $code=(Get-Content %SYSTEMDRIVE%\AzureData\CSEResult.log); exit $code \ No newline at end of file +powershell.exe -ExecutionPolicy Unrestricted -command " $arguments = ' -MasterIP ''uttestdom-dns-5d7c849e.hcp.southcentralus.azmk8s.io'' -KubeDnsServiceIp ''10.0.0.10'' -MasterFQDNPrefix ''uttestdom'' -Location ''southcentralus'' -TargetEnvironment ''AzurePublicCloud'' -AgentKey '''' -AADClientId ''ClientID'' -AADClientSecret ''U2VjcmV0'' -NetworkAPIVersion 2018-08-01 -LogFile %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; if (!(Test-Path $inputFile)) { throw 'ExitCode: |49|, Output: |WINDOWS_CSE_ERROR_NO_CUSTOM_DATA_BIN|, Error: |C:\AzureData\CustomData.bin does not exist.|' }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); " \ No newline at end of file diff --git a/pkg/agent/testdata/AKSWindows2019+SecurityProfile/CustomData b/pkg/agent/testdata/AKSWindows2019+SecurityProfile/CustomData index 34042944d54..9e056e56e7c 100644 --- a/pkg/agent/testdata/AKSWindows2019+SecurityProfile/CustomData +++ b/pkg/agent/testdata/AKSWindows2019+SecurityProfile/CustomData @@ -70,7 +70,7 @@ param( $StartTime=Get-Date $global:ExitCode=0 $global:ErrorMessage="" - +Start-Transcript -Path $LogFile # These globals will not change between nodes in the same cluster, so they are not # passed as powershell parameters @@ -189,7 +189,7 @@ $global:TLSBootstrapToken = "" $global:IsDisableWindowsOutboundNat = [System.Convert]::ToBoolean("false"); # Base64 representation of ZIP archive -$zippedFiles = "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" +$zippedFiles = "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" $global:KubeClusterConfigPath = "c:\k\kubeclusterconfig.json" $fipsEnabled = [System.Convert]::ToBoolean("false") @@ -501,15 +501,19 @@ finally { # Generate CSE result so it can be returned as the CSE response in csecmd.ps1 $ExecutionDuration=$(New-Timespan -Start $StartTime -End $(Get-Date)) - Write-Log "CSE ExecutionDuration: $ExecutionDuration" - - # Windows CSE does not return any error message so we cannot generate below content as the response - # $JsonString = "ExitCode: `"{0}`", Output: `"{1}`", Error: `"{2}`", ExecDuration: `"{3}`"" -f $global:ExitCode, "", $global:ErrorMessage, $ExecutionDuration.TotalSeconds - Write-Log "Generate CSE result to $CSEResultFilePath : $global:ExitCode" - echo $global:ExitCode | Out-File -FilePath $CSEResultFilePath -Encoding utf8 + Write-Log "CSE ExecutionDuration: $ExecutionDuration. ExitCode: $global:ExitCode" + Stop-Transcript - # Flush stdout to C:\AzureData\CustomDataSetupScript.log - [Console]::Out.Flush() + # Remove the parameters in the log file to avoid leaking secrets + $logs=Get-Content $LogFile | Where-Object {$_ -notmatch "^Host Application: "} + $logs | Set-Content $LogFile Upload-GuestVMLogs -ExitCode $global:ExitCode + if ($global:ExitCode -ne 0) { + # $JsonString = "ExitCode: |{0}|, Output: |{1}|, Error: |{2}|" + # Max length of the full error message returned by Windows CSE is ~256. We use 240 to be safe. + $errorMessageLength = "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: ||".Length + $turncatedErrorMessage = $global:ErrorMessage.Substring(0, [Math]::Min(240 - $errorMessageLength, $global:ErrorMessage.Length)) + throw "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: |$turncatedErrorMessage|" + } } diff --git a/pkg/templates/templates_generated.go b/pkg/templates/templates_generated.go index 5827de3a052..7ab9227e26a 100644 --- a/pkg/templates/templates_generated.go +++ b/pkg/templates/templates_generated.go @@ -7303,10 +7303,10 @@ $arguments = ' -CSEResultFilePath %SYSTEMDRIVE%\AzureData\CSEResult.log'; $inputFile = '%SYSTEMDRIVE%\AzureData\CustomData.bin'; $outputFile = '%SYSTEMDRIVE%\AzureData\CustomDataSetupScript.ps1'; -if (!(Test-Path $inputFile)) { echo 49 | Out-File -FilePath '%SYSTEMDRIVE%\AzureData\CSEResult.log' -Encoding utf8; exit; }; +if (!(Test-Path $inputFile)) { throw 'ExitCode: |49|, Output: |WINDOWS_CSE_ERROR_NO_CUSTOM_DATA_BIN|, Error: |C:\AzureData\CustomData.bin does not exist.|' }; Copy-Item $inputFile $outputFile; Invoke-Expression('{0} {1}' -f $outputFile, $arguments); -\" >> %SYSTEMDRIVE%\AzureData\CustomDataSetupScript.log 2>&1; if (!(Test-Path %SYSTEMDRIVE%\AzureData\CSEResult.log)) { exit 50; }; $code=(Get-Content %SYSTEMDRIVE%\AzureData\CSEResult.log); exit $code`) +\"`) func windowsCsecmdPs1Bytes() ([]byte, error) { return _windowsCsecmdPs1, nil @@ -7395,7 +7395,7 @@ param( $StartTime=Get-Date $global:ExitCode=0 $global:ErrorMessage="" - +Start-Transcript -Path $LogFile # These globals will not change between nodes in the same cluster, so they are not # passed as powershell parameters @@ -7836,17 +7836,21 @@ finally { # Generate CSE result so it can be returned as the CSE response in csecmd.ps1 $ExecutionDuration=$(New-Timespan -Start $StartTime -End $(Get-Date)) - Write-Log "CSE ExecutionDuration: $ExecutionDuration" - - # Windows CSE does not return any error message so we cannot generate below content as the response - # $JsonString = "ExitCode: `+"`"+`"{0}`+"`"+`", Output: `+"`"+`"{1}`+"`"+`", Error: `+"`"+`"{2}`+"`"+`", ExecDuration: `+"`"+`"{3}`+"`"+`"" -f $global:ExitCode, "", $global:ErrorMessage, $ExecutionDuration.TotalSeconds - Write-Log "Generate CSE result to $CSEResultFilePath : $global:ExitCode" - echo $global:ExitCode | Out-File -FilePath $CSEResultFilePath -Encoding utf8 + Write-Log "CSE ExecutionDuration: $ExecutionDuration. ExitCode: $global:ExitCode" + Stop-Transcript - # Flush stdout to C:\AzureData\CustomDataSetupScript.log - [Console]::Out.Flush() + # Remove the parameters in the log file to avoid leaking secrets + $logs=Get-Content $LogFile | Where-Object {$_ -notmatch "^Host Application: "} + $logs | Set-Content $LogFile Upload-GuestVMLogs -ExitCode $global:ExitCode + if ($global:ExitCode -ne 0) { + # $JsonString = "ExitCode: |{0}|, Output: |{1}|, Error: |{2}|" + # Max length of the full error message returned by Windows CSE is ~256. We use 240 to be safe. + $errorMessageLength = "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: ||".Length + $turncatedErrorMessage = $global:ErrorMessage.Substring(0, [Math]::Min(240 - $errorMessageLength, $global:ErrorMessage.Length)) + throw "ExitCode: |$global:ExitCode|, Output: |$($global:ErrorCodeNames[$global:ExitCode])|, Error: |$turncatedErrorMessage|" + } } `) @@ -7926,6 +7930,8 @@ var _windowsWindowscsehelperPs1 = []byte(`# This script is used to define basic # It is better to define functions in the scripts under staging/cse/windows. # Define all exit codes in Windows CSE +# It must match `+"`"+`[A-Z_]+`+"`"+` +$global:WINDOWS_CSE_SUCCESS=0 $global:WINDOWS_CSE_ERROR_UNKNOWN=1 # For unexpected error caught by the catch block in kuberneteswindowssetup.ps1 $global:WINDOWS_CSE_ERROR_DOWNLOAD_FILE_WITH_RETRY=2 $global:WINDOWS_CSE_ERROR_INVOKE_EXECUTABLE=3 @@ -7988,6 +7994,71 @@ $global:WINDOWS_CSE_ERROR_GPU_DRIVER_INVALID_SIGNATURE=59 $global:WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_EXCEPTION=60 $global:WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_URL_NOT_EXE=61 +# Please add new error code for downloading new packages in RP code too +$global:ErrorCodeNames = @( + "WINDOWS_CSE_SUCCESS", + "WINDOWS_CSE_ERROR_UNKNOWN", + "WINDOWS_CSE_ERROR_DOWNLOAD_FILE_WITH_RETRY", + "WINDOWS_CSE_ERROR_INVOKE_EXECUTABLE", + "WINDOWS_CSE_ERROR_FILE_NOT_EXIST", + "WINDOWS_CSE_ERROR_CHECK_API_SERVER_CONNECTIVITY", + "WINDOWS_CSE_ERROR_PAUSE_IMAGE_NOT_EXIST", + "WINDOWS_CSE_ERROR_GET_SUBNET_PREFIX", + "WINDOWS_CSE_ERROR_GENERATE_TOKEN_FOR_ARM", + "WINDOWS_CSE_ERROR_NETWORK_INTERFACES_NOT_EXIST", + "WINDOWS_CSE_ERROR_NETWORK_ADAPTER_NOT_EXIST", + "WINDOWS_CSE_ERROR_MANAGEMENT_IP_NOT_EXIST", + "WINDOWS_CSE_ERROR_CALICO_SERVICE_ACCOUNT_NOT_EXIST", + "WINDOWS_CSE_ERROR_CONTAINERD_NOT_INSTALLED", + "WINDOWS_CSE_ERROR_CONTAINERD_NOT_RUNNING", + "WINDOWS_CSE_ERROR_OPENSSH_NOT_INSTALLED", + "WINDOWS_CSE_ERROR_OPENSSH_FIREWALL_NOT_CONFIGURED", + "WINDOWS_CSE_ERROR_INVALID_PARAMETER_IN_AZURE_CONFIG", + "WINDOWS_CSE_ERROR_NO_DOCKER_TO_BUILD_PAUSE_CONTAINER", + "WINDOWS_CSE_ERROR_GET_CA_CERTIFICATES", + "WINDOWS_CSE_ERROR_DOWNLOAD_CA_CERTIFICATES", + "WINDOWS_CSE_ERROR_EMPTY_CA_CERTIFICATES", + "WINDOWS_CSE_ERROR_ENABLE_SECURE_TLS", + "WINDOWS_CSE_ERROR_GMSA_EXPAND_ARCHIVE", + "WINDOWS_CSE_ERROR_GMSA_ENABLE_POWERSHELL_PRIVILEGE", + "WINDOWS_CSE_ERROR_GMSA_SET_REGISTRY_PERMISSION", + "WINDOWS_CSE_ERROR_GMSA_SET_REGISTRY_VALUES", + "WINDOWS_CSE_ERROR_GMSA_IMPORT_CCGEVENTS", + "WINDOWS_CSE_ERROR_GMSA_IMPORT_CCGAKVPPLUGINEVENTS", + "WINDOWS_CSE_ERROR_NOT_FOUND_MANAGEMENT_IP", + "WINDOWS_CSE_ERROR_NOT_FOUND_BUILD_NUMBER", + "WINDOWS_CSE_ERROR_NOT_FOUND_PROVISIONING_SCRIPTS", + "WINDOWS_CSE_ERROR_START_NODE_RESET_SCRIPT_TASK", + "WINDOWS_CSE_ERROR_DOWNLOAD_CSE_PACKAGE", + "WINDOWS_CSE_ERROR_DOWNLOAD_KUBERNETES_PACKAGE", + "WINDOWS_CSE_ERROR_DOWNLOAD_CNI_PACKAGE", + "WINDOWS_CSE_ERROR_DOWNLOAD_HNS_MODULE", + "WINDOWS_CSE_ERROR_DOWNLOAD_CALICO_PACKAGE", + "WINDOWS_CSE_ERROR_DOWNLOAD_GMSA_PACKAGE", + "WINDOWS_CSE_ERROR_DOWNLOAD_CSI_PROXY_PACKAGE", + "WINDOWS_CSE_ERROR_DOWNLOAD_CONTAINERD_PACKAGE", + "WINDOWS_CSE_ERROR_SET_TCP_DYNAMIC_PORT_RANGE", + "WINDOWS_CSE_ERROR_BUILD_DOCKER_PAUSE_CONTAINER", + "WINDOWS_CSE_ERROR_PULL_PAUSE_IMAGE", + "WINDOWS_CSE_ERROR_BUILD_TAG_PAUSE_IMAGE", + "WINDOWS_CSE_ERROR_CONTAINERD_BINARY_EXIST", + "WINDOWS_CSE_ERROR_SET_TCP_EXCLUDE_PORT_RANGE", + "WINDOWS_CSE_ERROR_SET_UDP_DYNAMIC_PORT_RANGE", + "WINDOWS_CSE_ERROR_SET_UDP_EXCLUDE_PORT_RANGE", + "WINDOWS_CSE_ERROR_NO_CUSTOM_DATA_BIN", + "WINDOWS_CSE_ERROR_NO_CSE_RESULT_LOG", + "WINDOWS_CSE_ERROR_COPY_LOG_COLLECTION_SCRIPTS", + "WINDOWS_CSE_ERROR_RESIZE_OS_DRIVE", + "WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_FAILED", + "WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_TIMEOUT", + "WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_VM_SIZE_NOT_SUPPORTED", + "WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_URL_NOT_SET", + "WINDOWS_CSE_ERROR_GPU_SKU_INFO_NOT_FOUND", + "WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_DOWNLOAD_FAILURE", + "WINDOWS_CSE_ERROR_GPU_DRIVER_INVALID_SIGNATURE", + "WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_EXCEPTION", + "WINDOWS_CSE_ERROR_GPU_DRIVER_INSTALLATION_URL_NOT_EXE" +) # NOTE: KubernetesVersion does not contain "v" $global:MinimalKubernetesVersionWithLatestContainerd = "1.28.0" # Will change it to the correct version when we support new Windows containerd version @@ -8074,7 +8145,8 @@ function Set-ExitCode ) Write-Log "Set ExitCode to $ExitCode and exit. Error: $ErrorMessage" $global:ExitCode=$ExitCode - $global:ErrorMessage=$ErrorMessage + # we use | as the separator as a workaround since " or ' do not work as expected per the testings + $global:ErrorMessage=($ErrorMessage -replace '\|', '%7C') exit $ExitCode }