Pod discovery

UCPManagementPack.PodDiscovery (Discovery)

Description for the new discovery.

Element properties:

TargetUCPManagementPack.PodDiscoveryEntity
EnabledTrue
Frequency600
RemotableFalse

Object Discovery Details:

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

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource UCPManagement.TimedPowerShell.DiscoveryProvider System.PrivilegedMonitoringAccount

Source Code:

<Discovery ID="UCPManagementPack.PodDiscovery" Target="UCPManagementPack.PodDiscoveryEntity" Enabled="true" ConfirmDelivery="false" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="UCPManagementPack.Compute"/>
<DiscoveryClass TypeID="UCPManagementPack.ComputeContainer"/>
<DiscoveryClass TypeID="UCPManagementPack.Ethernet"/>
<DiscoveryClass TypeID="UCPManagementPack.EthernetContainer"/>
<DiscoveryClass TypeID="UCPManagementPack.FibreChannel"/>
<DiscoveryClass TypeID="UCPManagementPack.FibreChannelContainer"/>
<DiscoveryClass TypeID="UCPManagementPack.Storage"/>
<DiscoveryClass TypeID="UCPManagementPack.StorageContainer"/>
<DiscoveryClass TypeID="UCPManagementPack.Pod"/>
<DiscoveryClass TypeID="UCPManagementPack.ConvergedSwitch"/>
<DiscoveryClass TypeID="UCPManagementPack.ConvergedSwitchContainer"/>
<DiscoveryClass TypeID="UCPManagementPack.ComputeFan"/>
<DiscoveryClass TypeID="UCPManagementPack.ComputeManagement"/>
<DiscoveryClass TypeID="UCPManagementPack.ComputePowerSupply"/>
<DiscoveryClass TypeID="UCPManagementPack.ComputeServer"/>
<DiscoveryClass TypeID="UCPManagementPack.ConvergedSwitchPort"/>
<DiscoveryClass TypeID="UCPManagementPack.EthernetSwitchPort"/>
<DiscoveryClass TypeID="UCPManagementPack.FibreChannelSwitchPort"/>
<DiscoveryClass TypeID="UCPManagementPack.StoragePool"/>
<DiscoveryClass TypeID="UCPManagementPack.StorageDKCBattery"/>
<DiscoveryClass TypeID="UCPManagementPack.StorageDKCCache"/>
<DiscoveryClass TypeID="UCPManagementPack.StorageDKCCacheSwitch"/>
<DiscoveryClass TypeID="UCPManagementPack.StorageDKCEnvironment"/>
<DiscoveryClass TypeID="UCPManagementPack.StorageDKCFan"/>
<DiscoveryClass TypeID="UCPManagementPack.StorageDKCPowerSupply"/>
<DiscoveryClass TypeID="UCPManagementPack.StorageDKCProcessor"/>
<DiscoveryClass TypeID="UCPManagementPack.StorageDKCSharedMemory"/>
<DiscoveryClass TypeID="UCPManagementPack.StorageVolume"/>
<DiscoveryClass TypeID="UCPManagementPack.StorageDKUDrive"/>
<DiscoveryClass TypeID="UCPManagementPack.StorageDKUFan"/>
<DiscoveryClass TypeID="UCPManagementPack.StorageDKUEnvironment"/>
<DiscoveryClass TypeID="UCPManagementPack.StorageDKUPowerSupply"/>
<DiscoveryClass TypeID="UCPManagementPack.ConvergedSwitchFan"/>
<DiscoveryClass TypeID="UCPManagementPack.ConvergedSwitchPowerSupply"/>
<DiscoveryClass TypeID="UCPManagementPack.ConvergedSwitchTemperature"/>
<DiscoveryClass TypeID="UCPManagementPack.EthernetSwitchFan"/>
<DiscoveryClass TypeID="UCPManagementPack.EthernetSwitchPowerSupply"/>
<DiscoveryClass TypeID="UCPManagementPack.EthernetSwitchTemperature"/>
<DiscoveryClass TypeID="UCPManagementPack.FibreChannelSwitchTemperature"/>
<DiscoveryRelationship TypeID="UCPManagementPack.PodHostingCompute"/>
<DiscoveryRelationship TypeID="UCPManagementPack.ComputeContainerHostingCompute"/>
<DiscoveryRelationship TypeID="UCPManagementPack.PodHostingEthernet"/>
<DiscoveryRelationship TypeID="UCPManagementPack.PodHostingFibreChannel"/>
<DiscoveryRelationship TypeID="UCPManagementPack.PodHostingStorage"/>
<DiscoveryRelationship TypeID="UCPManagementPack.EthernetContainerHostingEthernet"/>
<DiscoveryRelationship TypeID="UCPManagementPack.FibreChannelContainerHostingFibreChannel"/>
<DiscoveryRelationship TypeID="UCPManagementPack.StorageContainerHostingStorage"/>
<DiscoveryRelationship TypeID="UCPManagementPack.DataCenterContainsPod"/>
<DiscoveryRelationship TypeID="UCPManagementPack.PodDiscoveryHostingPod"/>
<DiscoveryRelationship TypeID="UCPManagementPack.ConvergedSwitchContainerHostingConvergedSwitch"/>
<DiscoveryRelationship TypeID="UCPManagementPack.PodHostingConvergedSwitch"/>
<DiscoveryRelationship TypeID="UCPManagementPack.ComputeHostingComputeServer"/>
<DiscoveryRelationship TypeID="UCPManagementPack.ComputeHostingComputeFan"/>
<DiscoveryRelationship TypeID="UCPManagementPack.ComputeHostingComputeManagement"/>
<DiscoveryRelationship TypeID="UCPManagementPack.ComputeHostingComputePowerSupply"/>
<DiscoveryRelationship TypeID="UCPManagementPack.ConvergedSwitchHostingConvergedSwitchPort"/>
<DiscoveryRelationship TypeID="UCPManagementPack.EthernetSwitchHostingEthernetSwitchPort"/>
<DiscoveryRelationship TypeID="UCPManagementPack.FibreChannelSwitchHostingFibreChannelSwitchPort"/>
<DiscoveryRelationship TypeID="UCPManagementPack.StorageHostingStoragePool"/>
<DiscoveryRelationship TypeID="UCPManagementPack.StorageHostingStorageDKCBattery"/>
<DiscoveryRelationship TypeID="UCPManagementPack.StorageHostingStorageDKCCache"/>
<DiscoveryRelationship TypeID="UCPManagementPack.StorageHostingStorageDKCCacheSwitch"/>
<DiscoveryRelationship TypeID="UCPManagementPack.StorageHostingStorageDKCEnvironment"/>
<DiscoveryRelationship TypeID="UCPManagementPack.StorageHostingStorageDKCFan"/>
<DiscoveryRelationship TypeID="UCPManagementPack.StorageHostingStorageDKCPowerSupply"/>
<DiscoveryRelationship TypeID="UCPManagementPack.StorageHostingStorageDKCProcessor"/>
<DiscoveryRelationship TypeID="UCPManagementPack.StorageHostingStorageDKCSharedMemory"/>
<DiscoveryRelationship TypeID="UCPManagementPack.PodDiscoveryHostingStorageVolume"/>
<DiscoveryRelationship TypeID="UCPManagementPack.StorageHostingStorageDKUDrive"/>
<DiscoveryRelationship TypeID="UCPManagementPack.StorageHostingStorageDKUEnvironment"/>
<DiscoveryRelationship TypeID="UCPManagementPack.StorageHostingStorageDKUFan"/>
<DiscoveryRelationship TypeID="UCPManagementPack.StorageHostingStorageDKUPowerSupply"/>
<DiscoveryRelationship TypeID="UCPManagementPack.ConvergedSwitchHostingConvergedSwitchFan"/>
<DiscoveryRelationship TypeID="UCPManagementPack.ConvergedSwitchHostingConvergedSwitchPowerSupply"/>
<DiscoveryRelationship TypeID="UCPManagementPack.ConvergedSwitchHostingConvergedSwitchTemperature"/>
<DiscoveryRelationship TypeID="UCPManagementPack.EthernetSwitchHostingEthernetSwitchFan"/>
<DiscoveryRelationship TypeID="UCPManagementPack.EthernetSwitchHostingEthernetSwitchPowerSupply"/>
<DiscoveryRelationship TypeID="UCPManagementPack.EthernetSwitchHostingEthernetSwitchTemperature"/>
<DiscoveryRelationship TypeID="UCPManagementPack.FibreChannelSwitchHostingFibreChannelSwitchTemperature"/>
</DiscoveryTypes>
<DataSource ID="DS" TypeID="UCPManagement.TimedPowerShell.DiscoveryProvider" RunAs="System!System.PrivilegedMonitoringAccount">
<IntervalSeconds>600</IntervalSeconds>
<SyncTime/>
<ScriptName>DiscoverPod.ps1</ScriptName>
<ScriptBody><Script>
# POD discovery script
param($sourceId, $managedEntityId, $managementIps, $domain, $username, $password)

