Virtu-Al.Net

Virtually everything is poshable

London VMUG – My Presentation

Yesterday was a fantastic VMware user group, definitely my favourite one so far, lots of great content from some fantastic people and some real rockstars (I think that is the 2010 word for Guru’s) like Mike Laverick, Carter Shanklin (Carter USM), Stuart Radnidge and many many more.

I was privileged to open the show with a PowerCLI session, this is a pre-show session so wasn’t really part of the main VMUG, as such I was not expecting such a large crowd, if you came to the session then thanks very much, i thing there must have been around 40-45 people in there and I had a great time presenting this one.

We had a great mix of beginners to Pro’s and some great conversations about PowerCLI and what we could do to take the ESX install to the next level, one such example is in my script where we add an A host record to the DNS server as part of our deployment.

If you weren’t there or you would just like to re-live the presentation then please see below:

At the end of the slideshow there was also a pre-recorded video of the script in action which can be viewed here:

Please note that the code is not optimised for deployment, the code in this presentation was often put there to make a point and to show people from the beginners to the Pro’s how to deploy ESX.  If I was going to write this properly I would change the code a fair bit.

And of course I couldn’t possibly let the presentation end without paying Carter USM back for his amusing slideshow, thanks for that Carter.

Script Code:

connect-viserver 192.168.0.6 -User root -Password ""
$VMHost = ($DefaultVIServer).Name

# Set the password
Write "Setting the Root Password"
Set-VMHostAccount -UserAccount root -password "T3sting123!" | Out-Null

# Set the Host IP Address
Write "Setting Host IP Address"
$device = "vmk0"
$nic = New-Object VMware.Vim.HostVirtualNicSpec
$nic.ip = New-Object VMware.Vim.HostIpConfig
$nic.ip.dhcp = $false
$nic.ip.ipAddress = "192.168.0.6"
$nic.ip.subnetMask = "255.255.255.0"
$nic.portgroup = "Management Network"
$netSys = Get-View (Get-VMHost | Get-View).ConfigManager.networkSystem
$netSys.UpdateVirtualNic($device, $nic)

# Disconnect from our host after IP change
Write "Disconnecting from Host"
$DefaultVIServer | Disconnect-VIServer -Confirm:$false

# Reconnect after the IP change
connect-viserver 192.168.0.6 -User root -Password ""
$VMHost = ($DefaultVIServer).Name

# Rename the host to our given hostname
Write "Renaming Host"
$config = New-Object VMware.Vim.HostDnsConfig
$config.dhcp = $false
$config.hostName = "VIRTUESX4"
$config.domainName = "virtu-al.local"
$config.address = New-Object System.String[] (1)
$config.address[0] = "192.168.0.1"
$config.searchDomain = New-Object System.String[] (1)
$config.searchDomain[0] = "virtu-al.local"
$netSys = Get-View (Get-VMHost | Get-View).ConfigManager.networkSystem
$netSys.UpdateDnsConfig($config)

# Remove the default VM Network
Write "Removing Default VM Network on vSwitch0"
Get-VirtualSwitch -vmhost $VMHost -Name vSwitch0 | `
Get-VirtualPortGroup -Name "VM Network" | `
Remove-VirtualPortGroup -Confirm:$false

# Add an NTP Server
Write "Adding an NTP Server"
Add-VMHostNtpServer -VMHost $VMHost -NtpServer "ntp.mycompany.com" | Out-Null

# Add our standard vSwitches
Write "Creating vSwitch1"
$vSwitch1 = New-VirtualSwitch -Name "vSwitch1" -Nic "vmnic1"
$vSwitch2 = New-VirtualSwitch -Name "vSwitch2" -Nic "vmnic2"
$vSwitch3 = New-VirtualSwitch -Name "vSwitch3"

# Add our standard Portgroups
Write "Creating PortGroups"
$vSwitch1 | New-VirtualPortGroup -Name "192.168.0.x" | Out-Null
$vSwitch2 | New-VirtualPortGroup -Name "10.0.1.x" -VLanId 1001 | Out-Null
$vSwitch2 | New-VirtualPortGroup -Name "10.0.2.x" -VLanId 1002 | Out-Null
$vSwitch3 | New-VirtualPortGroup -Name "172.16.1.x" -VLanId 1601 | Out-Null

# Add a VMotion Portgroup
Write "Creating VMotion PG"
$VMotionIP = "192.168.0.12"
$VMotionSubnet = "255.255.255.0"
New-VMHostNetworkAdapter -PortGroup "VMotion" -VirtualSwitch "vSwitch1" -IP $VMotionIP -SubnetMask $VMotionSubnet -VMotionEnabled:$true | Out-Null

# Add iScsi settings and do a rescan
Write "Enabling iSCSI"
$hostView = Get-View -VIObject (Get-VMHost $VMhost)
$storageSystem = Get-View $hostView.configManager.storageSystem
$storageSystem.UpdateSoftwareInternetScsiEnabled($true)
$storageSystem.UpdateSoftwareInternetScsiEnabled($false)

Write "Setting up iSCSi"
$iscsiHba =(Get-VMHostHba | Where {$_.Type -eq "IScsi"}).Device
$iscsiServer = "192.168.0.15"
$iscsiPort = 3260
$target = New-Object VMware.Vim.HostInternetScsiHbaSendTarget
$target.address = $iscsiServer
$target.port = $iscsiPort
$hostView = Get-View -VIObject (Get-VMHost $VMhost)
$storageSystem = Get-View $hostView.configManager.storageSystem
# Enable software iSCSI controller
$storageSystem.UpdateSoftwareInternetScsiEnabled($true)
# Add iSCSI Server for dynamic discovery
$storageSystem.AddInternetScsiSendTargets($iscsiHba, $target)

# Scan for iSCSI devices
Write "Scanning for storage"
$storageSystem.RescanHba($iscsiHba)

# Add A DNS Entry for our server
$DNSSRV = "VIRTUDC.Virtu-al.local"
$DNSWMI = [wmiclass]"\\$DNSSRV\root\MicrosoftDNS:MicrosoftDNS_AType"
$zone = "virtu-al.local"
$name = "VIRTUESX4.virtu-al.local"
$class = 1
$ttl = 3600
$address = "192.168.0.6"
$DNSWMI.CreateInstanceFromPropertydata($DNSSRV, $zone, $name, $class, $ttl, $address) | Out-Null

# Disconnect from our host
Write "Disconnecting from Host"
$DefaultVIServer | Disconnect-VIServer -Confirm:$false

# Connect to our vCenter server
Write "Connecting to vCenter"
Connect-VIServer virtuvc.virtu-al.local

# Add our host to our vCenter Server under a Test Cluster
Write "Adding New host to VCenter"
Add-VMHost virtuesx4.virtu-al.local -Location (Get-Cluster Test) -User root -Password "T3sting123!" -Force | Out-Null

# Vmotion a VM to our new host to make sure all is fine
Write "Testing Vmotion"
#Get-VM "VIRTUAPP01" | Move-VM -Destination (Get-VMHost virtuesx4.virtu-al.local)

, , ,

6 Responses to “London VMUG – My Presentation”

  • [...] on automating the configuration of ESXi! A copy of Alan’s presentation can be found here >> http://www.virtu-al.net/2010/02/26/london-vmug-my-presentation/ as when ever I read one of Alan’s blog posts or meet up with him it inspires me to learn more [...]

  • Nigel Boulton says:

    Excellent presentation, and a great script, thanks!

    I wanted to have it create a reverse DNS (PTR) record as well, so I did the following mod:

    # Add A DNS Entry for our server
    $DNSSRV = "VIRTUDC.Virtu-al.local"
    $DNSWMIA = [wmiclass]"\\$DNSSRV\root\MicrosoftDNS:MicrosoftDNS_AType"
    $DNSWMIPTR = [wmiclass]"\\$DNSSRV\root\MicrosoftDNS:MicrosoftDNS_PTRType"
    $zone = "virtu-al.local"
    $name = "VIRTUESX4.virtu-al.local"
    $class = 1
    $ttl = 3600
    $address = "192.168.0.6"
    $octets = $address.split('.')
    $DNSWMIA.CreateInstanceFromPropertydata($DNSSRV, $zone, $name, $class, $ttl, $address) | Out-Null
    $DNSWMIPTR.CreateInstanceFromPropertydata($DNSSRV, $octets[0]+".in-addr.arpa.", $octets[3]+"."+$octets[2]+"."+$octets[1]+"."+$octets[0]+".in-addr.arpa", $class, $ttl, $name) | Out-Null

    However, this doesn’t feel very tidy (and you need an extra WMI object), so I prefer to use CreateInstanceFromTextRepresentation to create the Resource Records, as shown below:

    # Add A DNS Entry for our server
    $DNSSRV = "VIRTUDC.Virtu-al.local"
    $DNSWMI = [wmiclass]"\\$DNSSRV\root\MicrosoftDNS:MicrosoftDNS_ResourceRecord"
    $zone = "virtu-al.local"
    $name = "VIRTUESX4.virtu-al.local"
    $class = 1
    $ttl = 3600
    $address = "192.168.0.6"
    $octets = $address.split('.')
    $FwdRR = $name + " IN A $address" # Forward Resource Record (A)
    $DNSWMI.CreateInstanceFromTextRepresentation($DNSSRV, $zone, $FwdRR) | Out-Null
    $ReverseRR = $octets[3]+"."+$octets[2]+"."+$octets[1]+" IN PTR $name" # Reverse Resource Record (PTR)
    $ReverseZone = $octets[0]+".in-addr.arpa." # Reverse Zone name
    $DNSWMI.CreateInstanceFromTextRepresentation($DNSSRV, $ReverseZone, $ReverseRR) | Out-Null

    Keep up the good work!

  • David Owen says:

    do you know when the next London VMUG will be?

  • Virtu-Al says:

    Sorry Alaric did mention it at the last VMUG but I cant remember when he said, if you keep an eye on here: http://communities.vmware.com/community/vmug/forums/emea/london

    Or keep an eye on my blog I will do a blog post when it is announced.

  • Michael Poore says:

    I have a sneaky suspicion that it’s election day – May 6th.

  • [...] The reasons why not to upgrade to ESXi are getting less and less recently, I think I knocked the automated configuration on the head at the London VMUG with my recent presentation which can be seen here. [...]

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>