diff --git a/simulator/datacenter.go b/simulator/datacenter.go index 41fc56961..7680b602a 100644 --- a/simulator/datacenter.go +++ b/simulator/datacenter.go @@ -162,8 +162,10 @@ func (dc *Datacenter) PowerOnMultiVMTask(ctx *Context, req *types.PowerOnMultiVM res.Attempted = []types.ClusterAttemptedVmInfo{} for _, ref := range req.Vm { - vm := ctx.Map.Get(ref).(*VirtualMachine) - + vm, ok := ctx.Map.Get(ref).(*VirtualMachine) + if !ok { + continue + } // This task creates multiple subtasks which violates the assumption // of 1:1 Context:Task, which results in data races in objects // like the Simulator.Event manager. This is the minimum context diff --git a/simulator/datacenter_test.go b/simulator/datacenter_test.go index c6899548e..334b6c1b3 100644 --- a/simulator/datacenter_test.go +++ b/simulator/datacenter_test.go @@ -142,7 +142,10 @@ func TestDatacenterPowerOnMultiVMs(t *testing.T) { } } - dcTask, err := dc.PowerOnVM(ctx, testVMs) + // real VC ignores unknown VM refs + unknown := types.ManagedObjectReference{Type: "VirtualMachine", Value: "unknown"} + + dcTask, err := dc.PowerOnVM(ctx, append(testVMs, unknown)) if err != nil { t.Fatal(err) }