Wednesday, August 12, 2015

Composer Fault: Virtual Machine with Input Specification already exists

Error During Provisioning: View Composer Fault: Virtual Machine with Input Specification already exists

If you've ever run into this error when composing linked clones with VMware Horizon View Composer, you are very much not alone. This is a common error that ultimately comes down to this: your Composer database already has an entry with that VM name in it. There are 3 ways to fix it depending on your View version and scenario. But first, let's understand the issue.

Why does this error happen? Usually due to a delete operation not fully completing. When you click Delete for a linked clone in Horizon View, it has to be removed from the View ADAM database, the vCenter Server database, and the Composer database. If the linked clone gets removed from ADAM and VC but fails to be removed from the Composer DB for some reason, when you go to recompose that VM with the same name, you'll see this error.

Let's say the VM is deleted from vCenter only, it's gone from the VCDB and won't show up in vCenter Inventory, but will likely show in View with an error until it's removed from the ADAM database. Once it's removed from ADAM all will appear to be well, until you re-create that linked clone - you'll see the title error.

If you're at the point where the VM is gone from View, meaning you don't see it in View Administrator or in any pool.. and you're at the point where the VM isn't anywhere to be found in vCenter, meaning you've done a search and verified the VM has been deleted from the vCenter Inventory, and you're seeing the title error, you should follow the sviconfig processes outlined in in http://kb.vmware.com/kb/2015112 (for View 5.2 and earlier)

If you're on View 5.3 or later, use the ViewDBchck tool from http://kb.vmware.com/kb/2118050

If you continue to have issues, try running the below scripts on your Composer's SQL database. There are two scripts below: a Query script and a Delete script. To see if the VM does indeed exist in the Composer DB, run the query script changing the blue fields to match your VM name and the Composer Database name. This does not modify anything in the DB, just does a search. If it returns data in any tables, then you know that's the issue and you can proceed to use the Delete script (editing the same vm-name and Composer DB name fields as the query script).

I cannot take credit for these scripts, but they have proven invaluable during my time in support! Let me know in the comments if these helped!

Composer SQL DB Scripts


Caution: The scripts are provided as-is. Do not use the scripts without first taking a backup of the composer database to restore in case of a problem. The scripts only work on MS SQL.

Query Script:
/*This SQL Query will allow FAST access to see if remnant vm's Exist inside the Composer DB*/ 
DECLARE @name nvarchar(255)
/*Enter Name Below for VM on line with set [@name='vm_name_here'] */
set @name='enter-VM-name-here'
/*Enter Name of VMware View Composer Database for line below [use database_name]*/
use Composer-database-name

SELECT *
FROM [dbo].SVI_TASK_STATE
WHERE SIM_CLONE_ID = (SELECT ID FROM [dbo].SVI_SIM_CLONE WHERE VM_NAME like @name)

SELECT *
FROM [dbo].SVI_VM_NAME
WHERE NAME = @name

SELECT *
FROM [dbo].SVI_SIM_CLONE
WHERE VM_NAME = @name

SELECT *
FROM [dbo].SVI_SC_PDISK_INFO
WHERE PARENT_ID = (SELECT ID FROM [dbo].SVI_SIM_CLONE WHERE VM_NAME like @name)

SELECT *
FROM [dbo].SVI_SC_BASE_DISK_KEYS
WHERE PARENT_ID = (SELECT ID FROM [dbo].SVI_SIM_CLONE WHERE VM_NAME like @name)

SELECT *
FROM [dbo].SVI_COMPUTER_NAME
WHERE NAME = @name


Delete Script:

/*!!!DELETES VM FROM SQL DB CAUTION!!!*/ 
/*Enter Name Below for VM on line with set [@name='vm_name_here'] */
DECLARE @name nvarchar(255)
set @name='enter-VM-name-here'
/*Enter Name of VMware View Composer Database for line below [use database_name]*/
use Composer-database-name

