Modules/networks.psm1

#GET/rest/v2.0/dd-systems/{SYSTEM-ID}/networks
function Get-DDnetworks {
   [CmdletBinding()]
   param ( 
      [CmdletBinding()]
      [Parameter(Mandatory = $true, ParameterSetName = 'host-names' )]
      [switch]$hostnames,
      [Parameter(Mandatory = $true, ParameterSetName = 'domain-names' )]
      [switch]$domainnames,
      [Parameter(Mandatory = $true, ParameterSetName = 'search-domains' )]
      [switch]$searchdomains,
      [Parameter(Mandatory = $true, ParameterSetName = 'dns-servers' )]
      [switch]$dnsservers,  
      [Parameter(Mandatory = $true, ParameterSetName = 'gateways' )]
      [switch]$Gateways,
      [Parameter(Mandatory = $true, ParameterSetName = 'interfaces' )]
      [switch]$Interfaces,
      [Parameter(Mandatory = $true, ParameterSetName = 'interfaces/physicals' )]
      [switch]$PhysicalInterfaces,
      [Parameter(Mandatory = $true, ParameterSetName = 'interfaces/vlans' )]
      [switch]$VlanInterfaces,
      [Parameter(Mandatory = $true, ParameterSetName = 'interfaces/aliases' )]
      [switch]$AliasInterfaces,
      [Parameter(Mandatory = $true, ParameterSetName = 'nics' )]
      [switch]$nics,                                                          
      [Parameter(Mandatory = $false, ParameterSetName = 'default')]  
      [Parameter(Mandatory = $false, ParameterSetName = 'host-names' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'domain-names' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'search-domains' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'dns-servers' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'gateways' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'interfaces' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'interfaces/physicals' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'interfaces/vlans' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'interfaces/aliases' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'nics' )]

      [string]
      $SYSTEM_ID = $Global:DD_UUID,
      $body = @{}
   )
   begin {
      $Response = @()
      $METHOD = "GET"
      $apiver = "api/v3"
   }
   process {
      switch ($PsCmdlet.ParameterSetName) {
         $PsCmdlet.ParameterSetName {
            $uri = "dd-systems/$($SYSTEM_ID)/networks/$($PsCmdlet.ParameterSetName)"
         }  
         'default' {
            $uri = "dd-systems/$($SYSTEM_ID)/networks"
         }
         'nics' {
            $apiver = "rest/v2.0"
            $uri = "dd-systems/$($SYSTEM_ID)/networks/nics"
         }                               
      }
      $parameters = @{
         uri           = $uri          
         apiver        = $apiver
         Method        = $METHOD
         body          = $body
         RequestMethod = "REST"
         Verbose       = $PSBoundParameters['Verbose'] -eq $true
         Debug         = $PSBoundParameters['Debug'] -eq $true
      }      
      try {
         $Response += Invoke-DDapirequest @Parameters
      }
      catch {
         Get-DDWebException  -ExceptionMessage $_
         break
      }
      write-verbose ($response | Out-String)
   }
   end {    
      switch ($PsCmdlet.ParameterSetName) {
         default {
            $response | Select-Object -ExcludeProperty link, paging_info
         }
         'nics' {
            $response.nics | Select-Object -ExcludeProperty link, paging_info
         } 
         'interfaces' {
            $response.interfaces | Select-Object -ExcludeProperty link, paging_info
         }
         'gateways' {
            $response.defaultGateways  | Select-Object -ExcludeProperty link, paging_info
         }
         'search-domains' {
            $response | Select-Object   -ExcludeProperty link, paging_info
         }
         'interfaces/physicals' {
            $response.physicalInterfaces | Select-Object -ExcludeProperty link, paging_info
         }         
      } 
       
   }
}


function Reset-DDnetworks {
   [CmdletBinding()]
   param ( 
      [CmdletBinding()]
      [Parameter(Mandatory = $true, ParameterSetName = 'host-names' )]
      [switch]$hostnames,
      [Parameter(Mandatory = $true, ParameterSetName = 'domain-names' )]
      [switch]$domainnames,
      [Parameter(Mandatory = $true, ParameterSetName = 'search-domains' )]
      [switch]$searchdomains,
      [Parameter(Mandatory = $true, ParameterSetName = 'dns-servers' )]
      [switch]$dnsservers,  
      [Parameter(Mandatory = $true, ParameterSetName = 'gateways' )]
      [switch]$Gateways,                                                      
      [Parameter(Mandatory = $false, ParameterSetName = 'host-names' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'domain-names' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'search-domains' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'dns-servers' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'gateways' )]
      [string]
      $SYSTEM_ID = $Global:DD_UUID,
      $body = @{}
   )
   begin {
      $Response = @()
      $METHOD = "PUT"
      $apiver = "api/v3"
   }
   process {
      switch ($PsCmdlet.ParameterSetName) {
         $PsCmdlet.ParameterSetName {
            $uri = "dd-systems/$($SYSTEM_ID)/networks/$($PsCmdlet.ParameterSetName)/reset"
         }                             
      }
      $parameters = @{
         uri           = $uri          
         apiver        = $apiver
         Method        = $METHOD
         body          = $body
         RequestMethod = "REST"
         Verbose       = $PSBoundParameters['Verbose'] -eq $true
         Debug         = $PSBoundParameters['Debug'] -eq $true
      }      
      try {
         $Response += Invoke-DDapirequest @Parameters
      }
      catch {
         Get-DDWebException  -ExceptionMessage $_
         break
      }
      write-verbose ($response | Out-String)
   }
   end {    
      switch ($PsCmdlet.ParameterSetName) {
         default {
            $response | Select-Object -ExcludeProperty link, paging_info
         }
      } 
       
   }
}


