static void Main(string[] args) { var task = Task.Run(async() => { var vcenterUrl = "https://vcenter01.domain.local"; var vcenterUser = "******"; var vcenterPassword = ""; var client = new VsphereClient(vcenterUrl); await client.LoginAsync(vcenterUser, vcenterPassword); var enviormentConfig = new EnviormentConfig { DatastoreName = "MyDatastoreName", HostName = "MyEsxHost", NetworkName = "NetworkName" }; var virtualMachineConfig = new SimpleVirtualMachineConfig { Name = "MyUbuntuServer1", GuestOs = GuestOs.UBUNTU_64, Cpus = 2, DiskSizeGB = 40, MemorySizeGB = 4, IsoFile = "[MyDatastoreName] ISO/ubuntu-20.04.1-live-server-amd64.iso", }; await client.CreateVirtualMachineAsync(enviormentConfig, virtualMachineConfig); await client.LogoutAsync(); }); task.Wait(); }
public async Task <CreateVirtualMachineResponse> CreateVirtualMachineAsync( EnviormentConfig enviormentConfig, SimpleVirtualMachineConfig simpleVirtualMachineConfig, CancellationToken cancellationToken = default) { var folder = await this.GetFolderAsync(cancellationToken); if (folder == null) { return(null); } var esxDatastore = await this.GetDatastoreAsync(enviormentConfig.DatastoreName, cancellationToken); var esxHost = await this.GetHostAsync(enviormentConfig.HostName, cancellationToken); var esxNetwork = await this.GetNetworkAsync(enviormentConfig.NetworkName, cancellationToken); var virtualMachineConfig = new VirtualMachineConfig { Spec = new Spec { Name = simpleVirtualMachineConfig.Name, GuestOs = simpleVirtualMachineConfig.GuestOs, Cpu = new Cpu { Count = simpleVirtualMachineConfig.Cpus, CoresPerSocket = 1, HotAddEnabled = true }, Disks = new Disk[] { new Disk { Scsi = new Scsi { Bus = 0, Unit = 0, }, Type = "SCSI", NewVmdk = new NewVmdk { Capacity = simpleVirtualMachineConfig.DiskSizeGB * 1024L * 1024L * 1024L } } }, Cdroms = new Cdrom[] { new Cdrom { StartConnected = true, AllowGuestControl = true, Type = "SATA", Sata = new Sata { Bus = 0, Unit = 0 }, Backing = new CdromBacking { Type = "ISO_FILE", IsoFile = simpleVirtualMachineConfig.IsoFile } } }, Memory = new Memory { SizeMiB = simpleVirtualMachineConfig.MemorySizeGB * 1024 }, Nics = new Nic[] { new Nic { Type = EthernetAdapterEmulationType.VMXNET3, MacType = MacAddressType.GENERATED, StartConnected = true, AllowGuestControl = true, Backing = new NicBacking { Network = esxNetwork.Network, Type = esxNetwork.Type } } }, Placement = new Placement { Datastore = esxDatastore, Folder = folder, Host = esxHost } } }; var json = JsonConvert.SerializeObject(virtualMachineConfig, this._jsonSerializerSettings); var responseMessage = await this._httpClient.PostAsync($"vcenter/vm", new StringContent(json, Encoding.UTF8, "application/json"), cancellationToken); json = await responseMessage.Content.ReadAsStringAsync(); if (!responseMessage.IsSuccessStatusCode) { Console.WriteLine(json); return(null); } var item = JsonConvert.DeserializeObject <CreateVirtualMachineResponse>(json, this._jsonSerializerSettings); return(item); }