VCS Virtual Server Discovery for SQLServer 2014

Veritas.VCS.SQL2014VirtualServer.Discovery (Discovery)

This discovery discovers the VCS virtual servers configured for Microsoft SQL Server 2014 instances.

Element properties:

TargetVeritas.VCS.PhysicalServer
EnabledTrue
Frequency600
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:

Member Modules:

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

Source Code:

<Discovery ID="Veritas.VCS.SQL2014VirtualServer.Discovery" Enabled="true" Target="VCSLibrary!Veritas.VCS.PhysicalServer" ConfirmDelivery="true" Remotable="false" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="VCSLibrary!Veritas.VCS.VirtualServer">
<Property TypeID="Windows!Microsoft.Windows.Computer" PropertyID="PrincipalName"/>
<Property TypeID="Windows!Microsoft.Windows.Computer" PropertyID="NetworkName"/>
<Property TypeID="Windows!Microsoft.Windows.Computer" PropertyID="DNSName"/>
<Property TypeID="Windows!Microsoft.Windows.Computer" PropertyID="NetbiosComputerName"/>
<Property TypeID="VCSLibrary!Veritas.VCS.VirtualServer" PropertyID="OnlineNode"/>
</DiscoveryClass>
</DiscoveryTypes>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider">
<IntervalSeconds>600</IntervalSeconds>
<SyncTime/>
<ScriptName>DiscoverSQL2014VirtualServers.vbs</ScriptName>
<Arguments>$MPElement$ $Target/Id$ $Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/DomainDnsName$</Arguments>
<ScriptBody><Script>
Option Explicit
SetLocale("en-us")

Const SCRIPT_NAME = "VCS Virtual Server Discovery for SQL 2014"
Const WindowsFolder = 0
Const ForWriting = 2
Const ForReading = 1
Const VCS_STRNAME = "Veritas Cluster Server MOM utility"

Dim SourceID
Dim ManagedEntityID
Dim DomainName
Dim FILENAME, wfolder, fso, VCSInstalled

Call Main()

Sub Main
Dim objTextFile, objShell, objScriptExec, strAPIState, strComputer,objReg,strKeyPath, objLogFile

Dim oParams
Set oParams = WScript.Arguments

SourceId = oParams(0)
ManagedEntityId = oParams(1)
DomainName = oParams(2)

Set fso = CreateObject("Scripting.FileSystemObject")
Set wfolder = fso.GetSpecialFolder(WindowsFolder)
FILENAME = wfolder + "\\Temp\\VCSSQL2014VirtualServer.log"
'Set objLogFile = fsO.OpenTextFile(FILENAME, ForWriting, True)
'objLogFile.WriteLine(" Create MOM Object")

Dim oAPI, oDiscoveryData
Set oAPI = CreateObject("MOM.ScriptAPI")
If Err &lt;&gt; 0 Then
WScript.Quit -1
End If
Set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
If Err &lt;&gt; 0 Then
WScript.Quit -1
End If

'objLogFile.WriteLine(" Objects created, Start vcs discovery")
FILENAME = wfolder + "\\Temp\\VCSSQL2014VirtualServer.txt"
Set objTextFile = fsO.OpenTextFile(FILENAME, ForWriting, True)
Set objShell = CreateObject("WScript.Shell")

' For SQLSer2014 AnalysisService
Set objScriptExec = objShell.Exec("%VCS_HOME%\Bin\MOMUtil.exe GenericService ServiceName")
strAPIState = objScriptExec.StdOut.ReadAll
objTextFile.WriteLine(strAPIState)

objTextFile.WriteLine("SQL2014 Instances")
' For SQLServer2014
Set objScriptExec = objShell.Exec("%VCS_HOME%\Bin\MOMUtil.exe SQLServer Instance")
strAPIState = objScriptExec.StdOut.ReadAll
objTextFile.WriteLine(strAPIState)

Set objScriptExec = objShell.Exec("%VCS_HOME%\Bin\MOMUtil.exe Lanman VirtualName")
strAPIState = objScriptExec.StdOut.ReadAll
'objLogFile.WriteLine(strAPIState)
If strAPIState &lt;&gt; "" Then
If InStr (1, strAPIState, "error", 1) &gt;0 Then
Call oAPI.Return(oDiscoveryData)
WScript.Quit
Else
objTextFile.WriteLine("Lanman Information")
objTextFile.WriteLine(strAPIState)
objTextFile.close()

'Get the Instance and Lanman pair with service group
Dim strTempArr, ServiceGroups, GroupName
ServiceGroups=""
Set objTextFile = fsO.OpenTextFile(FILENAME, ForReading, True)
'objLogFile.WriteLine("Start reading file")
If objTextFile.AtEndOfStream &lt;&gt; True Then
strAPIState = objTextFile.ReadLine
strAPIState = Trim(strAPIState)
Do While (StrComp(strAPIState, "SQL2014 Instances", 1) &lt;&gt; 0 )
If Len(strAPIState) &gt; 0 Then
strTempArr = Split(strAPIState, ",")
If (StrComp("Instance", strTempArr(0), 1) = 0 ) Then
Dim ServiceName
ServiceName = Trim(strTempArr(1))
If (Len(ServiceName) &gt; 0) And (InStr(ServiceName, "OLAP") &gt; 0) Then
'Discover Virtual Server
GroupName = "," + strTempArr(2)+","
If InStr(ServiceGroups, GroupName) = 0 Then
'objLogFile.WriteLine("Adding Serivce" + GroupName)
ServiceGroups = ServiceGroups + GroupName
End If
End If
End If
End If
strAPIState = objTextFile.ReadLine
strAPIState = Trim(strAPIState)
Loop
Do While (StrComp(strAPIState, "Lanman Information", 1) &lt;&gt; 0 )
If Len(strAPIState) &gt; 0 Then
strTempArr = Split(strAPIState, ",")
If (StrComp("Instance", strTempArr(0), 1) = 0 ) Then
'Discover Virtual Server
GroupName = "," + strTempArr(2)+","
If InStr(ServiceGroups, GroupName) = 0 Then
'objLogFile.WriteLine("Adding SQL" + GroupName)
ServiceGroups = ServiceGroups +GroupName
End If
End If
End If
strAPIState = objTextFile.ReadLine
strAPIState = Trim(strAPIState)
Loop
'objLogFile.WriteLine("SGS: " + ServiceGroups)
strAPIState = objTextFile.ReadLine
strAPIState = Trim(strAPIState)
Do While objTextFile.AtEndOfStream &lt;&gt; True
If Len(strAPIState) &gt; 0 Then
strTempArr = Split(strAPIState, ",")
If (StrComp("Instance", strTempArr(0), 1) = 0 ) Then
'Find Lanman Group in the ServiceGroup list
Dim SearchString
SearchString = "," + strTempArr(2) + ","
If InStr(ServiceGroups, SearchString) &gt; 0 Then
Dim OnlineNode
OnlineNode = strTempArr(3)
'objLogFile.WriteLine("OnlineNode :" + OnlineNode)
If Len(OnlineNode) &gt; 1 Then
'objLogFile.WriteLine("Discovering :" + strTempArr(1))
Dim LanmanName, FQLanmanName
LanmanName = strTempArr(1)
FQLanmanName = strTempArr(1) + "." + DomainName
Dim oVirtualServer
Set oVirtualServer = oDiscoveryData.CreateClassInstance("$MPElement[Name='VCSLibrary!Veritas.VCS.VirtualServer']$")
With oVirtualServer
.AddProperty "$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", FQLanmanName
.AddProperty "$MPElement[Name='Windows!Microsoft.Windows.Computer']/NetworkName$", FQLanmanName
.AddProperty "$MPElement[Name='Windows!Microsoft.Windows.Computer']/DNSName$", FQLanmanName
.AddProperty "$MPElement[Name='Windows!Microsoft.Windows.Computer']/NetbiosComputerName$", LanmanName
.AddProperty "$MPElement[Name='VCSLibrary!Veritas.VCS.VirtualServer']/OnlineNode$", OnlineNode
End With
Call oDiscoveryData.AddInstance(oVirtualServer)

End If
End If
End If
End If
strAPIState = objTextFile.ReadLine
strAPIState = Trim(strAPIState)
Loop
End If
End If
End If
objTextFile.Close()
'objLogFile.WriteLine("Returning discovery data")
'objLogFile.Close()
oAPI.Return(oDiscoveryData)
End Sub
</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</DataSource>
</Discovery>