Article number
000003484
Affected Versions
7.5
6.5
7.0
Source Hypervisor
All
Target Hypervisor
All

Error: “Changing recovery VRA to a lower version is not supported. Please upgrade the VRA to the latest version or select another VRA”

Viewed 341 times

Summary

An administrator receives an error while attempting to Change Recovery Host due to version differences for the VRAs, yet they show Latest for code version.

Root Cause

Even if the VRAs show as "Latest", this only supports that the VRAs are on the same code family, not necessarily the same exact version (i.e. 7.5 and 7.5 Update 1).

Symptoms

An administrator tries to change the recovery VRA and gets the below error:

Changing recovery VRA to a lower version is not supported. Please upgrade the VRA to the latest version or select another VRA

The following log line will appear as well in the ZVM logs:

LogVolumeManager,ValidateNewVraVersion,"Changing recovery VRA to a lower version is not supported. New host VRA version : 6.5 Update 3 Patch 1 Build 065314003, New host identifier : [Host host-xxx, server yyy], Old host VRA version : 6.5 Update 4 Patch 1 Build 065414015, Old host identifier : [Host host-xxx, server yyy]",

Also, the GUI may also show all VRA Versions are "Latest".

Solution

To workaround this issue, attempt one of the below workarounds:

1. Upgrade the ZVM to the next version (if applicable) and upgrade the VRAs. This will put all VRAs to the same exact code version. Note: This issue is permanently fixed in 8.0.

2. Re-install one of the lower version VRAs so it will be on the latest version.

3. Run the upgrade manually via API for each VRA:

  1. Find the Vra Identifier of the relevant VRAs. This can be done with the script below using the PowerShell ISE:

################################################
# Configure the variables below
################################################
$ZertoServer = "ZvmIP"
$ZertoPort = "9669"
$creds = Get-Credential
$ZertoUser = $creds.UserName
$ZertoPassword = $creds.Password
$ZertoPassword = [Runtime.InteropServices.Marshal]::PtrToStringAuto(
[Runtime.InteropServices.Marshal]::SecureStringToBSTR($ZertoPassword))
add-type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@ -ErrorAction Ignore
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
$BaseURL = "https://" + $ZertoServer + ":"+$ZertoPort+"/v1/"
# Authenticating with Zerto APIs
$xZertoSessionURL = $BaseURL + "session/add"
$AuthInfo = ("{0}:{1}" -f $ZertoUser,$ZertoPassword)
$AuthInfo = [System.Text.Encoding]::UTF8.GetBytes($AuthInfo)
$AuthInfo = [System.Convert]::ToBase64String($AuthInfo)
$Headers = @{Authorization=("Basic {0}" -f $AuthInfo)}
$SessionBody = '{"AuthenticationMethod": "1"}'
$TypeJSON = "application/JSON"
$TypeXML = "application/XML"
Try
{
$xZertoSessionResponse = Invoke-WebRequest -Uri $xZertoSessionURL -Headers $Headers -Method POST -Body $SessionBody -ContentType $TypeJSON
}
Catch {
Write-Host $_.Exception.ToString()
$error[0] | Format-List -Force
}
$xZertoSessionResponse = Invoke-WebRequest -Uri $xZertoSessionURL -Headers $headers -Method POST -Body $sessionBody -ContentType $TypeJSON
#Extracting x-zerto-session from the response, and adding it to the actual API
$xZertoSession = $xZertoSessionResponse.headers.get_item("x-zerto-session")
$ZertoSessionHeader = @{"x-zerto-session"=$xZertoSession; "Accept"=$TypeJSON}
#Extracting x-zerto-session from the response, and adding it to the actual API
$xZertoSession = $xZertoSessionResponse.headers.get_item("x-zerto-session")
$ZertoSessionHeader = @{"x-zerto-session"=$xZertoSession; "Accept"=$TypeJSON}

$vras = $BaseURL+"vras"
$getVRA = Invoke-RestMethod -Method GET -Headers $ZertoSessionHeader -Uri $vras
Write-Host ""
Write-Host "x-zerto-session" $xZertoSession
Write-Host ""
foreach($vra in $getVRA){Write-Host -NoNewline $vra.VraName  "    " ; $vra.VraIdentifier}



The output will list the session token, the VRA names and their identifier, like so:

User-added image

  1. From the PowerShell commandline (within the ISE), run the following command for each VRA you wish to upgrade:

Invoke-RestMethod -Method POST -Headers $ZertoSessionHeader -Uri https://<ZvmIp>:9669/v1/vras/<VraIdentifier>/upgrade

 

  1. As a response, you’ll receive the task ID, which will look something like:

545e6cb6-5818-4e25-9499-b68b462957a1.72f276b0-bd37-4533-934b-56f2212207eb

  1. Looking at the Events in the Zerto GUI will show us an event of ‘Upgrade VRA’ which should bring it to the latest version:


User-added image