DELETE
FROM [dbo].SVI_TASK_STATE
WHERE SIM_CLONE_ID = (SELECT ID FROM [dbo].SVI_SIM_CLONE WHERE VM_NAME like @name)

DELETE
FROM [dbo].SVI_SC_PDISK_INFO
WHERE PARENT_ID = (SELECT ID FROM [dbo].SVI_SIM_CLONE WHERE VM_NAME like @name)

DELETE
FROM [dbo].SVI_SC_BASE_DISK_KEYS
WHERE PARENT_ID = (SELECT ID FROM [dbo].SVI_SIM_CLONE WHERE VM_NAME like @name)

DELETE
FROM [dbo].SVI_SIM_CLONE
WHERE VM_NAME = @name

DELETE
FROM [dbo].SVI_COMPUTER_NAME
WHERE NAME = @name

DELETE
FROM [dbo].SVI_VM_NAME
WHERE NAME = @name
Share:

Tuesday, August 11, 2015

How to backup and restore the Horizon 6 View ADAM database

The ADAM database is the heart and soul of your Horizon View environment. It contains all sorts of great stuff from Pool inventory, to persistent disk assignment, to licensing information. Long story short, if you lose your ADAM database, you straight up lose. Be a winner and backup your database!
Did you know?
View is smart enough to backup its own database. If you jump onto one of your Connection Servers and navigate to C:\ProgramData\VMware\VDM\backups you should see a slew of .LDF files.

Screen Shot 2015-08-10 at 8.37.56 PM

These are your automated backups. You can see when your last backup ran by launching the Horizon View Administration page and navigating to View Configuration > Servers > Connection Servers and looking at the Last Backup column.
Like any good admin, you take your own backups
You don't want to rely only on these backups. They are local to the Connection Server after all, causing a single point of failure if you lose that VM for any reason. You can always copy the latest LDF to another server somewhere, or you can take a manual backup of the current state of the ADAM database. This is extremely simple and highly recommended!

NOTE: You'll also want to know what your data recovery password is before you can restore any backup you have. If you don't know what it is, you can change it by launching View Administrator > View Configuration > Global Settings > Security > Change data security password

Screen Shot 2015-08-11 at 7.49.29 AM

Taking a manual backup of the ADAM database


Before we take the backup, you might be asking, "Do I need to take a backup of all my replica Connection Servers' databases?" The short answer is no, you need only take one backup. This is due to how the restore procedure is carried out (outlined below).

  1. First off, ensure your View environment isn't currently creating or deleting any VMs and disable all pools from provisioning

    1. Launch View Administrator and navigate to View Configuration > Servers > vCenter Server

    2. Click Disable Provisioning
      Screen Shot 2015-08-10 at 9.39.25 PM

  2. Now get a console to your Connection Server

  3. Launch an elevated Windows Command Prompt

  4. Navigate to the directory you want the backup to reside temporarily and run
    vdmexport > vdmconfig.ldf

    Screen Shot 2015-08-10 at 9.44.05 PM

  5. This created an LDF file on my desktop. You can compare its size to that of your automated backups (they should be similar)
    Screen Shot 2015-08-10 at 9.46.31 PM

  6. Let's move this LDF to a backup file share for safe keeping and you've got yourself a current ADAM database backup!
It should be noted that in the event of an actual outage that requires a restore of the ADAM database, best practice is to also restore the Composer and vCenter databases from the same time frame of the ADAM backup. Otherwise the VM inventory of the databases could be out of sync causing orphaned VMs and other missing data that could take additional downtime to recover from. The backup and restore of Composer and vCenter are generally quite simple as they follow simple SQL backup and restore procedures. It goes without saying, however, that whatever database you're using, refer to that database vendor for proper backup/restore procedures.

Restoring an ADAM database LDF backup