$api = new-object -comObject 'MOM.ScriptAPI'
$discoveryData = $api.CreateDiscoveryData(0, $sourceId, $managedEntityId)

function logEvent($api, $message) {
$api.LogScriptEvent("DiscoverPod.ps1", 101, 0, $message)
}

function invokeRest($api, $url, $cred) {
$name = $cred.UserName
logEvent $api "Accessing endpoint $url using $name..."

try {
$results = Invoke-RestMethod -Uri $url -Credential $cred
} catch {
logEvent $api "Error invoking API $url!"
return $null
}

return $results
}

function createContainer($discoveryData, $type, $nameProp, $name, $displayName, $podSerial) {
$container = $discoveryData.CreateClassInstance($type)
$container.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $displayName)
$container.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", "$Target/Host/Property[Type='Windows!Microsoft.Windows.Computer']/PrincipalName$")
$container.AddProperty("$MPElement[Name='UCPManagementPack.PodDiscoveryEntity']/Name$", "$Target/Property[Type='UCPManagementPack.PodDiscoveryEntity']/Name$")
$container.AddProperty("$MPElement[Name='UCPManagementPack.Pod']/Name$", $podSerial)
$container.AddProperty($nameProp, $name)
return $container
}

function createInstance($api, $discoveryData, $type, $resourceId, $podSerial) {

logEvent $api "Creating instance $resourceId..."

$instance = $discoveryData.CreateClassInstance($type)
$instance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", "$Target/Host/Property[Type='Windows!Microsoft.Windows.Computer']/PrincipalName$")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.PodDiscoveryEntity']/Name$", "$Target/Property[Type='UCPManagementPack.PodDiscoveryEntity']/Name$")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Pod']/Name$", $podSerial)
return $instance
}

