public async Task <Vm> Deploy(VmTemplate template) { Vm vm = null; await Connect(); _logger.LogDebug("deploy: validate portgroups..."); await _netman.Provision(template); _logger.LogDebug("deploy: transform template..."); //var transformer = new VCenterTransformer { DVSuuid = _dvsuuid }; VirtualMachineConfigSpec vmcs = Transform.TemplateToVmSpec( template, _config.VmStore.Replace("{host}", _hostPrefix), _dvsuuid ); _logger.LogDebug("deploy: create vm..."); ManagedObjectReference task = await _vim.CreateVM_TaskAsync(_vms, vmcs, _pool, null); TaskInfo info = await WaitForVimTask(task); if (info.state == TaskInfoState.success) { _logger.LogDebug("deploy: load vm..."); await Task.Delay(200); vm = await GetVirtualMachine((ManagedObjectReference)info.result); _logger.LogDebug("deploy: create snapshot..."); task = await _vim.CreateSnapshot_TaskAsync( vm.AsVim(), "Root Snap", "Created by TopoMojo Deploy at " + DateTime.UtcNow.ToString("s") + "Z", false, false); info = await WaitForVimTask(task); if (template.AutoStart && info.state == TaskInfoState.success) { _logger.LogDebug("deploy: start vm..."); vm = await Start(vm.Id); } } else { throw new Exception(info.error.localizedMessage); } return(vm); }