diff --git a/doc/31-Changelog.md b/doc/31-Changelog.md index b607a63..9a3bfcd 100644 --- a/doc/31-Changelog.md +++ b/doc/31-Changelog.md @@ -11,6 +11,10 @@ Released closed milestones can be found on [GitHub](https://github.com/Icinga/ic [Issue and PRs](https://github.com/Icinga/icinga-powershell-framework/milestone/10?closed=1) +### Enhancements + +* [#136](https://github.com/Icinga/icinga-powershell-framework/pull/136) Adds support to ignore empty check packages and return `Ok` instead of `Unknown` if `-IgnoreEmptyPackage` is set on `New-IcingaCheckPackage` + ### Bugfixes * [#127](https://github.com/Icinga/icinga-powershell-framework/issues/127) Fixes wrong error message on failed MSSQL connection due to database not reachable by using `-IntegratedSecurity` diff --git a/doc/developerguide/02-New-IcingaCheckPackage.md b/doc/developerguide/02-New-IcingaCheckPackage.md index e900780..3673d53 100644 --- a/doc/developerguide/02-New-IcingaCheckPackage.md +++ b/doc/developerguide/02-New-IcingaCheckPackage.md @@ -10,25 +10,24 @@ The `IcingaCheckPackage` is the first step to take to write more advanced checks It will be used like in this example: - ```powershell $IcingaPackage = New-IcingaCheckPackage -Name 'My Package' -OperatorAnd; ``` ## Arguments -| Argument | Input | Mandatory | Description | -| --- | --- | --- | --- | -| Name | String | * | The unique name of each package within a plugin. Will be displayed in the check output. | -| OperatorAnd | Switch | | Every added check/package requires to return Ok for this package to be Ok | -| OperatorOr | Switch | | One added check/package requires to return Ok for this package to be Ok | -| OperatorNone | Switch | | None of added check/package has to return Ok for this package to be Ok | -| OperatorMin | Int | | Minimum of `n` added checks/packages requires to return Ok for this package to be Ok | -| OperatorMax | Int | | Maximum of `n` added checks/packages requires to return Ok for this package to be Ok | -| Checks | Array | | Array of checks to be added to the check package | -| Verbose | int | | Defines the level of output detail from 0 lowest to 3 highest detail | -| Hidden | Switch | | If set, the check package doesn't generate output | - +| Argument | Input | Mandatory | Description | +| --- | --- | --- | --- | +| Name | String | * | The unique name of each package within a plugin. Will be displayed in the check output. | +| OperatorAnd | Switch | | Every added check/package requires to return Ok for this package to be Ok | +| OperatorOr | Switch | | One added check/package requires to return Ok for this package to be Ok | +| OperatorNone | Switch | | None of added check/package has to return Ok for this package to be Ok | +| OperatorMin | Int | | Minimum of `n` added checks/packages requires to return Ok for this package to be Ok | +| OperatorMax | Int | | Maximum of `n` added checks/packages requires to return Ok for this package to be Ok | +| Checks | Array | | Array of checks to be added to the check package | +| Verbose | int | | Defines the level of output detail from 0 lowest to 3 highest detail | +| IgnoreEmptyPackage | Switch | | By default a check package will return `Unknown` in case no checks are assigned. Setting this argument will ignore this and return `Ok` instead +| Hidden | Switch | | If set, the check package doesn't generate output | ### Examples @@ -47,4 +46,3 @@ $IcingaPackage = New-IcingaCheckPackage -Name 'My Package' -OperatorAnd; $IcingaPackage.AddCheck($IcingaCheck1); $IcingaPackage.AddCheck($IcingaCheck2); ``` - diff --git a/lib/icinga/plugin/New-IcingaCheckPackage.psm1 b/lib/icinga/plugin/New-IcingaCheckPackage.psm1 index a987355..4081e4e 100644 --- a/lib/icinga/plugin/New-IcingaCheckPackage.psm1 +++ b/lib/icinga/plugin/New-IcingaCheckPackage.psm1 @@ -8,33 +8,35 @@ function New-IcingaCheckPackage() [switch]$OperatorAnd, [switch]$OperatorOr, [switch]$OperatorNone, - [int]$OperatorMin = -1, - [int]$OperatorMax = -1, - [array]$Checks = @(), - [int]$Verbose = 0, - [switch]$Hidden = $FALSE + [int]$OperatorMin = -1, + [int]$OperatorMax = -1, + [array]$Checks = @(), + [int]$Verbose = 0, + [switch]$IgnoreEmptyPackage = $FALSE, + [switch]$Hidden = $FALSE ); $Check = New-Object -TypeName PSObject; - $Check | Add-Member -MemberType NoteProperty -Name 'name' -Value $Name; - $Check | Add-Member -MemberType NoteProperty -Name 'exitcode' -Value -1; - $Check | Add-Member -MemberType NoteProperty -Name 'verbose' -Value $Verbose; - $Check | Add-Member -MemberType NoteProperty -Name 'hidden' -Value $Hidden; - $Check | Add-Member -MemberType NoteProperty -Name 'checks' -Value $Checks; - $Check | Add-Member -MemberType NoteProperty -Name 'opand' -Value $OperatorAnd; - $Check | Add-Member -MemberType NoteProperty -Name 'opor' -Value $OperatorOr; - $Check | Add-Member -MemberType NoteProperty -Name 'opnone' -Value $OperatorNone; - $Check | Add-Member -MemberType NoteProperty -Name 'opmin' -Value $OperatorMin; - $Check | Add-Member -MemberType NoteProperty -Name 'opmax' -Value $OperatorMax; - $Check | Add-Member -MemberType NoteProperty -Name 'spacing' -Value 0; - $Check | Add-Member -MemberType NoteProperty -Name 'compiled' -Value $FALSE; - $Check | Add-Member -MemberType NoteProperty -Name 'perfdata' -Value $FALSE; - $Check | Add-Member -MemberType NoteProperty -Name 'checkcommand' -Value ''; - $Check | Add-Member -MemberType NoteProperty -Name 'headermsg' -Value ''; - $Check | Add-Member -MemberType NoteProperty -Name 'checkpackage' -Value $TRUE; - $Check | Add-Member -MemberType NoteProperty -Name 'warningchecks' -Value @(); - $Check | Add-Member -MemberType NoteProperty -Name 'criticalchecks' -Value @(); - $Check | Add-Member -MemberType NoteProperty -Name 'unknownchecks' -Value @(); + $Check | Add-Member -MemberType NoteProperty -Name 'name' -Value $Name; + $Check | Add-Member -MemberType NoteProperty -Name 'exitcode' -Value -1; + $Check | Add-Member -MemberType NoteProperty -Name 'verbose' -Value $Verbose; + $Check | Add-Member -MemberType NoteProperty -Name 'hidden' -Value $Hidden; + $Check | Add-Member -MemberType NoteProperty -Name 'ignoreemptypackage' -Value $IgnoreEmptyPackage; + $Check | Add-Member -MemberType NoteProperty -Name 'checks' -Value $Checks; + $Check | Add-Member -MemberType NoteProperty -Name 'opand' -Value $OperatorAnd; + $Check | Add-Member -MemberType NoteProperty -Name 'opor' -Value $OperatorOr; + $Check | Add-Member -MemberType NoteProperty -Name 'opnone' -Value $OperatorNone; + $Check | Add-Member -MemberType NoteProperty -Name 'opmin' -Value $OperatorMin; + $Check | Add-Member -MemberType NoteProperty -Name 'opmax' -Value $OperatorMax; + $Check | Add-Member -MemberType NoteProperty -Name 'spacing' -Value 0; + $Check | Add-Member -MemberType NoteProperty -Name 'compiled' -Value $FALSE; + $Check | Add-Member -MemberType NoteProperty -Name 'perfdata' -Value $FALSE; + $Check | Add-Member -MemberType NoteProperty -Name 'checkcommand' -Value ''; + $Check | Add-Member -MemberType NoteProperty -Name 'headermsg' -Value ''; + $Check | Add-Member -MemberType NoteProperty -Name 'checkpackage' -Value $TRUE; + $Check | Add-Member -MemberType NoteProperty -Name 'warningchecks' -Value @(); + $Check | Add-Member -MemberType NoteProperty -Name 'criticalchecks' -Value @(); + $Check | Add-Member -MemberType NoteProperty -Name 'unknownchecks' -Value @(); $Check | Add-Member -MemberType ScriptMethod -Name 'HasChecks' -Value { if ($this.checks -ne 0) { @@ -154,7 +156,11 @@ function New-IcingaCheckPackage() } } } else { - $this.exitcode = $IcingaEnums.IcingaExitCode.Unknown; + if ($this.ignoreemptypackage) { + $this.exitcode = $IcingaEnums.IcingaExitCode.Ok; + } else { + $this.exitcode = $IcingaEnums.IcingaExitCode.Unknown; + } } if ([int]$this.exitcode -eq -1) {