Error: Issues information is not available at this time. (vCenter Appliance)

The above was a wonderfully descriptive error I would receive in the web client.  This started appearing after I removed individual nodes from a cluster and readded them back to inventory.  (was trying to clear some bunk HA errors)

Long story short, I had to open the C# client to find out what 'warning/error' it was complaining about.  Quite simply, I had forgotten to re-add the hosts back into the vDS and migrate the vMotion/vSAN vmk connections.

Man-o-man, I see why so many people complain about the web client.

The upside to the story was I found out a couple of things about vSAN.

  1. Having a 3-node cluster minimum, I was able to remove and re-add each host back into the cluster with no issues to VM's running on each host.
  2. Even w/ the vDS problem, vSAN kept chugging along w/ VM's running just fine.
  3. In other words, even without vCenter managing things, the ESXi hosts kept everything running just fine.
  4. This was on my mac mini vSAN cluster.

vCloud Air On Demand (Beta Impressions)


It's definitely beta and I'm not a big fan of some aspects of the implementation, specifically that I might find myself jumping between this and the provided vCloud director a lot.  It's not all bad though.  Click through if you'd like to read my overview/opinion of the service.

Outlook 2013 (Office 365) for Mac Clock Error

Summary:
Ran into this wonderful error while traveling.  Thankfully, I still had Outlook 2011 still installed, so I had a workaround for a bit.

Clock error
The system clock is inaccurate, please set it to current local time.
Details:
This would occur for no obvious reason, although it does seem related to 'travel' related activities when switching time zones.  Outlook would go into offline mode and would require that I activate it first, activation would fail w/ the above error.  If I remember correctly, I had this happen to me two about a month ago as well, but the activation error went away on it's own after I flew back to my timezone.

This time, I screwed around w/ it, and well I probably broke it while trying to fix it before going back to my home time zone.  One of which was deleting the computer from my activated list as a troubleshooting step.  Anyway, Microsoft support on a communities board finally posted a solution, but it was difficult to figure out, so here is a 'translated' step by step.  Specifically step 5 wasn't that clear to me.

Resolution:

vCenter Server Virtual Appliance and Native Active Directory, back to the basics...

I had a rather interesting issue w/ my vCenter Server Appliance (vCSA).  I had it natively joined to my Active Directory domain so I could use it as a native identity source in SSO.  I was running into a rather curious issue where I would add a user to the SSO Administrators group, everything would appear to happen correctly, but the table showing group membership would be blank.



Searching for users in any domain would work fine.  Just not the membership table (Group Members).

Come to found out, after working w/ VMware, looking @ a packet trace, it so happened that the user search dialog was querying a domain controller that had DNS PTR records.

On the other hand, the table showing group memberships would query a domain controller that did not have a PTR record.  After a little investigation, it appeared that we had several domain controllers (part of the parent domain) had PTR records, but because there was a reverse lookup domain space in the child domain that matched the IP address pattern, the reverse lookup would fail.

Seems like a workaround was put into place, but never cleaned up after the fact causing this wonderful conundrum.  Regardless, this was a wonderful reminder to always check the most basic of things first, then move onto the more complicated stuff.  The unfortunate aspect of this was the fact I had Windows vCenter servers running 5.5 and not having this issue.  Just luck of the draw I suppose...

Packt’s $5 eBonanza returns (Sponsored Post)



Following the success of last year’s festive offer, Packt Publishing will be celebrating the holiday season with an even bigger $5 offer.  
From Thursday 18th December, every eBook and video will be available on the publisher’s website for just $5. Customers are invited to purchase as many as they like before the offer ends on Tuesday January 6th, making it the perfect opportunity to try something new or to take your skills to the next level as 2015 begins.
With all $5 products available in a range of formats and DRM-free, customers will find great value content delivered exactly how they want it across Packt’s website this Xmas and New Year.

Find out more at http://bit.ly/1wlsbea

GeekTool: GeekWeather2 w/ auto geo-location...

If you haven't downloaded geektool for the Mac, I would definitely recommend doing so for the 'tinkerers' out there.  I first saw it on LifeHacker and have been somewhat infatuated with it.  Here is what one of my mac's looks like:
Click the image to see it full resolution.
Since the bash command line outputs can be downloaded as geeklets and are relatively easy, I'm going to focus on how to setup the GeekWeather2 geeklet.  In addition to setting that up, I'll also show you how I was able to get it to update the image based on my current location rather than statically set Longitude, Latitude parameters.  (Geeklet is simply another term for a widget specific to geektool.)  Continue through to the page break to learn more.

