forked from Mesverrum/MyPublicWork
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAppAndAppRoleGroupBuilder.ps1
125 lines (106 loc) · 5.63 KB
/
AppAndAppRoleGroupBuilder.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<#------------- CONNECT TO SWIS -------------#>
# load the snappin if it's not already loaded (step 1)
if (!(Get-PSSnapin | Where-Object { $_.Name -eq "SwisSnapin" })) {
Add-PSSnapin "SwisSnapin"
}
#define target host and credentials
$hostname = 'localhost'
#$user = "admin"
#$password = "password"
# create a connection to the SolarWinds API
#$swis = connect-swis -host $hostname -username $user -password $password -ignoresslerrors
$swis = Connect-Swis -Hostname $hostname -Trusted
<#------------- ACTUAL SCRIPT -------------#>
##### Phase 1 - Create groups tree #######
#########get applications list
$applications = get-swisdata $swis @"
select distinct n.CustomProperties.Applications
from orion.nodes n
left join orion.Container c on c.name = n.CustomProperties.Applications
where n.CustomProperties.Applications is not null and n.CustomProperties.Applications not in ('')
order by n.CustomProperties.Applications
"@
foreach($app in $applications)
{
#get groupid for parent folder
$parent = get-swisdata $swis "select top 1 containerid from orion.container where name='Applications'"
$appcheck = get-swisdata $swis "select containerid from orion.container where name = '$app'"
if(!$appcheck) {
" Creating group for $app"
$members = @(
@{ Name = "$app Nodes"; Definition = "filter:/Orion.Nodes[Contains(CustomProperties.Applications,'$app') AND CustomProperties.ApplicationsRole='Unknown']" },
@{ Name = "$app Applications"; Definition = "filter:/Orion.APM.GenericApplication[Contains(CustomProperties.Applications,'$app') AND CustomProperties.ApplicationsRole='Unknown']" },
@{ Name = "$app IIS"; Definition = "filter:/Orion.APM.IIS.Application[Contains(CustomProperties.Applications,'$app') AND CustomProperties.ApplicationsRole='Unknown']" },
@{ Name = "$app SQL"; Definition = "filter:/Orion.APM.SqlServerApplication[Contains(CustomProperties.Applications,'$app') AND CustomProperties.ApplicationsRole='Unknown']" }
)
$appid = (invoke-swisverb $swis "orion.container" "CreateContainerWithParent" @(
"$parent",
"$app",
"Core",
300,
0,
"$app child nodes and applications"
"true",
([xml]@("<ArrayOfMemberDefinitionInfo xmlns='http://schemas.solarwinds.com/2008/Orion'>",
[string]($members |% {
"<MemberDefinitionInfo><Name>$($_.Name)</Name><Definition>$($_.Definition)</Definition></MemberDefinitionInfo>"
}
),
"</ArrayOfMemberDefinitionInfo>"
)).DocumentElement
)).innertext
}
else
{
" $app already exists"
}
############get components list
$roles = get-swisdata $swis @"
select distinct toupper(concat(n.CustomProperties.Applications,' ',n.CustomProperties.ApplicationsRole)) as Components
from orion.nodes n
left join orion.Container c on c.name= concat(n.CustomProperties.Applications,' ',n.CustomProperties.ApplicationsRole)
where n.CustomProperties.Applications is not null and n.CustomProperties.Applications not in ('','unknown','N/A','not applicable')
and n.CustomProperties.ApplicationsRole is not null and n.CustomProperties.ApplicationsRole not in ('','unknown','N/A','not applicable')
and n.CustomProperties.Applications = '$app'
and n.CustomProperties.ApplicationsRole not like '%,%'
order by concat(n.CustomProperties.Applications,' ',n.CustomProperties.ApplicationsRole)
"@
foreach($role in $roles)
{
#get groupid for parent folder
$parent = get-swisdata $swis "select top 1 containerid from orion.container where name='$app'"
$rolecheck = get-swisdata $swis "select containerid from orion.container where name = '$role'"
if($rolecheck.length -eq 0)
{
#creating variables for definitions
$role2 = $role -replace "$app ",''
" Creating group for $role"
$members = @(
@{ Name = "$role Nodes"; Definition = "filter:/Orion.Nodes[Contains(CustomProperties.Applications,'$app') AND Contains(CustomProperties.ApplicationsRole,'$role2')]" },
@{ Name = "$role Applications"; Definition = "filter:/Orion.APM.GenericApplication[Contains(CustomProperties.Applications,'$app') AND Contains(CustomProperties.ApplicationsRole,'$role2')]" },
@{ Name = "$role IIS"; Definition = "filter:/Orion.APM.IIS.Application[Contains(CustomProperties.Applications,'$app') AND Contains(CustomProperties.ApplicationsRole,'$role2')]" },
@{ Name = "$role SQL"; Definition = "filter:/Orion.APM.SqlServerApplication[Contains(CustomProperties.Applications,'$app') AND Contains(CustomProperties.ApplicationsRole,'$role2')]" }
)
$envid = (invoke-swisverb $swis "orion.container" "CreateContainerWithParent" @(
"$parent",
"$role",
"Core",
300,
0,
"$role child nodes and applications",
"true",
([xml]@("<ArrayOfMemberDefinitionInfo xmlns='http://schemas.solarwinds.com/2008/Orion'>",
[string]($members |% {
"<MemberDefinitionInfo><Name>$($_.Name)</Name><Definition>$($_.Definition)</Definition></MemberDefinitionInfo>"
}
),
"</ArrayOfMemberDefinitionInfo>"
)).DocumentElement
)).innertext
}
else
{
" $role already exists"
}
}
}