Skip to content

Commit

Permalink
Issue Updates
Browse files Browse the repository at this point in the history
- New cmdlet for removing device group properties
- Fix linq regex for config filtering
- Add properties method to device datasource instance cmdlet
  • Loading branch information
stevevillardi committed Nov 20, 2024
1 parent d9ac229 commit 57d93b7
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 2 deletions.
105 changes: 105 additions & 0 deletions Public/Remove-LMDeviceGroupProperty.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
<#
.SYNOPSIS
Removes a property from a LogicMonitor device group.
.DESCRIPTION
The Remove-LMDeviceGroupProperty function removes a specified property from a LogicMonitor device group. It can remove the property either by providing the device group ID or the device group name.
.PARAMETER Id
The ID of the device group from which the property should be removed. This parameter is mandatory when using the 'Id' parameter set.
.PARAMETER Name
The name of the device group from which the property should be removed. This parameter is mandatory when using the 'Name' parameter set.
.PARAMETER PropertyName
The name of the property to be removed. This parameter is mandatory.
.EXAMPLE
Remove-LMDeviceGroupProperty -Id 1234 -PropertyName "Property1"
Removes the property named "Property1" from the device with ID 1234.
.EXAMPLE
Remove-LMDeviceGroupProperty -Name "Device1" -PropertyName "Property2"
Removes the property named "Property2" from the device with the name "Device1".
.INPUTS
None.
.OUTPUTS
System.Management.Automation.PSCustomObject. The output object contains the following properties:
- Id: The ID of the device group from which the property was removed.
- Message: A message indicating the success of the operation.
.NOTES
- This function requires a valid LogicMonitor API authentication. Make sure you are logged in before running any commands.
- Use the Connect-LMAccount function to log in before using this function.
#>
Function Remove-LMDeviceGroupProperty {

[CmdletBinding(DefaultParameterSetName = 'Id', SupportsShouldProcess, ConfirmImpact = 'High')]
Param (
[Parameter(Mandatory, ParameterSetName = 'Id')]
[Int]$Id,

[Parameter(Mandatory, ParameterSetName = 'Name')]
[String]$Name,

[Parameter(Mandatory)]
[String]$PropertyName

)
Begin {}
Process {
#Check if we are logged in and have valid api creds
If ($Script:LMAuth.Valid) {

#Lookup Id if supplying username
If ($Name) {
$LookupResult = (Get-LMDeviceGroup -Name $Name).Id
If (Test-LookupResult -Result $LookupResult -LookupString $Name) {
return
}
$Id = $LookupResult
}

#Build header and uri
$ResourcePath = "/device/groups/$Id/properties/$PropertyName"

If ($Name) {
$Message = "Id: $Id | Name: $Name | Property: $PropertyName"
}
Else {
$Message = "Id: $Id | Property: $PropertyName"
}

Try {
If ($PSCmdlet.ShouldProcess($Message, "Remove Device Group Property")) {
$Headers = New-LMHeader -Auth $Script:LMAuth -Method "DELETE" -ResourcePath $ResourcePath
$Uri = "https://$($Script:LMAuth.Portal).logicmonitor.com/santaba/rest" + $ResourcePath

Resolve-LMDebugInfo -Url $Uri -Headers $Headers[0] -Command $MyInvocation

#Issue request
$Response = Invoke-RestMethod -Uri $Uri -Method "DELETE" -Headers $Headers[0] -WebSession $Headers[1]

$Result = [PSCustomObject]@{
Id = $Id
Message = "Successfully removed ($Message)"
}

Return $Result
}
}
Catch [Exception] {
$Proceed = Resolve-LMException -LMException $PSItem
If (!$Proceed) {
Return
}
}
}
Else {
Write-Error "Please ensure you are logged in before running any commands, use Connect-LMAccount to login and try again."
}
}
End {}
}
2 changes: 1 addition & 1 deletion Public/Set-LMCollectorConfig.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ Function Set-LMCollectorConfig {
$Value = $Value.toString().toLower()

$ConfigArray = $Config.Split([Environment]::NewLine)
[int[]]$Index = [Linq.Enumerable]::Range(0, $ConfigArray.Count).Where({ Param($i) $ConfigArray[$i] -match $ConfLine })
[int[]]$Index = [Linq.Enumerable]::Range(0, $ConfigArray.Count).Where({ Param($i) $ConfigArray[$i] -match "^$ConfLine" })
If (($Index | Measure-Object).Count -eq 1) {
Write-LMHost "[INFO]: Updating config parameter $ConfLine to value $Value."
$ConfigArray[$Index[0]] = "$ConfLine=$Value"
Expand Down
8 changes: 7 additions & 1 deletion Public/Set-LMDeviceDatasourceInstance.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ Specifies the description for the instance.
.PARAMETER Properties
Specifies a hashtable of custom properties for the instance.
.PARAMETER PropertiesMethod
Specifies the method to use when updating the properties. Valid values are "Add", "Replace", or "Refresh".
.PARAMETER StopMonitoring
Specifies whether to stop monitoring the instance. This parameter accepts $true or $false.
Expand Down Expand Up @@ -70,6 +73,9 @@ Function Set-LMDeviceDatasourceInstance {

[Hashtable]$Properties,

[ValidateSet("Add", "Replace", "Refresh")] # Add will append to existing prop, Replace will update existing props if specified and add new props, refresh will replace existing props with new
[String]$PropertiesMethod = "Replace",

[Nullable[boolean]]$StopMonitoring,

[Nullable[boolean]]$DisableAlerting,
Expand Down Expand Up @@ -162,7 +168,7 @@ Function Set-LMDeviceDatasourceInstance {

If ($PSCmdlet.ShouldProcess($Message, "Set Device Datasource Instance")) {
$Headers = New-LMHeader -Auth $Script:LMAuth -Method "PATCH" -ResourcePath $ResourcePath -Data $Data
$Uri = "https://$($Script:LMAuth.Portal).logicmonitor.com/santaba/rest" + $ResourcePath
$Uri = "https://$($Script:LMAuth.Portal).logicmonitor.com/santaba/rest" + $ResourcePath + "?opType=$($PropertiesMethod.ToLower())"

Resolve-LMDebugInfo -Url $Uri -Headers $Headers[0] -Command $MyInvocation -Payload $Data

Expand Down

0 comments on commit 57d93b7

Please sign in to comment.