JXplorer, ADSIEdit equivalent tool that is open source, usable on a Mac.

Was turned on to this tool by VMware's GSS for troubleshooting a relatively minor issue that I've been having w/ the VMware vCenter Server Appliance.  Specifically around the native Active Directory integration.

Anyway, I like the tool since it's just another thing I can use w/o having access to a Windows system to find Active Directory information.  Although, it may be difficult figuring out your DN w/o Active Directory Users and Computers (ADUC) or ADSIEdit to make the initial bind connection.


http://jxplorer.org

Here is a screenshot of how to connect:

Mac: Background flashes, Dock not showing up...

Not sure what caused this as I hadn't done anything unusual w/ my Mac for awhile.  Long story short, some preference in my user profile was causing this issue.

In particular, the thought it was my dock preferences, but I had to delete my everything under my user's ~/Library/Preferences to get my account back and working properly.  You should have only to do the following:

Delete ~/Library/Application Support/Dock
Delete ~/Library/Preferences/com.apple.dock.plist

Here is screenshot by screenshot on how to do this:

Interview w/ William Lam on AutoTrader.com Mac Mini vSAN (MacCloud)

Enjoyed my conversation w/ William talking about my ghetto MacCloud setup.  You can read the interview here:
http://www.virtuallyghetto.com/2014/08/community-stories-of-vmware-apple-os-x-in-production-part-4.html

Some things people have asked me for clarification:

  1. We are using Mac Mini 'Server' versions.  These have two drives by default.
  2. You can get a kit to add a second drive to the standard mac mini version.
  3. Mgmt and VM traffic flows over Standard vSwitch0 (Onboard as Uplink)
  4. vSAN and vMotion flows over dVS (Thunderbolt as Uplink)
  5. Onboard 1Gb and Thunderbolt 1Gb adapter
  6. Booting to USB thumb drive plugged into the back of the Mac Mini w/ ESXi.
  7. vCenter is a vCSA built and running on another vCenter instance.
 Here is what it looks like configured:


Converged Networking Perils...

Summary:
Had a wonderful experience where a P2V VM w/ bonded NIC's brought down several of our ESXi hosts.  HA compounded the problem by powering up the VM on other hosts once the host w/ this VM was brought down.  The perils of converged networking and why it's important to keep your ESXi management/storage separate from your other physical ports.  If these were 'physically' separate, the problem would have isolated to one host and prevented the cascading HA events.

Here is the config in short:
Dell Blade two nPar'd 10Gb ports --> Internal Dell I/O aggregator ports --> External Dell I/O aggregator ports --> Nexus 5K

Management, vMotion, NFS, AND VM traffic go over these two ports.

One port goes over Fabric A, the other over Fabric B.  Two physically separate uplinks.

What happened:
VM w/ bonded NIC's comes online.  This seemed to cause a 'spanning-tree' like event which caused the Internal Dell I/O aggregator ports to go into an 'error-disable' like state.  I say like because neither of these functions are in the Dell IOA's

Looking @ the Dell I/O aggregator internal ports attached to the blade, we saw something like this:

  • Port     Description  Status Speed     Duplex Vlan 
  • Te 1/12               Up     10000 Mbit Full   —
Normal state should show a list of VLAN's available, not just dashes.  Like so:

  • Port     Description  Status Speed     Duplex Vlan 
  • Te 1/12               Up     10000 Mbit Full   1,31,42,69

Workaround:
Waiting on Dell to see why the IOA reacted as it did.  In the meantime, we've moved management, NFS, and vMotion to Fabric B while leaving VM networking running over Fabric A.

This way the problem will keep the ESXi and VM's running, but only disconnect their network activity should this ugly issue rear it's head again.

Below is quick snippet I wrote up to reconnect several VM's network connections due to the issues that occurred above.

Script Snippet to reconnect several VM's:
$ClusterVMs = Get-Cluster MyClusterName | Get-VM

$Problems = $ClusterVMs | where {$_.powerstate -eq "poweredon"} | get-networkadapter | where {$_.ConnectionState.connected -ne $True}

