Files
dmilov fb641c8a1c License PowerCLI-Examples-Scripts repository under BSD-2 Clause (#462)
As part of the VMware open source program, we have to update this repository with the correct license and copyright information.
We add the BSD-2 Clause License for this repository.
We mark all source code provided by VMware with the Copyright notice under BSD-2 Clause license.

* Update repository license to BSD 2-Clause License

* Update Copyright
2021-06-07 09:58:47 +03:00

1634 lines
60 KiB
PowerShell

<#
Copyright 2021 VMware, Inc.
SPDX-License-Identifier: BSD-2-Clause
#>
Function Get-VMCCommand {
<#
.NOTES
===========================================================================
Created by: VMware
Date: 11/17/2017
Organization: VMware
Blog: http://vmware.com/go/powercli
Twitter: @powercli
===========================================================================
.SYNOPSIS
Returns all cmdlets for VMware Cloud on AWS
.DESCRIPTION
This cmdlet will allow you to return all cmdlets included in the VMC module
.EXAMPLE
Get-VMCCommand
.EXAMPLE
Get-Command -Module VMware.VMC
.NOTES
You can either use this cmdlet or the Get-Command cmdlet as seen in Example 2
#>
Get-command -Module VMware.VimAutomation.Vmc
Get-Command -Module VMware.VMC
}
Function Connect-VMCVIServer {
<#
.NOTES
===========================================================================
Created by: VMware
Date: 11/17/2017
Organization: VMware
Blog: http://vmware.com/go/powercli
Twitter: @powercli
===========================================================================
.SYNOPSIS
Cmdlet to connect to your VMC vCenter Server
.DESCRIPTION
This will connect you to both the VMC ViServer as well as the CiSServer at the same time.
.EXAMPLE
Connect-VMCVIServer -Server <VMC vCenter address> -User <Username> -Password <Password>
.NOTES
Easiest way is to pipe through your credentials from Get-VMCSDDCDefaultCredential
#>
Param (
[Parameter(Mandatory=$true)]$Org,
[Parameter(Mandatory=$true)]$Sddc,
[switch]$Autologin,
[switch]$UseManagementIP
)
If (-Not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect" } Else {
$creds = Get-VMCSDDCDefaultCredential -Org $Org -Sddc $Sddc
If($UseManagementIP){
$Server = $creds.vc_management_ip
}Else{
$Server = $creds.vc_public_ip
}
Write-Host "Connecting to VMC vCenter Server" $Server
Connect-VIServer -Server $Server -User $creds.cloud_username -Password $creds.cloud_password | Add-Member -MemberType Noteproperty -Name Location -Value "VMC"
Write-Host "Connecting to VMC CIS Endpoint" $Server
Connect-CisServer -Server $Server -User $creds.cloud_username -Password $creds.cloud_password | Add-Member -MemberType Noteproperty -Name Location -Value "VMC"
}
}
Function Get-VMCOrg {
<#
.NOTES
===========================================================================
Created by: VMware
Date: 11/17/2017
Organization: VMware
Blog: http://vmware.com/go/powercli
Twitter: @powercli
===========================================================================
.SYNOPSIS
Return the Orgs that you are a part of
.DESCRIPTION
Depending on what you've purchased, you may be a part of one or more VMC Orgs. This will return your orgs
.EXAMPLE
Get-VMCOrg
.EXAMPLE
Get-VMCOrg -Name <Org Name>
.NOTES
Return all the info about the orgs you are a part of
#>
Param (
[Parameter(Mandatory=$false)]$Name
)
If (-Not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use Connect-VMC to connect" } Else {
$orgService = Get-VMCService com.vmware.vmc.orgs
if ($PSBoundParameters.ContainsKey("Name")){
$orgs = $orgService.list() | Where {$_.display_name -eq $Name}
} Else {
$orgs = $orgService.list()
}
$Orgs | Select display_name, name, user_name, created, id
}
}
Function Get-VMCSDDC {
<#
.NOTES
===========================================================================
Created by: VMware
Date: 11/17/2017
Organization: VMware
Blog: http://vmware.com/go/powercli
Twitter: @powercli
===========================================================================
.SYNOPSIS
Returns all of the SDDCs you are associated to
.DESCRIPTION
Returns all of the SDDCs ayou are associated to
.EXAMPLE
Get-VMCSDDC -Org <Org Name>
.EXAMPLE
Get-VMCSDDC -Name <SDDC Name> -Org <Org Name>
#>
Param (
[Parameter(Mandatory=$True)]$Org,
[Parameter(Mandatory=$false)]$Name
)
If (-Not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect" } Else {
if ($PSBoundParameters.ContainsKey("Org")){
$orgs = Get-VMCOrg -Name $Org
} else {
$orgs = Get-VMCOrg
}
foreach ($org in $orgs) {
$orgID = $org.ID
$sddcService = Get-VMCService com.vmware.vmc.orgs.sddcs
if ($PSBoundParameters.ContainsKey("Name")){
$sddcService.list($OrgID) | Where {$_.name -eq $Name}
} Else {
$sddcService.list($OrgID)
}
}
}
}
Function Get-VMCTask {
<#
.NOTES
===========================================================================
Created by: VMware
Date: 11/17/2017
Organization: VMware
Blog: http://vmware.com/go/powercli
Twitter: @powercli
===========================================================================
.SYNOPSIS
Returns all of the VMC Tasks
.DESCRIPTION
Returns all of the VMC Tasks that have either occurred or are in process
.EXAMPLE
Get-VMCTask
#>
Param (
[Parameter(Mandatory=$True)]$Org
)
If (-Not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect" } Else {
if ($PSBoundParameters.ContainsKey("Org")){
$orgs = Get-VMCOrg -Name $Org
} else {
$orgs = Get-VMCOrg
}
foreach ($org in $orgs) {
$orgID = $org.ID
$taskService = Get-VMCService com.vmware.vmc.orgs.tasks
$taskService.list($OrgID) | Select * -ExcludeProperty Help
}
}
}
Function Get-VMCSDDCDefaultCredential {
<#
.NOTES
===========================================================================
Created by: VMware
Date: 11/17/2017
Organization: VMware
Blog: http://vmware.com/go/powercli
Twitter: @powercli
===========================================================================
.SYNOPSIS
Returns the default credential for the SDDC
.DESCRIPTION
Returns the default credential for the sddc
.EXAMPLE
Get-VMCSDDCDefaultCredential -Org <Org Name>
.EXAMPLE
Get-VMCSDDCDefaultCredential -Sddc <SDDC Name> -Org <Org Name>
#>
Param (
[Parameter(Mandatory=$true)]$Org,
[Parameter(Mandatory=$false)]$Sddc
)
If (-Not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect" } Else {
if ($PSBoundParameters.ContainsKey("Sddc")){
$sddcs = Get-VMCSDDC -Name $Sddc -Org $Org
} else {
$sddcs = Get-VMCSDDC -Org $Org
}
foreach ($sddc in $sddcs) {
$sddc.resource_config | Select-object vc_url, vc_management_ip, vc_public_ip, cloud_username, cloud_password
}
}
}
Function Get-VMCSDDCPublicIP {
<#
.NOTES
===========================================================================
Created by: VMware
Date: 11/17/2017
Organization: VMware
Blog: http://vmware.com/go/powercli
Twitter: @powercli
===========================================================================
.SYNOPSIS
Returns your Public IPs
.DESCRIPTION
Returns your Public IPs
.EXAMPLE
Get-VMCSDDCPublicIP -Org <Org Name>
.EXAMPLE
Get-VMCSDDCPublicIP -Sddc <SDDC Name> -Org <Org Name>
.NOTES
Return your Public IPs that you have assigned to your account
#>
Param (
[Parameter(Mandatory=$true)]$Org,
[Parameter(Mandatory=$false)]$Sddc
)
If (-Not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect" } Else {
if ($PSBoundParameters.ContainsKey("Sddc")){
$sddcs = Get-VMCSDDC -Name $Sddc -Org $Org
} else {
$sddcs = Get-VMCSDDC -Org $Org
}
foreach ($sddc in $sddcs) {
$sddc.resource_config.Public_ip_pool
}
}
}
Function Get-VMCVMHost {
Param (
[Parameter(Mandatory=$false)]$Sddc,
[Parameter(Mandatory=$true)]$Org
)
If (-Not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect" } Else {
if ($PSBoundParameters.ContainsKey("Sddc")){
$sddcs = Get-VMCSDDC -Name $Sddc -Org $Org
} else {
$sddcs = Get-VMCSDDC -Org $Org
}
$results = @()
foreach ($sddc in $sddcs) {
foreach ($vmhost in $sddc.resource_config.esx_hosts) {
$tmp = [pscustomobject] @{
esx_id = $vmhost.esx_id;
name = $vmhost.name;
hostname = $vmhost.hostname;
esx_state = $vmhost.esx_state;
sddc_id = $sddc.id;
org_id = $sddc.org_id;
}
$results += $tmp
}
$results
}
}
}
Function Get-VMCSDDCVersion {
<#
.NOTES
===========================================================================
Created by: VMware
Date: 11/17/2017
Organization: VMware
Blog: http://vmware.com/go/powercli
Twitter: @powercli
===========================================================================
.SYNOPSIS
Returns SDDC Version
.DESCRIPTION
Returns Version of the SDDC
.EXAMPLE
Get-VMCSDDCVersion -Name <SDDC Name> -Org <Org Name>
#>
Param (
[Parameter(Mandatory=$True)]$Org,
[Parameter(Mandatory=$false)]$Name
)
If (-Not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect" } Else {
if ($PSBoundParameters.ContainsKey("Org")){
$orgs = Get-VMCOrg -Name $Org
} else {
$orgs = Get-VMCOrg
}
foreach ($org in $orgs) {
$orgID = $org.ID
$sddcService = Get-VMCService com.vmware.vmc.orgs.sddcs
if ($PSBoundParameters.ContainsKey("Name")){
($sddcService.list($OrgID) | Where {$_.name -match $Name}).resource_config.sddc_manifest | Select *version
} Else {
($sddcService.list($OrgID)).resource_config.sddc_manifest | Select *version
}
}
}
}
Function Get-VMCFirewallRule {
<#
.NOTES
===========================================================================
Created by: William Lam
Date: 11/19/2017
Organization: VMware
Blog: https://www.virtuallyghetto.com
Twitter: @lamw
===========================================================================
.SYNOPSIS
Retruns VMC Firewall Rules for a given Gateway (MGW or CGW)
.DESCRIPTION
Retruns VMC Firewall Rules for a given Gateway (MGW or CGW)
.EXAMPLE
Get-VMCFirewallRule -OrgName <Org Name> -SDDCName <SDDC Name> -GatewayType <MGW or CGW>
.EXAMPLE
Get-VMCFirewallRule -OrgName <Org Name> -SDDCName <SDDC Name> -GatewayType <MGW or CGW> -ShowAll
#>
param(
[Parameter(Mandatory=$false)][String]$SDDCName,
[Parameter(Mandatory=$false)][String]$OrgName,
[Parameter(Mandatory=$false)][Switch]$ShowAll,
[Parameter(Mandatory=$true)][ValidateSet("MGW","CGW")][String]$GatewayType
)
if($GatewayType -eq "MGW") {
$EdgeId = "edge-1"
} else {
$EdgeId = "edge-2"
}
$orgId = (Get-VMCOrg -Name $OrgName).Id
$sddcId = (Get-VMCSDDC -Name $SDDCName -Org $OrgName).Id
$firewallConfigService = Get-VmcService com.vmware.vmc.orgs.sddcs.networks.edges.firewall.config
$firewallRules = ($firewallConfigService.get($orgId, $sddcId, $EdgeId)).firewall_rules.firewall_rules
if(-not $ShowAll) {
$firewallRules = $firewallRules | where { $_.rule_type -ne "default_policy" -and $_.rule_type -ne "internal_high" -and $_.name -ne "vSphere Cluster HA" -and $_.name -ne "Outbound Access" } | Sort-Object -Property rule_tag
} else {
$firewallRules = $firewallRules | Sort-Object -Property rule_tag
}
$results = @()
foreach ($firewallRule in $firewallRules) {
if($firewallRule.source.ip_address.Count -ne 0) {
$source = $firewallRule.source.ip_address
} else { $source = "ANY" }
if($firewallRule.application.service.protocol -ne $null) {
$protocol = $firewallRule.application.service.protocol
} else { $protocol = "ANY" }
if($firewallRule.application.service.port -ne $null) {
$port = $firewallRule.application.service.port
} else { $port = "ANY" }
$tmp = [pscustomobject] @{
ID = $firewallRule.rule_id;
Name = $firewallRule.name;
Type = $firewallRule.rule_type;
Action = $firewallRule.action;
Protocol = $protocol;
Port = $port;
SourceAddress = $source
DestinationAddress = $firewallRule.destination.ip_address;
}
$results+=$tmp
}
$results
}
Function Export-VMCFirewallRule {
<#
.NOTES
===========================================================================
Created by: William Lam
Date: 11/19/2017
Organization: VMware
Blog: https://www.virtuallyghetto.com
Twitter: @lamw
===========================================================================
.SYNOPSIS
Exports all "customer" created VMC Firewall Rules to JSON file
.DESCRIPTION
Exports all "customer" created VMC Firewall Rules to JSON file
.EXAMPLE
Export-VMCFirewallRule -OrgName <Org Name> -SDDCName <SDDC Name> -GatewayType <MGW or CGW> -Path "C:\Users\lamw\Desktop\VMCFirewallRules.json"
#>
param(
[Parameter(Mandatory=$false)][String]$SDDCName,
[Parameter(Mandatory=$false)][String]$OrgName,
[Parameter(Mandatory=$true)][ValidateSet("MGW","CGW")][String]$GatewayType,
[Parameter(Mandatory=$false)][String]$Path
)
if (-not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect"; break }
if($GatewayType -eq "MGW") {
$EdgeId = "edge-1"
} else {
$EdgeId = "edge-2"
}
$orgId = (Get-VMCOrg -Name $OrgName).Id
$sddcId = (Get-VMCSDDC -Name $SDDCName -Org $OrgName).Id
if(-not $orgId) {
Write-Host -ForegroundColor red "Unable to find Org $OrgName, please verify input"
break
}
if(-not $sddcId) {
Write-Host -ForegroundColor red "Unable to find SDDC $SDDCName, please verify input"
break
}
$firewallConfigService = Get-VmcService com.vmware.vmc.orgs.sddcs.networks.edges.firewall.config
$firewallRules = ($firewallConfigService.get($orgId, $sddcId, $EdgeId)).firewall_rules.firewall_rules
if(-not $ShowAll) {
$firewallRules = $firewallRules | where { $_.rule_type -ne "default_policy" -and $_.rule_type -ne "internal_high" -and $_.name -ne "vSphere Cluster HA" -and $_.name -ne "Outbound Access" } | Sort-Object -Property rule_tag
} else {
$firewallRules = $firewallRules | Sort-Object -Property rule_tag
}
$results = @()
$count = 0
foreach ($firewallRule in $firewallRules) {
if($firewallRule.source.ip_address.Count -ne 0) {
$source = $firewallRule.source.ip_address
} else {
$source = "ANY"
}
$tmp = [pscustomobject] @{
Name = $firewallRule.name;
Action = $firewallRule.action;
Protocol = $firewallRule.application.service.protocol;
Port = $firewallRule.application.service.port;
SourcePort = $firewallRule.application.service.source_port;
ICMPType = $firewallRule.application.service.icmp_type;
SourceAddress = $firewallRule.source.ip_address;
DestinationAddress = $firewallRule.destination.ip_address;
Enabled = $firewallRule.enabled;
Logging = $firewallRule.logging_enabled;
}
$count+=1
$results+=$tmp
}
if($Path) {
Write-Host -ForegroundColor Green "Exporting $count VMC Firewall Rules to $Path ..."
$results | ConvertTo-Json | Out-File $Path
} else {
$results | ConvertTo-Json
}
}
Function Import-VMCFirewallRule {
<#
.NOTES
===========================================================================
Created by: William Lam
Date: 11/19/2017
Organization: VMware
Blog: https://www.virtuallyghetto.com
Twitter: @lamw
===========================================================================
.SYNOPSIS
Imports VMC Firewall Rules from exported JSON configuration file
.DESCRIPTION
Imports VMC Firewall Rules from exported JSON configuration file
.EXAMPLE
Import-VMCFirewallRule -OrgName <Org Name> -SDDCName <SDDC Name> -GatewayType <MGW or CGW> -Path "C:\Users\lamw\Desktop\VMCFirewallRules.json"
#>
param(
[Parameter(Mandatory=$false)][String]$SDDCName,
[Parameter(Mandatory=$false)][String]$OrgName,
[Parameter(Mandatory=$true)][ValidateSet("MGW","CGW")][String]$GatewayType,
[Parameter(Mandatory=$false)][String]$Path
)
if (-not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect"; break }
if($GatewayType -eq "MGW") {
$EdgeId = "edge-1"
} else {
$EdgeId = "edge-2"
}
$orgId = (Get-VMCOrg -Name $OrgName).Id
$sddcId = (Get-VMCSDDC -Name $SDDCName -Org $OrgName).Id
if(-not $orgId) {
Write-Host -ForegroundColor red "Unable to find Org $OrgName, please verify input"
break
}
if(-not $sddcId) {
Write-Host -ForegroundColor red "Unable to find SDDC $SDDCName, please verify input"
break
}
$firewallService = Get-VmcService com.vmware.vmc.orgs.sddcs.networks.edges.firewall.config.rules
$vmcFirewallRulesJSON = Get-Content -Raw $Path | ConvertFrom-Json
# Create top level Firewall Rules Object
$firewallRules = $firewallService.Help.add.firewall_rules.Create()
# Create top top level Firewall Rule Spec which will be an array of individual Firewall rules as we process them in next section
$ruleSpec = $firewallService.Help.add.firewall_rules.firewall_rules.Create()
foreach ($vmcFirewallRule in $vmcFirewallRulesJSON) {
# Create Individual Firewall Rule Element Spec
$ruleElementSpec = $firewallService.Help.add.firewall_rules.firewall_rules.Element.Create()
# AppSpec
$appSpec = $firewallService.Help.add.firewall_rules.firewall_rules.Element.application.Create()
# ServiceSpec
$serviceSpec = $firewallService.Help.add.firewall_rules.firewall_rules.Element.application.service.Element.Create()
$protocol = $null
if($vmcFirewallRule.Protocol -ne $null) {
$protocol = $vmcFirewallRule.Protocol
}
$serviceSpec.protocol = $protocol
# Process ICMP Type from JSON
$icmpType = $null
if($vmcFirewallRule.ICMPType -ne $null) {
$icmpType = $vmcFirewallRule.ICMPType
}
$serviceSpec.icmp_type = $icmpType
# Process Source Ports from JSON
$sourcePorts = @()
if($vmcFirewallRule.SourcePort -eq "any" -or $vmcFirewallRule.SourcePort -ne $null) {
foreach ($port in $vmcFirewallRule.SourcePort) {
$sourcePorts+=$port
}
} else {
$sourcePorts = @("any")
}
$serviceSpec.source_port = $sourcePorts
# Process Ports from JSON
$ports = @()
if($vmcFirewallRule.Port -ne "null") {
foreach ($port in $vmcFirewallRule.Port) {
$ports+=$port
}
}
$serviceSpec.port = $ports
$addSpec = $appSpec.service.Add($serviceSpec)
# Create Source Spec
$srcSpec = $firewallService.Help.add.firewall_rules.firewall_rules.Element.source.Create()
$srcSpec.exclude = $false
# Process Source Address from JSON
$sourceAddess = @()
if($vmcFirewallRule.SourceAddress -ne "null") {
foreach ($address in $vmcFirewallRule.SourceAddress) {
$sourceAddess+=$address
}
}
$srcSpec.ip_address = $sourceAddess;
# Create Destination Spec
$destSpec = $firewallService.Help.add.firewall_rules.firewall_rules.Element.destination.Create()
$destSpec.exclude = $false
# Process Destination Address from JSON
$destinationAddess = @()
if($vmcFirewallRule.DestinationAddress -ne "null") {
foreach ($address in $vmcFirewallRule.DestinationAddress) {
$destinationAddess+=$address
}
}
$destSpec.ip_address = $destinationAddess
# Add various specs
if($vmcFirewallRule.Protocol -ne $null -and $vmcFirewallRule.port -ne $null) {
$ruleElementSpec.application = $appSpec
}
$ruleElementSpec.source = $srcSpec
$ruleElementSpec.destination = $destSpec
$ruleElementSpec.rule_type = "user"
# Process Enabled from JSON
$fwEnabled = $false
if($vmcFirewallRule.Enabled -eq "true") {
$fwEnabled = $true
}
$ruleElementSpec.enabled = $fwEnabled
# Process Logging from JSON
$loggingEnabled = $false
if($vmcFirewallRule.Logging -eq "true") {
$loggingEnabled = $true
}
$ruleElementSpec.logging_enabled = $loggingEnabled
$ruleElementSpec.action = $vmcFirewallRule.Action
$ruleElementSpec.name = $vmcFirewallRule.Name
# Add the individual FW rule spec into our overall firewall rules array
Write-host "Creating VMC Firewall Rule Spec:" $vmcFirewallRule.Name "..."
$ruleSpecAdd = $ruleSpec.Add($ruleElementSpec)
}
$firewallRules.firewall_rules = $ruleSpec
Write-host "Adding VMC Firewall Rules ..."
$firewallRuleAdd = $firewallService.add($orgId,$sddcId,$EdgeId,$firewallRules)
}
Function Remove-VMCFirewallRule {
<#
.NOTES
===========================================================================
Created by: William Lam
Date: 11/19/2017
Organization: VMware
Blog: https://www.virtuallyghetto.com
Twitter: @lamw
===========================================================================
.SYNOPSIS
Removes VMC Firewall Rule given Rule Id
.DESCRIPTION
Removes VMC Firewall Rule given Rule Id
.EXAMPLE
Remove-VMCFirewallRule -OrgName <Org Name> -SDDCName <SDDC Name> -GatewayType <MGW or CGW> -RuleId <Rule Id>
#>
param(
[Parameter(Mandatory=$false)][String]$SDDCName,
[Parameter(Mandatory=$false)][String]$OrgName,
[Parameter(Mandatory=$true)][ValidateSet("MGW","CGW")][String]$GatewayType,
[Parameter(Mandatory=$false)][String]$RuleId
)
if (-not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect"; break }
if($GatewayType -eq "MGW") {
$EdgeId = "edge-1"
} else {
$EdgeId = "edge-2"
}
$orgId = (Get-VMCOrg -Name $OrgName).Id
$sddcId = (Get-VMCSDDC -Name $SDDCName -Org $OrgName).Id
if(-not $orgId) {
Write-Host -ForegroundColor red "Unable to find Org $OrgName, please verify input"
break
}
if(-not $sddcId) {
Write-Host -ForegroundColor red "Unable to find SDDC $SDDCName, please verify input"
break
}
$firewallService = Get-VmcService com.vmware.vmc.orgs.sddcs.networks.edges.firewall.config.rules
Write-Host "Removing VMC Firewall Rule Id $RuleId ..."
$firewallService.delete($orgId,$sddcId,$EdgeId,$RuleId)
}
Function Get-VMCLogicalNetwork {
<#
.NOTES
===========================================================================
Created by: Kyle Ruddy
Date: 03/06/2018
Organization: VMware
Blog: https://www.kmruddy.com
Twitter: @kmruddy
===========================================================================
.SYNOPSIS
Retruns VMC Logical Networks for a given SDDC
.DESCRIPTION
Retruns VMC Logical Networks for a given SDDC
.EXAMPLE
Get-VMCLogicalNetwork -OrgName <Org Name> -SDDCName <SDDC Name>
.EXAMPLE
Get-VMCLogicalNetwork -OrgName <Org Name> -SDDCName <SDDC Name> -LogicalNetworkName <Logical Network Name>
#>
param(
[Parameter(Mandatory=$true)][String]$SDDCName,
[Parameter(Mandatory=$true)][String]$OrgName,
[Parameter(Mandatory=$false)][String]$LogicalNetworkName
)
$orgId = (Get-VMCOrg -Name $OrgName).Id
$sddcId = (Get-VMCSDDC -Name $SDDCName -Org $OrgName).Id
if(-not $orgId) {
Write-Host -ForegroundColor red "Unable to find Org $OrgName, please verify input"
break
}
if(-not $sddcId) {
Write-Host -ForegroundColor red "Unable to find SDDC $SDDCName, please verify input"
break
}
# @LucD22 - 21/10/18 - Fix for issue #176 VMware.VMC module only lists firts 20 Logical networks
# Loop until entries (total_count) are returned
$index = [long]0
$logicalNetworks = do{
$netData = $logicalNetworkService.get_0($orgId,$sddcId,$pagesize,$index)
$netData.data | Sort-Object -Property id
$index = $index + $netdata.paging_info.page_size
}
until($index -ge $netData.paging_info.total_count)
if($LogicalNetworkName) {
$logicalNetworks = $logicalNetworks | Where-Object {$_.Name -eq $LogicalNetworkName}
}
$results = @()
foreach ($logicalNetwork in $logicalNetworks) {
$tmp = [pscustomobject] @{
ID = $logicalNetwork.id;
Name = $logicalNetwork.name;
SubnetMask = $logicalNetwork.subnets.address_groups.prefix_length;
Gateway = $logicalNetwork.subnets.address_groups.primary_address;
DHCPipRange = $logicalNetwork.dhcp_configs.ip_pools.ip_range;
DHCPdomain = $logicalNetwork.dhcp_configs.ip_pools.domain_name;
CGatewayID = $logicalNetwork.cgw_id;
CGateway = $logicalNetwork.cgw_name;
}
$results+=$tmp
}
$results
}
Function Remove-VMCLogicalNetwork {
<#
.NOTES
===========================================================================
Created by: Kyle Ruddy
Date: 03/06/2018
Organization: VMware
Blog: https://www.kmruddy.com
Twitter: @kmruddy
===========================================================================
.SYNOPSIS
Removes Logical Network given ID
.DESCRIPTION
Removes Logical Network given ID
.EXAMPLE
Remove-VMCLogicalNetwork -OrgName <Org Name> -SDDCName <SDDC Name> -LogicalNetworkName <LogicalNetwork Name>
#>
[cmdletbinding(SupportsShouldProcess = $true,ConfirmImpact='High')]
param(
[Parameter(Mandatory=$true)][String]$SDDCName,
[Parameter(Mandatory=$true)][String]$OrgName,
[Parameter(Mandatory=$true)][String]$LogicalNetworkName
)
if (-not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect"; break }
$orgId = (Get-VMCOrg -Name $OrgName).Id
$sddcId = (Get-VMCSDDC -Name $SDDCName -Org $OrgName).Id
$lsId = (Get-VMCLogicalNetwork -OrgName $OrgName -SDDCName $SDDCName -LogicalNetworkName $LogicalNetworkName).Id
if(-not $orgId) {
Write-Host -ForegroundColor red "Unable to find Org $OrgName, please verify input"
break
}
if(-not $sddcId) {
Write-Host -ForegroundColor red "Unable to find SDDC $SDDCName, please verify input"
break
}
if(-not $lsId) {
Write-Host -ForegroundColor red "Unable to find SDDC $LogicalNetworkName, please verify input"
break
}
$logicalNetworkService = Get-VmcService com.vmware.vmc.orgs.sddcs.networks.logical
$logicalNetworkService.delete($orgId,$sddcId,$lsId)
}
Function New-VMCLogicalNetwork {
<#
.NOTES
===========================================================================
Created by: Kyle Ruddy
Date: 03/06/2018
Organization: VMware
Blog: https://www.kmruddy.com
Twitter: @kmruddy
===========================================================================
.SYNOPSIS
Creates a new Logical Network
.DESCRIPTION
Creates a new Logical Network
.EXAMPLE
New-VMCLogicalNetwork -OrgName <Org Name> -SDDCName <SDDC Name> -LogicalNetworkName <LogicalNetwork Name> -SubnetMask <Subnet Mask Prefix> -Gateway <Gateway IP Address>
#>
[cmdletbinding(SupportsShouldProcess = $true,ConfirmImpact='High')]
param(
[Parameter(Mandatory=$true)][String]$SDDCName,
[Parameter(Mandatory=$true)][String]$OrgName,
[Parameter(Mandatory=$true)][String]$LogicalNetworkName,
[Parameter(Mandatory=$true)][String]$SubnetMask,
[Parameter(Mandatory=$true)][String]$Gateway
)
if (-not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect"; break }
$orgId = (Get-VMCOrg -Name $OrgName).Id
$sddcId = (Get-VMCSDDC -Name $SDDCName -Org $OrgName).Id
if(-not $orgId) {
Write-Host -ForegroundColor red "Unable to find Org $OrgName, please verify input"
break
}
if(-not $sddcId) {
Write-Host -ForegroundColor red "Unable to find SDDC $SDDCName, please verify input"
break
}
$logicalNetworkService = Get-VmcService com.vmware.vmc.orgs.sddcs.networks.logical
$logicalNetworkSpec = $logicalNetworkService.Help.create.sddc_network.Create()
$logicalNetworkSpec.name = $LogicalNetworkName
$logicalNetworkSpec.cgw_id = "edge-2"
$logicalNetworkSpec.cgw_name = "SDDC-CGW-1"
$logicalNetworkAddressGroupSpec = $logicalNetworkService.Help.create.sddc_network.subnets.address_groups.Element.Create()
$logicalNetworkAddressGroupSpec.prefix_length = $SubnetMask
$logicalNetworkAddressGroupSpec.primary_address = $Gateway
$logicalNetworkSpec.subnets.address_groups.Add($logicalNetworkAddressGroupSpec) | Out-Null
$logicalNetworkService.create($orgId, $sddcId, $logicalNetworkSpec)
Get-VMCLogicalNetwork -OrgName $OrgName -SDDCName $SDDCName -LogicalNetworkName $LogicalNetworkName
}
Function Get-VMCSDDCSummary {
<#
.NOTES
===========================================================================
Created by: VMware
Date: 09/04/18
Organization: VMware
Blog: https://www.virtuallyghetto.com
Twitter: @lamw
===========================================================================
.SYNOPSIS
Returns a number of useful informational data about a given SDDC within VMC Org
.DESCRIPTION
Returns Version, Create/Expiration Date, Deployment Type, Region, AZ, Instance Type, VPC CIDR & NSX-T
.EXAMPLE
Get-VMCSDDCSummary -Name <SDDC Name> -Org <Org Name>
#>
Param (
[Parameter(Mandatory=$True)]$Org,
[Parameter(Mandatory=$True)]$Name
)
If (-Not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect" } Else {
$orgId = (Get-VMCOrg -Name $Org).Id
$sddcId = (Get-VMCSDDC -Name $Name -Org $Org).Id
$sddcService = Get-VmcService "com.vmware.vmc.orgs.sddcs"
$sddc = $sddcService.get($orgId,$sddcId)
$results = [pscustomobject] @{
Version = $sddc.resource_config.sddc_manifest.vmc_version;
CreateDate = $sddc.created;
ExpirationDate = $sddc.expiration_date;
DeploymentType = $sddc.resource_config.deployment_type;
Region = $sddc.resource_config.region;
AvailabilityZone = $sddc.resource_config.availability_zones;
InstanceType = $sddc.resource_config.sddc_manifest.esx_ami.instance_type;
VpcCIDR = $sddc.resource_config.vpc_info.vpc_cidr;
NSXT = $sddc.resource_config.nsxt;
VPC_VGW = $sddc.resource_config.vpc_info.vgw_id;
}
$results
}
}
Function Get-VMCPublicIP {
<#
.NOTES
===========================================================================
Created by: William LamVPC_VGW
Date: 09/12/2018
Organization: VMware
Blog: http://www.virtuallyghetto.com
Twitter: @lamw
===========================================================================
.SYNOPSIS
Retrieves all public IP Addresses for a given SDDC
.DESCRIPTION
This cmdlet retrieves all public IP Address for a given SDDC
.EXAMPLE
Get-VMCPublicIP -OrgName $OrgName -SDDCName $SDDCName
#>
Param (
[Parameter(Mandatory=$True)]$OrgName,
[Parameter(Mandatory=$True)]$SDDCName
)
If (-Not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect" } Else {
$orgId = (Get-VMCOrg -Name $OrgName).Id
$sddcId = (Get-VMCSDDC -Name $SDDCName -Org $OrgName).Id
$publicIPService = Get-VmcService "com.vmware.vmc.orgs.sddcs.publicips"
$publicIPs = $publicIPService.list($orgId,$sddcId)
$publicIPs | select public_ip, name, allocation_id
}
}
Function New-VMCPublicIP {
<#
.NOTES
===========================================================================
Created by: William Lam
Date: 09/12/2018
Organization: VMware
Blog: http://www.virtuallyghetto.com
Twitter: @lamw
===========================================================================
.SYNOPSIS
Request a new public IP Address for a given SDDC
.DESCRIPTION
This cmdlet requests a new public IP Address for a given SDDC
.EXAMPLE
New-VMCPublicIP -OrgName $OrgName -SDDCName $SDDCName -Description "Test for Randy"
#>
Param (
[Parameter(Mandatory=$True)]$OrgName,
[Parameter(Mandatory=$True)]$SDDCName,
[Parameter(Mandatory=$False)]$Description
)
If (-Not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect" } Else {
$orgId = (Get-VMCOrg -Name $OrgName).Id
$sddcId = (Get-VMCSDDC -Name $SDDCName -Org $OrgName).Id
$publicIPService = Get-VmcService "com.vmware.vmc.orgs.sddcs.publicips"
$publicIPSpec = $publicIPService.Help.create.spec.Create()
$publicIPSpec.count = 1
$publicIPSpec.names = @($Description)
Write-Host "Requesting a new public IP Address for your SDDC ..."
$results = $publicIPService.create($orgId,$sddcId,$publicIPSpec)
}
}
Function Remove-VMCPublicIP {
<#
.NOTES
===========================================================================
Created by: William Lam
Date: 09/12/2018
Organization: VMware
Blog: http://www.virtuallyghetto.com
Twitter: @lamw
===========================================================================
.SYNOPSIS
Removes a specific public IP Addresses for a given SDDC
.DESCRIPTION
This cmdlet removes a specific public IP Address for a given SDDC
.EXAMPLE
Remove-VMCPublicIP -OrgName $OrgName -SDDCName $SDDCName -AllocationId "eipalloc-0567acf34e436c01f"
#>
Param (
[Parameter(Mandatory=$True)]$OrgName,
[Parameter(Mandatory=$True)]$SDDCName,
[Parameter(Mandatory=$True)]$AllocationId
)
If (-Not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect" } Else {
$orgId = (Get-VMCOrg -Name $OrgName).Id
$sddcId = (Get-VMCSDDC -Name $SDDCName -Org $OrgName).Id
$publicIPService = Get-VmcService "com.vmware.vmc.orgs.sddcs.publicips"
Write-Host "Deleting public IP Address with ID $AllocationId ..."
$results = $publicIPService.delete($orgId,$sddcId,$AllocationId)
}
}
Function Set-VMCSDDC {
<#
.NOTES
===========================================================================
Created by: William Lam
Date: 01/12/2019
Organization: VMware
Blog: http://www.virtuallyghetto.com
Twitter: @lamw
===========================================================================
.SYNOPSIS
Rename an SDDC
.DESCRIPTION
This cmdlet renames an SDDC
.EXAMPLE
Set-VMCSDDC -SDDC $SDDCName -OrgName $OrgName -Name $NewSDDCName
#>
Param (
[Parameter(Mandatory=$True)]$SDDCName,
[Parameter(Mandatory=$True)]$OrgName,
[Parameter(Mandatory=$True)]$Name
)
If (-Not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect" } Else {
$sddc = Get-VMCSDDC -Org $OrgName -Name $SDDCName
if($sddc) {
$sddcService = Get-VmcService com.vmware.vmc.orgs.sddcs
$renameSpec = $sddcService.help.patch.sddc_patch_request.Create()
$renameSpec.name = $Name
Write-Host "`nRenaming SDDC `'$SDDCName`' to `'$Name`' ...`n"
$results = $sddcService.patch($sddc.org_id,$sddc.id,$renameSpec)
}
}
}
Function New-VMCPublicIP {
<#
.NOTES
===========================================================================
Created by: William Lam
Date: 09/12/2018
Organization: VMware
Blog: http://www.virtuallyghetto.com
Twitter: @lamw
===========================================================================
.SYNOPSIS
Request a new public IP Address for a given SDDC
.DESCRIPTION
This cmdlet requests a new public IP Address for a given SDDC
.EXAMPLE
New-VMCPublicIP -OrgName $OrgName -SDDCName $SDDCName -Description "Test for Randy"
#>
Param (
[Parameter(Mandatory=$True)]$OrgName,
[Parameter(Mandatory=$True)]$SDDCName,
[Parameter(Mandatory=$False)]$Description
)
If (-Not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect" } Else {
$orgId = (Get-VMCOrg -Name $OrgName).Id
$sddcId = (Get-VMCSDDC -Name $SDDCName -Org $OrgName).Id
$publicIPService = Get-VmcService "com.vmware.vmc.orgs.sddcs.publicips"
$publicIPSpec = $publicIPService.Help.create.spec.Create()
$publicIPSpec.count = 1
$publicIPSpec.names = @($Description)
Write-Host "Requesting a new public IP Address for your SDDC ..."
$results = $publicIPService.create($orgId,$sddcId,$publicIPSpec)
}
}
Function Remove-VMCPublicIP {
<#
.NOTES
===========================================================================
Created by: William Lam
Date: 09/12/2018
Organization: VMware
Blog: http://www.virtuallyghetto.com
Twitter: @lamw
===========================================================================
.SYNOPSIS
Removes a specific public IP Addresses for a given SDDC
.DESCRIPTION
This cmdlet removes a specific public IP Address for a given SDDC
.EXAMPLE
Remove-VMCPublicIP -OrgName $OrgName -SDDCName $SDDCName -AllocationId "eipalloc-0567acf34e436c01f"
#>
Param (
[Parameter(Mandatory=$True)]$OrgName,
[Parameter(Mandatory=$True)]$SDDCName,
[Parameter(Mandatory=$True)]$AllocationId
)
If (-Not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect" } Else {
$orgId = (Get-VMCOrg -Name $OrgName).Id
$sddcId = (Get-VMCSDDC -Name $SDDCName -Org $OrgName).Id
$publicIPService = Get-VmcService "com.vmware.vmc.orgs.sddcs.publicips"
Write-Host "Deleting public IP Address with ID $AllocationId ..."
$results = $publicIPService.delete($orgId,$sddcId,$AllocationId)
}
}
Function Get-VMCEdge {
<#
.NOTES
===========================================================================
Created by: Luc Dekens
Date: 23/10/2018
Organization: Community
Blog: http://lucd.info
Twitter: @LucD22
===========================================================================
.SYNOPSIS
Returns all the VMC Edges
.DESCRIPTION
Returns all the VMC Edges
.EXAMPLE
Get-VMCEdge -OrgName $orgName -SddcName $SDDCName -EdgeType gatewayServices
#>
Param (
[Parameter(Mandatory=$True)]
[string]$OrgName,
[Parameter(Mandatory=$True)]
[string]$SDDCName,
[ValidateSet('gatewayServices','distributedRouter')]
[string]$EdgeType = ''
)
If (-Not $global:DefaultVMCServers) {
Write-error "No VMC Connection found, please use the Connect-VMC to connect"
}
Else {
$orgId = (Get-VMCOrg -Name $OrgName).Id
$sddcId = (Get-VMCSDDC -Name $SDDCName -Org $OrgName).Id
$edgeService = Get-VmcService -Name 'com.vmware.vmc.orgs.sddcs.networks.edges'
$index = [long]0
$edges = do{
$edgeData = $edgeService.get($orgId,$sddcId,$EdgeType,'',$index)
$edgeData.edge_page.data | Sort-Object -Property id
$index = $index + $edgeData.edge_page.paging_info.page_size
}
until($index -ge $edgeData.paging_info.total_count)
$edges | %{
[pscustomobject]@{
Name = $_.Name
Id = $_.id
Type = $_.edge_type
State = $_.state
Status = $_.edge_status
VNics = $_.number_of_connected_vnics
TenantId = $_.tenant_id
}
}
}
}
Function Get-VMCEdgeStatus {
<#
.NOTES
===========================================================================
Created by: Luc Dekens
Date: 23/10/2018
Organization: Community
Blog: http://lucd.info
Twitter: @LucD22
===========================================================================
.SYNOPSIS
Returns the status of the gateway
.DESCRIPTION
Retrieve the status of the specified management or compute gateway (NSX Edge).
.EXAMPLE
Get-VMCEdgeStatus -OrgName $orgName -SddcName $SDDCName -Edge $EdgeName
#>
Param (
[Parameter(Mandatory=$True)]
[string]$OrgName,
[Parameter(Mandatory=$True)]
[string]$SDDCName,
[Parameter(Mandatory=$True)]
[string]$EdgeName
)
If (-Not $global:DefaultVMCServers) {
Write-error "No VMC Connection found, please use the Connect-VMC to connect"
}
Else {
$orgId = (Get-VMCOrg -Name $OrgName).Id
$sddcId = (Get-VMCSDDC -Name $SDDCName -Org $OrgName).Id
$edgeId = Get-VMCEdge -SDDCName $SDDCName -Org $OrgName | where{$_.Name -eq $EdgeName} | select -ExpandProperty Id
$statusService = Get-VmcService -Name 'com.vmware.vmc.orgs.sddcs.networks.edges.status'
$status = $statusService.get($orgId,$sddcId,$edgeId)
$vmStatus = $status.edge_vm_status | %{
[pscustomobject]@{
Name = $_.name
State = $_.edge_VM_status
HAState = $_.ha_state
Index = $_.index
}
}
$featureStatus = $status.feature_statuses | %{
[pscustomobject]@{
Service = $_.service
Status = $_.status
}
}
[pscustomobject]@{
Time = [timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds($status.timestamp/1000))
Status = $status.edge_status
PublishStatus = $status.publish_status
SystemStatus = $_.system_status
NicInUse = $status.ha_vnic_in_use
}
}
}
Function Get-VMCEdgeNic {
<#
.NOTES
===========================================================================
Created by: Luc Dekens
Date: 23/10/2018
Organization: Community
Blog: http://lucd.info
Twitter: @LucD22
===========================================================================
.SYNOPSIS
Returns all interfaces for the gateway
.DESCRIPTION
Retrieve all interfaces for the specified management or compute gateway (NSX Edge).
.EXAMPLE
Get-VMCEdgeNic -OrgName $orgName -SddcName $SDDCName -Edge $EdgeName
#>
Param (
[Parameter(Mandatory=$True)]
[string]$OrgName,
[Parameter(Mandatory=$True)]
[string]$SDDCName,
[Parameter(Mandatory=$True)]
[string]$EdgeName
)
If (-Not $global:DefaultVMCServers) {
Write-error "No VMC Connection found, please use the Connect-VMC to connect"
}
Else {
$orgId = (Get-VMCOrg -Name $OrgName).Id
$sddcId = (Get-VMCSDDC -Name $SDDCName -Org $OrgName).Id
$edgeId = Get-VMCEdge -SDDCName $SDDCName -Org $OrgName | where{$_.Name -eq $EdgeName} | select -ExpandProperty Id
$vnicService = Get-VmcService -Name 'com.vmware.vmc.orgs.sddcs.networks.edges.vnics'
$vnicService.get($orgId,$sddcId,$edgeId) | select -ExpandProperty vnics | %{
[pscustomobject]@{
Label = $_.label
Name = $_.Name
Type = $_.type
Index = $_.index
IsConnected = $_.is_connected
Portgroup = $_.portgroup_name
}
}
}
}
Function Get-VMCEdgeNicStat {
<#
.NOTES
===========================================================================
Created by: Luc Dekens
Date: 23/10/2018
Organization: Community
Blog: http://lucd.info
Twitter: @LucD22
===========================================================================
.SYNOPSIS
Returns statistics for the gateway interfaces
.DESCRIPTION
Retrieve interface statistics for a management or compute gateway (NSX Edge).
.EXAMPLE
Get-VMCEdgeNicStat -OrgName $orgName -SddcName $SDDCName -Edge $EdgeName
#>
[CmdletBinding(DefaultParameterSetName='Default')]
Param (
[Parameter(Mandatory=$True)]
[string]$OrgName,
[Parameter(Mandatory=$True)]
[string]$SDDCName,
[Parameter(Mandatory=$True)]
[string]$EdgeName
# [DateTime]$Start,
# [DateTime]$Finish
)
If (-Not $global:DefaultVMCServers) {
Write-error "No VMC Connection found, please use the Connect-VMC to connect"
}
Else {
$orgId = (Get-VMCOrg -Name $OrgName).Id
$sddcId = (Get-VMCSDDC -Name $SDDCName -Org $OrgName).Id
$edgeId = Get-VMCEdge -SDDCName $SDDCName -Org $OrgName | where{$_.Name -eq $EdgeName} | select -ExpandProperty Id
# $epoch = Get-Date 01/01/1970
#
# if($start){
# $startEpoch = (New-TimeSpan -Start $epoch -End $Start.ToUniversalTime()).TotalMilliseconds
# }
# if($Finish){
# $finishEpoch = (New-TimeSpan -Start $epoch -End $Finish.ToUniversalTime()).TotalMilliseconds
# }
$vnicStatService = Get-VmcService -Name 'com.vmware.vmc.orgs.sddcs.networks.edges.statistics.interfaces'
# $stats = $vnicStatService.get($orgId,$sddcId,$edgeId,[long]$startEpoch,[long]$finishEpoch)
$stats = $vnicStatService.get($orgId,$sddcId,$edgeId)
$stats.data_dto | Get-Member -MemberType NoteProperty | where{$_.Name -ne 'Help'} | %{$_.Name} | %{
$stats.data_dto."$_" | %{
[pscustomobject]@{
vNIC = $_.vnic
Timestamp = [timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds($_.timestamp))
In = $_.in
Out = $_.out
Unit = 'Kbps'
Interval = $stats.meta_dto.interval
}
}
}
}
}
Function Get-VMCEdgeUplinkStat {
<#
.NOTES
===========================================================================
Created by: Luc Dekens
Date: 23/10/2018
Organization: Community
Blog: http://lucd.info
Twitter: @LucD22
===========================================================================
.SYNOPSIS
Returns statistics for the uplink interfaces
.DESCRIPTION
Retrieve uplink interface statistics for a management or compute gateway (NSX Edge).
.EXAMPLE
Get-VMCEdgeUplinkStat -OrgName $orgName -SddcName $SDDCName -Edge $EdgeName
#>
Param (
[Parameter(Mandatory=$True)]
[string]$OrgName,
[Parameter(Mandatory=$True)]
[string]$SDDCName,
[Parameter(Mandatory=$True)]
[string]$EdgeName
# [DateTime]$Start,
# [DateTime]$Finish
)
If (-Not $global:DefaultVMCServers) {
Write-error "No VMC Connection found, please use the Connect-VMC to connect"
}
Else {
$orgId = (Get-VMCOrg -Name $OrgName).Id
$sddcId = (Get-VMCSDDC -Name $SDDCName -Org $OrgName).Id
$edgeId = Get-VMCEdge -SDDCName $SDDCName -Org $OrgName | where{$_.Name -eq $EdgeName} | select -ExpandProperty Id
# $epoch = Get-Date 01/01/1970
#
# if($start){
# $startEpoch = (New-TimeSpan -Start $epoch -End $Start.ToUniversalTime()).TotalMilliseconds
# }
# if($Finish){
# $finishEpoch = (New-TimeSpan -Start $epoch -End $Finish.ToUniversalTime()).TotalMilliseconds
# }
$uplinkStatService = Get-VmcService -Name 'com.vmware.vmc.orgs.sddcs.networks.edges.statistics.interfaces.uplink'
# $stats = $uplinkStatService.get($orgId,$sddcId,$edgeId,[long]$startEpoch,[long]$finishEpoch)
$stats = $uplinkStatService.get($orgId,$sddcId,$edgeId)
$stats.data_dto | Get-Member -MemberType NoteProperty | where{$_.Name -ne 'Help'} | %{$_.Name} | %{
if($stats.data_dto."$_".Count -ne 0){
$stats.data_dto."$_" | %{
[pscustomobject]@{
vNIC = $_.vnic
Timestamp = [timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds($_.timestamp))
In = $_.in
Out = $_.out
Unit = 'Kbps'
Interval = $stats.meta_dto.interval
}
}
}
}
}
}
Function New-VMCSDDCCluster {
<#
.NOTES
===========================================================================
Created by: Kyle Ruddy
Date: 03/16/2019
Organization: VMware
Blog: https://www.kmruddy.com
Twitter: @kmruddy
===========================================================================
.SYNOPSIS
Creates a new cluster for the designated SDDC
.DESCRIPTION
Creates a new cluster
.EXAMPLE
New-VMCSDDCCluster -OrgName <Org Name> -SDDCName <SDDC Name> -HostCount 1 -CPUCoreCount 8
#>
[cmdletbinding(SupportsShouldProcess = $true,ConfirmImpact='High')]
param(
[Parameter(Mandatory=$true)][String]$OrgName,
[Parameter(Mandatory=$true)][String]$SDDCName,
[Parameter(Mandatory=$true)][Int]$HostCount,
[Parameter(Mandatory=$true)][ValidateSet("8","16","32")]$CPUCoreCount
)
if (-not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect"; break }
$orgId = Get-VMCOrg -Name $OrgName | Select-Object -ExpandProperty Id
$sddcId = Get-VMCSDDC -Name $SDDCName -Org $OrgName | Select-Object -ExpandProperty Id
if(-not $orgId) {
Write-Host -ForegroundColor red "Unable to find Org $OrgName, please verify input"
break
}
if(-not $sddcId) {
Write-Host -ForegroundColor red "Unable to find SDDC $SDDCName, please verify input"
break
}
$sddcClusterSvc = Get-VmcService -Name com.vmware.vmc.orgs.sddcs.clusters
$sddcClusterCreateSpec = $sddcClusterSvc.Help.create.cluster_config.Create()
$sddcClusterCreateSpec.host_cpu_cores_count = $CPUCoreCount
$sddcClusterCreateSpec.num_hosts = $HostCount
$sddcClusterTask = $sddcClusterSvc.Create($org.Id, $sddc.Id, $sddcClusterCreateSpec)
$sddcClusterTask | Select-Object Id,Task_Type,Status,Created | Format-Table
}
Function Get-VMCSDDCCluster {
<#
.NOTES
===========================================================================
Created by: Kyle Ruddy
Date: 03/16/2019
Organization: VMware
Blog: https://www.kmruddy.com
Twitter: @kmruddy
===========================================================================
.SYNOPSIS
Retreives cluster information for the designated SDDC
.DESCRIPTION
Lists cluster information for an SDDC
.EXAMPLE
Get-VMCSDDCCluster -OrgName <Org Name> -SDDCName <SDDC Name> -HostCount 1 -CPUCoreCount 8
#>
[cmdletbinding(SupportsShouldProcess = $true,ConfirmImpact='Low')]
param(
[Parameter(Mandatory=$true)][String]$OrgName,
[Parameter(Mandatory=$true)][String]$SddcName
)
if (-not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect"; break }
$orgId = Get-VMCOrg -Name $OrgName | Select-Object -ExpandProperty Id
$sddcId = Get-VMCSDDC -Name $SDDCName -Org $OrgName | Select-Object -ExpandProperty Id
if(-not $orgId) {
Write-Host -ForegroundColor red "Unable to find Org $OrgName, please verify input"
break
}
if(-not $sddcId) {
Write-Host -ForegroundColor red "Unable to find SDDC $SDDCName, please verify input"
break
}
$clusterOutput = @()
$sddcClusters = Get-VMCSDDC -Org $OrgName -Name $SDDCName | Select-Object -ExpandProperty resource_config | Select-Object -ExpandProperty clusters
foreach ($c in $sddcClusters) {
$tempCluster = "" | Select-Object Id, Name, State
$tempCluster.Id = $c.cluster_id
$tempCluster.Name = $c.cluster_name
$tempCluster.State = $c.cluster_state
$clusterOutput += $tempCluster
}
return $clusterOutput
}
Function New-VMCSDDCCluster {
<#
.NOTES
===========================================================================
Created by: Kyle Ruddy
Date: 03/16/2019
Organization: VMware
Blog: https://www.kmruddy.com
Twitter: @kmruddy
===========================================================================
.SYNOPSIS
Creates a new cluster for the designated SDDC
.DESCRIPTION
Creates a new cluster
.EXAMPLE
New-VMCSDDCCluster -OrgName <Org Name> -SDDCName <SDDC Name> -HostCount 1 -CPUCoreCount 8
#>
[cmdletbinding(SupportsShouldProcess = $true,ConfirmImpact='High')]
param(
[Parameter(Mandatory=$true)][String]$OrgName,
[Parameter(Mandatory=$true)][String]$SddcName,
[Parameter(Mandatory=$true)][Int]$HostCount,
[Parameter(Mandatory=$false)][ValidateSet("8","16","36","48")]$CPUCoreCount
)
if (-not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect"; break }
$orgId = Get-VMCOrg -Name $OrgName | Select-Object -ExpandProperty Id
$sddcId = Get-VMCSDDC -Name $SDDCName -Org $OrgName | Select-Object -ExpandProperty Id
if(-not $orgId) {
Write-Host -ForegroundColor red "Unable to find Org $OrgName, please verify input"
break
}
if(-not $sddcId) {
Write-Host -ForegroundColor red "Unable to find SDDC $SDDCName, please verify input"
break
}
$sddcClusterSvc = Get-VmcService -Name com.vmware.vmc.orgs.sddcs.clusters
$sddcClusterCreateSpec = $sddcClusterSvc.Help.create.cluster_config.Create()
$sddcClusterCreateSpec.host_cpu_cores_count = $CPUCoreCount
$sddcClusterCreateSpec.num_hosts = $HostCount
$sddcClusterTask = $sddcClusterSvc.Create($org.Id, $sddc.Id, $sddcClusterCreateSpec)
$sddcClusterTask | Select-Object Id,Task_Type,Status,Created | Format-Table
}
Function Remove-VMCSDDCCluster {
<#
.NOTES
===========================================================================
Created by: Kyle Ruddy
Date: 03/16/2019
Organization: VMware
Blog: https://www.kmruddy.com
Twitter: @kmruddy
===========================================================================
.SYNOPSIS
Removes a specified cluster from the designated SDDC
.DESCRIPTION
Deletes a cluster from an SDDC
.EXAMPLE
Remove-VMCSDDCCluster -OrgName <Org Name> -SDDCName <SDDC Name> -Cluster <Cluster Name>
#>
[cmdletbinding(SupportsShouldProcess = $true,ConfirmImpact='High')]
param(
[Parameter(Mandatory=$true)][String]$OrgName,
[Parameter(Mandatory=$true)][String]$SDDCName,
[Parameter(Mandatory=$true)][String]$ClusterName
)
if (-not $global:DefaultVMCServers) { Write-error "No VMC Connection found, please use the Connect-VMC to connect"; break }
$orgId = Get-VMCOrg -Name $OrgName | Select-Object -ExpandProperty Id
$sddcId = Get-VMCSDDC -Name $SDDCName -Org $OrgName | Select-Object -ExpandProperty Id
$clusterId = Get-VMCSDDCCluster -SddcName $SDDCName -OrgName $OrgName | Where-Object {$_.Name -eq $ClusterName} | Select-Object -ExpandProperty Id
if(-not $orgId) {
Write-Host -ForegroundColor red "Unable to find Org $OrgName, please verify input"
break
}
if(-not $sddcId) {
Write-Host -ForegroundColor red "Unable to find SDDC $SDDCName, please verify input"
break
}
if(-not $clusterId) {
Write-Host -ForegroundColor red "Unable to find cluster $ClusterName, please verify input"
break
}
$sddcClusterTask = $sddcClusterSvc.Delete($orgId, $sddcId, $clusterId)
$sddcClusterTask | Select-Object Id,Task_Type,Status,Created | Format-Table
}
Export-ModuleMember -Function 'Get-VMCCommand', 'Connect-VMCVIServer', 'Get-VMCOrg', 'Get-VMCSDDC',
'Get-VMCTask', 'Get-VMCSDDCDefaultCredential', 'Get-VMCSDDCPublicIP', 'Get-VMCVMHost',
'Get-VMCSDDCVersion', 'Get-VMCFirewallRule', 'Export-VMCFirewallRule', 'Import-VMCFirewallRule',
'Remove-VMCFirewallRule', 'Get-VMCLogicalNetwork', 'Remove-VMCLogicalNetwork', 'New-VMCLogicalNetwork',
'Get-VMCSDDCSummary', 'Get-VMCPublicIP', 'New-VMCPublicIP', 'Remove-VMCPublicIP', 'Set-VMCSDDC',
'Get-VMCEdge', 'Get-VMCEdgeNic', 'Get-VMCEdgeStatus', 'Get-VMCEdgeNicStat', 'Get-VMCEdgeUplinkStat',
'Get-VMCSDDCCluster', 'New-VMCSDDCCluster', 'Remove-VMCSDDCCluster'