The WFA Volume commands allow you to set and modify most options, but apparently not AFF efficiency settings.
Hendrik Land and
Hannes Bellmer created this command to fill this void.
param (
[parameter(Mandatory=$true, HelpMessage="Cluster IP or name")]
[string]$Cluster,
[parameter(Mandatory=$true, HelpMessage="Storage Virtual Machine name")]
[string]$VserverName,
[parameter(Mandatory=$true, HelpMessage="Volume name")]
[string]$VolumeName,
[parameter(Mandatory=$true, HelpMessage="Should the EfficiencyPolicy be enabled on the Volume?")]
[bool]$SetEfficiencyPolicy,
[parameter(Mandatory=$false, HelpMessage="Name of the efficiency policy (optional)")]
[string]$EfficiencyPolicy,
[parameter(Mandatory=$false, HelpMessage="Only schedules of cron type can be associated with efficiency policies. If schedules of type interval is associated, then the command will fail. Cannot be set when specifying a policy! (optional)")]
[string]$Schedule,
[parameter(Mandatory=$false, HelpMessage="Enable compression?")]
[ValidateSet("enabled","disabled")]
[string]$Compression,
[parameter(Mandatory=$false, HelpMessage="Enable inline compression?")]
[ValidateSet("enabled","disabled")]
[string]$InlineCompression,
[parameter(Mandatory=$false, HelpMessage="Compression Type")]
[ValidateSet("adaptive","secondary")]
[string]$CompressionType,
[parameter(Mandatory=$false, HelpMessage="Enable data compaction? Only available for Ontap9 or higher.")]
[ValidateSet("enabled","disabled")]
[string]$Compaction,
[parameter(Mandatory=$false, HelpMessage="Enable inline dedupe?")]
[ValidateSet("enabled","disabled")]
[string]$InlineDedupe
)
Connect-WfaCluster $Cluster
# testing volume existence. this command somehow doesn't throw exception if
# ErrorAction is 'Stop' and the volume isn't found. adding if block
$vol = Get-NcVol -Name $VolumeName -Vserver $VserverName
$sis = get-ncsis -Volume $VolumeName -Vserver $VserverName
if (!$vol)
{
throw "Volume '$VolumeName' not found on Storage Virtual Machine '$VserverName'"
}
# Prepare base command
$expression = "Set-NcSis -ErrorAction Stop -Name " + $VolumeName + " -VserverContext " + $VserverName
# Policy
if($EfficiencyPolicy)
{
$expression = $expression + ' -Policy ' + $EfficiencyPolicy
}
# Schedule
if($Schedule)
{
$expression = $expression + ' -Schedule ' + $Schedule
}
# Inline Compression
if ($InlineCompression)
{
if ($InlineCompression -eq "enabled")
{
$expression = $expression + ' -InlineCompression $True'
# Enable compression as well when inline is enabled
$Compression = "enabled"
}
if ($InlineCompression -eq "disabled")
{
$expression = $expression + ' -InlineCompression $False'
}
}
# Compression
if ($Compression)
{
if($Compression -eq "enabled")
{
$expression = $expression + ' -Compression $True'
}
if ($Compression -eq "disabled")
{
$expression = $expression + ' -Compression $False'
}
}
# Compaction
if ($Compaction)
{
if($Compaction -eq "enabled" -and !$sis.IsDataCompactionenabled )
{
$expression = $expression + ' -EnableDataCompaction $True'
}
if($Compaction -eq "disabled")
{
$expression = $expression + ' -EnableDataCompaction $False'
}
}
# Inline Dedupe
if ($InlineDedupe)
{
if($InlineDedupe -eq "enabled")
{
$expression = $expression + ' -EnableInlineDedupe $True'
}
if($InlineDedupe -eq "disabled")
{
$expression = $expression + ' -EnableInlineDedupe $False'
}
}
# Apply SIS settings
try {
if ($SetEfficiencyPolicy){
if($vol.VolumeSisAttributes.IsSisStateEnabled -ne 'True'){
Get-WFALogger -Info -message $("Enabling volume efficiency: "+ $VolumeName)
Invoke-Expression -ErrorAction Continue 'Enable-NcSis -Name $VolumeName -VserverContext $VserverName'
}
Get-WFALogger -Info -message $("Configuring volume efficiency: "+ $expression)
Invoke-Expression -ErrorAction Stop $expression
} else{
if($vol.VolumeSisAttributes.IsSisStateEnabled -eq 'True') {
Get-WFALogger -Info -message $("Disabling volume efficiency: "+ $VolumeName)
Invoke-Expression -ErrorAction Continue 'Disable-NcSis -VserverContext $VserverName -Name $VolumeName'
}
}
}
catch
{
$msg = "Failed to configure volume efficiency: " + $VolumeName + " Message: " + $_.Exception.Message;
throw $msg
}
just updated small bugfix
ReplyDelete