Skip to content

Commit

Permalink
Added case to handle of user enters invalid path, got to default
Browse files Browse the repository at this point in the history
  • Loading branch information
root authored and root committed Sep 19, 2023
1 parent 586999a commit 582dcc4
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 14 deletions.
2 changes: 1 addition & 1 deletion Microsoft.AVS.VMFS/Microsoft.AVS.VMFS.psd1
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@
"Get-VmKernelAdapters",
"Set-NVMeTCP",
"New-NVMeTCPAdapter",
"Set-PureStorageDatastoreMultipathingPolicy"
"Set-VMFSDatastoreMultipathPolicy"
)

# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.
Expand Down
44 changes: 31 additions & 13 deletions Microsoft.AVS.VMFS/Microsoft.AVS.VMFS.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -152,14 +152,14 @@ function New-VmfsDatastore {
HelpMessage = 'Capacity of new datastore in bytes')]
[ValidateNotNull()]
[String]
$Size
$Size,

[Parameter(
Mandatory=$false,
HelpMessage = 'Set Multipath policy')]
[ValidateNotNull()]
[String]
$MultipathPolicy,
$MultipathPolicy

)

try {
Expand Down Expand Up @@ -210,9 +210,16 @@ function New-VmfsDatastore {

$DatastoreSystem.CreateVmfsDatastore($VmfsDatastoreCreateSpec)

if (-not [string]::IsNullOrEmpty($MultipathPolicy)) {
Set-VMFSDatastoreMultipathPolicy -DatastoreName $DatastoreName -MultipathPolicy $MultipathPolicy
$ValidMultipathPolicies = @("Fixed", "MostRecentlyUsed", "RoundRobin")
$IsValidMultipathPolicy = $MultipathPolicy -in $ValidMultipathPolicies

if ([string]::IsNullOrEmpty($MultipathPolicy) -or (-not $IsValidMultipathPolicy)){
Write-Warning "Either no or invalid multipath policy specified. Valid policies are: $($ValidMultipathPolicies -join ', '). Using default policy."
}
else {
Set-VMFSDatastoreMultipathPolicy -DatastoreName $DatastoreName -MultipathPolicy $MultipathPolicy
}

} catch {
Write-Error $Global:Error[0]
}
Expand Down Expand Up @@ -1588,22 +1595,33 @@ function Set-VMFSDatastoreMultipathPolicy {
(
[Parameter(Mandatory = $true,
HelpMessage = 'Datastore Name')]
[ValidateNotNullOrEmpty()]
[string]$DatastoreName,

[Parameter(Mandatory = $true,
[Parameter(Mandatory = $false,
HelpMessage = 'Multipath Policy')]
[string]$MultipathPolicy
)

try {
$Datastore = Get-Datastore -Name $DatastoreName
$ValidMultipathPolicies = Get-ScsiLun -VmHost $Datastore.VMHost | Select-Object -ExpandProperty MultipathPolicy | Sort-Object -Unique
if ($ValidMultipathPolicies -notcontains $MultipathPolicy) {
throw Write-Error "Invalid multipath policy '$MultipathPolicy' specified. Valid policies are: $($ValidMultipathPolicies -join ', ')."
$ScsiLuns = Get-Datastore $DatastoreName | Get-ScsiLun
foreach ($ScsiLun in $ScsiLuns) {
$ScsiLunPaths = Get-ScsiLunPath -ScsiLun $ScsiLun
$ActivePathsCount = ($ScsiLunPaths | Where-Object {$_.State -eq "Active" -or $_.State -eq "Standby"}).Count

if ($ActivePathsCount -ge 2) {

if ($MultipathPolicy -eq "Fixed") {
Set-ScsiLun -ScsiLun $ScsiLun -MultipathPolicy $MultipathPolicy -PreferredPath $ScsiLunPaths[0]
} else {
Set-ScsiLun -ScsiLun $ScsiLun -MultipathPolicy $MultipathPolicy
}

Write-Host "Multipath policy $MultipathPolicy set for LUN $($ScsiLun.CanonicalName)."
} else {
Write-Host "Multipathing is not active for LUN $($ScsiLun.CanonicalName)."
}
}

Set-Datastore -Datastore $Datastore -DefaultMultipathPolicy $MultipathPolicy
Write-Host "Successfully set Multipath Policy to $MultipathPolicy for datastore $DatastoreName."
}
catch {
throw "Failed to set Multipath Policy to $MultipathPolicy for datastore $DatastoreName. Error: $($_.Exception)"
Expand Down

0 comments on commit 582dcc4

Please sign in to comment.