HPC 2008 R2 Network Discovery

Microsoft.HPC.2008R2.Discovery.Network (Discovery)

Element properties:

TargetMicrosoft.HPC.2008R2.ActiveHeadNode
EnabledTrue
Frequency86400
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:
Discovered relationships and their attribuets:

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.HPC.2008R2.Module.TimedPowershellDiscoveryProvider Microsoft.HPC.RunAsProfile.AdminActionAccount

Source Code:

<Discovery ID="Microsoft.HPC.2008R2.Discovery.Network" Enabled="true" Target="Microsoft.HPC.2008R2.ActiveHeadNode" ConfirmDelivery="true" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="Microsoft.HPC.2008R2.Network"/>
<DiscoveryRelationship TypeID="Microsoft.HPC.2008R2.ActiveHeadNodeHostsNetwork"/>
</DiscoveryTypes>
<DataSource ID="DS" RunAs="HPCLibrary!Microsoft.HPC.RunAsProfile.AdminActionAccount" TypeID="Microsoft.HPC.2008R2.Module.TimedPowershellDiscoveryProvider">
<ScriptName>DiscoverHpcNetwork</ScriptName>
<ScriptBody><Script>

param($sourceId, $managedEntityId, $clusterName, $headNodeName)

trap [Exception]
{
$severity = "Error"
$eventId = 301 # Discovery Failure Event
$message = "'Discovery Failure for Microsoft.HPC.2008R2.Discovery.Network: " + $_.Exception.Message.Replace('"', '').Replace("'", "") + "'"
eventcreate /T $severity /ID $eventId /L Application /SO HPCManagementPack /D $message
break
}

$momApi = New-Object -ComObject 'MOM.ScriptAPI'
$discoveryData = $momApi.CreateDiscoveryData(0, $sourceId, $managedEntityId)

Add-PSSnapin Microsoft.HPC

function RetrieveNetwork ($clusName, $netType)
{
$parameters = ""
if ($clusName -ne $null)
{
$parameters = $parameters + "-Scheduler " + $clusName + " "
}
if ($netType -ne $null)
{
$parameters = $parameters + "-Type " + $netType + " "
}
$net = Invoke-Expression "Get-HpcNetworkInterface $Parameters"

if ($net -ne $null)
{
#parse subnet information
$subnet = ""
$addresses = $net.IpAddress.Split([array](" ", "`n", "`r"), [System.StringSplitOptions]::RemoveEmptyEntries)
$masks = $net.SubnetMask.Split([array](" ", "`n", "`r"), [System.StringSplitOptions]::RemoveEmptyEntries)
$count = $addresses.Length
if ($masks.Length -lt $count)
{
$count = $masks.Length
}

for ($i = 0; $i -lt $count; ++$i)
{
if ($addresses[$i].StartsWith("169.254") -ne $true)
{
$subnet = $addresses[$i] + "/" + $masks[$i]
break
}
}

$instance = $discoveryData.CreateClassInstance("$MPElement[Name='Microsoft.HPC.2008R2.Network']$")
$instance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $headNodeName)
$instance.AddProperty("$MPElement[Name='Microsoft.HPC.2008R2.Network']/NetworkType$", $net.Type)
$instance.AddProperty("$MPElement[Name='Microsoft.HPC.2008R2.Network']/Subnet$", $subnet)
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $netType)
$discoveryData.AddInstance($instance)
}
}

RetrieveNetwork $clusterName "Enterprise"
RetrieveNetwork $clusterName "Private"
RetrieveNetwork $clusterName "Application"

$momApi.Return($discoveryData)

</Script></ScriptBody>
<Parameters>'$MPElement$' '$Target/Id$' '$Target/Property[Type='Microsoft.HPC.2008R2.ActiveHeadNode']/ClusterName$' '$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$'</Parameters>
<IntervalSeconds>86400</IntervalSeconds>
<TimeoutSeconds>300</TimeoutSeconds>
</DataSource>
</Discovery>