logEvent $api "Starting POD discovery..."

# Make sure credentials are set
if ($username -and $password) {

# Get the singleton data center object for relationship discovery
$dci = $discoveryData.CreateClassInstance("$MPElement[Name='UCPManagementPack.DataCenter']$")

add-type "using System.Net; using System.Security.Cryptography.X509Certificates; public class TrustAllCertsPolicy : ICertificatePolicy { public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) { return true; } }"

[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy

$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "$domain`\$username", $secstr

# Discover POD
$results = invokeRest $api "https://$managementIps/api/about" $cred

if ($results -ne $null) {

$podSerial = $results.SerialNumber
$isConverged = $results.ApplianceInformation.IsConvergedNetwork

logEvent $api "Discovered POD at $url with serial $podSerial"

# Create POD instance
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='UCPManagementPack.Pod']$")
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $podSerial)
$instance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", "$Target/Host/Property[Type='Windows!Microsoft.Windows.Computer']/PrincipalName$")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.PodDiscoveryEntity']/Name$", "$Target/Property[Type='UCPManagementPack.PodDiscoveryEntity']/Name$")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Pod']/Name$", $podSerial)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Pod']/ManagementIp$", $managementIps)
$discoveryData.AddInstance($instance)

# Create containment relationship
$relationship = $discoveryData.CreateRelationshipInstance("$MPElement[Name='UCPManagementPack.DataCenterContainsPod']$")
$relationship.Source = $dci
$relationship.Target = $instance
$discoveryData.AddInstance($relationship)

# Discover Compute
logEvent $api "Discovering compute...."
$results = invokeRest $api "https://$managementIps/monitoring/monitorStates?resourceType=Compute" $cred

if ($results -ne $null) {
$containerName = "Pod $managementIps Compute"
$containerDisplayName = "Compute Resources"
$container = createContainer $discoveryData "$MPElement[Name='UCPManagementPack.ComputeContainer']$" "$MPElement[Name='UCPManagementPack.ComputeContainer']/Name$" $containerName $containerDisplayName $podSerial
$discoveryData.AddInstance($container)

$results | where { $_.ResourceType -eq "Chassis" } | foreach {

$chassisName = $_.GlobalResourceId
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.Compute']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $chassisName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ComputeContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Compute']/Name$", $chassisName)
$discoveryData.AddInstance($instance)

$_.MonitorIndicators | foreach {
$compName = $_.Name

if ($compName -eq "FanModules") {
# Discover Fan

$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.ComputeFan']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Fan")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ComputeContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Compute']/Name$", $chassisName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ComputeFan']/Name$", "$chassisName.$compName")
$discoveryData.AddInstance($instance)
}

