Virtual Machine Host Impact Event Discovery

com.apcc.ISXO.PRO.VMHostImpact.EventDiscovery (Discovery)

Data source for VMHost Impact state

Knowledge Base article:

Summary

This discovery aggregates information on existing virtual machine hosts from the Virtual Machine Manager service with knowledge of these hosts in the StruxureWare Operations service. The discovery workflow will instantiate objects for all existing virtual machine hosts modeled in StruxureWare Operations and append any location information for these hosts.

Element properties:

Targetcom.apcc.ISXO.PRO.Operations
EnabledTrue
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:
  • com.apcc.ISXO.PRO.VMHostImpact
    • ISXOEndpoint
    • Identifier
    • VMMServer
    • Port
    • LocationName
    • BladeMountingPosition
    • MountingPosition
    • RackName
    • RowName
    • RoomName
    • DisplayName
Discovered relationships and their attribuets:

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource com.apcc.ISXO.PRO.VMHostImpact.EventDiscoveryDSM Default

Source Code:

<Discovery ID="com.apcc.ISXO.PRO.VMHostImpact.EventDiscovery" Enabled="true" Target="com.apcc.ISXO.PRO.Operations" ConfirmDelivery="true" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="com.apcc.ISXO.PRO.VMHostImpact">
<Property TypeID="com.apcc.ISXO.PRO.VMHostImpact" PropertyID="ISXOEndpoint"/>
<Property TypeID="com.apcc.ISXO.PRO.VMHostImpact" PropertyID="Identifier"/>
<Property TypeID="com.apcc.ISXO.PRO.VMHostImpact" PropertyID="VMMServer"/>
<Property TypeID="com.apcc.ISXO.PRO.VMHostImpact" PropertyID="Port"/>
<Property TypeID="com.apcc.ISXO.PRO.VMHostImpact" PropertyID="LocationName"/>
<Property TypeID="com.apcc.ISXO.PRO.VMHostImpact" PropertyID="BladeMountingPosition"/>
<Property TypeID="com.apcc.ISXO.PRO.VMHostImpact" PropertyID="MountingPosition"/>
<Property TypeID="com.apcc.ISXO.PRO.VMHostImpact" PropertyID="RackName"/>
<Property TypeID="com.apcc.ISXO.PRO.VMHostImpact" PropertyID="RowName"/>
<Property TypeID="com.apcc.ISXO.PRO.VMHostImpact" PropertyID="RoomName"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryRelationship TypeID="com.apcc.ISXO.PRO.Operations_Contains_VMHostImpacts"/>
</DiscoveryTypes>
<DataSource ID="DS" TypeID="com.apcc.ISXO.PRO.VMHostImpact.EventDiscoveryDSM">
<ScriptName>com.apcc.ISXO.PRO.VMHostImpact.Discovery.ps1</ScriptName>
<ScriptBody><Script>#############################################################################
# Filename: com.apcc.ISXO.PRO.VMHostImpact.Discovery.ps1
#############################################################################
Param($strRuleID, $strTargetID, $principalName, $isxoEndpoint, $username, $password, $vmmServer, $vmmServerPort)

$isDebug = $false;

function LogInfo($logMessage, $doLog = $isDebug) {
if ($doLog) {
[Diagnostics.EventLog]::WriteEntry("ITImpact Discovery", "Info: " + $logMessage);
}
}

function LogError($logMessage) {
[Diagnostics.EventLog]::WriteEntry("ITImpact Discovery", "Error: " + $logMessage);
}

LogInfo("Request: Discovery on VMM server: " + $vmmServer + ":" + $vmmServerPort + " from: " + $isxoEndpoint) $true;

if ($username -eq $null -or $password -eq $null) {
LogError("Credentials missing");
eventcreate /T Error /ID 100 /L APPLICATION /SO VMMPro /D 'Discovery credentials missing.';
return;
}

LogInfo("Discovery started");

Import-Module VirtualMachineManagerCore;
$Error.Clear();

$momAPI = New-Object -comObject 'MOM.ScriptAPI'
if ($Error.Count -ne 0) {
LogError("Unable create script API: " + $Error[0]);
return;
}

$discoveryData = $momAPI.CreateDiscoveryData(0, $strRuleID, $strTargetID);

if ($Error.Count -ne 0) {
LogError("Unable to create discovery data: " + $Error[0]);
return;
}

$vmmServerObj = Get-SCVMMServer -ComputerName $vmmServer -TCPPort $vmmServerPort;
if ($Error.Count -ne 0) {
LogError("Unable to connect to VMM server: " + $Error[0]);
return;
}

# Convert VMM server name from request to fully qualified domain name
$vmmServerName = $vmmServerObj.FullyQualifiedDomainName;

$vmhosts = Get-SCVMHost -VMMServer $vmmServerName;
if ($Error.Count -ne 0) {
LogError("Unable to get information about VM hosts from VMM server: " + $vmmServerName + ": " + $Error[0]);
$vmmServerObj.Disconnect();
return;
}

$vmclients = Get-SCVirtualMachine -VMMServer $vmmServerObj;
if ($Error.Count -ne 0) {
LogError("Unable to get information about VM clients from VMM server: " + $vmmServerName + ": " + $Error[0]);
$vmmServerObj.Disconnect();
return;
}

Set-VMHostInformation $isxoEndpoint $username $password $vmmServerObj $vmhosts $vmclients
if ($Error.Count -ne 0) {
LogError("Unable to push VM host information to: " + $isxoEndpoint + ": " + $Error[0]);
$vmmServerObj.Disconnect();
return;
}
LogInfo("Sent information about " + $vmhosts.Count + " VM host(s) to: " + $isxoEndpoint);

$knownVMHosts = Get-KnownVMHost $isxoEndpoint $username $password $vmmServerObj
if ($Error.Count -ne 0) {
LogError("Unable to get information about known VM hosts for VMM server: " + $vmmServerName + ":" + $vmmServerPort + " from: " + $isxoEndpoint + ": " + $Error[0]);
$vmmServer.Disconnect();
return;
}

LogInfo("Retrieved information about " + $knownVMHosts.Count + " known VM host(s) for VMM server: " + $vmmServerName + ":" + $vmmServerPort + " from: " + $isxoEndpoint);

foreach ($knownVMHost in $knownVMHosts) {
LogInfo("Creating discovery objecy for: " + $knownVMHost.Identifier);
$hostInfo = $discoveryData.CreateClassInstance("$MPElement[Name='com.apcc.ISXO.PRO.VMHostImpact']$");
$hostInfo.AddProperty("$MPElement[Name='com.apcc.ISXO.PRO.VMHostImpact']/Identifier$", $knownVMHost.Identifier);
$hostInfo.AddProperty("$MPElement[Name='com.apcc.ISXO.PRO.VMHostImpact']/ISXOEndpoint$", $isxoEndpoint);
$hostInfo.AddProperty("$MPElement[Name='com.apcc.ISXO.PRO.VMHostImpact']/VMMServer$", $vmmServerName);
$hostInfo.AddProperty("$MPElement[Name='com.apcc.ISXO.PRO.VMHostImpact']/Port$", $vmmServerPort);
$hostInfo.AddProperty("$MPElement[Name='com.apcc.ISXO.PRO.VMHostImpact']/LocationName$", $knownVMHost.Name);
$hostInfo.AddProperty("$MPElement[Name='com.apcc.ISXO.PRO.VMHostImpact']/BladeMountingPosition$", $knownVMHost.BladeMountingPosition);
$hostInfo.AddProperty("$MPElement[Name='com.apcc.ISXO.PRO.VMHostImpact']/MountingPosition$", $knownVMHost.MountingPosition);
$hostInfo.AddProperty("$MPElement[Name='com.apcc.ISXO.PRO.VMHostImpact']/RackName$", $knownVMHost.Rack);
$hostInfo.AddProperty("$MPElement[Name='com.apcc.ISXO.PRO.VMHostImpact']/RoomName$", $knownVMHost.Room);
$hostInfo.AddProperty("$MPElement[Name='com.apcc.ISXO.PRO.VMHostImpact']/RowName$", $knownVMHost.Row);
$hostInfo.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $principalName);
$hostInfo.AddProperty("$MPElement[Name='SCVMM!Microsoft.SystemCenter.VirtualMachineManager.Pro.2008.Base']/Name$", $knownVMHost.Identifier);
$hostInfo.AddProperty("$MPElement[Name='SCVMM!Microsoft.SystemCenter.VirtualMachineManager.Pro.2008.Base']/VMMServer$", $vmmServerName);
$hostInfo.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $knownVMHost.Identifier);

$discoveryData.AddInstance($hostInfo);
}

$vmmServer.Disconnect();
LogInfo("Discovery ended");

$discoveryData
</Script></ScriptBody>
<TimeoutSeconds>60</TimeoutSeconds>
<LogName>Application</LogName>
<EventID>201</EventID>
<EventSource>StruxureWare Operations PRO Pack Agent</EventSource>
<ISXOEndpoint>$Target/Property[Type="com.apcc.ISXO.PRO.Operations"]/ISXOEndpoint$</ISXOEndpoint>
<Username>$RunAs[Name="com.apcc.ISXO.PRO.Operations.Login"]/UserName$</Username>
<Password>$RunAs[Name="com.apcc.ISXO.PRO.Operations.Login"]/Password$</Password>
<VMMServer>$Target/Property[Type="com.apcc.ISXO.PRO.Operations"]/VMMServer$</VMMServer>
<Port>$Target/Property[Type="com.apcc.ISXO.PRO.Operations"]/Port$</Port>
<PrincipalName>$Target/Property[Type="com.apcc.ISXO.PRO.Operations"]/HealthServicePrincipalName$</PrincipalName>
</DataSource>
</Discovery>