Azure Расширение пользовательского скрипта VM - случайный сбой - PullRequest
2 голосов
/ 22 марта 2020

Я устранял неполадки CustomScriptExtension с использованием Terraform Я использую его для развертывания и запуска сценария powershell, который работает в 80% случаев, когда я развертываю. Я проверил 48 развертываний VM. Когда происходит сбой, скажем, на VM2, например, при следующем запуске, он успешен на VM2

Я использую Azure DevOps для его развертывания.

Мои мысли:

  • По моему мнению, мы можем исключить Terraform из картины, поскольку проблема, кажется, на уровне Azure

Вот код в моем модуле Terraform:

resource "azurerm_virtual_machine_extension" "extension" {
  name                 = "Proxy-Settings"
  location             = var.location
  resource_group_name  = var.resource_group_name
  virtual_machine_name = azurerm_virtual_machine.windows_vm.name
  publisher            = "Microsoft.Compute"
  type                 = "CustomScriptExtension"
  type_handler_version = "1.9"

  settings = <<SETTINGS
    {
        "fileUris": ["https://this_is_a_secret.blob.core.windows.net/scripts/autoProxyConfig.ps1"]
    }
    SETTINGS

  protected_settings = <<PROTECTED_SETTINGS
    {
      "commandToExecute"  : "powershell -ExecutionPolicy Unrestricted -File autoProxyConfig.ps1",
      "storageAccountName": "this_is_a_secret",
      "storageAccountKey" : "this_is_a_secret"
    }
    PROTECTED_SETTINGS
}

Обратите внимание, что сообщение об ошибке из конвейера DevOps довольно бесполезно:

2020/03/22 19:31:36 [ОШИБКА] module.the_vm_2: eval: * terraform.EvalApplyPost, err: Code = "VMExtensionProvisioningError" Message = "VM сообщает об ошибке при обработке расширения« Proxy-Settings ». Сообщение об ошибке: \« Закончено выполнение команда \ "\ r \ n \ r \ nБолее подробная информация об устранении неполадок доступна по адресу https://aka.ms/VMExtensionCSEWindowsTroubleshoot

И вот еще одна версия этой ошибки:

2020-03-22T19: 31: 37.5021338Z [0m в строке .terraform / modules / the_vm_2 / main.tf 79, в ресурсе "azurer" m_virtual_machine_extension "" расширение ": 2020-03-22T19: 31: 37.5022143Z 79: ресурс" azurerm_virtual_machine_extension "" расширение "[4m {[0m 2020-03-22T19: 31: 37.5022853Z [0 м 2020-03-22T19: 31: 37.5023130Z [0m [0m 2020-03-22T19: 31: 37.5023249Z 2020-03-22T19: 31: 37.5060259Z ## [ошибка] Bash с кодом «1».

Вот скрипт PowerShell:

    #Ensure network adapter is not set to Public
$networkAdapter = Get-NetAdapter | Where-Object {$_.Status -match "Up"} | Get-NetIPAddress | Where-Object {$_.AddressFamily -match "IPv4" -AND $_.PrefixOrigin -match "Dhcp"}
$networkCategory = $networkAdapter | Get-NetConnectionProfile | Select-Object -ExpandProperty NetworkCategory
if ($networkCategory -eq "Public") {
    $interfaceIndex = $networkAdapter | Select-Object -ExpandProperty InterfaceIndex
    try {
        Write-Output "Changing connection profile for network adapter to private as it is not currently configured as DomainAuthenticated or Private..."
        Set-NetConnectionProfile -InterfaceIndex $interfaceIndex -NetworkCategory Private
    }
    catch {
        Write-Error -Exception "$(Get-TimeStamp): What didn't happen" -Message "$_.Exception.Message"
    }    
}

#Prepare pacURL and hexValue parameters
$hexOutput = ""
#Get the current IP Address of the machine, filtering out irrelevant IP addresses
$IPAddr = $networkAdapter | Select-Object -ExpandProperty IPAddress
$splitIP = $IPAddr.split('.')

if ($splitIP[1] -eq "185") {
    $secondOctet = "184"
}
else {
    $secondOctet = $splitIP[1] 
}

$subnetOctets = @($splitIP[0],$secondOctet)
foreach ($octet in $subnetOctets) {
    $octet | Format-Hex | Select-Object -ExpandProperty Bytes | foreach-object {$hexOutput+= [System.Convert]::ToString($_,16)}
    $hexOutput += "2e"
}
$pacURL = "http://"+$splitIP[0]+"."+$secondOctet+".228.4/proxySettings.pac"
$hexValue = "46000000090000000d000000000000000000000025000000687474703a2f2f"+$hexOutput+"3232382e342f70726f787953657474696e67732e7061630000000000000000000000000000000000000000000000000000000000000000"

try {
    Write-Output "Setting proxy settings for machine..."
    #Add these registry values
    &REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxySettingsPerUser /t REG_DWORD /d "0" /f
    &REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings" /v EnableAutoProxyResultCache /t REG_DWORD /d "0" /f
    &REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d "1" /f
    &REG ADD "HKLM\Software\Policies\Microsoft\Internet Explorer\Control Panel" /v Autoconfig /t REG_DWORD /d "1" /f
    &REG ADD "HKLM\Software\Policies\Microsoft\Internet Explorer\Control Panel" /v Proxy /t REG_DWORD /d "1" /f
    &REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections" /v DefaultConnectionSettings /t REG_BINARY /d $hexValue /f
    &REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections" /v SavedLegacySettings /t REG_BINARY /d $hexValue /f
    &REG ADD "HKLM\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\Connections" /v DefaultConnectionSettings /t REG_BINARY /d $hexValue /f
    &REG ADD "HKLM\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\Connections" /v SavedLegacySettings /t REG_BINARY /d $hexValue /f
    &REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v AutoConfigURL /t REG_SZ /d $pacURL /f

    #Delete these registry values if they exist
    &REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections" /v WinHttPSettings /f
    &REG DELETE "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /f
    &REG DELETE "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyOverride /f
}
catch {
    Write-Error -Exception "Unable to apply proxy registry settings!" -Message "$_.Exception.Message"
}

exit 0
...