$Problems | set-networkadapter -connected:$True

#freeITBM VMware ITBM Free? (Opinion)

So lately there has been more discussion around the office whether we should move workloads to the 'cloud'?  AWS being the obvious 800lb gorilla.  I recently attended an AWS Essentials training and came out of it really impressed w/ their offering.  So much so, I thought, 'yeah, it might be time to diversify out of my VMware only mindset.'

That being said, 'cost' is a huge factor.  Not to mention security and a slew of other things, but we'll focus on cost being the topic.  How in the world do you calculate cost?  VMware had Chargeback, but that tool was a pain and quite frankly useless.  Now they have ITBM which is a very simplified tool @ it's core, but has some pretty impressive capabilities.

Amazon has a calculator, but honestly, I feel like that it is more than likely skewed in favor of AWS.  So this leads me to the idea that VMware needs to take the "Progressive" approach of 'compare' our prices to our competitors and choose what's best for you using "Actual Data".  ITBM Standard should be free and open even for the vCHS service.

I can only see this benefiting VMware's image as a transparent entity in the cloud wars that helps businesses make the most cost-effective decision.  Even if it's not VMware.  Also giving this tool to the already entrenched VMware administrators/engineers/vExperts @ no cost can only empower them to show how cost-effective VMware is to the business.

If you agree, make your thoughts known.

Twitter HashTag: #FREEITBM

Amazon Terms translated to VMware (How I understand them anyway)

Feel free to comment.  I'm just taking a simplified view.

Amazon EC2 = VM or vSphere
Amazon EBS (Elastic Block Store) Volume = vmdk / RDM
Amazon S3 = NAS / Windows File Share / NFS Volume / Etc.
Amazon AMI = vSphere Template/OVF (Basic OS w/ or w/o applications pre-installed)
Amazon RDS = Managed RDS DB (No OS or SQL server to manage) just DB instance.
Amazon Cloudwatch = vCenter Operations Manager / HP Insight / SiteScope / Monitoring / Etc.
Amazon Elastic Beanstalk = vFabric / Pivotal?
Amazon CloudFormation = vApp / VMware vCloud Automation Center / VMware Orchestrator (Granular Blueprint)

Useful Powershell .NET method to convert DNS name to IP

Just thought this was useful, so decided to post it as a reminder for myself or anyone else really.
[system.net.dns]::gethostaddresses("www.vmware.com")

The reverse being:
[system.net.dns]::gethostbyaddress("23.64.19.51")

Here is how I used it w/ PowerCLI:
$VMHosts = Get-VMhost
$VMHosts | select Name, @{Name="IP";Expression={[system.net.dns]::gethostaddresses($_.Name)}}

This information can be particularly useful if you need IP's for firewall rule tables. Source: http://blogs.msdn.com/b/powershell/archive/2006/06/26/647318.aspx

VMWorld 2014 - Are you attending?

If not, I highly recommend you register.  Not only is it a fun time, it's probably one of the best 'training' experiences you can get.  In combination w/ the hands-on labs, you'll have access to some of the industries best known experts for immediate answers to your pressing questions.  VMware is also offering 50% off their VCP/VCAP examinations if taken while onsite.

Registration Link:
http://www.vmworld.com/registration.jspa

Letter to convince your Boss:
http://download3.vmware.com/vmworld/2014/downloads/vmworld-2014-us-justification-letter.doc

VMUG Advantage Discount:
By joining the VMUG Advantage program, you can take off $100 of registration among other benefits.

For those who are attending:
VMUnderground - http://blog.vmunderground.com/
VMWorld 2014 5k Fun Run - http://download3.vmware.com/vmworld/2014/downloads/fun-run-info.pdf

Recommended Session:
INF1601 - Taking Reporting and Command Line Automation to the Next Level with PowerCLI
Always a hit!


Swingbench, OEWizard.bat, and Java fun...

I'll keep this short.  Using Java 7 (1.7) seems to cause this issue:
Error occurred during initialization of VM
Could not reserve enough space for object heap

Upgrading/Installing Java 1.8 "JDK" seems to fix the above issue.  Adding -Xmx<#>m would not fix the issue either.

Anyway, figured I'd post this since I really couldn't find an answer to this bizarre issue.

Get-VIEventsFaster PowerCLI function...

