I found the problem.

disconnectPhysicalDiskByPath is being passed in (in my situation) the
following:

/var/lib/libvirt/images/9887d511-8dc7-4cb4-96f9-01230fe4bbb6

Due to the name of the method, my code was expecting data such as the
following:

/dev/disk/by-path/ip-192.168.233.10:3260-iscsi-iqn.2012-03.com.solidfire:volume1-lun-0

Was it intentional to send the data into this method in the current way?


On Wed, Oct 23, 2013 at 1:57 PM, Mike Tutkowski <
mike.tutkow...@solidfire.com> wrote:

> You know, I forgot we supposed to be doing that! :) Multi-tasking too much
> today, I guess.
>
> Anyways, it must not be working because I still had a hypervisor
> connection after I shut down the VM.
>
> Let me investigate.
>
>
> On Wed, Oct 23, 2013 at 1:48 PM, Marcus Sorensen <shadow...@gmail.com>wrote:
>
>> Are we not disconnecting when we stop the vm? There's a method for it, we
>> should be. disconnectPhysicalDiskViaVmSpec
>>  On Oct 23, 2013 1:28 PM, "Mike Tutkowski" <mike.tutkow...@solidfire.com>
>> wrote:
>>
>>> I see one problem for us now, Marcus.
>>>
>>> * You have a running VM that you attach a volume to.
>>> * You stop the VM.
>>> * You detach the volume.
>>> * You start up the VM.
>>>
>>> The VM will not be connected to the volume (which is good), but the
>>> hypervisor will still be connected to the volume.
>>>
>>> It would be great if we actually sent a command to the last host ID of
>>> the stopped VM when detaching a volume (to have the hypervisor disconnect
>>> from the volume).
>>>
>>> What do you think about that?
>>>
>>>
>>> On Wed, Oct 23, 2013 at 1:15 PM, Mike Tutkowski <
>>> mike.tutkow...@solidfire.com> wrote:
>>>
>>>> OK, whatever way you prefer then, Marcus (createVdb first or second).
>>>>
>>>> If I leave createVdb first and return 0, it does seem to work.
>>>>
>>>>
>>>> On Wed, Oct 23, 2013 at 11:13 AM, Marcus Sorensen 
>>>> <shadow...@gmail.com>wrote:
>>>>
>>>>> I think we could flip-flop these two lines if necessary:
>>>>>
>>>>>             createVbd(conn, vmSpec, vmName, vm);
>>>>>
>>>>>             _storagePoolMgr.connectPhysicalDisksViaVmSpec(vmSpec);
>>>>>
>>>>> I haven't actually tried it though. But in general I don't see the
>>>>> Libvirt DiskDef using size at all, which is what createVbd does
>>>>> (creates XML definitions for disks to attach to the VM definition). It
>>>>> just takes the device at it's native advertised size when it actually
>>>>> goes to use it.
>>>>>
>>>>> On Wed, Oct 23, 2013 at 10:52 AM, Mike Tutkowski
>>>>> <mike.tutkow...@solidfire.com> wrote:
>>>>> > Little problem that I wanted to get your take on, Marcus.
>>>>> >
>>>>> > When a VM is being started, we call createVdb before calling
>>>>> > connectPhysicalDisksViaVmSpec.
>>>>> >
>>>>> > The problem is that createVdb calls getPhysicalDisk and my volume
>>>>> has not
>>>>> > yet been connected because connectPhysicalDisksViaVmSpec has not yet
>>>>> been
>>>>> > called.
>>>>> >
>>>>> > When I try to read up the size of the disk to populate a
>>>>> PhysicalDisk, I get
>>>>> > an error, of course, because the path does not yet exist.
>>>>> >
>>>>> > I could populate a 0 for the size of the physical disk and then the
>>>>> next
>>>>> > time getPhysicalDisk is called, it should be filled in with a proper
>>>>> size.
>>>>> >
>>>>> > Do you see a problem with that approach?
>>>>> >
>>>>> >
>>>>> > On Tue, Oct 22, 2013 at 6:40 PM, Marcus Sorensen <
>>>>> shadow...@gmail.com>
>>>>> > wrote:
>>>>> >>
>>>>> >> That's right. All should be well.
>>>>> >>
>>>>> >> On Oct 22, 2013 6:03 PM, "Mike Tutkowski" <
>>>>> mike.tutkow...@solidfire.com>
>>>>> >> wrote:
>>>>> >>>
>>>>> >>> Looks like we disconnect physical disks when the VM is stopped.
>>>>> >>>
>>>>> >>> I didn't see that before.
>>>>> >>>
>>>>> >>> I suppose that means the disks are physically disconnected when
>>>>> the VM is
>>>>> >>> stopped, but the CloudStack DB still has the VM associated with
>>>>> the disks
>>>>> >>> for the next time the VM may be started up (unless someone does a
>>>>> disconnect
>>>>> >>> while the VM is in the Stopped State).
>>>>> >>>
>>>>> >>>
>>>>> >>> On Tue, Oct 22, 2013 at 4:19 PM, Mike Tutkowski
>>>>> >>> <mike.tutkow...@solidfire.com> wrote:
>>>>> >>>>
>>>>> >>>> Hey Marcus,
>>>>> >>>>
>>>>> >>>> Quick question for you related to attaching/detaching volumes
>>>>> when the
>>>>> >>>> VM is in the Stopped State.
>>>>> >>>>
>>>>> >>>> If I detach a volume from a VM that is in the Stopped State, the
>>>>> DB
>>>>> >>>> seems to get updated, but I don't see a command going to the KVM
>>>>> hypervisor
>>>>> >>>> that leads to the removal of the iSCSI target.
>>>>> >>>>
>>>>> >>>> It seems the iSCSI target is only removed the next time the VM is
>>>>> >>>> started.
>>>>> >>>>
>>>>> >>>> Do you know if this is true?
>>>>> >>>>
>>>>> >>>> If it is, I'm concerned that the volume could be attached to
>>>>> another VM
>>>>> >>>> before the Stopped VM is re-started and when the Stopped VM gets
>>>>> restarted
>>>>> >>>> that it would disconnect the iSCSI volume from underneath the VM
>>>>> that now
>>>>> >>>> has the volume attached.
>>>>> >>>>
>>>>> >>>> I still want to perform some tests on this, but am first trying
>>>>> to get a
>>>>> >>>> VM to start after I've attached a volume to it when it was in the
>>>>> Stopped
>>>>> >>>> State.
>>>>> >>>>
>>>>> >>>> Thanks,
>>>>> >>>> Mike
>>>>> >>>>
>>>>> >>>>
>>>>> >>>> On Mon, Oct 21, 2013 at 10:57 PM, Mike Tutkowski
>>>>> >>>> <mike.tutkow...@solidfire.com> wrote:
>>>>> >>>>>
>>>>> >>>>> Thanks for that info, Marcus.
>>>>> >>>>>
>>>>> >>>>> By the way, I wanted to see if I could attach my volume to a VM
>>>>> in the
>>>>> >>>>> Stopped State.
>>>>> >>>>>
>>>>> >>>>> The attach logic didn't trigger any exceptions; however, when I
>>>>> started
>>>>> >>>>> the VM, I received an Insufficient Capacity exception.
>>>>> >>>>>
>>>>> >>>>> If I detach the volume and then start the VM, the VM starts just
>>>>> fine.
>>>>> >>>>>
>>>>> >>>>> I noticed a problem here (in StoragePoolHostDaoImpl):
>>>>> >>>>>
>>>>> >>>>>     @Override
>>>>> >>>>>
>>>>> >>>>>     public StoragePoolHostVO findByPoolHost(long poolId, long
>>>>> hostId) {
>>>>> >>>>>
>>>>> >>>>>         SearchCriteria<StoragePoolHostVO> sc =
>>>>> PoolHostSearch.create();
>>>>> >>>>>
>>>>> >>>>>         sc.setParameters("pool_id", poolId);
>>>>> >>>>>
>>>>> >>>>>         sc.setParameters("host_id", hostId);
>>>>> >>>>>
>>>>> >>>>>         return findOneIncludingRemovedBy(sc);
>>>>> >>>>>
>>>>> >>>>>     }
>>>>> >>>>>
>>>>> >>>>> The findOneIncludingRemovedBy method returns null (the poolId is
>>>>> my
>>>>> >>>>> storage pool's ID and the hostId is the expected host ID).
>>>>> >>>>>
>>>>> >>>>> I'm not sure what this method is trying to do.
>>>>> >>>>>
>>>>> >>>>> I looked in the storage_pool_host_ref table (is that the correct
>>>>> >>>>> table?) and it only has one row, which maps the local storage
>>>>> pool of the
>>>>> >>>>> KVM host to the KVM host (which explains why no match is found
>>>>> for my
>>>>> >>>>> situation).
>>>>> >>>>>
>>>>> >>>>> Do you understand what this logic is trying to do?
>>>>> >>>>>
>>>>> >>>>> Thanks!
>>>>> >>>>>
>>>>> >>>>>
>>>>> >>>>>
>>>>> >>>>> On Mon, Oct 21, 2013 at 8:08 PM, Marcus Sorensen <
>>>>> shadow...@gmail.com>
>>>>> >>>>> wrote:
>>>>> >>>>>>
>>>>> >>>>>> Do you have the capability to clone the root disk? Normally the
>>>>> >>>>>> template is installed to primary, and then cloned for each root
>>>>> disk.
>>>>> >>>>>> In some cases (such as CLVM), this isn't efficient and so the
>>>>> template
>>>>> >>>>>> is copied fresh to populate each root disk.
>>>>> >>>>>>
>>>>> >>>>>> I'm actually not 100% sure how this works in the new code. It
>>>>> used to
>>>>> >>>>>> be handled by copyPhysicalDisk in the storage adaptor, called by
>>>>> >>>>>> copyTemplateToPrimaryStorage, which runs on the agent. It would
>>>>> pass
>>>>> >>>>>> template/secondary storage info, and the destination
>>>>> volume/primary
>>>>> >>>>>> storage info, and copyPhysicalDisk would do the work of
>>>>> installing the
>>>>> >>>>>> image to the destination.  Then subsequent root disks would be
>>>>> cloned
>>>>> >>>>>> in CreateCommand by calling createDiskFromTemplate.
>>>>> >>>>>>
>>>>> >>>>>> In master it looks like this was moved to KVMStorageProcessor
>>>>> >>>>>> 'cloneVolumeFromBaseTemplate', although I think this just takes
>>>>> over
>>>>> >>>>>> as default, and there's something in your storage driver that
>>>>> should
>>>>> >>>>>> be capable of cloning templates on the mgmt server side. I'm
>>>>> less sure
>>>>> >>>>>> about how the template gets to primary storage in the first
>>>>> place, I
>>>>> >>>>>> assume copyTemplateToPrimaryStorage in KVMStorageProcessor
>>>>> calling
>>>>> >>>>>> copyPhysicalDisk in your adaptor. It's a bit tough for me to
>>>>> tell
>>>>> >>>>>> since our earlier storage adaptor did everything on the host it
>>>>> mostly
>>>>> >>>>>> just worked with the default stuff.
>>>>> >>>>>>
>>>>> >>>>>> On Mon, Oct 21, 2013 at 4:49 PM, Mike Tutkowski
>>>>> >>>>>> <mike.tutkow...@solidfire.com> wrote:
>>>>> >>>>>> > Hey Marcus,
>>>>> >>>>>> >
>>>>> >>>>>> > So...now that this works well for data disks, I was wondering
>>>>> what
>>>>> >>>>>> > might be
>>>>> >>>>>> > involved in getting this process to work for root disks.
>>>>> >>>>>> >
>>>>> >>>>>> > Can you point me in the right direction as far as what gets
>>>>> invoked
>>>>> >>>>>> > when a
>>>>> >>>>>> > VM is being created on KVM (so that its root disk can be
>>>>> created and
>>>>> >>>>>> > the
>>>>> >>>>>> > necessary template laid down or ISO installed)?
>>>>> >>>>>> >
>>>>> >>>>>> > Thanks!
>>>>> >>>>>> >
>>>>> >>>>>> >
>>>>> >>>>>> > On Mon, Oct 21, 2013 at 1:14 PM, Mike Tutkowski
>>>>> >>>>>> > <mike.tutkow...@solidfire.com> wrote:
>>>>> >>>>>> >>
>>>>> >>>>>> >> Hey Marcus,
>>>>> >>>>>> >>
>>>>> >>>>>> >> Just wanted to let you know the branch of mine that has your
>>>>> code
>>>>> >>>>>> >> and mine
>>>>> >>>>>> >> appears to work well with regards to attaching a data disk
>>>>> to a
>>>>> >>>>>> >> running VM:
>>>>> >>>>>> >>
>>>>> >>>>>> >> fdisk -l from hypervisor:
>>>>> >>>>>> >>
>>>>> >>>>>> >> http://i.imgur.com/NkP5fo0.png
>>>>> >>>>>> >>
>>>>> >>>>>> >> fdisk -l from within VM:
>>>>> >>>>>> >>
>>>>> >>>>>> >> http://i.imgur.com/8YwiiC7.png
>>>>> >>>>>> >>
>>>>> >>>>>> >> I plan to do more testing on this over the coming days.
>>>>> >>>>>> >>
>>>>> >>>>>> >> If all goes well, perhaps we can check this code in by the
>>>>> end of
>>>>> >>>>>> >> the
>>>>> >>>>>> >> week?
>>>>> >>>>>> >>
>>>>> >>>>>> >> Talk to you later,
>>>>> >>>>>> >> Mike
>>>>> >>>>>> >>
>>>>> >>>>>> >>
>>>>> >>>>>> >> On Sun, Oct 20, 2013 at 10:23 PM, Mike Tutkowski
>>>>> >>>>>> >> <mike.tutkow...@solidfire.com> wrote:
>>>>> >>>>>> >>>
>>>>> >>>>>> >>> Don't ask me, but it works now (I've been having this
>>>>> trouble
>>>>> >>>>>> >>> quite a
>>>>> >>>>>> >>> while today).
>>>>> >>>>>> >>>
>>>>> >>>>>> >>> I guess the trick is to send you an e-mail. :)
>>>>> >>>>>> >>>
>>>>> >>>>>> >>>
>>>>> >>>>>> >>> On Sun, Oct 20, 2013 at 10:05 PM, Marcus Sorensen
>>>>> >>>>>> >>> <shadow...@gmail.com>
>>>>> >>>>>> >>> wrote:
>>>>> >>>>>> >>>>
>>>>> >>>>>> >>>> Did you create a service offering that uses local storage,
>>>>> or add
>>>>> >>>>>> >>>> a
>>>>> >>>>>> >>>> shared primary storage? By default there is no storage that
>>>>> >>>>>> >>>> matches the
>>>>> >>>>>> >>>> built in offerings.
>>>>> >>>>>> >>>>
>>>>> >>>>>> >>>> On Oct 20, 2013 9:39 PM, "Mike Tutkowski"
>>>>> >>>>>> >>>> <mike.tutkow...@solidfire.com>
>>>>> >>>>>> >>>> wrote:
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>> Hey Marcus,
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>> So, I went back to the branch of mine that has your code
>>>>> and
>>>>> >>>>>> >>>>> mine and
>>>>> >>>>>> >>>>> was able to create a new CloudStack install from scratch
>>>>> with it
>>>>> >>>>>> >>>>> (once
>>>>> >>>>>> >>>>> again, after manually deleting what was in
>>>>> >>>>>> >>>>> /var/lib/libvirt/images to the
>>>>> >>>>>> >>>>> get system VMs to start).
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>> Anyways, my system VMs are running now and I tried to
>>>>> kick off a
>>>>> >>>>>> >>>>> VM
>>>>> >>>>>> >>>>> using the CentOS 6.3 image you provided me a while back.
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>> The virtual router has a Status of Running; however, my
>>>>> VM fails
>>>>> >>>>>> >>>>> to
>>>>> >>>>>> >>>>> start (with the generic message of Insufficient Capacity).
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>> I've not seen this exception before (related to the VR).
>>>>> Do you
>>>>> >>>>>> >>>>> have
>>>>> >>>>>> >>>>> any insight into this?:
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>> com.cloud.exception.ResourceUnavailableException: Resource
>>>>> >>>>>> >>>>> [Pod:1] is
>>>>> >>>>>> >>>>> unreachable: Unable to apply userdata and password entry
>>>>> on
>>>>> >>>>>> >>>>> router
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> com.cloud.network.router.VirtualNetworkApplianceManagerImpl.applyRules(VirtualNetworkApplianceManagerImpl.java:3793)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> com.cloud.network.router.VirtualNetworkApplianceManagerImpl.applyUserData(VirtualNetworkApplianceManagerImpl.java:3017)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> com.cloud.network.element.VirtualRouterElement.addPasswordAndUserdata(VirtualRouterElement.java:933)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> org.apache.cloudstack.engine.orchestration.NetworkOrchestrator.prepareElement(NetworkOrchestrator.java:1172)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> org.apache.cloudstack.engine.orchestration.NetworkOrchestrator.prepareNic(NetworkOrchestrator.java:1288)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> org.apache.cloudstack.engine.orchestration.NetworkOrchestrator.prepare(NetworkOrchestrator.java:1224)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> com.cloud.vm.VirtualMachineManagerImpl.advanceStart(VirtualMachineManagerImpl.java:826)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> com.cloud.vm.VirtualMachineManagerImpl.start(VirtualMachineManagerImpl.java:508)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> org.apache.cloudstack.engine.cloud.entity.api.VMEntityManagerImpl.deployVirtualMachine(VMEntityManagerImpl.java:227)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntityImpl.deploy(VirtualMachineEntityImpl.java:209)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> com.cloud.vm.UserVmManagerImpl.startVirtualMachine(UserVmManagerImpl.java:3338)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> com.cloud.vm.UserVmManagerImpl.startVirtualMachine(UserVmManagerImpl.java:2919)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> com.cloud.vm.UserVmManagerImpl.startVirtualMachine(UserVmManagerImpl.java:2905)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> com.cloud.utils.component.ComponentInstantiationPostProcessor$InterceptorDispatcher.intercept(ComponentInstantiationPostProcessor.java:125)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> org.apache.cloudstack.api.command.user.vm.DeployVMCmd.execute(DeployVMCmd.java:421)
>>>>> >>>>>> >>>>> at
>>>>> com.cloud.api.ApiDispatcher.dispatch(ApiDispatcher.java:161)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> com.cloud.api.ApiAsyncJobDispatcher.runJobInContext(ApiAsyncJobDispatcher.java:109)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> com.cloud.api.ApiAsyncJobDispatcher$1.run(ApiAsyncJobDispatcher.java:66)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> org.apache.cloudstack.managed.context.impl.DefaultManagedContext$1.call(DefaultManagedContext.java:56)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> org.apache.cloudstack.managed.context.impl.DefaultManagedContext.callWithContext(DefaultManagedContext.java:103)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> org.apache.cloudstack.managed.context.impl.DefaultManagedContext.runWithContext(DefaultManagedContext.java:53)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> com.cloud.api.ApiAsyncJobDispatcher.runJob(ApiAsyncJobDispatcher.java:63)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> org.apache.cloudstack.framework.jobs.impl.AsyncJobManagerImpl$1.runInContext(AsyncJobManagerImpl.java:532)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> org.apache.cloudstack.managed.context.ManagedContextRunnable$1.run(ManagedContextRunnable.java:49)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> org.apache.cloudstack.managed.context.impl.DefaultManagedContext$1.call(DefaultManagedContext.java:56)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> org.apache.cloudstack.managed.context.impl.DefaultManagedContext.callWithContext(DefaultManagedContext.java:103)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> org.apache.cloudstack.managed.context.impl.DefaultManagedContext.runWithContext(DefaultManagedContext.java:53)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> org.apache.cloudstack.managed.context.ManagedContextRunnable.run(ManagedContextRunnable.java:46)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
>>>>> >>>>>> >>>>> at
>>>>> java.util.concurrent.FutureTask.run(FutureTask.java:262)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>>>>> >>>>>> >>>>> at
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>>
>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>>>>> >>>>>> >>>>> at java.lang.Thread.run(Thread.java:724)
>>>>> >>>>>> >>>>>
>>>>> >>>>>> >>>>> Thanks!
>>>>> >>>>>> >>>
>>>>> >>>>>> >>>
>>>>> >>>>>> >>>
>>>>> >>>>>> >>>
>>>>> >>>>>> >>> --
>>>>> >>>>>> >>> Mike Tutkowski
>>>>> >>>>>> >>> Senior CloudStack Developer, SolidFire Inc.
>>>>> >>>>>> >>> e: mike.tutkow...@solidfire.com
>>>>> >>>>>> >>> o: 303.746.7302
>>>>> >>>>>> >>> Advancing the way the world uses the cloud™
>>>>> >>>>>> >>
>>>>> >>>>>> >>
>>>>> >>>>>> >>
>>>>> >>>>>> >>
>>>>> >>>>>> >> --
>>>>> >>>>>> >> Mike Tutkowski
>>>>> >>>>>> >> Senior CloudStack Developer, SolidFire Inc.
>>>>> >>>>>> >> e: mike.tutkow...@solidfire.com
>>>>> >>>>>> >> o: 303.746.7302
>>>>> >>>>>> >> Advancing the way the world uses the cloud™
>>>>> >>>>>> >
>>>>> >>>>>> >
>>>>> >>>>>> >
>>>>> >>>>>> >
>>>>> >>>>>> > --
>>>>> >>>>>> > Mike Tutkowski
>>>>> >>>>>> > Senior CloudStack Developer, SolidFire Inc.
>>>>> >>>>>> > e: mike.tutkow...@solidfire.com
>>>>> >>>>>> > o: 303.746.7302
>>>>> >>>>>> > Advancing the way the world uses the cloud™
>>>>> >>>>>
>>>>> >>>>>
>>>>> >>>>>
>>>>> >>>>>
>>>>> >>>>> --
>>>>> >>>>> Mike Tutkowski
>>>>> >>>>> Senior CloudStack Developer, SolidFire Inc.
>>>>> >>>>> e: mike.tutkow...@solidfire.com
>>>>> >>>>> o: 303.746.7302
>>>>> >>>>> Advancing the way the world uses the cloud™
>>>>> >>>>
>>>>> >>>>
>>>>> >>>>
>>>>> >>>>
>>>>> >>>> --
>>>>> >>>> Mike Tutkowski
>>>>> >>>> Senior CloudStack Developer, SolidFire Inc.
>>>>> >>>> e: mike.tutkow...@solidfire.com
>>>>> >>>> o: 303.746.7302
>>>>> >>>> Advancing the way the world uses the cloud™
>>>>> >>>
>>>>> >>>
>>>>> >>>
>>>>> >>>
>>>>> >>> --
>>>>> >>> Mike Tutkowski
>>>>> >>> Senior CloudStack Developer, SolidFire Inc.
>>>>> >>> e: mike.tutkow...@solidfire.com
>>>>> >>> o: 303.746.7302
>>>>> >>> Advancing the way the world uses the cloud™
>>>>> >
>>>>> >
>>>>> >
>>>>> >
>>>>> > --
>>>>> > Mike Tutkowski
>>>>> > Senior CloudStack Developer, SolidFire Inc.
>>>>> > e: mike.tutkow...@solidfire.com
>>>>> > o: 303.746.7302
>>>>> > Advancing the way the world uses the cloud™
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> *Mike Tutkowski*
>>>> *Senior CloudStack Developer, SolidFire Inc.*
>>>> e: mike.tutkow...@solidfire.com
>>>> o: 303.746.7302
>>>> Advancing the way the world uses the 
>>>> cloud<http://solidfire.com/solution/overview/?video=play>
>>>> *™*
>>>>
>>>
>>>
>>>
>>> --
>>> *Mike Tutkowski*
>>> *Senior CloudStack Developer, SolidFire Inc.*
>>> e: mike.tutkow...@solidfire.com
>>> o: 303.746.7302
>>> Advancing the way the world uses the 
>>> cloud<http://solidfire.com/solution/overview/?video=play>
>>> *™*
>>>
>>
>
>
> --
> *Mike Tutkowski*
> *Senior CloudStack Developer, SolidFire Inc.*
> e: mike.tutkow...@solidfire.com
> o: 303.746.7302
> Advancing the way the world uses the 
> cloud<http://solidfire.com/solution/overview/?video=play>
> *™*
>



-- 
*Mike Tutkowski*
*Senior CloudStack Developer, SolidFire Inc.*
e: mike.tutkow...@solidfire.com
o: 303.746.7302
Advancing the way the world uses the
cloud<http://solidfire.com/solution/overview/?video=play>
*™*

Reply via email to