Pulled from testing, build basic IcingaCheckCommandBasket-Function

This commit is contained in:
Crited 2019-09-11 15:08:30 +02:00
parent 191a132024
commit fc165c79af

View file

@ -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;
}