Vmware Cloud Partner Navigator Example Module

This commit is contained in:
Jake Robinson
2021-04-09 00:34:58 -04:00
parent bffb3f7630
commit 8db1fe37a2

View File

@@ -0,0 +1,572 @@
<#
.SYNOPSIS
Connects to VMware Cloud Partner Navigator
.DESCRIPTION
Uses refresh token to call the Navigator IAM API and get an access token that is stored in $Global:NavigatorConnection.accessToken
.PARAMETER RefreshToken
VMware Cloud Services Refresh Token
.PARAMETER Server
Used by VMware to connect to internal development instances of Navigator.
.INPUTS
None.
.OUTPUTS
None. Access Token is written to $Global:NavigatorConnection
.EXAMPLE
PS> Connect-Navigator -RefreshToken 12312313134123141234234525234523412341234234252451234123123123
#>
function Connect-Navigator {
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)]
[String]$RefreshToken,
[String]$server = "https://console.navigator.vmware.com"
)
begin {
}
process {
$connectionParams = @{
uri = "$($server)/cphub/api/auth/v1/authn/accesstoken";
userAgent = "Navigator-PowerShell";
contentType = "application/json";
headers = @{
"X-XSRF-TOKEN" = "j4QPhAAZ-jwDjc4uI1Z8URuXJTqa9U4Y23rg";
};
body = @{refreshToken = $refreshToken} | ConvertTo-Json;
method = "POST";
}
try {
$response = Invoke-WebRequest @connectionParams
$Global:NavigatorConnection = @{server = $server; accessToken = (ConvertFrom-Json $response.Content).accessToken}
}
catch {
Write-Host $PSItem.Exception.Message -ForegroundColor RED
}
}
end {
}
}
<#
.SYNOPSIS
Retrieves Navigator Provider and Tenant organizations
.DESCRIPTION
Retrieves Navigator Provider and Tenant organizations
.PARAMETER OrgId
Specifies a specific OrgId to retrieve
.PARAMETER DisplayName
Retrieves orgs with specified display name
.PARAMETER OrgType
Can be used to search for "PROVIDER" or "TENANT" org types
.INPUTS
None.
.OUTPUTS
Navigator Org Objects
.EXAMPLE
PS> Get-NavigatorOrg -DisplayName "Foo" -OrgType "TENANT"
.EXAMPLE
PS> Get-NavigatorOrg -OrgId c28e8c89-d03d-4572-9be1-5f13edb82af6
#>
function Get-NavigatorOrg {
[CmdletBinding(DefaultParameterSetName = 'byNameAndType')]
param (
# Parameter help description
[Parameter(ParameterSetName = 'byOrgId')]
[String]$OrgID,
# Parameter help description
[Parameter(ParameterSetName = 'byNameAndType',Position=0)]
[String]$DisplayName,
# Parameter help description
[Parameter(ParameterSetName = 'byNameAndType')]
[String]$OrgType
)
begin {
}
process {
$headers = @{
"csp-auth-token" = $Global:NavigatorConnection.accessToken;
}
if ($orgId) {
try {
$orgData = Invoke-WebRequest `
-Uri "$($Global:NavigatorConnection.server)/cphub/api/core/v1/mgmt/orgs/$($orgId)/" `
-Headers $headers
Write-Verbose $orgData
if ($orgData) {
$content = ConvertFrom-Json $orgData.Content
$content
}
}
catch {
Write-Host $PSItem.Exception.Message -ForegroundColor RED
}
}
else {
$response = Invoke-WebRequest `
-Uri "$($Global:NavigatorConnection.server)/cphub/api/auth/v1/loggedinuser/orgs" `
-Headers $headers
$orgIDs = (ConvertFrom-Json $response.Content).loggedInUserOrgs
foreach ($orgID in $orgIDs) {
$orgData = $null
try {
$orgData = Invoke-WebRequest `
-Uri "$($Global:NavigatorConnection.server)/cphub/api/core/v1/mgmt/orgs/$($orgID)/" `
-Headers $headers
Write-Verbose $orgData
if ($orgData) {
$content = ConvertFrom-Json $orgData.Content
if ($orgType) {
$content = $content | Where-Object orgType -eq $orgType
}
if ($DisplayName) {
$content = $content | Where-Object DisplayName -like $DisplayName
}
$content | Add-Member -NotePropertyName orgId -NotePropertyValue $content.id
$content
}
}
catch {
#Write-Host $PSItem.Exception.Message -ForegroundColor RED
# Had to comment this catch out because we get 404s for orgs we belong to that are not navigator orgs.
}
}
}
}
end {
}
}
<#
.SYNOPSIS
Gets support requests for a given organization
.DESCRIPTION
Gets support requests for a given organization
.PARAMETER OrgId
Specifies a specific OrgID for which to retrieve support requests
.INPUTS
Navigator Org Object
.OUTPUTS
Navigator Support Ticket Object
.EXAMPLE
PS> Get-NavigatorSupportRequest -OrgId d7f32037-b9b5-41ec-9394-ba3edbbc9cac
.EXAMPLE
PS> Get-NavigatorOrg -OrgId d7f32037-b9b5-41ec-9394-ba3edbbc9cac | Get-NavigatorSupportRequest
#>
function Get-NavigatorSupportRequest {
[CmdletBinding()]
param (
# Parameter help description
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true)]
[String]
$orgID
)
begin {
}
process {
$tickets = @()
$headers = @{
"csp-auth-token" = $Global:NavigatorConnection.accessToken;
}
try {
$response = Invoke-WebRequest `
-Headers $headers `
-Uri "$($Global:NavigatorConnection.server)/cphub/api/support/v1/orgs/$orgID/support-requests?includeTenantOrgs=true&pageLimit=100&pageStart=1&userTicketsOnly=false"
Write-Verbose $response
#Write-Verbose ($response.Content | ConvertFrom-Json).supportTickets
if ($response.Content) {
$tickets += ($response.Content | ConvertFrom-Json).supportTickets
}
}
catch {
Write-Host $PSItem.Exception.Message -ForegroundColor RED
}
$tickets
}
end {
}
}
function Get-NavigatorSupportRequestMetadata {
[CmdletBinding()]
param (
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true)]
[String]$ParentOrgId,
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true)]
[String]$OrgId
)
begin {
}
process {
$headers = @{
"csp-auth-token" = $Global:NavigatorConnection.accessToken;
}
try {
$response = Invoke-WebRequest `
-Headers $headers `
-Uri "$($Global:NavigatorConnection.server)/cphub/api/support/v1/orgs/$ParentOrgId/support-requests/metadata?tenantId=$OrgId"
Write-Verbose $response
$jsonResponse = $response | ConvertFrom-Json
}
catch {
Write-Host $PSItem.Exception.Message -ForegroundColor RED
}
}
end {
}
}
<#
.SYNOPSIS
Gets subscriptions for a given organization
.DESCRIPTION
Gets subscriptions for a given organization
.PARAMETER OrgId
Specifies a specific OrgID for which to retrieve subscriptions
.INPUTS
Navigator Org Object
.OUTPUTS
Navigator Subscription Object
.EXAMPLE
PS> Get-NavigatorSubscriptions -OrgId d7f32037-b9b5-41ec-9394-ba3edbbc9cac
.EXAMPLE
PS> Get-NavigatorOrg -OrgId d7f32037-b9b5-41ec-9394-ba3edbbc9cac | Get-NavigatorSubscriptions
#>
function Get-NavigatorSubscriptions {
[CmdletBinding()]
param (
[String]$OrgId
)
begin {
}
process {
$headers = @{
"csp-auth-token" = $Global:NavigatorConnection.accessToken;
}
try {
$response = Invoke-WebRequest `
-Headers $headers `
-Uri "$($Global:NavigatorConnection.server)/cphub/api/billing/v1/orgs/$OrgId/subscriptions?allTenants=true"
Write-Verbose $response
$response | ConvertFrom-Json
}
catch {
Write-Host $PSItem.Exception.Message -ForegroundColor RED
}
}
end {
}
}
<#
.SYNOPSIS
Gets usage report for a given organization
.DESCRIPTION
Gets usage report for a given organization
.PARAMETER OrgId
Specifies a specific OrgID for which to retrieve usage
.INPUTS
Navigator Org Object
.OUTPUTS
Navigator usage report Object
.EXAMPLE
PS> Get-NavigatorUsageReport -OrgId d7f32037-b9b5-41ec-9394-ba3edbbc9cac
.EXAMPLE
PS> Get-NavigatorOrg -OrgId d7f32037-b9b5-41ec-9394-ba3edbbc9cac | Get-NavigatorUsageReport
#>
function Get-NavigatorUsageReport {
[CmdletBinding()]
param (
[String]$OrgId
)
begin {
}
process {
$headers = @{
"csp-auth-token" = $Global:NavigatorConnection.accessToken;
}
try {
$response = Invoke-WebRequest `
-Headers $headers `
-Uri "$($Global:NavigatorConnection.server)/cphub/api/billing/v1/orgs/$OrgId/usage-report?abd=false&detailView=false&providerReport=false"
Write-Verbose $response
$response | ConvertFrom-Json
}
catch {
Write-Host $PSItem.Exception.Message -ForegroundColor RED
}
}
end {
}
}
<#
.SYNOPSIS
Creates a new Customer Organization in VMware Cloud Partner Navigator
.DESCRIPTION
Creates a new Customer Organization in VMware Cloud Partner Navigator
-City "Zionsville" -State "IN" -Zip "46077" -Country "US" -Domain "example.com" -verbose
.PARAMETER OrgId
Specifies a specific OrgID for which to retrieve subscriptions
.PARAMETER DisplayName
Specifies the short name for the organization
.PARAMETER CompanyName
Full company name of the organization
.PARAMETER AddressLine1
Address for the organization
.PARAMETER AddressLine2
Additional address line for the organization if needed
.PARAMETER City
City of the organization
.PARAMETER State
State of the organization
.PARAMETER Zip
Zip Code of the organizaiton
.PARAMETER Country
2-letter country code of the organization
.PARAMETER Domain
Domain name of the organization
.PARAMETER OrgId
.INPUTS
Navigator Provider Org Object
.OUTPUTS
Navigator Customer Record Object
.EXAMPLE
PS> New-NavigatorCustomer -OrgId d7f32037-b9b5-41ec-9394-ba3edbbc9cac -DisplayName Neptune -CompanyName Neptune -AddressLine1 "123 Fake St." -City "Zionsville" -State "IN" -Zip "46077" -Country "US" -Domain "example.com" -verbose
.EXAMPLE
PS> Get-NavigatorOrg -OrgId d7f32037-b9b5-41ec-9394-ba3edbbc9cac | New-NavigatorCustomer -DisplayName Neptune -CompanyName Neptune -AddressLine1 "123 Fake St." -City "Zionsville" -State "IN" -Zip "46077" -Country "US" -Domain "example.com" -verbose
#>
function New-NavigatorCustomer {
[CmdletBinding()]
param (
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true)]
[String]$OrgId,
[Parameter(Mandatory=$true)]
[String]$DisplayName,
[Parameter(Mandatory=$true)]
[String]$CompanyName,
[String]$TenantType = "DEFAULT",
# [String]$AdminUserEmail, # Call fails if this is provided.
[Parameter(Mandatory=$true)]
[String]$Domain,
[Parameter(Mandatory=$true)]
[String]$AddressLine1,
[String]$AddressLine2 = '',
[Parameter(Mandatory=$true)]
[String]$City,
[Parameter(Mandatory=$true)]
[String]$State,
[Parameter(Mandatory=$true)]
[String]$Zip,
[Parameter(Mandatory=$true)]
[String]$Country, # Country list has to come from /csp/gateway/iam/vmwid/api/user-registration/configuration/countries
[String]$Tag = ''
)
begin {
if ($Country.Length -ne 2) {
Write-Error -Message "Please use 2 letter country code." -ErrorAction Stop
}
}
process {
$headers = @{
"csp-auth-token" = $Global:NavigatorConnection.accessToken
"Content-Type" = "application/json"
}
$body = @{
'displayName' = $DisplayName
'companyName' = $CompanyName
'tenantType' = $TenantType
'adminUserEmail' = ""
'domain' = $Domain
'addressLine1' = $AddressLine1
'addressLine2' = $AddressLine2
'city' = $City
'state' = $State
'zip' = $Zip
'country' = $Country
'tag' = $Tag
}
try {
Write-Verbose ($body | ConvertTo-Json)
$response = Invoke-WebRequest `
-Headers $headers `
-Uri "$($Global:NavigatorConnection.server)/cphub/api/core/v1/mgmt/orgs/$OrgId/tenants" `
-Method "POST" `
-Body ($body | ConvertTo-Json)
Write-Verbose $response
$response | ConvertFrom-Json
}
catch {
Write-Host $PSItem.Exception.Message -ForegroundColor RED
}
}
end {
}
}
### GET CMDLET TEMPLATE SNIPPET
### COPY AND PASTE THIS FOR CREATING NEW GET CMDLET
# function Get-Navigator... {
# [CmdletBinding()]
# param (
# [String]$OrgId
# )
# begin {
# }
# process {
# $headers = @{
# "csp-auth-token" = $Global:NavigatorConnection.accessToken;
# }
# try {
# $response = Invoke-WebRequest `
# -Headers $headers `
# -Uri "$($Global:NavigatorConnection.server)/cphub/api/..."
# Write-Verbose $response
# $response | ConvertFrom-Json
# }
# catch {
# Write-Host $PSItem.Exception.Message -ForegroundColor RED
# }
# }
# end {
# }
# }
Export-ModuleMember *