1 Reply Latest reply on Oct 17, 2018 10:48 AM by aamodei01

    Get VM's protection status

    aamodei01 Novice

      Has anyone been successful in getting the specific fault/error message from a VM under a protection group?

       

      I'm trying to get the message shown in the UI via the API.

       

      For Example,

       

      I have a VM sitting on ABR storage - this is fine.

       

      It's not yet protected and it's assigned to a network that is NOT mapped in SRM (This is by design as a test)

       

      When I run the protectVM task via the API, it runs, but when I retrieve the error via the GetResult() method on the task, it simply says:

       

      fault             localizedMessage                                           

      -----             ----------------                                           

      SRM01.MethodFault Unable to protect VM '<MY VM>' due to unresolved devices

       

      I want the message that appears in the UI, which currently shows:

       

      Mapping missing: Network 'THE MISSING NETWORK PortGroup NAME'

       

      Does anyone know how I can get this information instead of the generic "unresolved devices"

       

      Is it from the VM protection perspective or something on the protection group?

       

      Thanks to all in advance!

        • 1. Re: Get VM's protection status
          aamodei01 Novice

          Ok, so I kept plodding along and I was able to get a solution, while not elegant, it does do the trick:

           

          I'm using powershell for the main app I'm building, so this code is all powershell, running directly on the Protected Site SRM server. This is just the basic building block, I haven't worked out the loops to handle any VM's that are in a state that would require it.

           

          The below code will pull out the reason (being network mapping missing) and what network mapping is missing

          #Get Latest SRM DR Log

          $srm_log = gci "C:\ProgramData\VMware\VMware vCenter Site Recovery Manager\Logs" | where {$_.Name -like "vmware-dr*.log"} | gc

           

          #Pattern for Missing Device - Target VM being checked

          $pattern = "dr.replication.VmProtectionGroup.VmMirrorOptionResult(.*?)--> ]"

          $t = [regex]::Matches($srm_log,$pattern)

           

          #Parse log and convert data

          $unresolved_device = ((((($t | where{$_.value -match "<VM NAME>"} | Select -Last 1).value -replace "\[ -->","") -split "-->") -replace '"',"") -replace ",","") -replace " ","" | ConvertFrom-String -Delimiter "="

          #Create hash of Unresolved Objects - NON-DISK

          $unresolved_device_hash = @()

          $unresolved_device_hash += New-Object PSObject -Property @{

                  VMName = ($unresolved_device | where {$_.P1 -eq "vmname"}).p2

                  UnresolvedDeviceReason = (((($unresolved_device | where {$_.P1 -eq "faults"}).p2) -split "\.") | Select -Last 1) -replace "\){",""

                  UnresolvedObjects = ($unresolved_device | where {$_.P1 -eq "networkname"}).p2 -join "/ "

              }

           

          The below code is to gather all VM disks that are not on replicated storage, hence flagging the VM is not fully replicated

          #Get Latest SRM DR Log

          $srm_log = gci "C:\ProgramData\VMware\VMware vCenter Site Recovery Manager\Logs" | where {$_.Name -like "vmware-dr*.log"} | gc

           

          #Pattern for Missing Disk - Target VM being checked

          $pattern = "dr.replication.fault.DevicesNotResolved(.*?)\[context]"

          $t = [regex]::Matches($srm_log,$pattern)

           

           

          #Parse log and convert data

          $unresolved_device = ((((($t | where{$_.value -match "<VM NAME>"} | Select -Last 1).value -replace "\[ -->","") -split "-->") -replace '"',"") -replace ",","") -replace " ","" | ConvertFrom-String -Delimiter "="

           

          #Create hash of Unresolved Objects - DISK

          $unresolved_device_hash = @()

          $unresolved_device_hash += New-Object PSObject -Property @{

                  VMName = ($unresolved_device | where {$_.P1 -eq "vmname"}).p2

                  UnresolvedDeviceReason = (((($unresolved_device | where {$_.P1 -eq "unresolvedDevice"}).p2) -split "\.") | Select -Last 1) -replace "\){",""

                  UnresolvedObjects = ($unresolved_device | where {$_.P1 -eq "label"}).p2 -join "/ "

              }

           

           

          Hope this helps someone else out in a similar situation.