When it comes time to restore the ADAM database (preferably after Composer and vCenter databases have been restored) the simplest way to get View back up is to reinstall the Connection Server service.

  1. Uninstall the VMware Horizon View Connection Server software (from Add-Remove Programs / Programs and Features / appwiz.cpl / etc)

  2. Uninstall the AD LDS Instance VMwareVDMDS software (This is the ADAM instance which gets installed with View)
    Screen Shot 2015-08-11 at 7.39.00 AM

  3. Remove the ADLDS Role from Server Configuration
    Screen Shot 2015-08-11 at 7.54.56 AM

  4. Reboot the server

  5. Install the Connection Server software

    1. Be sure to choose Standard Server during install

    2. If you have replicas in the environment, we'll deal with those later.

  6. Decrypt the LDF backup you took earlier by launching command prompt and typing
     vdmimport -d -f MyEncryptedexport.LDF > MyDecryptedexport.LDF

  7. This will prompt you to enter your data recovery password.

  8. Now you can import the database into the fresh ADAM instance by typing
     vdmimport -f VDMConfig.LDF

  9. If this is your only Connection Server, you've successfully completed the database restore and View should be fully operational. If you have any replicas in the environment, these servers will need to be re-installed as replicas. Follow the same uninstall process from steps 1 - 4 and ensure you choose Replica during install.

For more information, check out VMware's KB for performing an end-to-end backup.
Share:

Thursday, August 6, 2015

Automating with the Horizon vCO plugin for VMware Horizon Part 1 - Installation

Using the Horizon vCenter Orchestrator (vCO) plugin allows you to automate provisioning tasks, allow end user self-service tasks, configure entitlements and more in VMware Horizon 6 thereby reducing the need for internal email correspondence and exception handling. For a full list of functionality, you'll want to see the Administrator's Guide. The official guide is certainly a good read and can be found here.

This post assumes you already have vCenter Orchestrator installed.
Installing the plugin


  1. Download the VMware vCenter Orchestrator plug-in for Horizon 1.1 from here

  2. Launch the vCenter Orchestrator Configuration page, usually https://localhost:8283

  3. Click Plug-ins on the left and choose Install new plug-in

  4. Browse and select the .vmoapp you downloaded in Step 1

  5. Once uploaded, it will initiate the plugin installation - accept the EULA
    EULA

  6. When it completes, you should see it listed in the Enabled plug-ins installation status with a note "Will perform installation at next server startup."
    install-1

  7. Now we need to restart first the Orchestrator service, and second the Configuration service
    install-2-service

  8. Re-launch the Configuration page and you should now see the Enabled status as "Installation OK"
    install-3

  9. To verify the plugin data, login to the Orchestrator Client Application and verify you see the Horizon Library with the provided default Workflows
    workflows


This is Part 1 in a series on using vCO with Horizon so please subscribe or check back often to stay up to date!
Share:

Wednesday, August 5, 2015

Why an Apple User chose the Pebble Time over the Apple Watch

Hello. My name is Ryan, and I'm an Apple user.. with a Pebble

[caption id="attachment_322" align="aligncenter" width="660"]Photo courtesy of Forbes Photo courtesy of Forbes[/caption]

Now that we've gotten that out of the way.. I wanted to share my thoughts on why I chose the Pebble Time as my smart watch instead of the Apple Watch. They're both great options but with some pretty stark differences. Hopefully this post can help with your decision if you're currently comparing the two excellent options.

The thing I enjoy the most about Pebble is their philosophy on a smart watch is delivered beautifully in their devices - it's a tool to accompany your smart phone (not replace it) and make your day more convenient. Admittedly, I owned the original Pebble. It's the first smart-watch I've owned. A co-worker was selling it used for $40 and I figured a smart watch for $40? Heck yes I'll try that out! My verdict on the smart little device has been exactly how Pebble designed it to be - convenient.

The ability to discretely dismiss a notification as low priority from my wrist is pretty darn handy. On the other hand, (wrist?) the ability to quickly act on an important text or call after just a quick glance at my watch has proven extremely useful. When my 20 month old daughter hides my phone in-between the couch cushions and I haven't seen it for 3 hours, I'm not worried about missing my notifications because the bluetooth works really, REALLY well.

