-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #69 from alagoutte/Attributes
Enhance Attributes Support (Add/Set/Remove) for Endpoint/LocalUser/NetworkDevice
- Loading branch information
Showing
8 changed files
with
945 additions
and
140 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,278 @@ | ||
# | ||
# Copyright 2022, Alexis La Goutte <alexis.lagoutte at gmail dot com> | ||
# | ||
# SPDX-License-Identifier: Apache-2.0 | ||
# | ||
|
||
function Add-ArubaCPAttributesMember { | ||
|
||
<# | ||
.SYNOPSIS | ||
Add an Attribute Member | ||
.DESCRIPTION | ||
Add an Attribute Member on Endpoint / Local User / Network Device | ||
.EXAMPLE | ||
Get-ArubaCPEndpoint -mac_address 00:01:02:03:04:05 | Add-ArubaCPAttributesMember -name "Disabled by" -value PowerArubaCP | ||
Add Attribute name "Disabled By" with value PowerArubaCP to Endpoint 00:01:02:03:04:05 | ||
.EXAMPLE | ||
Get-ArubaCPNetworkDevice -name NAD-PowerArubaCP | Add-ArubaCPAttributesMember -name "Location", "syslocation" -value "PowerArubaCP", "PowerArubaCP" | ||
Add Attribute name "Location and Syslocation" with value PowerArubaCP to network Device NAD-PowerArubaCP | ||
.EXAMPLE | ||
Get-ArubaCPLocalUser -user_id MyPowerArubaCP_userid | Add-ArubaCPAttributesMember -attributes @{"Disabled by"="PowerArubaCP"} | ||
Add Attribute name "Disabled By" with value PowerArubaCP to Local User MyPowerArubaCP_userid | ||
#> | ||
|
||
Param( | ||
[Parameter (Mandatory = $true, ValueFromPipeline = $true)] | ||
#[ValidateScript( { (Confirm-ArubaCPEndpoint $_) -or (Confirm-ArubaCPNetworkDevice $_) })] | ||
[psobject]$atts, | ||
[Parameter (Mandatory = $true, ParameterSetName = "nv")] | ||
[string[]]$name, | ||
[Parameter (Mandatory = $true, ParameterSetName = "nv")] | ||
[string[]]$value, | ||
[Parameter (Mandatory = $true, ParameterSetName = "att")] | ||
[psobject]$attributes, | ||
[Parameter (Mandatory = $False)] | ||
[ValidateNotNullOrEmpty()] | ||
[PSObject]$connection = $DefaultArubaCPConnection | ||
) | ||
|
||
Begin { | ||
} | ||
|
||
Process { | ||
|
||
$id = $atts.id | ||
if ($atts.mac_address -and $atts.status) { | ||
$uri = "api/endpoint/${id}" | ||
} | ||
elseif ($atts.user_id -and $atts.role_name) { | ||
$uri = "api/local-user/${id}" | ||
} | ||
elseif ($atts.ip_address -and $atts.vendor_name) { | ||
$uri = "api/network-device/${id}" | ||
} | ||
else { | ||
Throw "Not an Endpoint, a Local User or a Network Device" | ||
} | ||
|
||
if ($PSCmdlet.ParameterSetName -eq "nv") { | ||
if (@($name).count -ne @($value).count) { | ||
Throw "You need to have the same number of name and value parameters" | ||
} | ||
|
||
$attributes = New-Object -TypeName PSObject | ||
$i = 0 | ||
foreach ($n in $name) { | ||
$attributes | Add-Member -name $n -MemberType NoteProperty -Value $value[$i] | ||
$i++ | ||
} | ||
|
||
} | ||
|
||
$_att = New-Object -TypeName PSObject | ||
|
||
$_att | Add-Member -name "attributes" -MemberType NoteProperty -Value $attributes | ||
|
||
$att = Invoke-ArubaCPRestMethod -method "PATCH" -body $_att -uri $uri -connection $connection | ||
$att | ||
} | ||
|
||
End { | ||
} | ||
|
||
} | ||
|
||
function Set-ArubaCPAttributesMember { | ||
|
||
<# | ||
.SYNOPSIS | ||
Set an Attribute Member | ||
.DESCRIPTION | ||
Configure an Attribute Member on Endpoint / Local User / Network Device | ||
Remove existing attributes | ||
.EXAMPLE | ||
Get-ArubaCPEndpoint -mac_address 00:01:02:03:04:05 | Set-ArubaCPAttributesMember -name "Disabled by" -value PowerArubaCP | ||
Set Attribute name "Disabled By" with value PowerArubaCP to Endpoint 00:01:02:03:04:05 | ||
.EXAMPLE | ||
Get-ArubaCPNetworkDevice -name NAD-PowerArubaCP | Set-ArubaCPAttributesMember -name "Location", "syslocation" -value "PowerArubaCP", "PowerArubaCP" | ||
Set Attribute name "Location and Syslocation" with value PowerArubaCP to network Device NAD-PowerArubaCP | ||
.EXAMPLE | ||
Get-ArubaCPLocalUser -user_id MyPowerArubaCP_userid | Set-ArubaCPAttributesMember -attributes @{"Disabled by"="PowerArubaCP"} | ||
Set Attribute name "Disabled By" with value PowerArubaCP to Local User MyPowerArubaCP_userid | ||
#> | ||
|
||
[CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'medium')] | ||
Param( | ||
[Parameter (Mandatory = $true, ValueFromPipeline = $true)] | ||
#[ValidateScript( { ( Confirm-ArubaCPEndpoint $_ -or Confirm-ArubaCPNetworkDevice $_) })] | ||
[psobject]$atts, | ||
[Parameter (Mandatory = $true, ParameterSetName = "nv")] | ||
[string[]]$name, | ||
[Parameter (Mandatory = $true, ParameterSetName = "nv")] | ||
[string[]]$value, | ||
[Parameter (Mandatory = $true, ParameterSetName = "att")] | ||
[psobject]$attributes, | ||
[Parameter (Mandatory = $False)] | ||
[ValidateNotNullOrEmpty()] | ||
[PSObject]$connection = $DefaultArubaCPConnection | ||
) | ||
|
||
Begin { | ||
} | ||
|
||
Process { | ||
|
||
#get atts id from Endpoint/Local User/Network Device PS object | ||
if ($atts) { | ||
$id = $atts.id | ||
$old_name = "(" + $atts.name + ")" | ||
} | ||
|
||
if ($atts.mac_address -and $atts.status) { | ||
$uri = "api/endpoint/${id}" | ||
$delete_value = "--For-Delete--" | ||
} | ||
elseif ($atts.user_id -and $atts.role_name) { | ||
$uri = "api/local-user/${id}" | ||
$delete_value = "" | ||
} | ||
elseif ($atts.ip_address -and $atts.vendor_name) { | ||
$uri = "api/network-device/${id}" | ||
$delete_value = "" | ||
} | ||
else { | ||
Throw "Not an Endpoint, a Local User or a Network Device" | ||
} | ||
|
||
$_att = New-Object -TypeName PSObject | ||
|
||
#Add new name/value (or attributes) | ||
if ($PSCmdlet.ParameterSetName -eq "nv") { | ||
if (@($name).count -ne @($value).count) { | ||
Throw "You need to have the same number of name and value parameters" | ||
} | ||
|
||
$attributes = New-Object -TypeName PSObject | ||
$i = 0 | ||
foreach ($n in $name) { | ||
$attributes | Add-Member -name $n -MemberType NoteProperty -Value $value[$i] | ||
$i++ | ||
} | ||
} | ||
|
||
#Remove existing attributes (set value to null) | ||
foreach ($n in ($atts.attributes | Get-Member -MemberType NoteProperty).name ) { | ||
if ($attributes.$n) { | ||
#Skip if there is already an attribute with this name... | ||
continue | ||
} | ||
$attributes | Add-Member -name $n -MemberType NoteProperty -Value $delete_value | ||
} | ||
|
||
$_att | Add-Member -name "attributes" -MemberType NoteProperty -Value $attributes | ||
|
||
if ($PSCmdlet.ShouldProcess("$id $old_name", 'Configure Attribute Member')) { | ||
$att = Invoke-ArubaCPRestMethod -method "PATCH" -body $_att -uri $uri -connection $connection | ||
$att | ||
} | ||
|
||
} | ||
|
||
End { | ||
} | ||
|
||
} | ||
|
||
function Remove-ArubaCPAttributesMember { | ||
|
||
<# | ||
.SYNOPSIS | ||
Remove an Attribute member | ||
.DESCRIPTION | ||
Remove an Attribute Member on Endpoint / Local User / Network Device | ||
.EXAMPLE | ||
Get-ArubaCPEndpoint -mac_address 00:01:02:03:04:05 | Remove-ArubaCPAttributesMember -name "Disabled by" | ||
Remove Attribute name "Disabled By" with value PowerArubaCP to Endpoint 00:01:02:03:04:05 | ||
.EXAMPLE | ||
Get-ArubaCPNetworkDevice -name NAD-PowerArubaCP | Remove-ArubaCPAttributesMember -name "Location", "syslocation" | ||
Remove Attribute name "Location and Syslocation" to network Device NAD-PowerArubaCP | ||
#> | ||
|
||
[CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'medium')] | ||
Param( | ||
[Parameter (Mandatory = $true, ValueFromPipeline = $true)] | ||
#[ValidateScript( { ( Confirm-ArubaCPEndpoint $_ -or Confirm-ArubaCPNetworkDevice $_) })] | ||
[psobject]$atts, | ||
[Parameter (Mandatory = $true)] | ||
[string[]]$name, | ||
[Parameter (Mandatory = $False)] | ||
[ValidateNotNullOrEmpty()] | ||
[PSObject]$connection = $DefaultArubaCPConnection | ||
) | ||
|
||
Begin { | ||
} | ||
|
||
Process { | ||
|
||
$id = $atts.id | ||
$rname = "(" + $atts.name + ")" | ||
if ($atts.mac_address -and $atts.status) { | ||
$uri = "api/endpoint/${id}" | ||
$delete_value = "--For-Delete--" | ||
} | ||
elseif ($atts.user_id -and $atts.role_name) { | ||
$uri = "api/local-user/${id}" | ||
$delete_value = "" | ||
} | ||
elseif ($atts.ip_address -and $atts.vendor_name) { | ||
$uri = "api/network-device/${id}" | ||
$delete_value = "" | ||
} | ||
else { | ||
Throw "Not an Endpoint, a Local User or a Network Device" | ||
} | ||
|
||
$_att = New-Object -TypeName PSObject | ||
|
||
$attributes = New-Object -TypeName PSObject | ||
|
||
foreach ($n in $name) { | ||
$attributes | Add-Member -name $n -MemberType NoteProperty -Value $delete_value | ||
} | ||
|
||
$_att | Add-Member -name "attributes" -MemberType NoteProperty -Value $attributes | ||
|
||
if ($PSCmdlet.ShouldProcess("$id $rname", 'Remove Attribute Member')) { | ||
$att = Invoke-ArubaCPRestMethod -method "PATCH" -body $_att -uri $uri -connection $connection | ||
$att | ||
} | ||
|
||
} | ||
|
||
End { | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.