if ($compName -eq "PowerSupplyModules") {
# Discover Management

$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.ComputeManagement']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Power Supply")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ComputeContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Compute']/Name$", $chassisName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ComputeManagement']/Name$", "$chassisName.$compName")
$discoveryData.AddInstance($instance)
}


if ($compName -eq "ManagementModules") {
# Discover PowerSupply

$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.ComputePowerSupply']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Management Module")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ComputeContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Compute']/Name$", $chassisName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ComputePowerSupply']/Name$", "$chassisName.$compName")
$discoveryData.AddInstance($instance)
}

if ($compName -eq "Servers") {
# Discover Server

$_.SubGlobalResourceIds | foreach {

$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.ComputeServer']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $_)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ComputeContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Compute']/Name$", $chassisName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ComputeServer']/Name$", $_)
$discoveryData.AddInstance($instance)
}
}
}
}
}

# Discover Storage
logEvent $api "Discovering storage...."
$results = invokeRest $api "https://$managementIps/monitoring/monitorStates?resourceType=Storage" $cred

if ($results -ne $null) {
$containerName = "Pod $managementIps Storage"
$containerDisplayName = "Storage Systems"
$container = createContainer $discoveryData "$MPElement[Name='UCPManagementPack.StorageContainer']$" "$MPElement[Name='UCPManagementPack.StorageContainer']/Name$" $containerName $containerDisplayName $podSerial
$discoveryData.AddInstance($container)

$results | where {$_.ResourceType -eq "StorageVolume" } | foreach {
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='UCPManagementPack.StorageVolume']$")
$instance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", "$Target/Host/Property[Type='Windows!Microsoft.Windows.Computer']/PrincipalName$")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.PodDiscoveryEntity']/Name$", "$Target/Property[Type='UCPManagementPack.PodDiscoveryEntity']/Name$")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageVolume']/Name$", $_.GlobalResourceId)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageVolume']/ManagementIp$", $managementIps)
$discoveryData.AddInstance($instance)
}

$results | where {$_.ResourceType -eq "StorageSystem" } | foreach {

$storageName = $_.GlobalResourceId
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.Storage']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $storageName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Storage']/Name$", $storageName)
$discoveryData.AddInstance($instance)

$_.MonitorIndicators | foreach {

$compName = $_.Name

if ($compName -eq "DKCBattery") {
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.StorageDKCBattery']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "DKC Battery")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Storage']/Name$", $storageName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageDKCBattery']/Name$", "$storageName.$compName")
$discoveryData.AddInstance($instance)
}

if ($compName -eq "DKCCache") {
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.StorageDKCCache']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "DKC Cache")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Storage']/Name$", $storageName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageDKCCache']/Name$", "$storageName.$compName")
$discoveryData.AddInstance($instance)
}

if ($compName -eq "DKCCacheSwitch") {
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.StorageDKCCacheSwitch']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "DKC Cache Switch")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Storage']/Name$", $storageName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageDKCCacheSwitch']/Name$", "$storageName.$compName")
$discoveryData.AddInstance($instance)
}

if ($compName -eq "DKCEnvironment") {
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.StorageDKCEnvironment']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "DKC Environment")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Storage']/Name$", $storageName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageDKCEnvironment']/Name$", "$storageName.$compName")
$discoveryData.AddInstance($instance)
}

if ($compName -eq "DKCFan") {
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.StorageDKCFan']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "DKC Fan")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Storage']/Name$", $storageName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageDKCFan']/Name$", "$storageName.$compName")
$discoveryData.AddInstance($instance)
}

if ($compName -eq "DKCPowerSupply") {
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.StorageDKCPowerSupply']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "DKC Power Supply")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Storage']/Name$", $storageName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageDKCPowerSupply']/Name$", "$storageName.$compName")
$discoveryData.AddInstance($instance)
}

if ($compName -eq "DKCProcessor") {
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.StorageDKCProcessor']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "DKC Processor")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Storage']/Name$", $storageName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageDKCProcessor']/Name$", "$storageName.$compName")
$discoveryData.AddInstance($instance)
}

if ($compName -eq "DKCSharedMemory") {
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.StorageDKCSharedMemory']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "DKC Shared Memory")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Storage']/Name$", $storageName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageDKCSharedMemory']/Name$", "$storageName.$compName")
$discoveryData.AddInstance($instance)
}

