Automating Tintri with vRO Part 5a: Sync VM

What is Sync VM?

Every now and then a technology on a storage array gets me really excited. When Adam Cavaliere showed me Sync VM last month I was impressed. After talking about it and showing it to customers, they were very interested. More specifically they wanted to see it automated, and in vRealize Automation.

So what is it, and how does it work?

I think it’s best explained by Adam Cavaliere and Emad Younis who have posts and videos on this already.

Video showing Database Example:

Blog post by Emad Younis:

The vRealize Orchestrator Workflow

In this part (5a), I will explain how to use the vRO workflow I’ve created which is available on FlowGrab along with the others in this series. In part 5b I will be showing how to integrate this vRO workflow with vRA, to offer it as a day 2 operation.

Pre Requisites:

1. Completed Part 3 verifying that you can get a Tintri UUID from a virtual machine.
2. Have a source and target virtual machine in vCenter with the same disk configuration upon which you want to sync.
3. Download the latest Tintri Workflow Package I created and uploaded to FlowGrab.


Do not execute this vRO workflow without an understanding of SyncVM. The code in this example replaces 3 disks (SCSI 0:1, SCSI 0:2, SCSI 0:3 to be precise). If you need to use alternate disk configurations, then you will need to adjust the parameters and action item to compensate. Please post questions if you are unsure how to do this, but this assumes a good understanding of vRealize Orchestrator.

Step 1: Import the Tintri Workflow Package you downloaded from FlowGrab.

You should now see extra workflows in your vRO Design view as per the screenshot below.


Take a look at FG-SyncVMExample you can see this utilizes a number of the other workflows previously created.
Sync VM Example


Running FG-Tintri-SyncVM by itself, you can see this requires the RestHost, SessionID, and a snapshot UUID from the source VM, as well as the Tintri VM UUID from the target VM.

In FG-SyncVMExample I use the modular components built previously to retrieve all the information required to initiate a Sync VM operation.

The process is as follows:

  1. Create Rest Session
  2. Tintri Snapshot the Source VM in order to get the latest data.
    1. Get the Tintri VM UUID
    2. Snapshot the VM
    3. Get the Snapshot UUID for the latest snapshot
  3. Get the Tintri VM UUID for the target VM
  4. Shutdown the Guest OS (This is because if you initiate a sync VM via REST API it will do a hard power off of the virtual machine.)
  5. Initiate SyncVM now that we have the UUIDs we needed.
  6. Power back on the target VM.

Step 2: Run the workflow!


Select your REST Host, type in a sample name for the snapshot (this could obviously be set as a general attribute or automatically generated in the future), select your source VM and target VM from vCenter…and off we go!

Step 3: End Result

Login to your Tintri VM Store and you should see a message on the target VM indicating that synchronization is complete.

Screen Shot 2015-06-23 at 3.43.37 PM

vRealize Orchestrator will also show logging to indicate the Sync VM operation was successful.


What’s next?

Hopefully this workflow helps. I would recommend adapting the actions and workflow to your use cases. i.e. which disks to sync? How many VMs do you want to sync to?

In the next post I’ll be demonstrating how you can add this capability to vRealize Automation as a Day 2 Operation you can present to Software Development and QA teams in order to get the latest data.





Automating Tintri with vRealize Orchestrator Part 1: Let’s begin!

Welcome to part 1 of my series on Automating Tintri with vRealize Orchestrator.

I’m sure almost everyone visiting my blog knows how awesome Tintri is so I’m not going to go into details of the product. In short, I love it because it’s simple and clones VMs incredibly fast.

The other hidden gem about Tintri is that there very well documented REST API allowing us to do all sorts of nice automation without having to click through the GUI. Recently Tintri announced Sync VM which got me really excited. I love all things DevOps, and when I was talking with Adam Cavaliere and other SQL server Engineers, they immediately saw amazing potential for this. After speaking with a few of my customers who had vRealize Automation, they really loved the idea of being able to have Day 2 Operations for tasks like Snapshotting their VM, and were even more excited about Sync VM and how that could be used.

So after further discussion, we decided to build a vRealize Orchestrator Package including actions, workflows, and all awesome stuff for using Tintri. In this series I’m going to walk you through how I built the package, and how you can use it.

The following workflows are included:

Tintri-CreateSession – Creates a REST Session with your Tintri VMstore. This is needed for all subsequent workflows.

Tintri-GetUUIDfromVM – Allows you to select a Virtual Machine from vRO, and will return the corresponding Tintri UUID. This is needed to perform any actions against Tintri objects.

Tintri-SnapshotVM – Utilizes the 2 workflows above, and then creates a Tintri Snapshot of your VM.

Tintri-SyncVM – Magical! Takes a Source VM and TargetVM, then syncs the VMDKs underneath. Tintri does all the heavy lifting. Check out a great video on this technology at

Tintri-ReplicateVM – Also magical! Enable Tintri replication on a VM for DR purposes.

As I release the workflows throughout the series, you will be able to find them on Flowgrab via the SystemsGame Page. If you aren’t already familiar with FlowGrab, I highly recommend you check it out. It’s a great place for sharing workflows with the vRealize Orchestrator community.

Finally, a big thank you to Adam Cavaliere for coming up with these cool ideas and working out all the kinks for the REST API calls in Python first. If you want an expert on Tintri, definitely contact him!

Next: Part 2 – Create REST Session