Public/zone.ps1
|
function Get-CSZone { <# .SYNOPSIS Lists zones in CloudStack. .DESCRIPTION Retrieves a list of zones with optional filtering by ID, name, availability, or other parameters. .PARAMETER Id Filter by zone ID .PARAMETER Name Filter by zone name (exact match) .PARAMETER Keyword Filter by keyword (partial match on name) .PARAMETER Available Filter by availability (true/false) .PARAMETER DomainId Filter by domain ID .PARAMETER NetworkType Filter by network type (Advanced or Basic) .PARAMETER ShowCapacities Show zone capacities (CPU, memory, storage) .PARAMETER Tags Filter by tags (comma-separated list) .EXAMPLE Get-CSZone Lists all zones .EXAMPLE Get-CSZone -Name "zone1" Gets a specific zone by name .EXAMPLE Get-CSZone -Available $true Lists all available zones .EXAMPLE Get-CSZone -NetworkType Advanced Lists all zones with Advanced networking .EXAMPLE Get-CSZone -ShowCapacities $true Lists all zones with capacity information #> [CmdletBinding(DefaultParameterSetName='Default')] param( [Parameter(ParameterSetName='ById')] [string]$Id, [Parameter(ParameterSetName='ByName')] [string]$Name, [Parameter(ParameterSetName='Default')] [string]$Keyword, [Parameter(ParameterSetName='Default')] [bool]$Available, [Parameter(ParameterSetName='Default')] [string]$DomainId, [Parameter(ParameterSetName='Default')] [ValidateSet('Advanced', 'Basic')] [string]$NetworkType, [Parameter(ParameterSetName='Default')] [bool]$ShowCapacities, [Parameter(ParameterSetName='Default')] [string]$Tags ) # Build parameters $apiParams = @{} if ($PSBoundParameters.ContainsKey('Id')) { $apiParams['id'] = $Id } if ($PSBoundParameters.ContainsKey('Name')) { $apiParams['name'] = $Name } if ($PSBoundParameters.ContainsKey('Keyword')) { $apiParams['keyword'] = $Keyword } if ($PSBoundParameters.ContainsKey('Available')) { $apiParams['available'] = $Available.ToString().ToLower() } if ($PSBoundParameters.ContainsKey('DomainId')) { $apiParams['domainid'] = $DomainId } if ($PSBoundParameters.ContainsKey('NetworkType')) { $apiParams['networktype'] = $NetworkType } if ($PSBoundParameters.ContainsKey('ShowCapacities')) { $apiParams['showcapacities'] = $ShowCapacities.ToString().ToLower() } if ($PSBoundParameters.ContainsKey('Tags')) { $apiParams['tags'] = $Tags } # Make the API call $response = Invoke-CSApiRequest -Command 'listZones' -Parameters $apiParams Write-Verbose ($apiParams | Out-String) # Return the zone list if ($response.listzonesresponse.zone) { return $response.listzonesresponse.zone } else { Write-Verbose "No zones found matching the criteria." return $null } } function New-CSZone { <# .SYNOPSIS Creates a CloudStack zone. .DESCRIPTION Wraps CloudStack's createZone API. Provide the external and internal DNS servers, a zone name, and either Basic or Advanced networking. .PARAMETER Dns1 Primary external (public) DNS server .PARAMETER InternalDns1 Primary internal DNS server used by system VMs .PARAMETER Name Name for the zone .PARAMETER NetworkType The zone's network type: Basic or Advanced .PARAMETER AllocationState Initial allocation state: Enable or Disable .PARAMETER Dns2 Secondary external (public) DNS server .PARAMETER Domain Network domain suffix for guest networks in the zone .PARAMETER DomainId Restrict the zone to this domain (for a dedicated zone) .PARAMETER GuestCidrAddress The guest CIDR for an Advanced zone (for example 10.20.0.0/16) .PARAMETER InternalDns2 Secondary internal DNS server .PARAMETER Ip6Dns1 Primary IPv6 DNS server .PARAMETER Ip6Dns2 Secondary IPv6 DNS server .PARAMETER IsEdge Create the zone as an edge zone .PARAMETER LocalStorageEnabled Allow instances in the zone to use host-local storage .PARAMETER SecurityGroupEnabled Enable security groups (Basic networking, or shared networks in Advanced) .EXAMPLE New-CSZone -Name 'Detroit-1' -NetworkType Advanced -Dns1 '10.0.0.10' -InternalDns1 '10.0.0.11' -Domain 'detroit.example.com' -GuestCidrAddress '10.20.0.0/16' Creates an Advanced-networking zone. .EXAMPLE New-CSZone -Name 'Edge-1' -NetworkType Basic -Dns1 '10.0.0.10' -InternalDns1 '10.0.0.11' -SecurityGroupEnabled Creates a Basic-networking zone with security groups enabled. #> [CmdletBinding()] param( [Parameter(Mandatory=$true)][string]$Dns1, [Parameter(Mandatory=$true)][string]$InternalDns1, [Parameter(Mandatory=$true)][string]$Name, [Parameter(Mandatory=$true)][ValidateSet('Basic', 'Advanced')][string]$NetworkType, [ValidateSet('Enable', 'Disable')][string]$AllocationState, [string]$Dns2, [string]$Domain, [string]$DomainId, [string]$GuestCidrAddress, [string]$InternalDns2, [string]$Ip6Dns1, [string]$Ip6Dns2, [switch]$IsEdge, [switch]$LocalStorageEnabled, [switch]$SecurityGroupEnabled ) $apiParams = @{ dns1 = $Dns1; internaldns1 = $InternalDns1; name = $Name; networktype = $NetworkType } $parameterMap = @{ AllocationState = 'allocationstate'; Dns2 = 'dns2'; Domain = 'domain'; DomainId = 'domainid'; GuestCidrAddress = 'guestcidraddress'; InternalDns2 = 'internaldns2'; Ip6Dns1 = 'ip6dns1'; Ip6Dns2 = 'ip6dns2' } foreach ($parameter in $parameterMap.Keys) { if ($PSBoundParameters.ContainsKey($parameter)) { $apiParams[$parameterMap[$parameter]] = (Get-Variable -Name $parameter -ValueOnly) } } if ($IsEdge) { $apiParams['isedge'] = 'true' } if ($LocalStorageEnabled) { $apiParams['localstorageenabled'] = 'true' } if ($SecurityGroupEnabled) { $apiParams['securitygroupenabled'] = 'true' } Invoke-CSApiRequest -Command 'createZone' -Parameters $apiParams } |