NewRelicPS.Configuration.Policy.psm1
<# .Synopsis Idempotently applies New Relic alert policy configurations .Description Idempotently applies New Relic alert policy configurations .Example Set-NRPolicyConfiguration -APIKey $AdminAPIKey -DefinedPolicies $Config.AlertPolicies Uses New Relic APIs to update alert policies to match the policies defined in $Config.AlertPolicies. Any existing policies that are not defined will be removed. .Parameter APIKey Must be an admin user's API Key, not an account-level REST API Key. See more here: https://docs.newrelic.com/docs/apis/get-started/intro-apis/types-new-relic-api-keys .Parameter DefinedPolicies An array of policy objects which define the desired configuration state for New Relic alert policies and conditions #> Function Set-NRPolicyConfiguration { [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSShouldProcess", '', Justification = "All CMDLets being called have ShouldProcess in place and the preference is passed to them." )] [CMDLetBinding(SupportsShouldProcess = $true)] Param ( [Parameter (Mandatory = $true)] [string] $APIKey, [Parameter (Mandatory = $false)] [array] $DefinedPolicies ) [System.Collections.ArrayList]$existingPolicies = @(Get-NRAlertPolicy -APIKey $APIKey) Write-Verbose "There are currently $($DefinedPolicies.count) defined policies and $($existingPolicies.count) existing policies." Foreach ($policy in $DefinedPolicies) { $CurrentConfig = $existingPolicies | Where-Object { $_.name -eq $policy.name } If ($CurrentConfig) { # Update policy if it already exists but needs a configuration update If ($CurrentConfig.incident_preference -ne $policy.incident_preference) { Write-Verbose "Updating policy ($policy.name)" $policyId = ($existingPolicies | Where-Object { $_.name -eq $policy.name }).id Update-NRAlertPolicy -APIKey $APIKey -PolicyId $policyId -Name $policy.name -IncidentPreference $policy.incident_preference -Whatif:$WhatIfPreference | Out-Null } # Any extra existing policies that are not defined will be removed later $existingPolicies.Remove($CurrentConfig) } Else { # Create the policy if it doesn't exist Write-Verbose "Creating policy $($policy.name)" New-NRAlertPolicy -APIKey $APIKey -Name $policy.name -IncidentPreference $policy.incident_preference -Whatif:$WhatIfPreference | Out-Null } } # Remove any existing policies that are not defined in the configuration If ($existingPolicies) { Write-Verbose "Removing policy $($policy.name -join (','))" $existingPolicies.Id | Remove-NRAlertPolicy -APIKey $APIKey -Whatif:$WhatIfPreference | Out-Null } } |