Merge pull request #356 from lamw/master
Add VyOS and VCSA PowerCLI Module
This commit is contained in:
@@ -36,4 +36,33 @@ Function Get-VCSAPasswordPolicy {
|
|||||||
} else {
|
} else {
|
||||||
Write-Host "`nUnable to find VCSA named $VCSAName"
|
Write-Host "`nUnable to find VCSA named $VCSAName"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Function Get-VCSAIdentitySource {
|
||||||
|
<#
|
||||||
|
.DESCRIPTION Retrieves vCenter Server Appliance Identity Source Configuration
|
||||||
|
.NOTES Author: William Lam
|
||||||
|
.PARAMETER VCSAName
|
||||||
|
Inventory name of the VCSA VM
|
||||||
|
.PARAMETER VCSARootPassword
|
||||||
|
Root password for VCSA VM
|
||||||
|
.EXAMPLE
|
||||||
|
Get-VCSAIdentitySource -VCSAName "MGMT-VCSA-01" -VCSARootPassword "VMware1!"
|
||||||
|
#>
|
||||||
|
Param (
|
||||||
|
[Parameter(Mandatory=$true)][String]$VCSAName,
|
||||||
|
[Parameter(Mandatory=$true)][String]$VCSARootPassword
|
||||||
|
)
|
||||||
|
|
||||||
|
$vm = Get-Vm -Name $VCSAName
|
||||||
|
|
||||||
|
if($vm) {
|
||||||
|
$identitySources = Invoke-VMScript -ScriptText "/opt/vmware/bin/sso-config.sh -get_identity_sources 2> /dev/null | sed -ne '/^*/,$ p'" -vm $vm -GuestUser "root" -GuestPassword $VCSARootPassword
|
||||||
|
|
||||||
|
Write-Host -ForegroundColor green "`nIdentity Sources: "
|
||||||
|
$identitySources
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Write-Host "`nUnable to find VCSA named $VCSAName"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -120,10 +120,12 @@ Function Get-NSXTSegment {
|
|||||||
$network = $subnets.network
|
$network = $subnets.network
|
||||||
$gateway = $subnets.gateway_address
|
$gateway = $subnets.gateway_address
|
||||||
$dhcpRange = $subnets.dhcp_ranges
|
$dhcpRange = $subnets.dhcp_ranges
|
||||||
|
$type = $segment.type
|
||||||
|
|
||||||
$tmp = [pscustomobject] @{
|
$tmp = [pscustomobject] @{
|
||||||
Name = $segment.display_name;
|
Name = $segment.display_name;
|
||||||
ID = $segment.Id;
|
ID = $segment.Id;
|
||||||
|
TYPE = $type;
|
||||||
Network = $network;
|
Network = $network;
|
||||||
Gateway = $gateway;
|
Gateway = $gateway;
|
||||||
DHCPRange = $dhcpRange;
|
DHCPRange = $dhcpRange;
|
||||||
@@ -156,6 +158,8 @@ Function New-NSXTSegment {
|
|||||||
New-NSXTSegment -Name "sddc-cgw-network-4" -Gateway "192.168.4.1/24" -DHCP -DHCPRange "192.168.4.2-192.168.4.254" -DomainName 'vmc.local'
|
New-NSXTSegment -Name "sddc-cgw-network-4" -Gateway "192.168.4.1/24" -DHCP -DHCPRange "192.168.4.2-192.168.4.254" -DomainName 'vmc.local'
|
||||||
.EXAMPLE
|
.EXAMPLE
|
||||||
New-NSXTSegment -Name "sddc-cgw-network-5" -Gateway "192.168.5.1/24"
|
New-NSXTSegment -Name "sddc-cgw-network-5" -Gateway "192.168.5.1/24"
|
||||||
|
.EXAMPLE
|
||||||
|
New-NSXTSegment -Name "sddc-cgw-network-5" -Gateway "192.168.5.1/24" -Disconnected
|
||||||
#>
|
#>
|
||||||
Param (
|
Param (
|
||||||
[Parameter(Mandatory=$True)]$Name,
|
[Parameter(Mandatory=$True)]$Name,
|
||||||
@@ -163,6 +167,7 @@ Function New-NSXTSegment {
|
|||||||
[Parameter(Mandatory=$False)]$DHCPRange,
|
[Parameter(Mandatory=$False)]$DHCPRange,
|
||||||
[Parameter(Mandatory=$False)]$DomainName,
|
[Parameter(Mandatory=$False)]$DomainName,
|
||||||
[Switch]$DHCP,
|
[Switch]$DHCP,
|
||||||
|
[Switch]$Disconnected,
|
||||||
[Switch]$Troubleshoot
|
[Switch]$Troubleshoot
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -178,9 +183,21 @@ Function New-NSXTSegment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$payload = @{
|
if($Disconnected) {
|
||||||
display_name = $Name;
|
$payload = @{
|
||||||
subnets = @($subnets)
|
display_name = $Name;
|
||||||
|
subnets = @($subnets)
|
||||||
|
advanced_config = @{
|
||||||
|
local_egress = "False"
|
||||||
|
connectivity = "OFF";
|
||||||
|
}
|
||||||
|
type = "DISCONNECTED";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$payload = @{
|
||||||
|
display_name = $Name;
|
||||||
|
subnets = @($subnets)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($DomainName) {
|
if($DomainName) {
|
||||||
@@ -221,6 +238,98 @@ Function New-NSXTSegment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Function Set-NSXTSegment {
|
||||||
|
<#
|
||||||
|
.NOTES
|
||||||
|
===========================================================================
|
||||||
|
Created by: William Lam
|
||||||
|
Date: 03/04/2018
|
||||||
|
Organization: VMware
|
||||||
|
Blog: http://www.virtuallyghetto.com
|
||||||
|
Twitter: @lamw
|
||||||
|
===========================================================================
|
||||||
|
|
||||||
|
.SYNOPSIS
|
||||||
|
Set a NSX-T Segment (Logical Networks) to either connected or disconnected
|
||||||
|
.DESCRIPTION
|
||||||
|
This cmdlet set an NSX-T Segment (Logical Networks) to either connected or disconnected
|
||||||
|
.EXAMPLE
|
||||||
|
New-NSXTSegment -Name "sddc-cgw-network-4" -Disconnected
|
||||||
|
.EXAMPLE
|
||||||
|
New-NSXTSegment -Name "sddc-cgw-network-4" -Connected
|
||||||
|
|
||||||
|
#>
|
||||||
|
Param (
|
||||||
|
[Parameter(Mandatory=$True)]$Name,
|
||||||
|
[Switch]$Disconnected,
|
||||||
|
[Switch]$Connected,
|
||||||
|
[Switch]$Troubleshoot
|
||||||
|
)
|
||||||
|
|
||||||
|
If (-Not $global:nsxtProxyConnection) { Write-error "No NSX-T Proxy Connection found, please use Connect-NSXTProxy" } Else {
|
||||||
|
$SegmentId = (Get-NSXTSegment -Name $Name).Id
|
||||||
|
|
||||||
|
if($Disconnected) {
|
||||||
|
$type = "DISCONNECTED"
|
||||||
|
$connectivity = "OFF"
|
||||||
|
$localEgress = "False"
|
||||||
|
$gateway = (Get-NSXTSegment -Name $Name).Gateway
|
||||||
|
}
|
||||||
|
|
||||||
|
If($Connected) {
|
||||||
|
$type = "ROUTED"
|
||||||
|
$connectivity = "ON"
|
||||||
|
$localEgress = "True"
|
||||||
|
$gateway = (Get-NSXTSegment -Name $Name).Gateway
|
||||||
|
}
|
||||||
|
|
||||||
|
$subnets = @{
|
||||||
|
gateway_address = $gateway;
|
||||||
|
}
|
||||||
|
|
||||||
|
$payload = @{
|
||||||
|
advanced_config = @{
|
||||||
|
local_egress = $localEgress;
|
||||||
|
connectivity = $connectivity;
|
||||||
|
}
|
||||||
|
type = $type;
|
||||||
|
subnets = @($subnets)
|
||||||
|
}
|
||||||
|
|
||||||
|
$body = $payload | ConvertTo-Json -depth 4
|
||||||
|
|
||||||
|
$method = "PATCH"
|
||||||
|
$aegmentsURL = $global:nsxtProxyConnection.Server + "/policy/api/v1/infra/tier-1s/cgw/segments/$SegmentId"
|
||||||
|
|
||||||
|
if($Troubleshoot) {
|
||||||
|
Write-Host -ForegroundColor cyan "`n[DEBUG] - $method`n$newSegmentsURL`n"
|
||||||
|
Write-Host -ForegroundColor cyan "[DEBUG]`n$body`n"
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
if($PSVersionTable.PSEdition -eq "Core") {
|
||||||
|
$requests = Invoke-WebRequest -Uri $aegmentsURL -Body $body -Method $method -Headers $global:nsxtProxyConnection.headers -SkipCertificateCheck
|
||||||
|
} else {
|
||||||
|
$requests = Invoke-WebRequest -Uri $aegmentsURL -Body $body -Method $method -Headers $global:nsxtProxyConnection.headers
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
if($_.Exception.Response.StatusCode -eq "Unauthorized") {
|
||||||
|
Write-Host -ForegroundColor Red "`nThe NSX-T Proxy session is no longer valid, please re-run the Connect-NSXTProxy cmdlet to retrieve a new token`n"
|
||||||
|
break
|
||||||
|
} else {
|
||||||
|
Write-Error "Error in updating NSX-T Segment connectivity"
|
||||||
|
Write-Error "`n($_.Exception.Message)`n"
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($requests.StatusCode -eq 200) {
|
||||||
|
Write-Host "Successfully updated NSX-T Segment $Name"
|
||||||
|
($requests.Content | ConvertFrom-Json) | select display_name, id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Function Remove-NSXTSegment {
|
Function Remove-NSXTSegment {
|
||||||
<#
|
<#
|
||||||
.NOTES
|
.NOTES
|
||||||
|
|||||||
330
Modules/VyOS/VyOS.psm1
Normal file
330
Modules/VyOS/VyOS.psm1
Normal file
@@ -0,0 +1,330 @@
|
|||||||
|
Function Set-VMKeystrokes {
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory=$true)][String]$VMName,
|
||||||
|
[Parameter(Mandatory=$true)][String]$StringInput,
|
||||||
|
[Parameter(Mandatory=$false)][Boolean]$ReturnCarriage,
|
||||||
|
[Parameter(Mandatory=$false)][Boolean]$DebugOn
|
||||||
|
)
|
||||||
|
|
||||||
|
# Map subset of USB HID keyboard scancodes
|
||||||
|
# https://gist.github.com/MightyPork/6da26e382a7ad91b5496ee55fdc73db2
|
||||||
|
$hidCharacterMap = @{
|
||||||
|
"a"="0x04";
|
||||||
|
"b"="0x05";
|
||||||
|
"c"="0x06";
|
||||||
|
"d"="0x07";
|
||||||
|
"e"="0x08";
|
||||||
|
"f"="0x09";
|
||||||
|
"g"="0x0a";
|
||||||
|
"h"="0x0b";
|
||||||
|
"i"="0x0c";
|
||||||
|
"j"="0x0d";
|
||||||
|
"k"="0x0e";
|
||||||
|
"l"="0x0f";
|
||||||
|
"m"="0x10";
|
||||||
|
"n"="0x11";
|
||||||
|
"o"="0x12";
|
||||||
|
"p"="0x13";
|
||||||
|
"q"="0x14";
|
||||||
|
"r"="0x15";
|
||||||
|
"s"="0x16";
|
||||||
|
"t"="0x17";
|
||||||
|
"u"="0x18";
|
||||||
|
"v"="0x19";
|
||||||
|
"w"="0x1a";
|
||||||
|
"x"="0x1b";
|
||||||
|
"y"="0x1c";
|
||||||
|
"z"="0x1d";
|
||||||
|
"1"="0x1e";
|
||||||
|
"2"="0x1f";
|
||||||
|
"3"="0x20";
|
||||||
|
"4"="0x21";
|
||||||
|
"5"="0x22";
|
||||||
|
"6"="0x23";
|
||||||
|
"7"="0x24";
|
||||||
|
"8"="0x25";
|
||||||
|
"9"="0x26";
|
||||||
|
"0"="0x27";
|
||||||
|
"!"="0x1e";
|
||||||
|
"@"="0x1f";
|
||||||
|
"#"="0x20";
|
||||||
|
"$"="0x21";
|
||||||
|
"%"="0x22";
|
||||||
|
"^"="0x23";
|
||||||
|
"&"="0x24";
|
||||||
|
"*"="0x25";
|
||||||
|
"("="0x26";
|
||||||
|
")"="0x27";
|
||||||
|
"_"="0x2d";
|
||||||
|
"+"="0x2e";
|
||||||
|
"{"="0x2f";
|
||||||
|
"}"="0x30";
|
||||||
|
"|"="0x31";
|
||||||
|
":"="0x33";
|
||||||
|
"`""="0x34";
|
||||||
|
"~"="0x35";
|
||||||
|
"<"="0x36";
|
||||||
|
">"="0x37";
|
||||||
|
"?"="0x38";
|
||||||
|
"-"="0x2d";
|
||||||
|
"="="0x2e";
|
||||||
|
"["="0x2f";
|
||||||
|
"]"="0x30";
|
||||||
|
"\"="0x31";
|
||||||
|
"`;"="0x33";
|
||||||
|
"`'"="0x34";
|
||||||
|
","="0x36";
|
||||||
|
"."="0x37";
|
||||||
|
"/"="0x38";
|
||||||
|
" "="0x2c";
|
||||||
|
}
|
||||||
|
|
||||||
|
$vm = Get-View -ViewType VirtualMachine -Filter @{"Name"="^$($VMName)$"}
|
||||||
|
|
||||||
|
# Verify we have a VM or fail
|
||||||
|
if(!$vm) {
|
||||||
|
Write-host "Unable to find VM $VMName"
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
$hidCodesEvents = @()
|
||||||
|
foreach($character in $StringInput.ToCharArray()) {
|
||||||
|
# Check to see if we've mapped the character to HID code
|
||||||
|
if($hidCharacterMap.ContainsKey([string]$character)) {
|
||||||
|
$hidCode = $hidCharacterMap[[string]$character]
|
||||||
|
|
||||||
|
$tmp = New-Object VMware.Vim.UsbScanCodeSpecKeyEvent
|
||||||
|
|
||||||
|
# Add leftShift modifer for capital letters and/or special characters
|
||||||
|
if( ($character -cmatch "[A-Z]") -or ($character -match "[!|@|#|$|%|^|&|(|)|_|+|{|}|||:|~|<|>|?|*]") ) {
|
||||||
|
$modifer = New-Object Vmware.Vim.UsbScanCodeSpecModifierType
|
||||||
|
$modifer.LeftShift = $true
|
||||||
|
$tmp.Modifiers = $modifer
|
||||||
|
}
|
||||||
|
|
||||||
|
# Convert to expected HID code format
|
||||||
|
$hidCodeHexToInt = [Convert]::ToInt64($hidCode,"16")
|
||||||
|
$hidCodeValue = ($hidCodeHexToInt -shl 16) -bor 0007
|
||||||
|
|
||||||
|
$tmp.UsbHidCode = $hidCodeValue
|
||||||
|
$hidCodesEvents+=$tmp
|
||||||
|
|
||||||
|
if($DebugOn) {
|
||||||
|
Write-Host "Character: $character -> HIDCode: $hidCode -> HIDCodeValue: $hidCodeValue"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Write-Host "The following character `"$character`" has not been mapped, you will need to manually process this character"
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add return carriage to the end of the string input (useful for logins or executing commands)
|
||||||
|
if($ReturnCarriage) {
|
||||||
|
# Convert return carriage to HID code format
|
||||||
|
$hidCodeHexToInt = [Convert]::ToInt64("0x28","16")
|
||||||
|
$hidCodeValue = ($hidCodeHexToInt -shl 16) + 7
|
||||||
|
|
||||||
|
$tmp = New-Object VMware.Vim.UsbScanCodeSpecKeyEvent
|
||||||
|
$tmp.UsbHidCode = $hidCodeValue
|
||||||
|
$hidCodesEvents+=$tmp
|
||||||
|
}
|
||||||
|
|
||||||
|
# Call API to send keystrokes to VM
|
||||||
|
$spec = New-Object Vmware.Vim.UsbScanCodeSpec
|
||||||
|
$spec.KeyEvents = $hidCodesEvents
|
||||||
|
Write-Host "Sending `'$StringInput`' ...`n"
|
||||||
|
$results = $vm.PutUsbScanCodes($spec)
|
||||||
|
}
|
||||||
|
|
||||||
|
Function New-VyOSInstallation {
|
||||||
|
<#
|
||||||
|
.NOTES
|
||||||
|
===========================================================================
|
||||||
|
Created by: William Lam
|
||||||
|
Organization: VMware
|
||||||
|
Blog: www.virtuallyghetto.com
|
||||||
|
Twitter: @lamw
|
||||||
|
===========================================================================
|
||||||
|
.DESCRIPTION
|
||||||
|
This function automates the installation and configuration of VyOS from ISO
|
||||||
|
.PARAMETER VMName
|
||||||
|
The name of the VyOS VM
|
||||||
|
.PARAMETER ManagementPassword
|
||||||
|
The password to configure for the vyos user
|
||||||
|
.EXAMPLE
|
||||||
|
New-VyOSInstallation -VMName VyOS-Router -ManagementPassword VMware1!
|
||||||
|
#>
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory=$true)][String]$VMName,
|
||||||
|
[Parameter(Mandatory=$true)][String]$ManagementPassword
|
||||||
|
)
|
||||||
|
|
||||||
|
# Login to console and install VyOS before starting configuration
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput "vyos" -ReturnCarriage $true
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput "vyos" -ReturnCarriage $true
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput "install image" -ReturnCarriage $true
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput "yes" -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 5
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput "Auto" -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 1
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput "sda" -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 5
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput "yes" -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 5
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput " " -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 10
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput "vyos-router" -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 5
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput " " -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 10
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput "$ManagementPassword" -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 5
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput "$ManagementPassword" -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 5
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput "sda" -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 5
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput "reboot" -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 5
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput "y" -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 5
|
||||||
|
Get-VM $VMName | Get-CDDrive | Set-CDDrive -Connected $false -Confirm:$false -ErrorAction Ignore -WarningAction Ignore | Out-Null
|
||||||
|
|
||||||
|
Write-Host -ForegroundColor Green "VyOS has been installed, VM will reboot for changes to go into effect"
|
||||||
|
}
|
||||||
|
|
||||||
|
Function New-VyOSConfiguration {
|
||||||
|
<#
|
||||||
|
.NOTES
|
||||||
|
===========================================================================
|
||||||
|
Created by: William Lam
|
||||||
|
Organization: VMware
|
||||||
|
Blog: www.virtuallyghetto.com
|
||||||
|
Twitter: @lamw
|
||||||
|
===========================================================================
|
||||||
|
.DESCRIPTION
|
||||||
|
This function automates the installation and configuration of VyOS from ISO
|
||||||
|
.PARAMETER VMName
|
||||||
|
The name of the VyOS VM
|
||||||
|
.PARAMETER ManagementPassword
|
||||||
|
The password to configure for the vyos user
|
||||||
|
.PARAMETER ConfigFile
|
||||||
|
The path to VyOS configuration file
|
||||||
|
.PARAMETER ManagementAddress
|
||||||
|
The IP Address of the OUTSIDE Interface (eth0)
|
||||||
|
.PARAMETER ManagementGateway
|
||||||
|
The Gateway Addrss of the OUTSIDE Interface (eth0)
|
||||||
|
.PARAMETER ManagementDNSDomain
|
||||||
|
The DNS Domain on the WAN network
|
||||||
|
.PARAMETER ManagementDNSServer
|
||||||
|
The DNS Server on the WAN Network
|
||||||
|
.PARAMETER ManagementJumpHostIP
|
||||||
|
The IP Address of Windows Jumphost that can be used to RDP into various VLANs
|
||||||
|
.EXAMPLE
|
||||||
|
New-VyOSConfiguration -VMName VyOS-Router -ConfigFile vyos.template -ManagementAddress 192.168.30.156/24 -ManagementGateway 192.168.30.1 -ManagementDNSDomain primp-industries.com -ManagementDNSServer 192.168.30.2 -ManagementJumpHostIP 192.168.30.199 -ManagementPassword VMware1!
|
||||||
|
#>
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory=$true)][String]$VMName,
|
||||||
|
[Parameter(Mandatory=$true)][String]$ConfigFile,
|
||||||
|
[Parameter(Mandatory=$true)][String]$ManagementAddress,
|
||||||
|
[Parameter(Mandatory=$true)][String]$ManagementGateway,
|
||||||
|
[Parameter(Mandatory=$true)][String]$ManagementDNSDomain,
|
||||||
|
[Parameter(Mandatory=$true)][String]$ManagementDNSServer,
|
||||||
|
[Parameter(Mandatory=$true)][String]$ManagementJumpHostIP,
|
||||||
|
[Parameter(Mandatory=$true)][String]$ManagementPassword
|
||||||
|
)
|
||||||
|
|
||||||
|
# Login to console and install VyOS before starting configuration
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput "vyos" -ReturnCarriage $true
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput "$ManagementPassword" -ReturnCarriage $true
|
||||||
|
|
||||||
|
foreach ($cmd in Get-Content -Path $ConfigFile | Where-Object { $_.Trim() -ne '' }) {
|
||||||
|
if($cmd.Contains('[MANAGEMENT_ADDRESS]')) {
|
||||||
|
$cmd = $cmd.replace('[MANAGEMENT_ADDRESS]',$ManagementAddress)
|
||||||
|
if($Troubleshoot) {
|
||||||
|
$cmd
|
||||||
|
} else {
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput $cmd -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 1
|
||||||
|
}
|
||||||
|
} elseif($cmd.Contains('[MANAGEMENT_IP]')) {
|
||||||
|
$ManagementAddress = $ManagementAddress.substring(0,$ManagementAddress.IndexOf('/'))
|
||||||
|
$cmd = $cmd.replace('[MANAGEMENT_IP]',$ManagementAddress)
|
||||||
|
if($Troubleshoot) {
|
||||||
|
$cmd
|
||||||
|
} else {
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput $cmd -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 1
|
||||||
|
}
|
||||||
|
} elseif($cmd.Contains('[MANAGEMENT_GATEWAY]')) {
|
||||||
|
$cmd = $cmd.replace('[MANAGEMENT_GATEWAY]',$ManagementGateway)
|
||||||
|
if($Troubleshoot) {
|
||||||
|
$cmd
|
||||||
|
} else {
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput $cmd -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 1
|
||||||
|
}
|
||||||
|
} elseif($cmd.Contains('[JUMPHOST_VM_IP]')) {
|
||||||
|
$cmd = $cmd.replace('[JUMPHOST_VM_IP]',$ManagementJumpHostIP)
|
||||||
|
if($Troubleshoot) {
|
||||||
|
$cmd
|
||||||
|
} else {
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput $cmd -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 1
|
||||||
|
}
|
||||||
|
} elseif($cmd.Contains('[MANAGEMENT_DNS_DOMAIN]')) {
|
||||||
|
$cmd = $cmd.replace('[MANAGEMENT_DNS_DOMAIN]',$ManagementDNSDomain)
|
||||||
|
$cmd = $cmd.replace('[MANAGEMENT_DNS_SERVER]',$ManagementDNSServer)
|
||||||
|
if($Troubleshoot) {
|
||||||
|
$cmd
|
||||||
|
} else {
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput $cmd -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 1
|
||||||
|
}
|
||||||
|
} elseif($cmd.Contains('[MANAGEMENT_DNS_SERVER]')) {
|
||||||
|
$cmd = $cmd.replace('[MANAGEMENT_DNS_SERVER]',$ManagementDNSServer)
|
||||||
|
if($Troubleshoot) {
|
||||||
|
$cmd
|
||||||
|
} else {
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput $cmd -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 1
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if($Troubleshoot) {
|
||||||
|
$cmd
|
||||||
|
} else {
|
||||||
|
Set-VMKeystrokes -VMName $VMName -StringInput $cmd -ReturnCarriage $true
|
||||||
|
Start-Sleep -Seconds 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
<#
|
||||||
|
# Configure and Enable VyOS REST API
|
||||||
|
# REST API not very functional, no GET operatoin and a bit kludgey on setup
|
||||||
|
|
||||||
|
$httpApiConf = "http-api.conf"
|
||||||
|
|
||||||
|
$config = @"
|
||||||
|
{
|
||||||
|
"listen_address": "$($ManagementAddress.substring(0,$ManagementAddress.IndexOf('/')))",
|
||||||
|
"port": 8080,
|
||||||
|
"debug": true,
|
||||||
|
"api_keys": [
|
||||||
|
{"id": "powercli", "key": "${ManagementPassword}"}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
"@
|
||||||
|
|
||||||
|
$config | Set-Content "$httpApiConf"
|
||||||
|
|
||||||
|
Get-Item "$httpApiConf" | Copy-VMGuestFile -LocalToGuest -Destination "/home/vyos/${httpApiConf}" -VM (Get-VM $VMName) -GuestUser "vyos" -GuestPassword "$ManagementPassword" -Force
|
||||||
|
|
||||||
|
Write-Host "Creating VyOS REST API Configuration /etc/vyos/${httpApiConf} ..."
|
||||||
|
$scriptText = "echo `"${ManagementPassword}`" | sudo -S cp /home/vyos/${httpApiConf} /etc/vyos/${httpApiConf}"
|
||||||
|
Invoke-VMScript -ScriptText $scriptText -vm (Get-VM $VMName) -GuestUser "vyos" -GuestPassword $ManagementPassword
|
||||||
|
|
||||||
|
Write-Host "Starting VyOS REST API ..."
|
||||||
|
$scriptText = "echo `"${ManagementPassword}`" | sudo -S systemctl start vyos-http-api"
|
||||||
|
Invoke-VMScript -ScriptText $scriptText -vm (Get-VM $VMName) -GuestUser "vyos" -GuestPassword $ManagementPassword
|
||||||
|
#>
|
||||||
|
}
|
||||||
66
Modules/VyOS/vyos.template
Normal file
66
Modules/VyOS/vyos.template
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
configure
|
||||||
|
|
||||||
|
set service ssh port 22
|
||||||
|
|
||||||
|
set interfaces ethernet eth0 address '[MANAGEMENT_ADDRESS]'
|
||||||
|
set interfaces ethernet eth0 description 'Outside'
|
||||||
|
set interfaces ethernet eth1 address '192.168.0.1/24'
|
||||||
|
set interfaces ethernet eth1 description 'Inside'
|
||||||
|
set nat source rule 100 outbound-interface 'eth0'
|
||||||
|
set nat source rule 100 translation address '[MANAGEMENT_IP]'
|
||||||
|
set nat source rule 100 translation address 'masquerade'
|
||||||
|
set protocols static route 0.0.0.0/0 next-hop [MANAGEMENT_GATEWAY]
|
||||||
|
|
||||||
|
set interfaces ethernet eth1 mtu '1700'
|
||||||
|
set interfaces ethernet eth1 vif 10 address '172.30.10.1/24'
|
||||||
|
set interfaces ethernet eth1 vif 10 description 'VLAN 10 for MGMT'
|
||||||
|
set interfaces ethernet eth1 vif 20 address '172.30.20.1/24'
|
||||||
|
set interfaces ethernet eth1 vif 20 description 'VLAN 20 for HOST VTEP'
|
||||||
|
set interfaces ethernet eth1 vif 20 mtu '1700'
|
||||||
|
set interfaces ethernet eth1 vif 30 address '172.30.30.1/24'
|
||||||
|
set interfaces ethernet eth1 vif 30 description 'VLAN 30 for EDGE VTEP'
|
||||||
|
set interfaces ethernet eth1 vif 30 mtu '1700'
|
||||||
|
set interfaces ethernet eth1 vif 40 address '172.30.40.1/24'
|
||||||
|
set interfaces ethernet eth1 vif 40 description 'VLAN 40 for EDGE UPLINK'
|
||||||
|
set interfaces ethernet eth1 vif 40 mtu '1700'
|
||||||
|
|
||||||
|
set nat destination rule 100 description 'RDP to [JUMPHOST_VM_IP]:3389'
|
||||||
|
set nat destination rule 100 destination port '3389'
|
||||||
|
set nat destination rule 100 inbound-interface 'eth0'
|
||||||
|
set nat destination rule 100 protocol 'tcp'
|
||||||
|
set nat destination rule 100 translation address '192.168.0.10'
|
||||||
|
set nat destination rule 100 translation port '3389'
|
||||||
|
|
||||||
|
set service dns forwarding domain [MANAGEMENT_DNS_DOMAIN] server [MANAGEMENT_DNS_SERVER]
|
||||||
|
set service dns forwarding domain 10.30.172.in-addr.arpa. server [MANAGEMENT_DNS_SERVER]
|
||||||
|
set service dns forwarding domain 20.30.172.in-addr.arpa. server [MANAGEMENT_DNS_SERVER]
|
||||||
|
set service dns forwarding domain 30.30.172.in-addr.arpa. server [MANAGEMENT_DNS_SERVER]
|
||||||
|
set service dns forwarding domain 40.30.172.in-addr.arpa. server [MANAGEMENT_DNS_SERVER]
|
||||||
|
set service dns forwarding allow-from 0.0.0.0/0
|
||||||
|
set service dns forwarding listen-address 192.168.0.1
|
||||||
|
set service dns forwarding listen-address 172.30.10.1
|
||||||
|
set service dns forwarding listen-address 172.30.20.1
|
||||||
|
set service dns forwarding listen-address 172.30.30.1
|
||||||
|
set service dns forwarding listen-address 172.30.40.1
|
||||||
|
set service dns forwarding name-server 8.8.8.8
|
||||||
|
set service dns forwarding name-server 8.8.8.4
|
||||||
|
|
||||||
|
set nat source rule 10 outbound-interface eth0
|
||||||
|
set nat source rule 10 source address 172.30.10.0/24
|
||||||
|
set nat source rule 10 translation address masquerade
|
||||||
|
|
||||||
|
set nat source rule 20 outbound-interface eth0
|
||||||
|
set nat source rule 20 source address 172.30.20.0/24
|
||||||
|
set nat source rule 20 translation address masquerade
|
||||||
|
|
||||||
|
set nat source rule 30 outbound-interface eth0
|
||||||
|
set nat source rule 30 source address 172.30.30.0/24
|
||||||
|
set nat source rule 30 translation address masquerade
|
||||||
|
|
||||||
|
set nat source rule 40 outbound-interface eth0
|
||||||
|
set nat source rule 40 source address 172.30.40.0/24
|
||||||
|
set nat source rule 40 translation address masquerade
|
||||||
|
|
||||||
|
commit
|
||||||
|
save
|
||||||
|
exit
|
||||||
Reference in New Issue
Block a user