if ($compName -eq "DKUDrive") {
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.StorageDKUDrive']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "DKU Drive")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Storage']/Name$", $storageName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageDKUDrive']/Name$", "$storageName.$compName")
$discoveryData.AddInstance($instance)
}

if ($compName -eq "DKUEnvironment") {
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.StorageDKUEnvironment']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "DKU Environment")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Storage']/Name$", $storageName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageDKUEnvironment']/Name$", "$storageName.$compName")
$discoveryData.AddInstance($instance)
}

if ($compName -eq "DKUFan") {
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.StorageDKUFan']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "DKU Fan")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Storage']/Name$", $storageName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageDKUFan']/Name$", "$storageName.$compName")
$discoveryData.AddInstance($instance)
}

if ($compName -eq "DKUPowerSupply") {
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.StorageDKUPowerSupply']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "DKU Power Supply")
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Storage']/Name$", $storageName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageDKUPowerSupply']/Name$", "$storageName.$compName")
$discoveryData.AddInstance($instance)
}

if ($compName -eq "Pools") {
$_.SubGlobalResourceIds | foreach {
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.StoragePool']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $_)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StorageContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Storage']/Name$", $storageName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.StoragePool']/Name$", $_)
$discoveryData.AddInstance($instance)
}
}
}
}
}

if ($isConverged) {
# Discover converged switches
logEvent $api "Discovering Converged Switches...."
$results = invokeRest $api "https://$managementIps/monitoring/monitorStates?resourceType=ConvergedNetwork" $cred

if ($results -ne $null) {
$containerName = "Pod $managementIps Converged Network"
$containerDisplayName = "Converged Network Switches"
$container = createContainer $discoveryData "$MPElement[Name='UCPManagementPack.ConvergedSwitchContainer']$" "$MPElement[Name='UCPManagementPack.ConvergedSwitchContainer']/Name$" $containerName $containerDisplayName $podSerial
$discoveryData.AddInstance($container)

$results | where {$_.ResourceType -eq "ConvergedSwitch" } | foreach {

$convName = $_.GlobalResourceId
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.ConvergedSwitch']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $convName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ConvergedSwitchContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ConvergedSwitch']/Name$", $convName)
$discoveryData.AddInstance($instance)

# Discover converged switch port
$_.MonitorIndicators | foreach {
$compName = $_.Name

if ($compName -eq "Temperature") {
$resourceId = $convName + "_Temperature"
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.ConvergedSwitchTemperature']$" $resourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $_.DisplayName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ConvergedSwitchContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ConvergedSwitch']/Name$", $convName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ConvergedSwitchTemperature']/Name$", $resourceId)
$discoveryData.AddInstance($instance)
}

if ($compName -eq "Fan") {
$resourceId = $convName + "_Fan"
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.ConvergedSwitchFan']$" $resourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $_.DisplayName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ConvergedSwitchContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ConvergedSwitch']/Name$", $convName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ConvergedSwitchFan']/Name$", $resourceId)
$discoveryData.AddInstance($instance)
}

if ($compName -eq "PowerSupply") {
$resourceId = $convName + "_PowerSupply"
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.ConvergedSwitchPowerSupply']$" $resourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $_.DisplayName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ConvergedSwitchContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ConvergedSwitch']/Name$", $convName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ConvergedSwitchPowerSupply']/Name$", $resourceId)
$discoveryData.AddInstance($instance)
}

if ($compName -eq "Ports") {
$_.SubGlobalResourceIds | foreach {
$resourceId = $_
$switchPortInstance = $results | where { $_.GlobalResourceId -eq $resourceId }
if ($switchPortInstance.MonitorMode -eq "Report") {
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.ConvergedSwitchPort']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $resourceId)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ConvergedSwitchContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ConvergedSwitch']/Name$", $convName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.ConvergedSwitchPort']/Name$", $resourceId)
$discoveryData.AddInstance($instance)
}
}
}
}
}
}

} else {
# Discover Ethernet
logEvent $api "Discovering Ethernet...."
$results = invokeRest $api "https://$managementIps/monitoring/monitorStates?resourceType=Ethernet" $cred

if ($results -ne $null) {
$containerName = "Pod $managementIps Ethernet"
$containerDisplayName = "Ethernet Switches"
$container = createContainer $discoveryData "$MPElement[Name='UCPManagementPack.EthernetContainer']$" "$MPElement[Name='UCPManagementPack.EthernetContainer']/Name$" $containerName $containerDisplayName $podSerial
$discoveryData.AddInstance($container)

$results | where {$_.ResourceType -eq "EthernetSwitch" } | foreach {

$ethName = $_.GlobalResourceId
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.Ethernet']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $ethName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.EthernetContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Ethernet']/Name$", $ethName)
$discoveryData.AddInstance($instance)

# Discover ethernet port
$_.MonitorIndicators | foreach {
$compName = $_.Name

if ($compName -eq "Temperature") {
$resourceId = $ethName + "_Temperature"
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.EthernetSwitchTemperature']$" $resourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $_.DisplayName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.EthernetContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Ethernet']/Name$", $ethName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.EthernetSwitchTemperature']/Name$", $resourceId)
$discoveryData.AddInstance($instance)
}

if ($compName -eq "Fan") {
$resourceId = $ethName + "_Fan"
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.EthernetSwitchFan']$" $resourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $_.DisplayName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.EthernetContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Ethernet']/Name$", $ethName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.EthernetSwitchFan']/Name$", $resourceId)
$discoveryData.AddInstance($instance)
}

