Я устранял неполадки 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
® ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxySettingsPerUser /t REG_DWORD /d "0" /f
® ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings" /v EnableAutoProxyResultCache /t REG_DWORD /d "0" /f
® ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d "1" /f
® ADD "HKLM\Software\Policies\Microsoft\Internet Explorer\Control Panel" /v Autoconfig /t REG_DWORD /d "1" /f
® ADD "HKLM\Software\Policies\Microsoft\Internet Explorer\Control Panel" /v Proxy /t REG_DWORD /d "1" /f
® ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections" /v DefaultConnectionSettings /t REG_BINARY /d $hexValue /f
® ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections" /v SavedLegacySettings /t REG_BINARY /d $hexValue /f
® ADD "HKLM\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\Connections" /v DefaultConnectionSettings /t REG_BINARY /d $hexValue /f
® ADD "HKLM\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\Connections" /v SavedLegacySettings /t REG_BINARY /d $hexValue /f
® ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v AutoConfigURL /t REG_SZ /d $pacURL /f
#Delete these registry values if they exist
® DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections" /v WinHttPSettings /f
® DELETE "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /f
® 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