From 2a5eff4fd1195164fef8c1fd461afc808946d910 Mon Sep 17 00:00:00 2001 From: William Lam Date: Tue, 28 May 2019 06:20:26 -0700 Subject: [PATCH] Adding DRaaS Module + VMC module typo fix --- Modules/VMware.DRaaS/VMware.DRaaS.psd1 | Bin 0 -> 7718 bytes Modules/VMware.DRaaS/VMware.DRaaS.psm1 | 256 +++++++++++++++++++++++++ Modules/VMware.VMC/VMware.VMC.psm1 | 7 +- 3 files changed, 260 insertions(+), 3 deletions(-) create mode 100755 Modules/VMware.DRaaS/VMware.DRaaS.psd1 create mode 100644 Modules/VMware.DRaaS/VMware.DRaaS.psm1 diff --git a/Modules/VMware.DRaaS/VMware.DRaaS.psd1 b/Modules/VMware.DRaaS/VMware.DRaaS.psd1 new file mode 100755 index 0000000000000000000000000000000000000000..fd5ab0692124655225f62337b7c4fa3c07651ab6 GIT binary patch literal 7718 zcmeI1Yfl?T6o%(BzhWgm098XmN|L5hr63y;Btj98v|oLtZt$hHfkajQdfWGz<6&mJ zYiv-WR#j!;_3qA`%X{v_Uw^K**%jkRW~Yg;s$?vwjL*Bfzbh}SE3t?x*sC0_j{ zG=`!IjVJDzd+eV2?;ZDYwrfo^|Ilxf;mozfzvo6?lYXYDY1P!*f!E?wNyo0<87d87 zG12apo zSthg9HLdGwH5m0I8R%85E*uqB z&W(Q>!#UTH_z^i5(vB=ZE-=sU&(M#VVG;iDo~L7cH-+q$s6G{@#BMQ{O$wm}E=3{( z(M7JoKgP-%c*%BRi@JXo<2^)4vR*dE znvN%;b>n3{6NY#%`lL}95qv8-kmW+W2l~$OC=_qR8uFj&yXB<>1>#{-aTBt}R)WV{ zPpc=tB1;q=v9Zvr#syCt2vKAP>1yeTJChMvum+LY^S_qkRYkKp6Yb7rq3E}{HCL0G z__SJfUy0WjAn|5KG0J5&k1_N$(EoaRR9oS`+MqM>2in+)ys_<$RV&W*>p*YFavgaX zdF;czJ!o4y&TlI%(Mk*iAH=gQMywKFiyN60zYIMLnF`OX^29=MM0WWgD&(y~cWI5I z!VX07lXSA$Sl5%O^y}!mtlgKvG)PR$_w}*LPxnM5Ug>(_H5&W8Mok1^vO-POR=kvAU3hu{|}Hu9CipUvzu)Ky+DX8G16Zw{=XxV=m;YL#-zY z@a2K8Y@jsoKEnD!RH*WXm+en!hiU}P(BDQGP2*G1POCs#;m`st^GiL04wJ`{gCBmZvOtK23z_0NFQ{6X@4>yx&B-*>psuq>sgJds01MkO7uz2=AA#p0fs#4F#OF0V3WZ=#;O%|{?pcaI=ows>sl)j~V$BIm^pkn*Y z7f-csel~rab*W`fvAC!11!?AWD96r$kAT>BBe7}PaUUg}Ptvbe=N$5NsOET^ zWks|b&z{=}29c-YKp z6o_HG+$IXB)AiWg8s>BBTC6@1TS$jiRvC)2pqtzBBuz@~S{T|&;3KQiU zB;U}CjBZtL&MMxRp&wGrBruzHSRHR`$5>ze&*ic~sx`dT_z>vA8KKP`gm zqSf+e2|3MGBs!88Sk|?QgXWi#Fs(TF2d987O;a|ZkXgyPWY9&q-DFE^N#s?oDDhn` zM_TtED#L*!CF@5XW&U(eJ@wRfDn{MlSHo*ZK8H86NU&3=9Vt#)=L6jlbB@l2QV|LW@t$np$nRNT&jDGfF_YgowidvP6nbU=hg%p zB8yW*s=U>GdS7sdE48?gEEYAavH1u6gT&#QOP+gRSQDtLE~6f4E|Y z#kBCOjaj7+J3i|fyY__yx!d^VQCH3t{MTsF&NN%b*si7l=Qm#Wk^X}-@SVN+_TjB8 z)yP{7ncquPurt*Z9-R1fT|-s%QpnnA2v2(IrQ@7|7jX7w69VX`GmA}A%jOnx$xpMa z020g + Param ( + [Parameter(Mandatory=$true)][String]$RefreshToken, + [Parameter(Mandatory=$true)][String]$OrgName, + [Parameter(Mandatory=$true)][String]$SDDCName + ) + + If (-Not $global:DefaultVMCServers.IsConnected) { Write-error "No valid VMC Connection found, please use the Connect-VMC to connect"; break } Else { + $sddcService = Get-VmcService "com.vmware.vmc.orgs.sddcs" + $orgId = (Get-VMCOrg -Name $OrgName).Id + $sddcId = (Get-VMCSDDC -Name $SDDCName -Org $OrgName).Id + $sddc = $sddcService.get($orgId,$sddcId) + + } + + $results = Invoke-WebRequest -Uri "https://console.cloud.vmware.com/csp/gateway/am/api/auth/api-tokens/authorize?refresh_token=$RefreshToken" -Method POST -ContentType "application/json" -UseBasicParsing -Headers @{"csp-auth-token"="$RefreshToken"} + if($results.StatusCode -ne 200) { + Write-Host -ForegroundColor Red "Failed to retrieve Access Token, please ensure your VMC Refresh Token is valid and try again" + break + } + $accessToken = ($results | ConvertFrom-Json).access_token + + $headers = @{ + "csp-auth-token"="$accessToken" + "Content-Type"="application/json" + "Accept"="application/json" + } + $global:draasConnection = new-object PSObject -Property @{ + 'Server' = "https://vmc.vmware.com/vmc/draas/api/orgs/$orgId/sddcs/$sddcId/site-recovery" + 'headers' = $headers + } + $global:draasConnection +} + +Function Get-DRaas { +<# + .NOTES + =========================================================================== + Created by: William Lam + Date: 05/23/2019 + Organization: VMware + Blog: http://www.virtuallyghetto.com + Twitter: @lamw + =========================================================================== + + .SYNOPSIS + Returns information about DRaaS configuration for a given SDDC + .DESCRIPTION + This cmdlet returns information about DRaaS configuration for a given SDDC. Can be used to monitor both activate and deactivate operations. + .EXAMPLE + Get-DRaas +#> + Param ( + [Switch]$Troubleshoot + ) + + If (-Not $global:draasConnection) { Write-error "No DRaaS Connection found, please use Connect-DRaaS" } Else { + $method = "GET" + $draasUrl = $global:draasConnection.Server + $draasVersionUrl = $global:draasConnection.Server + "/versions" + + if($Troubleshoot) { + Write-Host -ForegroundColor cyan "`n[DEBUG] - $METHOD`n$draasUrl`n" + } + + try { + if($PSVersionTable.PSEdition -eq "Core") { + $requests = Invoke-WebRequest -Uri $draasUrl -Method $method -Headers $global:draasConnection.headers -SkipCertificateCheck + } else { + $requests = Invoke-WebRequest -Uri $draasUrl -Method $method -Headers $global:draasConnection.headers + } + } catch { + if($_.Exception.Response.StatusCode -eq "Unauthorized") { + Write-Host -ForegroundColor Red "`nThe CSP session is no longer valid, please re-run the Connect-DRaaS cmdlet to retrieve a new token`n" + break + } else { + Write-Error "Error in retrieving DRaaS Information" + Write-Error "`n($_.Exception.Message)`n" + break + } + } + + if($requests.StatusCode -eq 200) { + $json = ($requests.Content | ConvertFrom-Json) + + $draasId = $json.id; + $draasState = $json.site_recovery_state; + $srmNode = $json.srm_node.ip_address; + $srmNodeState = $json.site_recovery_state; + $vrNode = $json.vr_node.ip_address; + $vrNodeState = $json.vr_node.state; + $draasUrl = $json.draas_h5_url; + + if($srmNodeState -eq "ACTIVATED") { + if($Troubleshoot) { + Write-Host -ForegroundColor cyan "`n[DEBUG] - $METHOD`n$draasVersionUrl`n" + } + + try { + if($PSVersionTable.PSEdition -eq "Core") { + $requests = Invoke-WebRequest -Uri $draasVersionUrl -Method $method -Headers $global:draasConnection.headers -SkipCertificateCheck + } else { + $requests = Invoke-WebRequest -Uri $draasVersionUrl -Method $method -Headers $global:draasConnection.headers + } + } catch { + if($_.Exception.Response.StatusCode -eq "Unauthorized") { + Write-Host -ForegroundColor Red "`nThe CSP session is no longer valid, please re-run the Connect-DRaaS cmdlet to retrieve a new token`n" + break + } else { + Write-Error "Error in retrieving DRaaS Information" + Write-Error "`n($_.Exception.Message)`n" + break + } + } + + if($requests.StatusCode -eq 200) { + $json = ($requests.Content | ConvertFrom-Json).node_versions + + $srmVersion,$srmDescription = ($json | where {$_.node_ip -eq $srmNode}).full_version.split("`n") + $vrVersion,$vrDescription = ($json | where {$_.node_ip -eq $vrNode}).full_version.split("`n") + + $results = [pscustomobject] @{ + ID = $draasId; + DRaaSState = $draasState; + SRMNode = $srmNode; + SRMVersion = $srmVersion; + SRMNodeState = $srmNodeState; + VRNode = $vrNode; + VRVersion = $vrVersion; + VRNodeState = $vrNodeState; + DRaaSURL = $draasUrl; + } + + $results + } + } elseif ($srmNodeState -eq "ACTIVATING" -or $srmNodeState -eq "DEACTIVATING") { + $results = [pscustomobject] @{ + ID = $draasId; + DRaaSState = $draasState; + SRMNode = $srmNode; + SRMNodeState = $srmNodeState; + VRNode = $vrNode; + VRNodeState = $vrNodeState; + DRaaSURL = $draasUrl; + } + + $results + } else { + Write-Host "`nDRaaS is currently deactivated, please run Set-DRaas -Activate`n" + } + } else { + Write-Host "`nDRaaS has not been activated before, please run Set-DRaas -Activate`n" + } + } +} + + +Function Set-DRaas { +<# + .NOTES + =========================================================================== + Created by: William Lam + Date: 05/23/2019 + Organization: VMware + Blog: http://www.virtuallyghetto.com + Twitter: @lamw + =========================================================================== + + .SYNOPSIS + Activate or deactivate DRaaS for a given SDDC + .DESCRIPTION + This cmdlet activates or deactivates DRaaS for a given SDDC + .EXAMPLE + Get-DRaas +#> + Param ( + [Switch]$Activate, + [Switch]$Deactivate, + [Switch]$Troubleshoot + ) + + If (-Not $global:draasConnection) { Write-error "No DRaaS Connection found, please use Connect-DRaaS" } Else { + $draasUrl = $global:draasConnection.server + + if($Activate) { + $method = "POST" + + if($Troubleshoot) { + Write-Host -ForegroundColor cyan "`n[DEBUG] - $METHOD`n$draasUrl`n" + } + + try { + if($PSVersionTable.PSEdition -eq "Core") { + $requests = Invoke-WebRequest -Uri $draasUrl -Method $method -Headers $global:draasConnection.headers -SkipCertificateCheck + } else { + $requests = Invoke-WebRequest -Uri $draasUrl -Method $method -Headers $global:draasConnection.headers + } + } catch { + if($_.Exception.Response.StatusCode -eq "Unauthorized") { + Write-Host -ForegroundColor Red "`nThe CSP session is no longer valid, please re-run the Connect-DRaaS cmdlet to retrieve a new token`n" + break + } else { + Write-Error "Error in activating DRaaS" + Write-Error "`n($_.Exception.Message)`n" + break + } + } + Write-Host "`nActivating DRaaS, this will take some time and you can monitor the progress using Get-DRaaS or using the VMC Console UI`n" + } elseif ($Deactivate) { + $method = "DELETE" + + if($Troubleshoot) { + Write-Host -ForegroundColor cyan "`n[DEBUG] - $METHOD`n$draasUrl`n" + } + + try { + if($PSVersionTable.PSEdition -eq "Core") { + $requests = Invoke-WebRequest -Uri $draasUrl -Method $method -Headers $global:draasConnection.headers -SkipCertificateCheck + } else { + $requests = Invoke-WebRequest -Uri $draasUrl -Method $method -Headers $global:draasConnection.headers + } + } catch { + if($_.Exception.Response.StatusCode -eq "Unauthorized") { + Write-Host -ForegroundColor Red "`nThe CSP session is no longer valid, please re-run the Connect-DRaaS cmdlet to retrieve a new token`n" + break + } else { + Write-Error "Error in deactivating DRaaS" + Write-Error "`n($_.Exception.Message)`n" + break + } + } + Write-Host "`nDeactivating DRaaS, this will take some time and you can monitor the progress using Get-DRaaS or the VMC Console UI`n" + } else { + Write-Error "Invalid Operation" + } + } +} \ No newline at end of file diff --git a/Modules/VMware.VMC/VMware.VMC.psm1 b/Modules/VMware.VMC/VMware.VMC.psm1 index 33f78a7..63ad087 100644 --- a/Modules/VMware.VMC/VMware.VMC.psm1 +++ b/Modules/VMware.VMC/VMware.VMC.psm1 @@ -874,8 +874,8 @@ Function Get-VMCSDDCSummary { Get-VMCSDDCSummary -Name -Org #> Param ( - [Parameter(Mandatory=$True)]$OrgName, - [Parameter(Mandatory=$True)]$SDDCName + [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 { @@ -895,6 +895,7 @@ Function Get-VMCSDDCSummary { 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 } @@ -903,7 +904,7 @@ Function Get-VMCPublicIP { <# .NOTES =========================================================================== - Created by: William Lam + Created by: William LamVPC_VGW Date: 09/12/2018 Organization: VMware Blog: http://www.virtuallyghetto.com