if ($compName -eq "PowerSupply") {
$resourceId = $ethName + "_PowerSupply"
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.EthernetSwitchPowerSupply']$" $resourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $_.DisplayName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.EthernetContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Ethernet']/Name$", $ethName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.EthernetSwitchPowerSupply']/Name$", $resourceId)
$discoveryData.AddInstance($instance)
}

if ($compName -eq "Ports") {
$_.SubGlobalResourceIds | foreach {
$resourceId = $_
$switchPortInstance = $results | where { $_.GlobalResourceId -eq $resourceId }
if ($switchPortInstance.MonitorMode -eq "Report") {
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.EthernetSwitchPort']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $resourceId)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.EthernetContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.Ethernet']/Name$", $ethName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.EthernetSwitchPort']/Name$", $resourceId)
$discoveryData.AddInstance($instance)
}
}
}
}
}
}

# Discover Fibre Channel
logEvent $api "Discovering Fibre Channel...."
$results = invokeRest $api "https://$managementIps/monitoring/monitorStates?resourceType=FibreChannel" $cred

if ($results -ne $null) {
$containerName = "Pod $managementIps Fibre Channel"
$containerDisplayName = "Fibre Channel Switches"
$container = createContainer $discoveryData "$MPElement[Name='UCPManagementPack.FibreChannelContainer']$" "$MPElement[Name='UCPManagementPack.FibreChannelContainer']/Name$" $containerName $containerDisplayName $podSerial
$discoveryData.AddInstance($container)

$results | where {$_.ResourceType -eq "FibreChannelSwitch" } | foreach {

$fcName = $_.GlobalResourceId
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.FibreChannel']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $fcName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.FibreChannelContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.FibreChannel']/Name$", $fcName)
$discoveryData.AddInstance($instance)

# Discover FC port
$_.MonitorIndicators | foreach {
$compName = $_.Name

if ($compName -eq "Temperature") {
$resourceId = $fcName + "_Temperature"
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.FibreChannelSwitchTemperature']$" $resourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $_.DisplayName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.FibreChannelContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.FibreChannel']/Name$", $fcName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.FibreChannelSwitchTemperature']/Name$", $resourceId)
$discoveryData.AddInstance($instance)
}

if ($compName -eq "Ports") {
$_.SubGlobalResourceIds | foreach {
$resourceId = $_
$switchPortInstance = $results | where { $_.GlobalResourceId -eq $resourceId }
if ($switchPortInstance.MonitorMode -eq "Report") {
$resourceId = $_
$instance = createInstance $api $discoveryData "$MPElement[Name='UCPManagementPack.FibreChannelSwitchPort']$" $_.GlobalResourceId $podSerial
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $resourceId)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.FibreChannelContainer']/Name$", $containerName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.FibreChannel']/Name$", $fcName)
$instance.AddProperty("$MPElement[Name='UCPManagementPack.FibreChannelSwitchPort']/Name$", $resourceId)
$discoveryData.AddInstance($instance)
}
}
}
}
}
}
}
}

logEvent $api "Completed POD discovery"
} else {
logEvent $api "Credentials not provided!"
}

# Return discovery data
$discoveryData
</Script></ScriptBody>
<ManagementIps>$Target/Property[Type='UCPManagementPack.PodDiscoveryEntity']/ManagementIp$</ManagementIps>
<TimeoutSeconds>300</TimeoutSeconds>
<SourceId>$MPElement$</SourceId>
<ManagedEntityId>$Target/Id$</ManagedEntityId>
</DataSource>
</Discovery>