Clustered Data ONTAP: ASUP Rule

DataONTAP.Cluster.ASUP.Rule (Rule)

The ASUP Rule writes AutoSupport messages to the EMS log on the storage system. AutoSupport automatically sends periodic email notifications about system health to technical support.

Knowledge Base article:

Summary

The ASUP Rule writes AutoSupport messages to the EMS log on the storage system. AutoSupport automatically sends periodic email notifications about system health to technical support.

Additional Information

The following usage metrics are written to the log in a list of comma-separated name-value pairs:

Resolutions

If you suspect a problem with this rule, check the OnCommand and System Center Operations Manager event logs on the management server running the rule.

Element properties:

TargetDataONTAP.Cluster.DataVserver
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateFalse
RemotableTrue

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource System.Scheduler Default
PowerShellWriteActionID WriteAction Microsoft.Windows.PowerShellWriteAction DataONTAP.SecureReference.RunAsProfile

Source Code:

<Rule ID="DataONTAP.Cluster.ASUP.Rule" Target="DataONTAP.Cluster.DataVserver" Enabled="true" ConfirmDelivery="false" Remotable="true" Priority="Normal" DiscardLevel="100">
<Category>AvailabilityHealth</Category>
<DataSources>
<DataSource ID="DS" TypeID="System!System.Scheduler">
<Scheduler>
<SimpleReccuringSchedule>
<Interval Unit="Days">14</Interval>
<SyncTime/>
</SimpleReccuringSchedule>
<ExcludeDates/>
</Scheduler>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="PowerShellWriteActionID" TypeID="Windows!Microsoft.Windows.PowerShellWriteAction" RunAs="DS!DataONTAP.SecureReference.RunAsProfile">
<ScriptName>GenerateAsupEmsMessage.ps1</ScriptName>
<ScriptBody><Script>##############################################################################
# Copyright (c) 2013 NetApp.
#
# GenerateAsupEmsMessage.ps1
#
# This script generates ASUP message
#
##############################################################################
Param($MonitoringMethodName, $VserverUUID)

##############################################################################
#Script utilities
function GetInstallPath
{
$netappRegPath = "HKLM:\SOFTWARE\NetApp\OnCommand\MS_Plugin"
$ibmRegPath = "HKLM:\SOFTWARE\IBM\OnCommand\MS_Plugin"

if (Test-Path -path $netappRegPath)
{
# Check for the registry key value of the install location for NetApp
$key = get-itemproperty $netappRegPath
}
elseif (Test-Path -path $ibmRegPath)
{
# Check for IBM registry key since can't find NetApp
$key= get-itemproperty $ibmRegPath
}
else
{
throw ("OnCommand Plug-in for Microsoft is not installed on " + $env:COMPUTERNAME + "`r`n")
}

return $key.InstallPath
}

function CreateAppDomain
{
$setup = [AppDomain]::CurrentDomain.SetupInformation;
$setup.ShadowCopyFiles = $true
return [AppDomain]::CreateDomain("OC.Cluster.OM.Powershell.NonDefaultAppDomain",
$null,
$setup);
}

function InvokeMethodInAppDomain([AppDomain]$appDomain,
[string]$assemblyPath,
[string]$typename,
[array]$contructorParameters,
[string]$methodName,
[array]$methodParameters)
{
#In SCOM a Powershell script is executed in a MonitoringHost.exe process.
#Lifetime of a MonitoringHost.exe is not controlled by us and it continues to run after the script is done, possibly
#running other scripts or the same script again. A script is executed in a default AppDomain (by SCOM design) and
#as a result any assemblies loaded by script can not be unloaded because the defualt AppDomain can not be unloaded.
#Impossibility of unloading an assembly becomes a problem when then the assembly DLL is being updated
#(i.e. during an istallation), the problem is that even after the assembly DLL is updated,
#the new assembly code is not loaded if the assembly is already loaded.
#The solution for this problem is to load an assembly to a non-default domain which can be unloaded when the script is done.

#The OC.Cluster.OM.AppDomainInvoker assembly has to be in the GAC
$AppDomainInvokerAssembly = [System.Reflection.Assembly]::LoadWithPartialName('OC.Cluster.OM.AppDomainInvoker')

$result = [OC.Cluster.OM.AppDomainInvoker.AppDomainInvoker]::InvokeMethod($appDomain,
$assemblyPath,
$typename,
$contructorParameters,
$methodName,
$methodParameters)

return $result
}
##############################################################################

import-module operationsmanager

$Error.Clear();

$scriptName = "GenerateAsupEmsMessage.ps1"

try
{
$api = new-object -comObject 'MOM.ScriptAPI'

$api.LogScriptEvent($scriptName, 14100, 0, "Generating ASUP message.")

$nonDefaultAppDomain = CreateAppDomain

$installPath = GetInstallPath

InvokeMethodInAppDomain $nonDefaultAppDomain `
(Join-Path $installPath 'OC.Cluster.OM.Server.dll') `
"OC.Cluster.OM.Server.ASUP.AsupManager" `
@("localhost") `
$MonitoringMethodName `
@($VserverUUID)

$api.LogScriptEvent($scriptName, 14001, 0, "Generating ASUP message succeeded.")
}
catch
{
if ($api)
{
$api.LogScriptEvent($scriptName, 14002, 1, "Generating ASUP message failed.`r`n" + $Error)
}

#throw the current error so that it will be displayed in the SCOM task output and status of the task will be set as failed
throw
}
finally
{
if ($nonDefaultAppDomain)
{
[AppDomain]::Unload($nonDefaultAppDomain)
$nonDefaultAppDomain = $null
}
}</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>MonitoringMethodName</Name>
<Value>GenerateAsupEmsMessage</Value>
</Parameter>
<Parameter>
<Name>VserverUUID</Name>
<Value>$Target/Property[Type="DataONTAP.Cluster.AbstractVserver"]/UUID$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>1200</TimeoutSeconds>
</WriteAction>
</WriteActions>
</Rule>