[Update: Come to find out LucD wrote a Get-VIEventPlus function that I did not find before making mine.  He adds some other switches that might be useful, same idea though.  Just tells me I really should keep up on his blog more often.]

I wrote this function so I could replace the Get-VIEvent cmdlet in my scripts.  The great part is that the output ends up being roughly the same as the cmdlet so just changing my calls to this custom function speeds everything up like 100-fold.  That might be an exaggeration, but yeah, it's WAY faster.

It's written so that most get-vievent common switches are included.  Syntax is 'slightly' different, but usable so you don't have to modify any get-vievent calls too heavily.  I added a 'type' switch which will help shave off even MORE time.  Anyway, feel free to give it a try or let me know if you have any feedback.

Finally, It's written like a cmdlet so you can import it as a module or dot source it.  I've included some examples as well.

The 'entity' switch works 'ok' if you give it a variable captured object like:
$myVM = Get-VM myVMName
Get-VIEventsFaster -Entity $myVM

I want it to work like this:
$myVM | Get-VIEventsFaster -Entity $_
but I can't get it work like this, but $_ or inference doesn't work like how I think it should.  Just my lack of knowledge here really.
Script:


#Get-VIEventsFaster
#
Function Get-VIEventsFaster
{
<#
  .SYNOPSIS
  Uses the PowerCLI Get-View cmdlet to query for events.
  .DESCRIPTION
  This is meant to replace the Get-VIEvent cmdlet in scripts for faster results w/o dramatic changes to code.
  .PARAMETER server
  Connects to vCenter or ESXi server specified.
  .PARAMETER start
  The beginning of the time range. If this property is not set, then events are collected from the earliest time in the database. 
  .PARAMETER finish
  The end of the time range. If this property is not specified, then events are collected up to the latest time in the database. 
  .PARAMETER type
  An array of event types can be specified as a filter.  See examples to see how to get a valid list of event types.
  .PARAMETER entity
  Looking for a vSphere object, VM, host, or otherwise. 
  .EXAMPLE
  $Date = Get-Date ; $Events = Get-VIEventsFaster -Start ($Date.AddMonths(-1)) -Finish $Date
  Gets all events from 'exactly' 1 month ago to today and captures them in the $Events variable.  
  If Get-Date returned Friday, June 13, 2014 11:00:46 AM, one month ago would be Tuesday, May 13, 2014 11:00:46 AM.
  .EXAMPLE
  $Date = Get-Date ; $Events = Get-VIEventsFaster -Start ($Date.AddMonths(-1)) -Finish $Date -Type "VmCreatedEvent","VmClonedEvent","VmDeployedEvent"
  Gets specified event types from 'exactly' 1 month ago to today and captures them in the $Events variable.  
  If Get-Date returned Friday, June 13, 2014 11:00:46 AM, one month ago would be Tuesday, May 13, 2014 11:00:46 AM.
  .EXAMPLE
  $Events | % {($_.gettype()).name} | select -Unique
  You can use this one liner to determine valid event 'types'
  .LINK
  http://tech.zsoldier.com/2014/06/get-vieventsfaster-powercli-function.html
  #>
param (
    [Parameter(Mandatory=$False,HelpMessage="ESXi or vCenter to query events from.")]
    [VMware.VimAutomation.ViCore.Impl.V1.VIServerImpl]
    $Server,

    [Parameter(Mandatory=$False,HelpMessage="Start Date to begin gathering events")]
    [DateTime]
    $Start,

    [Parameter(Mandatory=$False,HelpMessage="End Date to finish gathering events")]
    [DateTime]
    $Finish,

    [Parameter(Mandatory=$False,HelpMessage="Filter down to types of events")]
    [string[]]
    $EventType,
    
    [Parameter(Mandatory=$False,ValueFromPipeline=$True,HelpMessage="Looks for events associated w/ specified entity or entities")]
    [VMware.VimAutomation.ViCore.Impl.V1.Inventory.InventoryItemImpl[]]
    $Entity
    )
Begin 
    {
    $AllEvents = @()
    $em = get-view -Server $Server EventManager
    $EventFilterSpec= New-Object VMware.Vim.EventFilterSpec
    #VIServer
    If (!$Server)
    {
    If (!$global:DefaultVIServers){Write-Host "You don't appear to be connected to a vCenter or ESXi server." -ForegroundColor:Red; Break}
    $Server = $global:DefaultVIServers[0]
    }
    #Type
    If ($EventType)
        {
        $EventFilterSpec.EventTypeID = $EventType
        }
    #Time
    If ($Start -or $Finish)
        {
        $EventFilterSpec.Time = New-Object Vmware.Vim.EventFilterSpecByTime
        }
    If ($Start)
        {
        $EventFilterSpec.Time.BeginTime = $Start
        }
    If ($Finish)
        {
        $EventFilterSpec.Time.EndTime = $Finish
        }
    #Entity
    If ($Entity)
        {
        $EventFilterSpec.Entity = New-Object VMware.Vim.EventFilterSpecByEntity
        $EventFilterSpec.Entity.Recursion = "self"
        $EventFilterSpec.Entity.Entity = $Entity.ExtensionData.MoRef
        }
    }
Process
    {
    #Query
    $evCollector = Get-View -Server $Server $em.CreateCollectorForEvents($EventFilterSpec))
    $PageEvents = $evCollector.ReadNextEvents(100)
    While ($PageEvents)
        {
        $AllEvents += $PageEvents
        $PageEvents = $evCollector.ReadNextEvents(100)
        }
    $AllEvents
    }
