Skip to content

Commit

Permalink
Merge pull request #11 from alagoutte/NetworkDevice
Browse files Browse the repository at this point in the history
Add Network device cmdlets
  • Loading branch information
alagoutte authored Mar 2, 2019
2 parents 8b45951 + a66bac6 commit 0f2641d
Showing 1 changed file with 237 additions and 0 deletions.
237 changes: 237 additions & 0 deletions PowerArubaCP/Public/NetworkDevice.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,237 @@
#
# Copyright 2018, Alexis La Goutte <alexis.lagoutte at gmail dot com>
#
# SPDX-License-Identifier: Apache-2.0
#

function Add-ArubaCPNetworkDevice {

<#
.SYNOPSIS
Add a Network Device (NAD) on ClearPass
.DESCRIPTION
Add a Network Device (NAD) with radius secret, description, coa_capable, radsec....
.EXAMPLE
Add-ArubaCPNetworkDevice -name SW1 -ip_address 192.0.2.1 -radius_secret MySecurePassword -vendor Aruba -description "Add by PowerArubaCP"
Add Network Device SW1 with ip address 192.0.2.1 from vendor Aruba and a description
.EXAMPLE
Add-ArubaCPNetworkDevice -name SW2 -ip_address 192.0.2.2 -radius_secret MySecurePassword -vendor Aruba -coa_capable -coa_port 5000
Add Network Device SW2 with COA Capability on port 5000
.EXAMPLE
Add-ArubaCPNetworkDevice -name SW3 -ip_address 192.0.2.3 -radius_secret MySecurePassword -vendor Cisco -tacacs_secret MySecurePassword
Add Network Device SW3 with a tacacs secret from vendor Cisco
.EXAMPLE
Add-ArubaCPNetworkDevice -name SW4 -ip_address 192.0.2.4 -radius_secret MySecurePassword -vendor Hewlett-Packard-Enterprise -radsec_enabled
Add Network Device SW4 with RadSec from vendor HPE
#>

Param(
[Parameter (Mandatory = $false)]
[int]$id,
[Parameter (Mandatory = $false)]
[string]$description,
[Parameter (Mandatory = $true)]
[string]$name,
[Parameter (Mandatory = $true)]
[ipaddress]$ip_address,
[Parameter (Mandatory = $true)]
[string]$radius_secret,
[Parameter (Mandatory = $false)]
[string]$tacacs_secret,
[Parameter (Mandatory = $true)]
[string]$vendor_name,
[Parameter (Mandatory = $false)]
[switch]$coa_capable,
[Parameter (Mandatory = $false)]
[int]$coa_port,
[Parameter (Mandatory = $false)]
[switch]$radsec_enabled
)

Begin {
}

Process {

$url = "api/network-device"

$_nad = new-Object -TypeName PSObject

if ( $PsBoundParameters.ContainsKey('id') ) {
$_nad | add-member -name "id" -membertype NoteProperty -Value $id
}

if ( $PsBoundParameters.ContainsKey('description') ) {
$_nad | add-member -name "description" -membertype NoteProperty -Value $description
}

$_nad | add-member -name "name" -membertype NoteProperty -Value $name

$_nad | add-member -name "ip_address" -membertype NoteProperty -Value $ip_address.ToString()

$_nad | add-member -name "radius_secret" -membertype NoteProperty -Value $radius_secret

if ( $PsBoundParameters.ContainsKey('tacacs_secret') ) {
$_nad | add-member -name "tacacs_secret" -membertype NoteProperty -Value $tacacs_secret
}

$_nad | add-member -name "vendor_name" -membertype NoteProperty -Value $vendor_name

if ( $PsBoundParameters.ContainsKey('coa_capable') ) {
if ( $coa_capable ) {
$_nad | add-member -name "coa_capable" -membertype NoteProperty -Value $True
}
else {
$_nad | add-member -name "coa_capable" -membertype NoteProperty -Value $false
}
}

if ( $PsBoundParameters.ContainsKey('coa_port') ) {
$_nad | add-member -name "coa_port" -membertype NoteProperty -Value $coa_port
}

if ( $PsBoundParameters.ContainsKey('radsec_enabled') ) {
if ( $radsec_enabled ) {
$_nad | add-member -name "radsec_enabled" -membertype NoteProperty -Value $True
}
else {
$_nad | add-member -name "radsec_enabled" -membertype NoteProperty -Value $false
}
}

$nad = invoke-ArubaCPRestMethod -method "POST" -body $_nad -uri $url
$nad
}

End {
}
}

function Get-ArubaCPNetworkDevice {

<#
.SYNOPSIS
Get Network Device info on CPPM
.DESCRIPTION
Get Network Device (Id, Name, IP, ....)
.EXAMPLE
Get-ArubaCPNetworkDevice
Get ALL NetworkDevice on the Clearpass
.EXAMPLE
Get-ArubaCPNetworkDevice NAD-PowerArubaCP
Get info about NetworkDevice NAD-PowerArubaCP Aruba on the ClearPass
.EXAMPLE
Get-ArubaCPNetworkDevice -id 23
Get info about NetworkDevice id 23 on the ClearPass
#>

[CmdLetBinding(DefaultParameterSetName = "Default")]

Param(
[Parameter (Mandatory = $false, ParameterSetName = "id")]
[int]$id,
[Parameter (Mandatory = $false, ParameterSetName = "name", Position = 1)]
[string]$Name
)

Begin {
}

Process {

$url = "api/network-device"

$nad = Invoke-ArubaCPRestMethod -method "GET" -uri $url


switch ( $PSCmdlet.ParameterSetName ) {
"name" { $nad._embedded.items | where-object { $_.name -match $name}}
"id" { $nad._embedded.items | where-object { $_.id -eq $id}}
default { $nad._embedded.items }
}
}

End {
}
}

function Remove-ArubaCPNetworkDevice {

<#
.SYNOPSIS
Remove a Network Device (NAD) on ClearPass
.DESCRIPTION
Remove a Network Device (NAS) on ClearPass
.EXAMPLE
$nad = Get-ArubaCPNetworkDevice -name NAD-PowerArubaCP
PS C:\>$nad | Remove-ArubaCPNetworkDevice
Remove Network Device named NAD-PowerArubaCP
.EXAMPLE
Remove-ArubaCPNetworkDevice -id 3001 -noconfirm
Remove Network Device id 3001 with no confirmation
#>

Param(
[Parameter (Mandatory = $true, ParameterSetName = "id")]
[int]$id,
[Parameter (Mandatory = $true, ValueFromPipeline = $true, Position = 1, ParameterSetName = "nad")]
#ValidateScript({ Validatenad $_ })]
[psobject]$nad,
[Parameter(Mandatory = $false)]
[switch]$noconfirm
)

Begin {
}

Process {

#get nad id from nad ps object
if ($nad) {
$id = $nad.id
}

$url = "api/network-device/${id}"

if ( -not ( $Noconfirm )) {
$message = "Remove Network Device on ClearPass"
$question = "Proceed with removal of Network Device ${id} ?"
$choices = New-Object Collections.ObjectModel.Collection[Management.Automation.Host.ChoiceDescription]
$choices.Add((New-Object Management.Automation.Host.ChoiceDescription -ArgumentList '&Yes'))
$choices.Add((New-Object Management.Automation.Host.ChoiceDescription -ArgumentList '&No'))

$decision = $Host.UI.PromptForChoice($message, $question, $choices, 1)
}
else { $decision = 0 }
if ($decision -eq 0) {
Write-Progress -activity "Remove Network Device"
Invoke-ArubaCPRestMethod -method "DELETE" -uri $url
Write-Progress -activity "Remove Network Device" -completed
}
}

End {
}
}

0 comments on commit 0f2641d

Please sign in to comment.