All that to say, smart watches are handy. Absolutely not necessary, but the added convenience to people actively dependent on their mobile technology for work and personal life is something worth considering.

Since most of my daily tech is Apple (Macbook Pro, iPhone, iPad) it seemed natural that if I wanted a smartwatch I should get the Apple Watch. After all what smart watch would have better integration into iOS.. However there are some things that really bug me about the Apple Watch. It's certainly a beautiful looking device and most people seem to really enjoy them. But coming from Pebble, I don't know if I'm as easily impressed.

Here are the things I really like about Pebble Time:



  • Always on - even at slightly obscure angles, I can read what time it is without having to shake my wrist like an angry old man

  • Battery life - you shouldn't have to charge a watch every day. The Pebble consistently lasts around a week and I don't have to worry about it dying during a run or extended use. The best part about this is being able to wear it to bed for not only sleep tracking, but silent alarms that don't wake my wife.

  • Timeline - the OS is all about quick, convenient access to your schedule and notifications. There's not a lot of extra fluff for fluff's sake.

  • Waterproof - you can swim without worrying about ruining your $200+ investment

  • Buttons - I actually really like maneuvering the OS by using the physical buttons of the watch. It makes it feel more like a watch and less like a smartphone

  • Weight - the watch is light!

  • Price - At $200, the Pebble Time is around $150 cheaper than the cheapest Apple Watch


The main concerns I have about the Apple Watch:



  • Battery Life - this is the biggest beef I have. I don't want to have to worry about it dying during a run or bike ride. I also want to be able to regularly wear it to sleep for silent alarms. I'm used to 6+ days on a charge - this would be a huge step backwards

  • Shake of the wrist - I really don't like the idea of having to shake my wrist to check the time. It feels unnatural and looks straight up silly.

  • Sluggish - Reports of the OS being slow are popping up. Likely due to poorly optimized third party applications, but when you're expecting the performance of a high powered smartphone on the low powered watch, you're going to be disappointed. This possibly could be fixed with software updates, but my own opinion is that the watch is slightly underpowered for the OS. If it's slow today, how slow will it be in 2 years?

  • Price - $350 for the cheapest Apple Watch is steep. Even $200 for the Pebble Time is more than I'd like to pay for a watch, but these are the big players in the market, we play by their rules.


Perhaps the 2nd or 3rd gen Apple Watch will address these things. By then it will be exciting to see what other players have jumped into the market for some healthy competition! But for now, I'm extremely happy with my Pebble Time!

EDIT Aug 18th
Turns out I'm not the only VMware fanatic/iPhone User who chose the Pebble Time vs the Apple Watch.. Check out my colleague Duncan Epping's post over at YellowBricks
Share:

Friday, July 31, 2015

Updating Appliances Offline? Sure!

// This is a guest post by Jeremy (@nakedhitman)

