Here are some of the tests I ran on this code: attach/detach/attach volume while VM is running: works volume attached while VM is running, then reboot: works volume attached while VM is running, then reset: works volume detached while VM is stopped, then start: works volume attached while VM is stopped, then start: works deleted VM with attached volume: works (volume goes into the attachable state after VM is expunged)
On Thu, Oct 24, 2013 at 5:40 PM, Mike Tutkowski < mike.tutkow...@solidfire.com> wrote: > By the way, in case you're looking at the diff and wondering why I took > out a StopCommand check and call to execute in LibvirtComputingResource, > there were two of them. > > - } else if (cmd instanceof StopCommand) { > > - return execute((StopCommand) cmd); > > > On Thu, Oct 24, 2013 at 5:26 PM, Mike Tutkowski < > mike.tutkow...@solidfire.com> wrote: > >> This is a newer link, Marcus: >> >> >> https://github.com/mike-tutkowski/incubator-cloudstack/commit/e84de7577ad38fea88d1492d4949672d1989889b >> >> I just rebased on top of master today. >> >> >> On Thu, Oct 24, 2013 at 3:46 PM, Mike Tutkowski < >> mike.tutkow...@solidfire.com> wrote: >> >>> Hey Marcus, >>> >>> If you're interested in running the simulator against your code + my >>> code, I have it on GitHub here: >>> >>> >>> https://github.com/mike-tutkowski/incubator-cloudstack/commit/776f3eb9dda45745f43e6765b026d34fbc6be072 >>> >>> Thanks! >>> >>> >>> On Wed, Oct 23, 2013 at 11:06 PM, Mike Tutkowski < >>> mike.tutkow...@solidfire.com> wrote: >>> >>>> I'm trying to attach my diff to https://reviews.apache.org/r/13865/, >>>> but I don't see the necessary buttons. >>>> >>>> I wonder if I need to get edit access back again? We had trouble with >>>> the Wiki. Was this also impacted? >>>> >>>> >>>> On Wed, Oct 23, 2013 at 10:47 PM, Mike Tutkowski < >>>> mike.tutkow...@solidfire.com> wrote: >>>> >>>>> Sure, I can create a diff file and attach it to Review Board. >>>>> >>>>> >>>>> On Wed, Oct 23, 2013 at 10:40 PM, Marcus Sorensen <shadow...@gmail.com >>>>> > wrote: >>>>> >>>>>> Sure. The majority of it only affects people who are on your storage >>>>>> anyway. Perhaps you can post a patch and I can run it through the >>>>>> simulator to verify that the minor change to the existing code hasn't >>>>>> broken the standard storages. I don't think it is since I've >>>>>> thoroughly tested the code I posted, but I know there were some >>>>>> additional changes. >>>>>> >>>>>> On Wed, Oct 23, 2013 at 10:35 PM, Mike Tutkowski >>>>>> <mike.tutkow...@solidfire.com> wrote: >>>>>> > OK, Marcus, I made the change to detect my volumes and it seems to >>>>>> work just >>>>>> > fine. >>>>>> > >>>>>> > Perhaps another day of testing and we can check this code in. What >>>>>> do you >>>>>> > think? >>>>>> > >>>>>> > >>>>>> > On Wed, Oct 23, 2013 at 9:14 PM, Mike Tutkowski >>>>>> > <mike.tutkow...@solidfire.com> wrote: >>>>>> >> >>>>>> >> Thanks, Marcus...I hadn't read that note, but that makes sense. >>>>>> >> >>>>>> >> Yes, that must be the root disk for the VM. I can put in code, as >>>>>> you >>>>>> >> recommend, to handle only my volumes. >>>>>> >> >>>>>> >> >>>>>> >> On Wed, Oct 23, 2013 at 5:37 PM, Marcus Sorensen < >>>>>> shadow...@gmail.com> >>>>>> >> wrote: >>>>>> >>> >>>>>> >>> It should be sending the path info for each disk per the XML of >>>>>> the >>>>>> >>> VM... so it will send all disks regardless of whether or not your >>>>>> >>> adaptor manages that disk, and it's up to your adaptor to ignore >>>>>> any >>>>>> >>> that aren't managed by it. There should be notes to that effect >>>>>> in the >>>>>> >>> code near the disconnectPhysicalDisk interface in StorageAdaptor: >>>>>> >>> >>>>>> >>> // given local path to file/device (per Libvirt XML), 1) check >>>>>> >>> that device is >>>>>> >>> // handled by your adaptor, return false if not. 2) clean up >>>>>> >>> device, return true >>>>>> >>> public boolean disconnectPhysicalDiskByPath(String localPath); >>>>>> >>> >>>>>> >>> Since we only have XML disk definitions when we stop or migrate a >>>>>> VM, >>>>>> >>> we have to try all adaptors against all defined disks. So in your >>>>>> >>> disconnectPhysicalDisk you might do something like check that the >>>>>> path >>>>>> >>> starts with '/dev/disk/by-path' and contains 'iscs-iqn' (maybe >>>>>> there's >>>>>> >>> some way that's more robust like checking the full path against a >>>>>> lun >>>>>> >>> listing or something). If it doesn't match, then your >>>>>> >>> disconnectPhysicalDisk just does nothing. >>>>>> >>> >>>>>> >>> I assume this is a root disk or some other local storage disk. If >>>>>> it's >>>>>> >>> not, then your VM XML is messed up somehow. >>>>>> >>> >>>>>> >>> On Wed, Oct 23, 2013 at 5:01 PM, Mike Tutkowski >>>>>> >>> <mike.tutkow...@solidfire.com> wrote: >>>>>> >>> > 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™ >>>>>> >>> >>>> >>>>>> >>> >>>> >>>>>> >>> >>>> >>>>>> >>> >>>> >>>>>> >>> >>>> -- >>>>>> >>> >>>> 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> >> *™* >> > > > > -- > *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> *™*