Error during provisioning:Unexpected VC fault from View Composer
The above error might show up in Horizon View, if you try to use a corrupt snapshot for the deployment of new VMs.
How To Identify If A Corrupt Snapshot Is The Cause?
- Look at the Microsoft System Event Log on your View Composer
- You should see something like this:
The VMware View Composer service terminated unexpectedly. M It has done this 2 time(s). The following corrective action will be taken in 60000 milliseconds: Restart the service.
- You should see something like this:
- Search for FATAL messages in the vmware-viewcomposer.log
- The following message will indicate a corrupt snapshot
2015-10-06 17:52:53,956 | WFE thread 9 | FATAL | ServiceCore.WorkflowEngine.WorkflowEngine – Unexpected exception occurred.Error reading single property ‘config.hardware.device’ from managed object: snapshot-15587
- The following message will indicate a corrupt snapshot
Based on the message in vmware-viewcomposer.log, you know what snapshot is corrupted. Unfortunately, the message does not tell you the parent VM of the snapshot.
I wrote a small Powershell/Powercli script, which will allow you to find the parent VM and delete the snapshot.
# Prompt user for vCenter details $hostname = Read-Host -Prompt 'Please specify your vCenter server' $username = Read-Host -Prompt 'Please specify your username' $password = Read-Host -Prompt 'Please specify your password' $snapshot = Read-Host -Prompt 'What snapshot are you looking for?' Connect-VIServer $hostname -Protocol https -User $username -Password $password -Force Write-Host "Successfully connected to '$hostname'" Get-VM | Get-Snapshot | where {$_.name -eq $snapshot} | Select Name, VM $snaplist = Get-VM | Get-Snapshot | where {$_.name -eq $snapshot} | Select Name, VM if ($snaplist) { Write-Host "Found snapshot, listed above"} else { Write-Host "Couldn't find any snapshots named '$snapshot' !" Disconnect-VIServer -Confirm:$false break} $delete = Read-Host -Prompt 'Do you want to delete all of the above snapshot? [yes/no]' If ($delete -eq "yes") { Get-VM | Get-Snapshot | where {$_.name -eq $snapshot} | Remove-Snapshot -Confirm:$false Write-Host "Successfully deleted all snapshots called '$snapshot'"} Else { Write-Host "Did not delete '$snapshot'"} Disconnect-VIServer -Confirm:$false
Just copy the code above and save it as a PowerCLI or PowerShell script.
Upon execution, it will prompt you to specify the vCenter, a user, password and the name of the snapshot, which you try to find.
I hope this script is helpful.