End {$evCollector.DestroyCollector()}
}
Additional Info:
Time Difference (my function is 900% faster):
Measure-command {Get-VIEventsFaster -Start ($date.AddMonths(-1)) -Finish ($date)}
Hours             : 0
Minutes           : 12
Seconds           : 57
Milliseconds      : 622
Ticks             : 7776226103
TotalDays         : 0.00900026169328704
TotalHours        : 0.216006280638889
TotalMinutes      : 12.9603768383333

Measure-command {Get-VIEvent -Start ($date.AddMonths(-1)) -Finish ($date)}
Hours             : 1
Minutes           : 48
Seconds           : 59
Milliseconds      : 880
Ticks             : 65398800684
TotalDays         : 0.0756930563472222
TotalHours        : 1.81663335233333
TotalMinutes      : 108.99800114

You can use this one liner to determine what 'names' constitute a valid event 'type':
$Events | % {($_.gettype()).name} | select -Unique

Updating vCenter Plug-in Registration URL's (from IP address to DNS) using PowerCLI

I've found this post by Josh Perkins helpful in more ways than the one demonstrated.  It's allowed me to not only update my vcops plugin registration w/ vCenter, but also helped me to update my Dell vCenter plug-in so that it connects via its DNS address rather than its IP.

http://www.vstable.com/2012/04/02/vcenter-operations-5-x-vcenter-plugin-uses-ip-instead-of-dns-hostname/

However, I decided to explore the possibility of using PowerCLI to fix these registrations.
Turns out you can and the change is immediate, so you don't have restart the vCenter service.
YAY!  No more cert errors!  You still have to ssh into the vCOPs UI vm and update the viClientConfig.xml file, but that's easy enough.

Here is my result (specifically for vCOPs):

$BaseURL = "https://myvCOPsRegisteredDNS.Name.local"
$ExtURL = "/vcops-vsphere/"
Connect-VIServer my1stvCenterServer, my2ndvCenterServer
Foreach ($DefaultVIServer in $global:DefaultVIServers)
{
    $VIServerExtensionManager = Get-View -Server $DefaultVIServer ExtensionManager
    $vcopsext = $VIServerExtensionManager.ExtensionList | where {$_.key -match "com.vmware.vcops"}
    ($vcopsext.server | where {$_.url -match "viClientConfig"}).url = ($BaseURL + $ExtURL + "viClientConfig.xml")
    ($vcopsext.client | where {$_.url -match "vcops-ngc.zip"}).url = ($BaseURL + $ExtURL + "vcops-ngc.zip")
    # If you don't $null the below properties, then the objects underneath these produce errors in updating because those object properties are required.
    $vcopsext.ExtendedProductInfo = $null
    $vcopsext.solutionManagerInfo = $null
    $VIServerExtensionManager.UpdateExtension($vcopsext)
}

PernixData: What is it? Does vSAN render it obsolete?

What is it?:
Simply put, it's flash acceleration.  You install a VIB in ESXi and register the PernixData Management (virtual management appliance) plugin to vCenter.  You can then take flash drives from each of your ESXi servers and clump them together to make a flash tier across all your hosts.

Does vSAN render it obsolete?:
Not really, it's a good solution to augment any existing SAN you might have.  It also won't require much change.  The scenery maybe changes as vSAN increases its configs max and traditional SANs fade, but that probably won't be for a long while.

The cool things:

  1. You can use any SSD you want.  You don't have to purchase high-end or vendor specific SSD's.
  2. Reads and Writes can be accelerated.
    1. If the SSD fails, if configured, replicates that write to another SSD in the cluster.
    2. Yes, you would use network bandwidth @ this point only until the failed SSD is replaced.
    3. Most flash caching will only do reads because write redundancy can be somewhat problematic.
  3. If you use something like NetApps backup and recovery services, you don't have to replace it because you are not inherently changing anything.
    1. vSAN you would likely need to look @ a third-party or for small implementation VMware's backup solution.
    2. Assuming PernixData will support NFS in the future.
  4. Usable from ESXi 5.0
    1. vSAN requires 5.5 U1
This is a good in-between vSAN and standard monolithic SAN arrays.  If you are using NFS, unfortunately, you are out of luck currently.  Support for NFS is supposed to be on the way though.

You can find out more here:



VMware vSphere Profile-driven Storage Service not starting/running...

Summary:
Really a benign error especially if you don't use the function, but quite annoying if vCOPs is looking @ vCenter health.

Resolution/Workaround:
In my case, it appeared as though the vSphere Web Client service was conflicting w/ this Profile-Driven storage service.

  1. Stop vSphere Web Client service
  2. Start VMware vSphere Profile-driven Storage Service.
  3. Start vSphere Web Client service.
For some reason this works and the web client seems to have a bit more intelligence in choosing ports  to connect to rather than the storage service which gives up the second a port it tried is in use.  Probably a hard-coded thing.

Other Notes:
If you are using the vSphere web client (which I wouldn't even bother with until 5.5 or newer), then it might make sense to install it on a different server to mitigate this issue.  Another possibility is to set its service to a delayed start.

Connect-VIServer not connecting to vCSA 5.5 U1 using windows integrated authentication...

Summary:
Connect-VIserver MyvCSAServer was not connecting using my service account's (for scheduled tasks) windows account.  It would always prompt for credentials.  Fairly odd since it has permissions and is able to connect to several other vCenters w/o inputting credentials.

By the way, this is very convenient since I don't have to insert passwords anywhere in clear text or come up w/ some crazy solution to encrypt the password.

Solution/Workaround:
Simply log into the web client using the service account once.  Once authenticated, powerCLI should not have prompt for credentials.

[This applied when the VCSA's default identity source is set to Active Directory (Windows Integrated Authentication) and is set as the default domain.  Active Directory as a LDAP server option will not work.]


Hypothesis:
I'm guessing this is some kind of weird SSO thing, where the account needs to get locally cached prior to allowing Windows integrated authentication.  It also makes me wonder if my service account were enabled for impersonation whether I would have had to manually authenticate first.

Additional Info:
Alan Renouf posted about this awhile back, but didn't come up in my google searches for some reason.
http://blogs.vmware.com/PowerCLI/2013/03/back-to-basics-connecting-to-vcenter-or-a-vsphere-host.html

SQL Connection Delay!?

Summary:
Just another standard maintenance, upgrading vCenter from 5.0 U2 to U3.  Nothing special to see here.  Oh wait, it failed?  CRAP.  Restore database, try again.  Can't build vCenter Repository?!  Crap, restore database, try again.  AGAIN!!?  Long story short, SQL Authentication specified in the ODBC connection was experiencing intermittent connection issues.  Windows integrated was much more stable.

Behavior:
Opened ODBC --> Configure ODBC connection --> Enter SQL Credentials -->  Next... wait --> Error (See below for errors) --> Click OK --> Select Next again --> successfully connects and tests successfully.  Repeat...

Hypothesis:
This problem was likely due to the firewall in-between the vCenter server and SQL server.  As to what that problem was exactly, I have no clue.

Solution/WorkAround:
Changed ODBC connection from SQL Authenticated User to Windows Integrated.  For this to work, you have to change the following:

  1. Change the following services to start as a windows service account that has dbo control over the vCenter database.
    1. VMware VirtualCenter Server
    2. VMware VirtualCenter Management Webservices
    3. VMware vSphere Profile-Driven Storage Service
  2. Change ODBC connection from SQL authenticated to Windows Integrated.
  3. Open Registry and go this path: HKLM/Software/VMware, Inc/VMware VirtualCenter/DB
    1. Blank out entries for 2 and 3 (SQL username and crypted password)
  4. Modify vcdb.properties file to enable integrated authentication. (Assuming you are using MSSQL)
    1. vcdb.properties file is normally located under C:\programdata\VMware\VMware VirtualCenter\
    • usevcdb=true
    • url=jdbc:sqlserver://YourSQLServerName\\SQLServerInstanceNameifApplicable;databaseName\=YourvCenterDB;integratedSecurity\=true
    • dbtype=mssql
    • driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
      • By not changing the vcdb.properties, you may end up w/ errors for the License Services and vCenter Storage Monitoring Service.
        • vCenter Storage Monitoring Service: Service initialization failed.
        • License Services: Unable to get license usage data
        • etc.
  5. Start vCenter services or update vCenter @ this point.
Errors:

sqlstate 08001 Server Error 0

Microsoft SQL Server Native Client Version 10.50.1600

Running connectivity tests...

Attempting connection
[Microsoft][SQL Server Native Client 10.0]Unable to complete login process due to delay in opening server connection

TESTS FAILED!


Newer Processor = Faster Performance? Sometimes...

Summary:
We were receiving reports of some developers experiencing a degradation in JVM compile performance and general compiled application performance.  We had just recently vMotion'd these VM's from HP G7 systems w/ Westmere processors to newer Dell M620 blades running Sandy Bridge Processors.

Long story short, applications compiled on Westmere don't take advantage of a new AVX CPU extension available on Sandy Bridge, which in turn is only made available in RHEL 6.2 and newer kernels.  I'm not sure if Windows would be affected in the same way, but this was a definite issue in RHEL 5.8.

The performance delta was not 'huge' but enough in terms of scale.

Powershell functions and referencing the script that calls that function...

Summary:
Lately I've been putting together functions so I can reuse code in my other scripts.  As part of error checking/reporting, I wanted to add a way for my function to reference the script that was making use of it.  I put a question out on twitter and here is what I learned.
Quick and Dirty:
function Test-Function
{
Param 
    (
    [string]$Weird
    )
Write-Host "MyInvocation" -ForegroundColor:Green
$MyInvocation
[string]$test = $MyInvocation.ScriptName.split("\") | select -Last 1
Write-Host $test -ForegroundColor:Green
}

Hit page break if you want more details and an example of how I used $MyInvocation.

How to null terminate object properties in Powershell

Summary:
I was working on a script, which I'll post on later, to insert IPMI/iLO/iDRAC configs into my ESXi hosts.  I would get an error the following error consistently no matter what I put into my IPMI object:

Exception calling "UpdateIpmi" with "1" argument(s): "A specified parameter was not correct. 
"
At line:50 char:2
+     $_this.UpdateIpmi($ipmiInfo)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : VimException

The short answer, I had to 'null terminate' the properties in my IPMI object.  I don't know 'why' I have to do this, but the vSphere API docs state that this is a requirement.  Quite frankly, I had no idea what this meant.

Solution Example:
To null terminate an object's property, you can simply do like so:
$MyObject = "" | Select Usefulproperty
$MyObject.Usefulproperty =  ("Something" + $null)

Additional Notes:
I'll follow-up w/ a post of the script I put together to do this so that it makes more sense.

Get iDRAC/ILO (aka Baseboard Management Controller) IP via PowerCLI

[Update: 1 report states issues w/ HP Gen9 systems.  Newer Dell, and older HP systems don't seem to have issues.  If you have a HP Gen9 system, feel free to contact me via google hangouts and/or twitter to start an interactive session and we can work through figuring out a workaround.]

Summary:
Needed a way to figure out what IP my HP iLO's / Dell iDrac's were configured with.  Ended up using an oldie, but a goodie script put together by Carter Shanklin.

PreReqs:

  1. Powershell 2+
  2. PowerCLI 4+
  3. Must have Port 443 (https) access to your ESXi hosts.
    • If firewalls are an issue you may have the option of running this from your vCenter if it's still running on Windows.  If it's the vApp, you'll need to open access to port 443.
  4. Download Carter's script
Short and Sweet:
$info = Get-VMHostWSManInstance -VMHost (Get-VMHost myESXiServer) -ignoreCertFailures -class OMC_IPMIIPProtocolEndpoint
$info
# You can remove the -ignoreCertFailures flags if your systems have trusted certs.
# This should return you the configuration of your iLO/iDrac, which includes IP address, like so:
$info.IPv4Address

Details:

Learning PowerCLI by Robert van den Nieuwendijk

Summary:
Don't ask me how to pronounce Robert's last name.

Review
The great thing about Robert's approach is that he takes the time to point out some basic powershell syntax outside of PowerCLI. You are then soon driven into some very useful cmdlets to extract information from your vSphere environment using Powershell and vSphere's PowerCLI cmdlets. There were a couple of areas of concern where a lack of explanation on certain things lead to a hmmm? moment, but overall an excellent book for a vSphere admin looking to use PowerCLI. For me as a technical person, I like the 'straight to the point' approach. This book is filled w/ little text and more usable script examples for me to get my job done as an admin/engineer.

Disclosure
For full disclosure, I was given this book to review, but was not compensated beyond this. I also have met Robert before, but that in no way has an affect on my review of this book. The above review reflects my honest opinion. You can find this book on http://www.packtpub.com/learning-powercli/book and Amazon.

The server naming convention is dead, long live the server naming convention!

Summary:

  1. Get rid of conventions that can be cross-referenced from other data sources in a programmatic fashion.  
  2. Consolidate or present those cross-referenced data points into one pane of glass.
Rant:

In times old, server's had cool names like Ferrari, Robotech, etc.  Although cool, this drove the need for a server naming convention which served useful purpose.  It could tell us a good many things about a server just by looking @ its name.  Some things could be:

  1. Location
  2. OS
  3. Application
  4. Etc.
Because of limitations in previous technologies, you had to limit your server name to a certain number of characters (coming from a Windows background).  Each of these data points needed to be shortened to acronyms or numbers.  This essentially requires a decoder ring for each section of the server name to understand it's hidden meaning.  When dealing w/ a small environment, not a big deal, but scalability becomes a problem.

Using the examples given above:
  1. Location Sources
    • IP Space
    • Active Directory Sites and Services
    • Virtualization Management systems like vCenter or SCvMM
    • Local iLOM/IDrac/OOB
  2. OS Sources
    • Active Directory
    • WSMan
    • Bash
    • Virtualization Management systems like vCenter or SCvMM
  3. Application - a bit more complex, but use sources.
    • WSMan
    • Other tools to extrapolate the installed applications and convert those to 'tags'
Bottom line:
Any modern naming convention should not contain any crypted metadata that can be programmatically cross-referenced from a trusted source.

Quirkiness of Excel 2011 for Mac, CSV's, and Powershell 3.0 import-csv

Summary:
Work on Windows or a Mac, don't cross the streams unless you're up against Gozer.

Details:
I made a CSV file using Excel 2011 for Mac w/ that looked something like this:

HeaderName, HeaderName2, HeaderName3, HeaderName4
Meh, super.meh.local, space, heckling
Sigh, super.meh.local, space, bashing

Saving this as a "Comma Separated Values" file was my first mistake cause when I tried to import this in Powershell, I would get the following super helpful error:

import-csv : The member "super.meh.local" is already present

To boil it down, I needed to save the CSV as a "Windows Comma Separated" csv file type.  The other method was that I could have placed quotes around all comma separated values via a text editor.


vCenter Log Insight not receiving syslogs from ESXi hosts

Summary:

This appears to occur under very specific circumstances. There is a KB and it is also noted Log Insight's troubleshooting section of their documentation.

Rather than regurgitate all the same information is here is the gist:
  1. Occurs when log insight services are restarted
  2. Affects ESXi 5.0.x/5.1.x when using TCP and 5.0 U1 and earlier over UDP.
  3. Does not affect 5.0 U2 and newer when using UDP.
Here is the table:



Communication ProtocolAffected ESXi Version
TCP

  • ESXi 5.0.x
  • ESXi 5.1.x
  • UDP
    • ESXi 5.0 and 5.0 U1