[youtube https://www.youtube.com/watch?v=_9OxB_k5a3w]

If you are a VMware user that has discovered the joys and simplicity of Virtual Appliances, you have probably run in to applications built on top of VMware Studio's VAMI utilities. VAMI is the background service that provides the administration page for configuring and updating VMware Studio-based appliances.



VAMI is super cool, and supports multiple upgrade methods. In addition to downloading straight from the web, there are options for secure environments to use local repositories and ISO images as your update source. As nice as this is however, there is almost no documentation for making these offline update repositories, and not every product provides an ISO image for offline use. There are a few blog posts out there that provide workarounds, but they are often more effort than they are worth if you have a lot of updates to do. Is there an easier way?

Thanks to the work of William Lam, the necessary steps to make an offline repository were at least well documented. So I set out on a mission to make this process easier, and created the VAMI Update Repository Appliance (or VURA for short). VURA is fairly straightforward. Once deployed, it will display the address of its web interface on the console and from there you can start adding repositories to it.

vura-0.4-screenshot680

For every public web repository URL you give it, it will download the repository locally and serve up a mirror for it. It also will optionally create an ISO image that you can attach to your appliances and use as the update source. Once it is loaded up with repositories, you can move the VM to your internal network and use it to serve up updates to your appliances.

Since it is quite likely that multiple repositories will fill up its tiny disk, I wanted to make it easy to expand it as needed. At boot time, it will scan for new disks and automatically partition them for use as storage for the local repositories. If you plan to use this to host many repositories, all you have to do is slap a new disk on it and reboot.

If you find this project useful, please be sure to comment and share!

[contact-form to='jeremy@awesomegeek.com' subject='New comment regarding VURA!'][contact-field label='Name' type='name' required='1'/][contact-field label='Email' type='email' required='1'/][contact-field label='Website' type='url'/][contact-field label='Comment' type='textarea' required='1'/][/contact-form]
Share:

Thursday, July 23, 2015

Deploying Linux VDI Pools with Horizon 6

LinuxSee the updated version for Horizon 7 here.

Horizon 6 brought us many exciting changes. One of the more memorable ones is the addition of support for certified Linux Guests. At the time of this writing, Horizon 6 supports RHEL 6.6, Ubuntu 12.04, CentOS 6.6, and Neoukylin 6/6U1.

NOTE: newer versions may work just fine, but aren't certified to work. Meaning, if you want VMware Support to back you up, you should probably stick with the versions listed above.

To get started using Linux with your VDI implementation, make sure you have the prereqs:
  • vSphere 5.5 U2 or vSphere 6.0 and later
  • Horizon 6.1.1 or later
  • Horizon Client 3.4 or later
  • Note that Zero and mobile are not supported at this time
For the purposes of this post, we'll be using Ubuntu 12.04 with vSphere 5.5 U2e and Horizon 6.1.1. I'm going to cover building both a manual pool, as well as a bulk linked clone pool.
  1. First, let's build the template VM.

    1. Create a new VM and install Ubuntu 12.04 with 2vCPU and 2GB of RAM
      ubuntu-settings

  2. After it's installed, run Ubuntu's Update Manager and get the system fully patched (be sure to decline the 14.04 dist upgrade)
    ubuntu-update-manager

  3. Now we'll install VMware Tools
    1. Right click VM > All vCenter Actions > Guest OS > Install VMware Tools
    2. Click Mount
    3. Once mounted, you should see a folder pop up
      tools-mounted

    4. I like to copy the VMwareTools-9*.tar.gz file to the Desktop.
      1. Right click the .tar.gz and choose Copy to > Desktop
    5. Right click the .tar.gz on the desktop and choose Extract Here
    6. Open Terminal, change directory into the folder, and run vmware-install.pl
      tools-install
      To accept defaults, hit Enter for each question unless you understand what you're customizing.

    7. Reboot Ubuntu

  4. Ensure DNS is working to and from the View Connection Server
    DNS DNS-broker

  5. Proceed to building a manual pool or bulk linked clone pool below.

Building a manual Pool

  1. Now we're ready to install the Linux View Agent!

    1. NOTE: if using Windows Server 2012/R2 AD, follow the step 8 on page 11 from this doc

    2. NOTE: if your Ubuntu VM doesn't have internet access, follow step 9 on page 12 from the above doc
      agent-download

  2. Unpack the tar ball, and run install_viewagent.sh -b -d -u -p appropriately:
    agent-install

    1. When the install completes successfully, it should prompt you to reboot or logout
      agent-install-successful

  3. Reboot Ubuntu

  4. Back in the View Admin page, ensure the VM is registered to View
    registered

  5. In the View Admin page, create a new Manual Desktop Pool and add the VM.

    1. NOTE: This pool can only contain Linux VMs

Building a bulk Linked Clone pool

Building a Linux linked clone pool is not quite as simple as creating a Windows linked clone pool (yet .. crossing fingers). Essentially we automate the cloning process with PowerCLI, then add the created linked clones to a manual pool within View.

  1. Create a View Administrative user (viewuser) in the Ubuntu Guest OS. This account is dedicated for installing the View Agent.

    1. Settings > User Accounts > Create Admin User
      new-user

    2. The account will remain disabled until you set a password. Hover your mouse over Password under Login Options and set the password.

    3. Edit /etc/sudoers and add viewuser ALL=(ALL) NOPASSWD:ALLsudoers

  2. Shutdown the VM and take a vCenter Snapshot

  3. Build the guest customization script

    1. From vSphere Web Client Home page, click Rules and Profiles > Customization Specification Manager

    2. Click the Create a New Specification button

    3. Select Linux for the target OS and enter your desired input

      custom-spec-name custom-spec-review

    4. Note the specification name you entered as this will be referenced in your CloneVMs.csv file later

  4. On your PowerCLI machine, create a folder to store the Horizon Linux PowerCLI scripts

  5. Download these three files to your folder (Sometimes my file server is down for maintenance): CloneVMs.csv, CloneVMs.ps1 and InstallAgent.ps1. If you'd rather copy the text from the official VMware docs, you'll want to copy it from the HTML version here. You'll also want to include the Linux Agent installer in your folder for later.
    files

  6. Customize CloneVMs.csv to match the details of your environment - in my file, I'm only building 2 VMs

VMName,Parentvm,CustomSpec,Datastore,Host,FromSnapshot,DeleteIfPresent
linux-001,Ubuntu-Template,linuxagent,share,192.168.1.174,snap1,TRUE
linux-002,Ubuntu-Template,linuxagent,share,192.168.1.174,snap1,TRUE

Once this file is tweaked to match your environment, we can starting running the PowerCLI scripts

  1. Launch PowerCLI and change directory into the folder we created containing the scripts

  2. Invoke the CloneVMs.ps1 script and answer the prompts
    powerCLI_linkedclone
    You should start seeing the clones show up in vCenterpowerCLI_linked_creation

  3. Once the linked clones have been created, we'll run the Agent Installation script
    powerCLI_Agent_install3

  4. If you run into any errors, check out the troubleshooting section below.

  5. Assuming this completes successfully, you should see the machines show up as registered VMs in View Administrator: View Configuration > Registered Machines > Other
    registered_linked
    NOTE: at this point you shouldn't see a Pool assigned already like my screenshot. We'll perform that next

  6. Now let's create a manual pool to add our freshly baked Ubuntu Linked Clones

    1. Catalog > Desktop Pools > Add

    2. Select Manual Desktop Pool

    3. Pick your assignment preferences

    4. On Machine Source page, choose Other Sources

    5. After selecting your VMs, don't change the Remote Display Protocol - it needs to be left default.

    6. NOTE: Don't add Windows VMs to this pool, it will cause the Linux machines to become unavailable

  7. Victory! Ensure you're on the latest Horizon Client before connecting
    success!




Troubleshooting VM cloning and Agent install


When running the InstallAgent.ps1 script, you see the error 

sudo: no tty present and no askpass program specified
Sorry, try again
askpass
:: Double check your sudoers file we edited earlier. There is likely a typo, or the username wasn't entered in all lowercase.


When running InstallAgent.ps1 you see the error
Failed to authenticate with the guest operating system
powerCLI-agent-install-failed-to-athenticate

:: Verify password is correct. Check username is lowercase in script as that's the default case for new accounts

When running InstallAgent.ps1 you see the errorHostname not resolvable, terminating installation
Ensure host is registered with name service or listed in hosts file
troubleshoot-hostname-resolveable


:: Ensure your Custom Specification file is properly referenced and the vm naming is correct

View Administrator shows VMs as Agent Unreachable
troubleshoot-unreachable

:: Check out the official troubleshooting doc for this one here.
Share:

Wednesday, July 15, 2015

Site relaunch!

Welcome to the new That Virtual Boy blog! I'm excited to relaunch the site with a new domain, new site host, and new authors! Be sure to bookmark the new link (thatvirtualboy.com) and check back often!
Share: