Discover Cluster Shared Volumes

VKernel.CapacityAnalyzer.ClusterSharedVolumeDiscovery (Discovery)

Element properties:

TargetMicrosoft.SystemCenter.VirtualMachineManager.2012.HyperVHost
EnabledTrue
Frequency3600
RemotableFalse

Object Discovery Details:

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

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.Windows.TimedScript.DiscoveryProvider Default

Source Code:

<Discovery ID="VKernel.CapacityAnalyzer.ClusterSharedVolumeDiscovery" Enabled="true" Target="SCVMM2012DiscoveryMP!Microsoft.SystemCenter.VirtualMachineManager.2012.HyperVHost" ConfirmDelivery="false" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="VKernel.CapacityAnalyzer.ClusterSharedVolume">
<Property TypeID="VKernel.CapacityAnalyzer.ClusterSharedVolume" PropertyID="Name"/>
<Property TypeID="VKernel.CapacityAnalyzer.ClusterSharedVolume" PropertyID="DiskName"/>
<Property TypeID="VKernel.CapacityAnalyzer.ClusterSharedVolume" PropertyID="FileSystem"/>
<Property TypeID="VKernel.CapacityAnalyzer.ClusterSharedVolume" PropertyID="VolumeGuid"/>
<Property TypeID="VKernel.CapacityAnalyzer.ClusterSharedVolume" PropertyID="VolumeLabel"/>
<Property TypeID="VKernel.CapacityAnalyzer.ClusterSharedVolume" PropertyID="Size"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
<Property TypeID="VKernel.CapacityAnalyzer.ClusterSharedVolume" PropertyID="PerfInstance"/>
</DiscoveryClass>
<DiscoveryRelationship TypeID="VKernel.CapacityAnalyzer.HostContainsClusterSharedVolume"/>
</DiscoveryTypes>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider">
<IntervalSeconds>3600</IntervalSeconds>
<SyncTime/>
<ScriptName>CsvDiscovery.js</ScriptName>
<Arguments>$MPElement$ $Target/Id$ $Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$ $Target/Property[Type="SCVMMLibraryMP!Microsoft.SystemCenter.VirtualMachineManager.VMHost"]/VMMId$</Arguments>
<ScriptBody><Script>var oAPI = WScript.CreateObject("MOM.ScriptAPI");
var oArgs = WScript.Arguments;
var SourceId = oArgs.Item(0);
var ManagedEntityId = oArgs.Item(1);
var computerName = oArgs.Item(2);
var VmmGuid = oArgs.Item(3);
var oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId);

var locator = WScript.CreateObject("WbemScripting.SWbemLocator");
var services = locator.ConnectServer(computerName, "root");
var wmiEnum = new Enumerator(services.InstancesOf("__NAMESPACE", 0x20));
var hasClusterNamespace = false;

for (; !wmiEnum.atEnd(); wmiEnum.moveNext())
{
var namespaceObj = wmiEnum.item();

if (namespaceObj.Name == "MSCluster")
{
hasClusterNamespace = true;
break;
}
}

var hasCsvClass = false;

if (hasClusterNamespace)
{
services = locator.ConnectServer(computerName, "root\\MSCluster");
wmiEnum = new Enumerator(services.ExecQuery(
"SELECT * FROM meta_class WHERE __Class = \"MSCluster_ClusterSharedVolume\"", "WQL", 0x20));
hasCsvClass = !wmiEnum.atEnd();
}

if (hasCsvClass)
{
wmiEnum = new Enumerator(services.InstancesOf("MSCluster_ClusterSharedVolume", 0x20));

for (; !wmiEnum.atEnd(); wmiEnum.moveNext())
{
var csvObj = wmiEnum.item();
var partEnum = new Enumerator(csvObj.Associators_(
"MSCluster_ClusterSharedVolumeToPartition", "MSCluster_DiskPartition"));

if (partEnum.atEnd())
continue;

var partObj = partEnum.item();
var diskEnum = new Enumerator(partObj.Associators_("MSCluster_DiskToDiskPartition", "MSCluster_Disk"));

if (diskEnum.atEnd())
continue;

var diskObj = diskEnum.item();
var oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='VKernel.CapacityAnalyzer.ClusterSharedVolume']$");

oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", computerName);
oInst.AddProperty("$MPElement[Name='SCVMMLibraryMP!Microsoft.SystemCenter.VirtualMachineManager.VMHost']/VMMId$", VmmGuid);
oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", csvObj.Name);

oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.ClusterSharedVolume']/Name$", csvObj.Name);
oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.ClusterSharedVolume']/DiskName$", diskObj.Name);
oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.ClusterSharedVolume']/Size$", partObj.TotalSize);
oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.ClusterSharedVolume']/VolumeGuid$", partObj.VolumeGuid);
oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.ClusterSharedVolume']/VolumeLabel$", partObj.VolumeLabel);
oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.ClusterSharedVolume']/FileSystem$", partObj.FileSystem);
oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.ClusterSharedVolume']/PerfInstance$", csvObj.Name.replace(/^\w+:/, ""));

oDiscoveryData.AddInstance(oInst);
}
}

oAPI.Return(oDiscoveryData);
</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</DataSource>
</Discovery>