From df1911c3c8d36a7d33aa37a472b6552e37277fee Mon Sep 17 00:00:00 2001 From: Crited Date: Wed, 11 Sep 2019 15:08:30 +0200 Subject: [PATCH] Pulled from testing, build basic IcingaCheckCommandBasket-Function --- .../Invoke-IcingaCheckCommandBasket.psm1 | 311 ++++++++++++++++++ 1 file changed, 311 insertions(+) create mode 100644 lib/plugins/Invoke-IcingaCheckCommandBasket.psm1 diff --git a/lib/plugins/Invoke-IcingaCheckCommandBasket.psm1 b/lib/plugins/Invoke-IcingaCheckCommandBasket.psm1 new file mode 100644 index 0000000..7c3121e --- /dev/null +++ b/lib/plugins/Invoke-IcingaCheckCommandBasket.psm1 @@ -0,0 +1,311 @@ +function Invoke-IcingaCheckCommandBasket() +{ + param( + $CheckName + ); + + [hashtable]$AllChecks = @{}; + + if ($NULL -eq $CheckName) { + $CheckName = (Get-Command Invoke-IcingaCheck*).Name + } + + foreach ($check in $CheckName) { + + [hashtable]$Basket = @{}; + + [int]$FieldID = 0; + + $Data = (Get-Help $check) + + $Basket.Add( + 'Command', @{ + $Data.Syntax.syntaxItem.Name = @{ + 'arguments'= @{ + '-C' = @{ + 'value' = [string]::Format('Use-Icinga; {0}', $Data.Syntax.syntaxItem.Name); + 'order' = '0'; + } + } + 'command' = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"; #Gehört noch geändert + 'disabled' = $FALSE; + 'fields' = @{}; + 'imports' = @(); + 'is_string' = $NULL; + 'methods_excute' = 'PluginCheck'; + 'object_name' = $Data.Syntax.syntaxItem.Name; + 'object_type' = 'object'; + 'timeout' = '180'; + 'vars' = @{}; + 'zone' = $NULL; + } + } + ) + + $Basket.Add('Datafield', @{}); + $Basket.Add('DataList', @{}); + + foreach ($parameter in $Data.Syntax.syntaxItem.parameter) { + if ($parameter.name -ne 'core') { + # Is Numeric Check on position to determine the order value + If (Test-Numeric($parameter.position) -eq $TRUE) { + [string]$Order = [int]$parameter.position + 1 + } else { + [string]$Order = 99 + } + + $IcingaCustomVariable = [string]::Format('$PowerShell_{0}$', $parameter.Name); + + # Conditional whether type of parameter is switch + if ($parameter.type.name -eq 'switch') { + $Basket.Command[$Data.Syntax.syntaxItem.Name].arguments.Add( + [string]::Format('-{0}', $parameter.Name), @{ + 'set_if' = $IcingaCustomVariable; + 'set_if_format' = 'string'; + 'order' = $Order; + } + ); + $Basket.Command[$Data.Syntax.syntaxItem.Name].vars.Add( + $parameter.Name, "0" + ); + # Condotional whether type of parameter is array + } elseif ($parameter.type.name -eq 'array') { + $Basket.Command[$Data.Syntax.syntaxItem.Name].arguments.Add( + [string]::Format('-{0}', $parameter.Name), @{ + 'value' = [string]::Format('(Split-IcingaCheckCommandArgs {0})', $IcingaCustomVariable); + 'order' = $Order; + } + ); + } else { + # Default to Object + $Basket.Command[$Data.Syntax.syntaxItem.Name].arguments.Add( + [string]::Format('-{0}', $parameter.Name), @{ + 'value' = $IcingaCustomVariable; + 'order' = $Order; + } + ); + if ($parameter.name -ne 'Verbose') { + $Basket.Command[$Data.Syntax.syntaxItem.Name].vars.Add($parameter.Name, '$$null'); + } else { + $Basket.Command[$Data.Syntax.syntaxItem.Name].vars.Add($parameter.Name, "0"); + } + } + # Fields + # Required? + if ($parameter.required -eq $TRUE) { + $Required = 'y'; + } else { + $Required = 'n'; + } + $Basket.Command[$Data.Syntax.syntaxItem.Name].fields.Add( + [string]$FieldID, @{ + 'datafield_id' = [int]$FieldID; + 'is_required' = $Required; + 'var_filter' = $NULL; + } + ); + + $IcingaCustomVariable = [string]::Format('PowerShell_{0}', $parameter.Name); + + $DataListName = [string]::Format('PowerShell {0}', $parameter.Name) + + if ($parameter.type.name -eq 'switch') { + $IcingaDataType='Datalist'; + $Basket.DataList.Add( + $DataListName, @{ + 'list_name' = $DataListName; + 'owner' = $env:username; + 'originalId' = '50'; #Gehört noch geändert + 'entries' = @{}; + } + ); + + } elseif ($parameter.type.name -eq 'Object') { + if ($parameter.Name -eq 'Verbose') { + $IcingaDataType='Datalist' + } + $IcingaDataType='String'; + } elseif ($parameter.type.name -eq 'Array') { + $IcingaDataType='Array'; + } else { + $IcingaDataType='String'; + } + $IcingaDataType = [string]::Format('Icinga\Module\Director\DataType\DataType{0}', $IcingaDataType) + + $Basket.Datafield.Add( + [string]$FieldID, @{ + 'varname' = $IcingaCustomVariable; + 'caption' = $parameter.Name; + 'description' = $NULL; + 'datatype' = $IcingaDataType; + 'format' = $NULL; + 'originalId' = [string]$FieldID; + } + ); + + if ($parameter.type.name -eq 'switch' -or $parameter.Name -eq 'Verbose') { + $Basket.Datafield[[string]$FieldID].Add( + 'settings', @{ + 'behavior' = 'strict'; + 'datatype' = 'string'; + 'datalist' = $DataListName; + } + ); + } elseif ($parameter.type.name -eq 'Object') { + $Basket.Datafield[[string]$FieldID].Add( + 'settings', @{ + 'visbility' = 'visible'; + } + ); + } else { + $Basket.Datafield[[string]$FieldID].Add( + 'settings', @{} + ); + } + [int]$FieldID = $FieldID + 1; + } +} + + # Check whether or not noperfdata and verbose is set and add it if necessary + if ($Basket.Command[$Data.Syntax.syntaxItem.Name].arguments.ContainsKey('-Verbose') -eq $FALSE) { + [int]$FieldID = $FieldID + 1; + $Basket.Command[$Data.Syntax.syntaxItem.Name].arguments.Add( + '-Verbose', @{ + 'value' = '$PowerShell_Verbose$'; + 'order' = 'o'; + } + ); + $Basket.Command[$Data.Syntax.syntaxItem.Name].vars.Add( + 'PowerShell_Verbose', "0" + ); + $Basket.Datafield.Add( + [string]$FieldID, @{ + 'varname' = 'PowerShell_Verbose'; + 'caption' = 'Verbose'; + 'description' = $NULL; + 'datatype' = 'Icinga\Module\Director\DataType\DataTypeDatalist'; + 'format' = $NULL; + 'originalId' = [string]$FieldID; + 'settings' = @{ + 'behavior' = 'strict'; + 'data_type' = 'string'; + 'datalist' = 'PowerShell Verbose' + } + } + ); + } + + + if ($Basket.Command[$Data.Syntax.syntaxItem.Name].arguments.ContainsKey('-NoPerfData') -eq $FALSE) { + [int]$FieldID = $FieldID + 1; + $Basket.Command[$Data.Syntax.syntaxItem.Name].arguments.Add( + '-NoPerfData', @{ + 'set_if' = '$PowerShell_NoPerfData$'; + 'set_if_format' = 'string'; + 'order' = '99'; + } + ); + $Basket.Command[$Data.Syntax.syntaxItem.Name].vars.Add( + 'PowerShell_NoPerfData', "0" + ); + $Basket.Datafield.Add( + [string]$FieldID, @{ + 'varname' = 'PowerShell_NoPerfData'; + 'caption' = 'Perf Data'; + 'description' = $NULL; + 'datatype' = 'Icinga\Module\Director\DataType\DataTypeDatalist'; + 'format' = $NULL; + 'originalId' = [string]$FieldID; + 'settings' = @{ + 'behavior' = 'strict'; + 'data_type' = 'string'; + 'datalist' = 'PowerShell NoPerfData' + } + } + ); + } + # DataList Entries (Default for NoPerfData) + if ($Basket.DataList.ContainsKey('PowerShell NoPerfData') -eq $FALSE) { + $Basket.DataList.Add( + 'PowerShell NoPerfData', @{ + 'list_name' = 'PowerShell NoPerfData'; + 'owner' = $env:username; + 'originalId' = '1'; #Gehört noch geändert + 'entries' = @{}; + } + ); + } + $Basket.DataList["PowerShell NoPerfData"].entries.Add( + '0', @{ + 'entry_name' = '0'; + 'entry_value:' = "yes"; + 'format' = 'string'; + 'allowed_roles' = $NULL; + } + ); + $Basket.DataList["PowerShell NoPerfData"].entries.Add( + '1', @{ + 'entry_name' = '1'; + 'entry_value:' = "no"; + 'format' = 'string'; + 'allowed_roles' = $NULL; + } + ); + + # DataList Entries (Default for Verbose) + if ($Basket.DataList.ContainsKey('PowerShell Verbose') -eq $FALSE) { + $Basket.DataList.Add( + 'PowerShell Verbose', @{ + 'list_name' = 'PowerShell Verbose'; + 'owner' = $env:username; + 'originalId' = '50'; #Gehört noch geändert + 'entries' = @{}; + } + ); + } + $Basket.DataList["PowerShell Verbose"].entries.Add( + '0', @{ + 'entry_name' = '0'; + 'entry_value:' = "Show Default"; + 'format' = 'string'; + 'allowed_roles' = $NULL; + } + ); + $Basket.DataList["PowerShell Verbose"].entries.Add( + '1', @{ + 'entry_name' = '1'; + 'entry_value:' = "Show Operator"; + 'format' = 'string'; + 'allowed_roles' = $NULL; + } + ); + $Basket.DataList["PowerShell Verbose"].entries.Add( + '2', @{ + 'entry_name' = '2'; + 'entry_value:' = "Show Problems"; + 'format' = 'string'; + 'allowed_roles' = $NULL; + } + ) + $Basket.DataList["PowerShell Verbose"].entries.Add( + '3', @{ + 'entry_name' = '3'; + 'entry_value:' = "Show All"; + 'format' = 'string'; + 'allowed_roles' = $NULL; + } + ); + $AllChecks.Add($check, $Basket); + } + +Write-Host $CheckName; +Write-Host $CheckName.Count; + + if ([string]$CheckName.Count -eq '1') { + $output=ConvertTo-Json -D 100 $Basket > Check.json; + } else { + $output=ConvertTo-Json -D 100 $AllChecks > Check.json; + } + + return $output; +} \ No newline at end of file