VMware Cloud Community
erki72
Enthusiast
Enthusiast

Multiple ParaVirtual SCSI Controller

Hi

I'm trying to run a simple script. I would expect 3 disks with 3 ParaVirtual adapters

Get-VM <yourvm> | New-HardDisk -CapacityGB 10 | New-ScsiController -Type ParaVirtual
Get-VM <yourvm> | New-HardDisk -CapacityGB 20 | New-ScsiController -Type ParaVirtual
Get-VM <yourvm> | New-HardDisk -CapacityGB 30 | New-ScsiController -Type ParaVirtual

But the result is as follows. Here I expect an adapter for each disk

powercli.png

What am I doing wrong?

My goal would be 3 Paravirtual controllers with 5 disks.
Distribute these over the 3 controllers. 
I would then assign it as follows:

Get-VM <yourvm>  | New-HardDisk -CapacityGB 15 -Datastore $datastoreVM -Controller "SCSI-Controller 1"

But if the script at the top doesn't work, I can't get any further.

Thanks

Labels (5)
0 Kudos
9 Replies
LucD
Leadership
Leadership

This seems to work for me.

Is that VM powered on?
Which PowerCLI version are you using?


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
erki72
Enthusiast
Enthusiast

Hi @LucD 

VM is powered off.

Powercli Version: 

*****
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 6.7.0.1... VMware.DeployAutomation {Add-DeployRule, Add-ProxyServer, Add-ScriptBundle, Copy-DeployRule...}
Script 6.7.0.1... VMware.ImageBuilder {Add-EsxSoftwareDepot, Add-EsxSoftwarePackage, Compare-EsxImageProfile, Export-EsxImageProfile...}
Manifest 11.5.0.... VMware.PowerCLI
Script 6.7.0.1... VMware.Vim
Script 11.5.0.... VMware.VimAutomation.Cis.Core {Connect-CisServer, Disconnect-CisServer, Get-CisService}
Script 11.0.0.... VMware.VimAutomation.Cloud {Add-CIDatastore, Connect-CIServer, Disconnect-CIServer, Get-Catalog...}
Script 11.5.0.... VMware.VimAutomation.Common {Get-Task, Stop-Task, Wait-Task}
Script 11.5.0.... VMware.VimAutomation.Core {Add-PassthroughDevice, Add-VirtualSwitchPhysicalNetworkAdapter, Add-VMHost, Add-VMHostNtpServer...}
Script 11.5.0.... VMware.VimAutomation.Hcx {Connect-HCXServer, Disconnect-HCXServer, Get-HCXAppliance, Get-HCXComputeProfile...}
Script 7.10.0.... VMware.VimAutomation.HorizonView {Connect-HVServer, Disconnect-HVServer}
Script 11.3.0.... VMware.VimAutomation.License Get-LicenseDataManager
Script 11.5.0.... VMware.VimAutomation.Nsxt {Connect-NsxtServer, Disconnect-NsxtServer, Get-NsxtPolicyService, Get-NsxtService}
Script 11.5.0.... VMware.VimAutomation.Sdk {Get-ErrorReport, Get-PSVersion, Get-InstallPath}
Script 11.0.0.... VMware.VimAutomation.Security {Get-SecurityInfo, Get-VTpm, Get-VTpmCertificate, Get-VTpmCSR...}
Script 11.5.0.... VMware.VimAutomation.Srm {Connect-SrmServer, Disconnect-SrmServer}
Script 11.5.0.... VMware.VimAutomation.Storage {Add-KeyManagementServer, Add-VsanObjectToRepairQueue, Copy-VDisk, Export-SpbmStoragePolicy...}
Script 1.3.0.0 VMware.VimAutomation.StorageUtility Update-VmfsDatastore
Script 11.2.0.... VMware.VimAutomation.Vds {Add-VDSwitchPhysicalNetworkAdapter, Add-VDSwitchVMHost, Export-VDPortGroup, Export-VDSwitch...}
Script 11.5.0.... VMware.VimAutomation.Vmc {Add-VmcSddcHost, Connect-Vmc, Disconnect-Vmc, Get-AwsAccount...}
Script 10.0.0.... VMware.VimAutomation.vROps {Connect-OMServer, Disconnect-OMServer, Get-OMAlert, Get-OMAlertDefinition...}
Script 6.5.1.7... VMware.VumAutomation {Add-EntityBaseline, Copy-Patch, Get-Baseline, Get-Compliance...}

