Пример #1
0
        public TaskInfoState CreateSnapshot(string name, string description, bool memory, bool quiesce, out string snapshotOut)
        {
            snapshotOut = string.Empty;
            ManagedObjectReference morTask = _vimService.CreateSnapshot_Task(_morThis, name, description, memory, quiesce);
            MyVMTask      myTask           = new MyVMTask(_vimService, _pc, morTask);
            TaskInfo      ti    = null;
            TaskInfoState state = myTask.Wait(3000, -1, out ti);

            if (state == TaskInfoState.success)
            {
                ManagedObjectReference morSnapshot = (ManagedObjectReference)(ti.result);
                snapshotOut = morSnapshot?.Value;
            }
            return(state);
        }
Пример #2
0
        static ManagedObjectReference GetSnapshot(string targetvm, bool takeNew)
        {
            if (takeNew)
            {
                VirtualMachineRuntimeInfo runtime = GetProperty <VirtualMachineRuntimeInfo>(vm, "runtime");
                if (runtime.powerState.ToString() != "poweredOn")
                {
                    Error(new Exception("VM is not powered on, no point snapshotting"));
                }
                Log("[x] Creating snapshot for VM " + targetvm + "...");
                ManagedObjectReference task = vim.CreateSnapshot_Task(vm, "System Backup " + DateTime.Now.ToString(), "System Backup" + DateTime.Now.ToString(), true, true);
                string state = GetProperty <TaskInfo>(task, "info").state.ToString();
                while (state != "success")
                {
                    switch (state)
                    {
                    case "error":
                        Error(new Exception("Error creating snapshot"));
                        break;

                    case "running":
                        Thread.Sleep(10000);
                        break;
                    }
                    state = GetProperty <TaskInfo>(task, "info").state.ToString();
                }
                Log("[x] Snapshot created successfully");
                return((ManagedObjectReference)GetProperty <TaskInfo>(task, "info").result);
            }
            else
            {
                Log("[x] Finding existing snapshots for " + targetvm + "...");
                VirtualMachineSnapshotInfo snapshotInfo = null;
                try
                {
                    snapshotInfo = GetProperty <VirtualMachineSnapshotInfo>(vm, "snapshot");
                }
                catch (Exception e)
                {
                    Error(new Exception("No existing snapshots found for the VM " + targetvm + ", recommend you try again with --snapshot set"));
                }
                return(snapshotInfo.currentSnapshot);
            }
        }