#PUT/rest/v2.0/dd-systems/{SYSTEM-ID}/networks
function Set-DDnetworks {
   [CmdletBinding()]
   param ( 
      [CmdletBinding()]
      [Parameter(Mandatory = $true, ParameterSetName = 'host-names' )]
      [string]$hostName,
      [Parameter(Mandatory = $true, ParameterSetName = 'domain-names' )]
      [string]$domainName,
      [Parameter(Mandatory = $true, ParameterSetName = 'search-domains' )]
      [string[]]$searchDomain,
      [Parameter(Mandatory = $true, ParameterSetName = 'dns-servers' )]
      [ValidateCount(1, 3)]
      [string[]]$dnsServerIpAddresses,  
      [Parameter(Mandatory = $true, ParameterSetName = 'gateways' )]
      [switch]$Gateways,
      [Parameter(Mandatory = $true, ParameterSetName = 'interfaces' )]
      [switch]$Interfaces,
      [Parameter(Mandatory = $true, ParameterSetName = 'interfaces/physicals' )]
      [switch]$PhysicalInterfaces,
      [Parameter(Mandatory = $true, ParameterSetName = 'interfaces/vlans' )]
      [switch]$VlanInterfaces,
      [Parameter(Mandatory = $true, ParameterSetName = 'interfaces/aliases' )]
      [switch]$AliasInterfaces,
      [Parameter(Mandatory = $true, ParameterSetName = 'nics' )]
      [switch]$nics,                                                          
      [Parameter(Mandatory = $false, ParameterSetName = 'default')]  
      [Parameter(Mandatory = $false, ParameterSetName = 'host-names' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'domain-names' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'search-domains' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'dns-servers' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'gateways' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'interfaces' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'interfaces/physicals' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'interfaces/vlans' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'interfaces/aliases' )]
      [Parameter(Mandatory = $false, ParameterSetName = 'nics' )]

      [string]
      $SYSTEM_ID = $Global:DD_UUID,
      $body = @{}
   )
   begin {
      $Response = @()
      $METHOD = "PUT"
      $apiver = "api/v3"
   }
   process {
      switch ($PsCmdlet.ParameterSetName) {
         'dns-servers' {
            $uri = "dd-systems/$($SYSTEM_ID)/networks/$($PsCmdlet.ParameterSetName)"
            $body.Add('dnsServerIpAddresses', $dnsServerIpAddresses)
            $body = $body | ConvertTo-Json
         }  
         'domain-names' {
            $uri = "dd-systems/$($SYSTEM_ID)/networks/$($PsCmdlet.ParameterSetName)"
            $body.Add('domainName', $domainName)
            $body = $body | ConvertTo-Json
         }  
         'host-names' {
            $uri = "dd-systems/$($SYSTEM_ID)/networks/$($PsCmdlet.ParameterSetName)"
            $body.Add('hostName', $hostName)
            $body = $body | ConvertTo-Json
         }
         'search-domains' {
            $uri = "dd-systems/$($SYSTEM_ID)/networks/$($PsCmdlet.ParameterSetName)"
            $body.Add('searchDomains', $searchDomain)
            $body = $body | ConvertTo-Json
         }             
         default {
            $uri = "dd-systems/$($SYSTEM_ID)/networks"
         }
         'nics' {
            $apiver = "rest/v2.0"
            $uri = "dd-systems/$($SYSTEM_ID)/networks/nics"
         }                               
      }
      Write-Verbose ($body | Out-String)
      $parameters = @{
         uri           = $uri          
         apiver        = $apiver
         Method        = $METHOD
         body          = $body
         RequestMethod = "REST"
         Verbose       = $PSBoundParameters['Verbose'] -eq $true
         Debug         = $PSBoundParameters['Debug'] -eq $true
      }      
      try {
         $Response += Invoke-DDapirequest @Parameters
      }
      catch {
         Get-DDWebException  -ExceptionMessage $_
         break
      }
      write-verbose ($response | Out-String)
   }
   end {    
      switch ($PsCmdlet.ParameterSetName) {
         default {
            $response | Select-Object -ExcludeProperty link, paging_info
         }
         'nics' {
            $responsev | Select-Object -ExcludeProperty link, paging_info
         } 
         'interfaces' {
            $response | Select-Object -ExcludeProperty link, paging_info
         }
         'gateways' {
            $response  | Select-Object -ExcludeProperty link, paging_info
         }
         'search-domains' {
            $response | Select-Object   -ExcludeProperty link, paging_info
         }
         'interfaces/physicals' {
            $response.physicalInterfaces | Select-Object -ExcludeProperty link, paging_info
         }         
      } 
       
   }
}
<#
{
  "description": "Network DNS Servers Modify",
  "required": [
    "dnsServerIpAddresses"
  ],
  "type": "object",
  "properties": {
    "dnsServerIpAddresses": {
      "type": "array",
      "minItems": 1,
      "maxItems": 3,
      "items": {
        "type": "string"
      }
    }
  }
}#>