Files
ps.ipam/functions/public/New-Subnet.ps1
2022-12-12 18:58:13 +03:00

124 lines
5.2 KiB
PowerShell

function New-Subnet {
[CmdletBinding()]
param (
[parameter(
Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
HelpMessage="CIDR of subnet in dotted format (e.g 10.10.10.0/24)",
Position=0)]
[ValidateScript({[ipaddress] $_.Split("/")[0] -and $_.Split("/")[1] -match "\d{1,2}"})]
[ValidateNotNullOrEmpty()]
[string]
$CIDR,
[parameter(Mandatory=$true,HelpMessage="Section identifier",Position=1)]
[ValidateNotNullOrEmpty()]
[int]
$SectionId,
[parameter(Mandatory=$false,HelpMessage="Subnet description",Position=2)]
[ValidateNotNullOrEmpty()]
[string]
$Description,
[parameter(Mandatory=$false,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,HelpMessage="Assigns subnet to VLAN",Position=3)]
[ValidateNotNullOrEmpty()]
[int]
$VlanId,
[parameter(Mandatory=$false,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,HelpMessage="Assigns subnet to VRF",Position=4)]
[ValidateNotNullOrEmpty()]
[int]
$VrfId,
[parameter(Mandatory=$false,HelpMessage="Master subnet id for nested subnet",Position=5)]
[ValidateNotNullOrEmpty()]
[int]
$MasterSubnetId,
[parameter(Mandatory=$false,HelpMessage="Id of nameserver to attach to subnet",Position=6)]
[ValidateNotNullOrEmpty()]
[int]
$NameserverId,
[parameter(Mandatory=$false,HelpMessage="Controls weather subnet is displayed as IP address or Name in subnets menu",Position=7)]
[switch]
$ShowName,
[parameter(Mandatory=$false,HelpMessage="Controls if PTR records should be created for subnet",Position=8)]
[switch]
$DNSRecursive,
[parameter(Mandatory=$false,HelpMessage="Controls weather hostname DNS records are displayed",Position=9)]
[switch]
$DNSRecords,
[parameter(Mandatory=$false,HelpMessage="Controls if IP requests are allowed for subnet",Position=10)]
[switch]
$AllowRequests,
[parameter(Mandatory=$false,HelpMessage="Controls which scanagent to use for subnet (default id 1)",Position=11)]
[ValidateNotNullOrEmpty()]
[int]
$ScanAgentId,
[parameter(Mandatory=$false,HelpMessage="Controls if new hosts should be discovered for new host scans",Position=12)]
[switch]
$DiscoverSubnet,
[parameter(Mandatory=$false,HelpMessage="Marks subnet as used",Position=12)]
[switch]
$IsFull,
[parameter(Mandatory=$false,HelpMessage="Assignes state (tag) to subnet (default: 1 Used)",Position=12)]
[ValidateNotNullOrEmpty()]
[int]
$TagId,
[parameter(Mandatory=$false,HelpMessage="Subnet threshold",Position=13)]
[ValidateScript({ $_ -le 100 -and $_ -ge 1 })]
[ValidateNotNullOrEmpty()]
[int]
$Threshold,
[parameter(Mandatory=$false,HelpMessage="Location index",Position=14)]
[ValidateNotNullOrEmpty()]
[int]
$LocationId,
[parameter(Mandatory=$false,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
[ValidateScript({ $_ -is [Hashtable] -or $_ -is [PSCustomObject] })]
[ValidateNotNullOrEmpty()]
$CustomFields
)
process {
$_params = @{
Controller = "subnets"
Method = "POST"
}
$_body = @{
subnet = $CIDR.Split('/')[0]
mask = $CIDR.Split('/')[1]
sectionId = $SectionId
}
if ($Description) { $_body.Add("description", $Description) }
if ($VlanId) { $_body.Add("vlanId", $VlanId) }
if ($VrfId) { $_body.Add("vrfId", $VrfId) }
if ($MasterSubnetId) { $_body.Add("masterSubnetId", $MasterSubnetId) }
if ($NameserverId) { $_body.Add("nameserverId", $NameserverId) }
if ($ShowName) { $_body.Add("showName", "1") }
if ($DNSRecursive) { $_body.Add("DNSrecursive", "1") }
if ($DNSRecords) { $_body.Add("DNSrecords", "1") }
if ($AllowRequests) { $_body.Add("allowRequests", "1") }
if ($ScanAgentId) { $_body.Add("scanAgent", $ScanAgentId) }
if ($DiscoverSubnet) { $_body.Add("discoverSubnet", "1") }
if ($IsFull) { $_body.Add("isFull", "1") }
if ($TagId) { $_body.Add("state", $TagId) }
if ($Threshold) { $_body.Add("threshold", $Threshold) }
if ($Location) { $_body.Add("location", $Location) }
if ($CustomFields) {
if ($CustomFields -is [PSCustomObject]) {
$_customFields = @{};
$CustomFields | Get-Member -MemberType *Property | Where-Object {
$_customFields.($_.name) = $CustomFields.($_.name)
}
} else { $_customFields = $CustomFields }
$_body = $_body + $_customFields
}
$_params.Add("Params",$_body)
$_result = Invoke-Request @_params
if ($_result) {
return Get-Subnet -CIDR $_result
}
}
}
Export-ModuleMember -Function New-Subnet