Resources/Networks.ps1

function New-ACITGlueNetwork {
    <#
      .SYNOPSIS
      Sync Networks from Aruba Central to ITGlue flexable assets
 
      .DESCRIPTION
      Sync Networks from Aruba Central to ITGlue flexable assets
 
      .EXAMPLE
      New-ACITGlueNetwork -OrgId 1111111
 
      .EXAMPLE
      New-ACITGlueNetwork
    #>


    Param(
        [Parameter(Mandatory = $false)]
        [String]$OrgId
    )
    begin {
        $endpoint = "/monitoring/v2/networks"
        $networks = Invoke-ArubaCLRestMethod -uri $endpoint
        $WirelessFlexId = 234110
        $ReturnArray = @()
        if (!$OrgId) { $OrgId = $ACITGlueOrgId }
    }
    process {
        foreach ($network in $networks.networks) {    
            $data = @{
                "organization_id" = $OrgId
                "type" = "flexible-assets"
                attributes = @{
                    "organization-id" = $OrgId
                    "flexible-asset-type-id" = $WirelessFlexId
                    traits = @{
                        "network-name" = $network.essid
                        "ssid" = $network.essid
                        "security-type" = $network.security
                        #"pre-shared-key" = "10101010" # AC Will not return this.
                        "hidden" = "False"
                    }
                }
            }
            $Asset = (Get-ITGlueFlexibleAssets -filter_flexible_asset_type_id $WirelessFlexId `
                -filter_organization_id $OrgId -filter_name $network.essid).data.attributes
            if (!$Asset) { 
                New-ITGlueFlexibleAssets -data $data | Out-Null
                $Properties = @{
                    "OrgId" = $OrgId
                    "Name" = $network.essid
                    "Status" = $true
                }
                $ReturnData = New-Object -TypeName PSObject -Property $Properties
                $ReturnArray += $ReturnData
            } else {
                $Properties = @{
                    "OrgId" = $OrgId
                    "Name" = $network.essid
                    "Status" = $false
                }
                $ReturnData = New-Object -TypeName PSObject -Property $Properties
                $ReturnArray += $ReturnData
            }
        }
    }
    end { return $ReturnArray }
}
function Update-ACITGlueNetwork {
    <#
      .SYNOPSIS
      Sync Networks from Aruba Central to ITGlue flexable assets
 
      .DESCRIPTION
      This will update an existing ITGlue asset with latest information from Aruba Central.
 
      .EXAMPLE
      Update-ACITGlueNetwork -OrgId 1111111
 
      .EXAMPLE
      Update-ACITGlueNetwork
    #>


    Param(
        [Parameter(
            Mandatory = $false,
            HelpMessage = "ITGlue Organization ID."
            )]
        [String]$OrgId,
        [Parameter(Mandatory = $false)]
        [string]$IgnoreSite
    )
    begin {
        $WirelessFlexId = 234110
        $ACEndpointNetwork = "/monitoring/v2/networks"
        $ACEndpointSite = "/central/v2/sites"
        $ACSites = (Invoke-ArubaCLRestMethod -uri $ACEndpointSite -limit 100).sites
        $ReturnArray = @()
        # Hacky way to handle SSIDs at more than one location.
        $DenyList = @()
        $SiteCount = $ACSites.Count
        $i = 0
        $j = 0
        if (!$OrgId) { $OrgId = $ACITGlueOrgId }
    }
    process {
        foreach ($Site in $ACSites) {
            Write-Progress -Activity "Processing Site ($($Site.site_name))" -Status "$($i) of $($SiteCount)" -PercentComplete (($i / $SiteCount) * 100) -Id 1
            $SiteName = $Site.site_name
            $ACNetworks = Invoke-ArubaCLRestMethod -uri ($ACEndpointNetwork + "?site=" + $SiteName)
            $NetworkCount = $ACNetworks.Count
            foreach ($ACNetwork in $ACNetworks.networks) {
                Write-Progress -Activity "Processing Network ($($ACNetwork.essid))" -Status "$($j) of $($NetworkCount)"  -PercentComplete (($j / $NetworkCount) * 100) -ParentId 1 -Id 2
                $AssetId = (Get-ITGlueFlexibleAssets -filter_flexible_asset_type_id $WirelessFlexId `
                    -filter_organization_id $OrgId -filter_name $ACNetwork.essid).data.id
                $data = @{
                    "organization_id" = $OrgId
                    "type" = "flexible-assets"
                    attributes = @{
                        "organization-id" = $OrgId
                        "flexible-asset-type-id" = $WirelessFlexId
                        traits = @{
                            "network-name" = $ACNetwork.essid
                            "ssid" = $ACNetwork.essid
                            "security-type" = $ACNetwork.security
                            #"pre-shared-key" = "10101010" # AC Will not return this.
                            "hidden" = "False"
                            "physical-location" = (Get-ITGlueLocations -org_id $OrgId -filter_name $SiteName).data.id
                        }   
                    }
                }
                if ($DenyList.Contains($ACNetwork.essid)) {
                    # If network was already processed reset the counter.
                    Write-Progress -Activity "Processing Network ($($ACNetwork.essid))" -Status "Network $($ACNetwork.essid) already processed. Skipping." -Id 2
                    $j = 0
                    continue 
                }
                $Properties = @{
                    "OrgId" = $OrgId
                    "Name" = $SiteName
                    "SSID" = $ACNetwork.essid
                }
                $ReturnData = New-Object -TypeName PSObject -Property $Properties
                $ReturnArray += $ReturnData
                Set-ITGlueFlexibleAssets -id $AssetId -data $data | Out-Null
                $DenyList += $ACNetwork.essid
                $j++
            }
            $i++
        }
    } 
    end { return $ReturnArray }
}