PoshCode Logo PowerShell Code Repository

PowerCLI New-Farm by halr9000 26 months ago
embed code: <script type="text/javascript" src="http://PoshCode.org/embed/1547"></script>download | new post

This is a PowerCLI sample script I wrote to demonstrate how you could entirely automate the creation of a relatively complex virtual farm environment.

  1. # Connect to vCenter
  2. Connect-VIServer vcenter.domain.com
  3.  
  4. # root folder is used for datacenter location
  5. $rootfolder = Get-Folder -NoRecursion
  6.  
  7. # datacenter
  8. $dc = New-Datacenter -Name "vFarm" -Location $rootfolder
  9.  
  10. # Build hostname strings for ESX servers in format sssrrrnn (site/role/number)
  11. $esxname = 1..10 | ForEach-Object { "atlesx{0:00}" -f $_ }
  12.  
  13. # prompt for ESX server credentials
  14. $esxcred = Get-Credential
  15.  
  16. # Add ESX servers to vCenter
  17. $vmhost = $esxname | ForEach-Object {
  18.         Add-VMHost -Name $_ -Credential $esxcred
  19. }
  20.  
  21. # Customer codenames, same number as there are hosts
  22. $custname = "TGT", "WAL", "THD", "LOW", "KRO", "CVS", "TOY", "MAC", "SEA", "OLD"
  23.  
  24. # Create customer resource pools, one per ESX host
  25. $rpool = for ( $i = 0; $i -lt $vmhost.length; $i++ ) {
  26.         # Can set resource settings such as mem or cpu limit here
  27.         New-ResourcePool -Location $vmhost[$i] -Name $custname[$i]
  28. }
  29.  
  30. # Create array of hashtables (think of it like a spreadsheet)
  31. # describing role names and number of VMs in each
  32. $roleinfo = @(
  33.         @{ Name = "ProxyServer"; Num = 2 },
  34.         @{ Name = "WebServer"; Num = 4 },
  35.         @{ Name = "AppServer"; Num = 2 },
  36.         @{ Name = "DBServer"; Num = 2 }
  37. )
  38.  
  39. # Create role resource pools and all VMs
  40. foreach ( $custpool in $rpool ) {
  41.         foreach ( $role in $roleinfo ) {
  42.                 # Create role resource pool
  43.                 $rolepool = New-ResourcePool -Name $role["Name"] -Location $custpool
  44.                
  45.                 # Use number field to determine how many VMs to make and what to name them
  46.                 1..$role["Num"] | ForEach-Object {
  47.                         # Create VM name, e.g. KRO-WebServer-1
  48.                         $vmname = $custpool.Name + "-" + $role["Name"] + "-$_"
  49.                        
  50.                         # Create VM based on predefined templates
  51.                         New-VM -Name $vmname -ResourcePool $rolepool -Template $role["Name"]
  52.                 }
  53.         }
  54. }

Submit a correction or amendment below (
click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.

Syntax highlighting:


Remember me