Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add DHCP Server #82

Merged
merged 6 commits into from
Jul 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AsBuiltReport.Fortinet.FortiGate.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"InfoLevel": {
"_comment_": "0 = Disabled, 1 = Enabled / Summary, 2 = Adv Summary",
"FortiCare": 1,
"System": 1,
"System": 2,
"Route": 1,
"SDWAN": 1,
"Firewall": 1,
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ The table below outlines the default and maximum InfoLevel settings for each *Fo
| Sub-Schema | Default Settings | Maximum Settings |
|:----------:|------------------|------------------|
| Forticare | 1 | 1 |
| System | 1 | 1 |
| System | 2 | 2 |
| Route | 1 | 1 |
| Firewall | 1 | 1 |
| User | 2 | 2 |
Expand Down
143 changes: 136 additions & 7 deletions Src/Private/Get-AbrFgtSystem.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,13 @@ function Get-AbrFgtSystem {
}

$OutObj = [pscustomobject]@{
"Nom" = $info.'hostname'
"Alias" = $info.'alias'
"Recurring Reboot" = $reboot
"Port SSH" = $info.'admin-ssh-port'
"Port HTTP" = $info.'admin-port'
"Port HTTPS" = $info.'admin-sport'
"HTTPS Redirect" = $info.'admin-https-redirect'
"Nom" = $info.'hostname'
"Alias" = $info.'alias'
"Recurring Reboot" = $reboot
"Port SSH" = $info.'admin-ssh-port'
"Port HTTP" = $info.'admin-port'
"Port HTTPS" = $info.'admin-sport'
"HTTPS Redirect" = $info.'admin-https-redirect'
}

$TableParams = @{
Expand Down Expand Up @@ -319,6 +319,135 @@ function Get-AbrFgtSystem {
}
}

#DHCP Server
$dhcp_servers = Get-FGTSystemDHCPServer

if ($dhcp_servers -and $InfoLevel.System -ge 1) {
Section -Style Heading3 'DHCP Server' {
$OutObj = @()

foreach ($dhcp_server in $dhcp_servers) {
$OutObj += [pscustomobject]@{
"id" = $dhcp_server.id
"Status" = $dhcp_server.status
"Interface" = $dhcp_server.interface
"Range" = "$($dhcp_server.'ip-range'.'start-ip')-$($dhcp_server.'ip-range'.'end-ip')"
"Netmask" = $dhcp_server.netmask
"Gateway" = $dhcp_server.'default-gateway'
}
}

$TableParams = @{
Name = "DHCP Server"
List = $false
ColumnWidths = 5, 11, 15, 35, 17, 17
}

if ($Report.ShowTableCaptions) {
$TableParams['Caption'] = "- $($TableParams.Name)"
}

$OutObj | Table @TableParams
}

if ($InfoLevel.System -ge 2) {
#DHCP Server detail
foreach ($dhcp_server in $dhcp_servers) {
Section -Style NOTOCHeading4 -ExcludeFromTOC "DHCP: $($dhcp_server.id) - $($dhcp_server.interface)" {
BlankLine

$dns = ($dhcp_server.'dns-server1' -replace "0.0.0.0", "") + ($dhcp_server.'dns-server2' -replace "0.0.0.0", "") + ($dhcp_server.'dns-server3' -replace "0.0.0.0", "") + ($dhcp_server.'dns-server4' -replace "0.0.0.0", "")
$ntp = ($dhcp_server.'ntp-server1' -replace "0.0.0.0", "") + ($dhcp_server.'ntp-server2' -replace "0.0.0.0", "") + ($dhcp_server.'ntp-server3' -replace "0.0.0.0", "") + ($dhcp_server.'ntp-server4' -replace "0.0.0.0", "")
$OutObj = [pscustomobject]@{
"id" = $dhcp_server.id
"Status" = $dhcp_server.status
"Lease Time" = $dhcp_server.'lease-time'
"Interface" = $dhcp_server.interface
"Start IP" = $dhcp_server.'ip-range'.'start-ip'
"End IP" = $dhcp_server.'ip-range'.'end-ip'
"Netmask" = $dhcp_server.netmask
"Gateway" = $dhcp_server.'default-gateway'
"DNS" = $dns
"Domain" = $dhcp_server.domain
"NTP" = $ntp
}

$TableParams = @{
Name = "DHCP $($dhcp_server.id) - $($dhcp_server.interface)"
List = $true
ColumnWidths = 25, 75
}

if ($Report.ShowTableCaptions) {
$TableParams['Caption'] = "- $($TableParams.Name)"
}

$OutObj | Table @TableParams
}
}

#DHCP Server Reservation
if ($dhcp_servers.'reserved_address') {
Section -Style NOTOCHeading4 -ExcludeFromTOC "DHCP Server Reserved Address" {
$OutObj = @()
foreach ($reserved_address in ($dhcp_servers.'reserved-address')) {
$OutObj += [pscustomobject]@{
"id" = $reserved_address.id
"IP" = $reserved_address.ip
"MAC" = $reserved_address.mac
"Action" = $reserved_address.action
}
}

$TableParams = @{
Name = "DHCP Server Reserved Address"
List = $false
ColumnWidths = 5, 35, 35, 25
}

if ($Report.ShowTableCaptions) {
$TableParams['Caption'] = "- $($TableParams.Name)"
}

$OutObj | Table @TableParams
}
}

#DHCP Leases (from Monitoring) => no yet Get-FGTMonitorDHCP cmdlet on PowerFGT...
$dhcp_leases = (Invoke-FGTRestMethod -uri api/v2/monitor/system/dhcp).results

if ($dhcp_leases) {
Section -Style NOTOCHeading4 -ExcludeFromTOC "DHCP Leases" {
$OutObj = @()
foreach ($dhcp_lease in $dhcp_leases) {
$OutObj += [pscustomobject]@{
"IP" = $dhcp_lease.ip
"MAC" = $dhcp_lease.mac
"Hostname" = $dhcp_lease.hostname
"Status" = $dhcp_lease.status
"Reserved" = $dhcp_lease.reserved
"Expire Time" = ( Get-Date -UnixTimeSeconds $dhcp_lease.expire_time)
}
}

$TableParams = @{
Name = "DHCP Server Reserved Address"
List = $false
ColumnWidths = 19, 19, 24, 8, 11, 18
}

if ($Report.ShowTableCaptions) {
$TableParams['Caption'] = "- $($TableParams.Name)"
}

$OutObj | Table @TableParams
}
}

}

}

# Fetch HA Configuration
$haConfig = Get-FGTSystemHA
$haPeers = Get-FGTMonitorSystemHAPeer
Expand Down
Loading