***

vCenter Version is 7.0.3
The only special thing is, it`s a 6.7 ESXi hosts (I know I know).

 

0 Kudos
LucD
Leadership
Leadership

That is a relatively "old" PowerCLI version, I would definitely suggest upgrading.

The ESXi version shouldn't make a difference,


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
erki72
Enthusiast
Enthusiast

Same problem with newer Version 😞
Manifest 12.7.0.... VMware.PowerCLI

0 Kudos
LucD
Leadership
Leadership

Can you try with the API method, just to eliminate it is not a vSphere issue.

$vm = Get-VM -Name <yourVM>

$ctrl = Get-ScsiController -VM $vm
$busNr = $ctrl.ExtensionData.BusNumber | Sort-Object -Descending | Select-Object -First 1

$hdSize = 10,20,30

$scsiKey = -1
$hdKey = -100

$spec = New-Object VMware.Vim.VirtualMachineConfigSpec

$hdSize | ForEach-Object -Process {
  $busNr++

  $ctrl = New-Object VMware.Vim.VirtualDeviceConfigSpec
  $ctrl.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::add
  $controller = New-Object VMware.Vim.ParaVirtualSCSIController
  $controller.Key = $scsiKey
  $controller.BusNumber = $busNr
  $ctrl.Device = $controller
  $spec.DeviceChange += $ctrl

  $hd = New-Object VMware.Vim.VirtualDeviceConfigSpec
  $hd.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::add
  $hd.FileOperation = [VMware.Vim.VirtualDeviceConfigSpecFileOperation]::create
  $disk = New-Object VMware.Vim.VirtualDisk
  $disk.Key = $hdKey
  $disk.ControllerKey = $scsiKey
  $disk.CapacityInKB = $_ * 1GB / 1KB
  $disk.UnitNumber = 0
  $back = New-Object VMware.Vim.VirtualDiskFlatVer2BackingInfo
  $back.DiskMode = [VMware.Vim.VirtualDiskMode]::persistent
  $back.FileName = ''
  $back.EagerlyScrub = $false
  $back.ThinProvisioned = $true
  $disk.Backing = $back
  $hd.Device = $disk
  $spec.DeviceChange += $hd

  $scsiKey--
  $hdKey--
}

$vm.ExtensionData.ReconfigVM($spec)


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
erki72
Enthusiast
Enthusiast

Crazy. That goes straight away.
sql.png

My design or assignment should look something like this, is this also possible via the API? 
Where C:\ (system) and D:\ are created beforehand. It`s about E:\ - I:\

C:\ 0:0
D:\ 0:1
E:\ 1:2
F:\ 2:2
G:\ 2:0
H:\ 3:2
I:\ 3:0

 

0 Kudos
LucD
Leadership
Leadership

Those partitions are created inside the Guest OS, that is not something PowerCLI or a vSphere API can do.
What you can do is use something like Invoke-VMScript to run a script inside the Guest OS.
And with that script create those partitions.
If the Guest OS is a Windows OS, you might look at PowerShell cmdlets like Get-Disk and New-Partition.


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
erki72
Enthusiast
Enthusiast

Now I expressed myself wrong.

Finally, after creating the controller and creating the disk, the VM "shell" should look like this.

erki72_0-1666870861636.png

 

We can do the rest with staging (in the OS)

0 Kudos
LucD
Leadership
Leadership

I don't see what the issue is then with the code I provided.
With the unit- and bus-number you can specify where each new harddisk should go.

Since you went from 3 harddisks to 6 harddisks with different sizes than the original entry in this thread, you will have to adapt the data (disksize and number of entries).

You can also code the bus- and unit-number in a data array.


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos