ESXi 4.1 Kickstart Script for EDA Virtual Appliance

Summary:
This one has been on the back burner for a little while, but I finally got it put together thanks to resources like virtualghettolamw is crazy smartz!
Script:
Everything seems to work fine, the only one I’m not sure of is the enabling the CIMoemProviderEnabled Advanced setting as to whether that works or not.  Let me know if you happen to brave my custom kickstart script made for Dell servers, but can be adjusted for pretty much any setup I think.
   1: # Bind vmnic4 to vSwitch0.  EDA adds vmnic0 automatically
   2: # Active/Passive
   3: esxcfg-vswitch -L vmnic4 vSwitch0
   4: esxcfg-vswitch -X 1 vSwitch0
   5:  
   6: # Add vSwitch1, VMkernel, and bind vmnic1/3
   7: # Active/Passive
   8: # The following configures vSwitch1 as the vmKernel vmotion switch
   9: esxcfg-vswitch -a vSwitch1
  10: esxcfg-vswitch -A VMkernel vSwitch1
  11: esxcfg-vswitch -L vmnic1 vSwitch1
  12: esxcfg-vswitch -L vmnic3 vSwitch1
  13: esxcfg-vswitch -X 1 vSwitch1
  14:  
  15: # Add vSwitch2 and bind vmnic2/5
  16: # Active/Passive
  17: # Created VM Switch
  18: esxcfg-vswitch -a vSwitch2
  19: esxcfg-vswitch -L vmnic2 vSwitch2
  20: esxcfg-vswitch -L vmnic5 vSwitch2
  21: esxcfg-vswitch -X 1 vSwitch2
  22:  
  23: # NTP Configuration
  24: /bin/echo "restrict 127.0.0.1" > /etc/ntp.conf
  25: /bin/echo "restrict default kod nomodify notrap" >> /etc/ntp.conf
  26: /bin/echo "server timeserver1.local" >> /etc/ntp.conf
  27: /bin/echo "server timeserver2.local" >> /etc/ntp.conf
  28: /etc/init.d/ntpd restart
  29:  
  30: # Configures vmk0 as Mgmt Interface
  31: HOSTSVC_FILE=/etc/vmware/hostd/hostsvc.xml
  32:  
  33: /bin/cat > ${HOSTSVC_FILE} << __CREATE_HOST_SVC__
  34: <ConfigRoot>
  35:   <mangementVnics>
  36:     <nic id="0000">vmk0</nic>
  37:   </mangementVnics>
  38:   <mode>normal</mode>
  39:   <service>
  40:     <tsm-ssh>off</tsm-ssh>
  41:   </service>
  42: </ConfigRoot>
  43: __CREATE_HOST_SVC__
  44:  
  45: # Configure vmk1 as vMotion Interface
  46: esxcfg-vmknic -a VMkernel -i ###HOSTIP### -n 255.255.255.0
  47: /bin/vim-cmd hostsvc/net/refresh
  48: /bin/vim-cmd hostsvc/vmotion/vnic_set vmk1
  49:  
  50: # DNS Secondary (replace x.x.x.x w/ IP of another DNS server) 
  51: /bin/echo "nameserver x.x.x.x" >> /etc/resolv.conf
  52:  
  53: # Configure Local Datastore Name to standard
  54: /bin/vim-cmd hostsvc/datastore/rename datastore1 "$(hostname -s)_local"
  55:  
  56: # Configure Syslog to forward to remote syslog server like Splunk
  57: /bin/vim-cmd hostsvc/advopt/update Syslog.Remote.Hostname string x.x.x.x
  58:  
  59: # Configure port to forward Syslogs.
  60: /bin/vim-cmd hostsvc/advopt/update Syslog.Remote.Port int 514
  61:  
  62: # Only needed if local syslog going to be used.
  63: #/bin/vim-cmd hostsvc/advopt/update Syslog.Local.DatastorePath string "[$(hostname -s)_local] /logfiles/hostName.log"
  64:  
  65: # Maps standard NFS Shares (I use these as shared stores for iso and vmtemplates)
  66: esxcfg-nas -a -o linuxserver1 -s /share/STUFF nfs_share
  67: esxcfg-nas -a -o nasdevice1 -s esx_vmtemplates nfs_share_vmtemplates
  68:  
  69: #### Start of Join AD code ####
  70: #Joins to Active Directory (ESX 4.1) Update 1 Code Hashed Out
  71: /bin/cat > /tmp/joinActiveDirectory.py << __JOIN_AD__
  72: import sys,re,os,urllib,urllib2,base64
  73:  
  74: # mob url
  75: url = "https://localhost/mob/?moid=ha-ad-auth&method=joinDomain"
  76:  
  77: # mob login credentials -- use password = "" for build scripting
  78: username = "root"
  79: password = ""
  80:  
  81: # which domain to join, and associated OU
  82: # e.g.
  83: #       "local.com"
  84: #       "local.com/VMware Server OU"
  85: domainname = "local.com/someOU/"
  86:  
  87: # active directory credentials using encoded base64 password
  88: ad_username = "someserviceaccount@local.com"
  89: ### To get an encoded password, use python.  It's not really secure, but better than plain text.
  90: encodedpassword = ""
  91: ad_password = base64.b64decode(encodedpassword)
  92:  
  93: # Unhash for ESXi 4.1 Update 1
  94: ### Create global variables
  95: # global passman,authhandler,opener,req,page,page_content,nonce,headers,cookie,params,e_params
  96:  
  97: # Code to build opener with HTTP Basic Authentication
  98: passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
  99: passman.add_password(None,url,username,password)
 100: authhandler = urllib2.HTTPBasicAuthHandler(passman)
 101: opener = urllib2.build_opener(authhandler)
 102: urllib2.install_opener(opener)
 103:  
 104: # Unhash below for 4.1 Update 1
 105: ### Code to capture required page data and cookie required for post back to meet CSRF requirements  ###
 106: #req = urllib2.Request(url)
 107: #page = urllib2.urlopen(req)
 108: #page_content= page.read()
 109:  
 110: # Unhash below for 4.1 Update 1
 111: ### regex to get the vmware-session-nonce value from the hidden form entry
 112: # reg = re.compile('name="vmware-session-nonce" type="hidden" value="?([^\s^"]+)"')
 113: #nonce = reg.search(page_content).group(1)
 114:  
 115: # Unhash below for 4.1 Update 1
 116: ### Code to join the domain ESXi 4.1U1
 117: #params = {'vmware-session-nonce':nonce,'domainName':domainname,'userName':ad_username,'password':ad_password}
 118: #e_params = urllib.urlencode(params)
 119: #req = urllib2.Request(url, e_params, headers={"Cookie":cookie})
 120: #page = urllib2.urlopen(req).read()
 121:  
 122: #Hash if using 4.1 U1
 123: ### Code to join domain ESX 4.1
 124: params = {'domainName':domainname,'userName':ad_username,'password':ad_password}
 125: e_params = urllib.urlencode(params)
 126: req = urllib2.Request(url,e_params)
 127: page = urllib2.urlopen(req).read()
 128:  
 129: __JOIN_AD__
 130:  
 131: #execute python script to Join AD
 132: /bin/python /tmp/joinActiveDirectory.py
 133:  
 134: #### End AD Join Code ####
 135: # Changes UserVars.CIMoemProviderEnabled to 1.  Required for OMSA VIB to work properly.
 136: esxcfg-advcfg -s 1 /UserVars/CIMoemProviderEnabled 
 137: %firstboot --unsupported --interpreter=busybox --level=9999
 138: # Do Patching in this section
 139:  
 140: #Gets Emulex and OMSA VIB from IIS Server w/ virtual directory pointed to NAS hosted directory
 141: #Applies Emulex then OMSA VIB <-- Must be in this order.
 142: # Maintenance Mode attempted twice before attempting patch because it sometimes fails.
 143: /bin/vim-cmd hostsvc/maintenance_mode_enter
 144: sleep 5
 145: /bin/vim-cmd hostsvc/maintenance_mode_enter
 146:  
 147: # Entries entered twice due to metadata.zip possibly not extracting properly the first time.
 148: /sbin/esxupdate --bundle=http://IISSERVER.local.com/VIBS/Emulex_CIM/elx-esx-4.1.0-emulex-cim-provider-3.2.30.1-offline_bundle-364582.zip update
 149:  
 150: /sbin/esxupdate --bundle=http://IISSERVER.local.com/VIBS/Emulex_CIM/elx-esx-4.1.0-emulex-cim-provider-3.2.30.1-offline_bundle-364582.zip update
 151:  
 152: /sbin/esxupdate --bundle=http://IISSERVER.local.com/VIBS/Dell_OMSA/OM-SrvAdmin-Dell-Web-6.5.0-2247.VIB-ESX41i_A01.zip update
 153:  
 154: /sbin/esxupdate --bundle=http://IISSERVER.local.com/VIBS/Dell_OMSA/OM-SrvAdmin-Dell-Web-6.5.0-2247.VIB-ESX41i_A01.zip update
 155:  
 157:  
 158: /bin/vim-cmd hostsvc/maintenance_mode_exit
 159:  
 160: /sbin/reboot -d 120

PSA: ESX 4.x Emulex LPe12000-E, Firmware 2.00A3 not compatible with vMax

Summary:
Found this out the hard way, but for anyone who might be banging your head against the wall.  Check if your ESX host has Emulex LPe12000-E and running firmware 2.00A3.  If so upgrade to 2.00A4.

Symptoms:

  1. ESX host not mapping/detecting LUN regardless of rescan attempts.
  2. VM's suddenly going offline because of disk access problems.

Emulex VIB and Dell OMSA VIB w/ Dell Management Plugin for vCenter

Summary:
Found this out when installing the Emulex VIB on an ESXi 4.1 host w/ the Dell OMSA VIB installed.  Apparently something w/ the Emulex VIB causes issues w/ the Dell OMSA install causing it to stop talking to the Dell Management Plugin for vCenter.

Solution:

  • Install the Emulex VIB THEN the Dell OMSA VIB
OR

  • Uninstall Dell OMSA VIB, reboot, then attempt install based on order above.
FYI:
To uninstall a VIB from ESXi 4.1, you can use vCLI or TSM (Tech Support Mode).
esxupdate query  <--  This will return the installed VIB's and their bulletin ID which is need for removal.
esxupdate --b Bulletin_ID_of_VIB  remove  <-- This will remove the VIB