I see right now LibvirtComputingResource.java has the following method that
I might be able to leverage (it's probably not called at present and would
need to be implemented in my case to discover my iSCSI target and log in to
it):

    protected Answer execute(CreateStoragePoolCommand cmd) {

        return new Answer(cmd, true, "success");

    }

I would probably be able to call the KVMStorageManager to have it use my
StorageAdaptor to do what's necessary here.




On Sun, Sep 15, 2013 at 10:37 PM, Mike Tutkowski <
mike.tutkow...@solidfire.com> wrote:

> Hey Marcus,
>
> When I implemented support in the XenServer and VMware plug-ins for
> "managed" storage, I started at the execute(AttachVolumeCommand) methods in
> both plug-ins.
>
> The code there was changed to check the AttachVolumeCommand instance for a
> "managed" property.
>
> If managed was false, the normal attach/detach logic would just run and
> the volume would be attached or detached.
>
> If managed was true, new 4.2 logic would run to create (let's talk
> XenServer here) a new SR and a new VDI inside of that SR (or to reattach an
> existing VDI inside an existing SR, if this wasn't the first time the
> volume was attached). If managed was true and we were detaching the volume,
> the SR would be detached from the XenServer hosts.
>
> I am currently walking through the execute(AttachVolumeCommand) in
> LibvirtComputingResource.java.
>
> I see how the XML is constructed to describe whether a disk should be
> attached or detached. I also see how we call in to get a StorageAdapter
> (and how I will likely need to write a new one of these).
>
> So, talking in XenServer terminology again, I was wondering if you think
> the approach we took in 4.2 with creating and deleting SRs in the
> execute(AttachVolumeCommand) method would work here or if there is some
> other way I should be looking at this for KVM?
>
> As it is right now for KVM, storage has to be set up ahead of time.
> Assuming this is the case, there probably isn't currently a place I can
> easily inject my logic to discover and log in to iSCSI targets. This is why
> we did it as needed in the execute(AttachVolumeCommand) for XenServer and
> VMware, but I wanted to see if you have an alternative way that might be
> better for KVM.
>
> One possible way to do this would be to modify VolumeManagerImpl (or
> whatever its equivalent is in 4.3) before it issues an attach-volume
> command to KVM to check to see if the volume is to be attached to managed
> storage. If it is, then (before calling the attach-volume command in KVM)
> call the create-storage-pool command in KVM (or whatever it might be
> called).
>
> Just wanted to get some of your thoughts on this.
>
> Thanks!
>
>
> On Sat, Sep 14, 2013 at 12:07 AM, Mike Tutkowski <
> mike.tutkow...@solidfire.com> wrote:
>
>> Yeah, I remember that StorageProcessor stuff being put in the codebase
>> and having to merge my code into it in 4.2.
>>
>> Thanks for all the details, Marcus! :)
>>
>> I can start digging into what you were talking about now.
>>
>>
>> On Sat, Sep 14, 2013 at 12:02 AM, Marcus Sorensen <shadow...@gmail.com>wrote:
>>
>>> Looks like things might be slightly different now in 4.2, with
>>> KVMStorageProcessor.java in the mix.This looks more or less like some
>>> of the commands were ripped out verbatim from LibvirtComputingResource
>>> and placed here, so in general what I've said is probably still true,
>>> just that the location of things like AttachVolumeCommand might be
>>> different, in this file rather than LibvirtComputingResource.java.
>>>
>>> On Fri, Sep 13, 2013 at 11:42 PM, Marcus Sorensen <shadow...@gmail.com>
>>> wrote:
>>> > Ok, KVM will be close to that, of course, because only the hypervisor
>>> > classes differ, the rest is all mgmt server. Creating a volume is just
>>> > a db entry until it's deployed for the first time. AttachVolumeCommand
>>> > on the agent side (LibvirtStorageAdaptor.java is analogous to
>>> > CitrixResourceBase.java) will do the iscsiadm commands (via a KVM
>>> > StorageAdaptor) to log in the host to the target and then you have a
>>> > block device.  Maybe libvirt will do that for you, but my quick read
>>> > made it sound like the iscsi libvirt pool type is actually a pool, not
>>> > a lun or volume, so you'll need to figure out if that works or if
>>> > you'll have to use iscsiadm commands.
>>> >
>>> > If you're NOT going to use LibvirtStorageAdaptor (because Libvirt
>>> > doesn't really manage your pool the way you want), you're going to
>>> > have to create a version of KVMStoragePool class and a StorageAdaptor
>>> > class (see LibvirtStoragePool.java and LibvirtStorageAdaptor.java),
>>> > implementing all of the methods, then in KVMStorageManager.java
>>> > there's a "_storageMapper" map. This is used to select the correct
>>> > adaptor, you can see in this file that every call first pulls the
>>> > correct adaptor out of this map via getStorageAdaptor. So you can see
>>> > a comment in this file that says "add other storage adaptors here",
>>> > where it puts to this map, this is where you'd register your adaptor.
>>> >
>>> > So, referencing StorageAdaptor.java, createStoragePool accepts all of
>>> > the pool data (host, port, name, path) which would be used to log the
>>> > host into the initiator. I *believe* the method getPhysicalDisk will
>>> > need to do the work of attaching the lun.  AttachVolumeCommand calls
>>> > this and then creates the XML diskdef and attaches it to the VM. Now,
>>> > one thing you need to know is that createStoragePool is called often,
>>> > sometimes just to make sure the pool is there. You may want to create
>>> > a map in your adaptor class and keep track of pools that have been
>>> > created, LibvirtStorageAdaptor doesn't have to do this because it asks
>>> > libvirt about which storage pools exist. There are also calls to
>>> > refresh the pool stats, and all of the other calls can be seen in the
>>> > StorageAdaptor as well. There's a createPhysical disk, clone, etc, but
>>> > it's probably a hold-over from 4.1, as I have the vague idea that
>>> > volumes are created on the mgmt server via the plugin now, so whatever
>>> > doesn't apply can just be stubbed out (or optionally
>>> > extended/reimplemented here, if you don't mind the hosts talking to
>>> > the san api).
>>> >
>>> > There is a difference between attaching new volumes and launching a VM
>>> > with existing volumes.  In the latter case, the VM definition that was
>>> > passed to the KVM agent includes the disks, (StartCommand).
>>> >
>>> > I'd be interested in how your pool is defined for Xen, I imagine it
>>> > would need to be kept the same. Is it just a definition to the SAN
>>> > (ip address or some such, port number) and perhaps a volume pool name?
>>> >
>>> >> If there is a way for me to update the ACL list on the SAN to have
>>> only a
>>> >> single KVM host have access to the volume, that would be ideal.
>>> >
>>> > That depends on your SAN API.  I was under the impression that the
>>> > storage plugin framework allowed for acls, or for you to do whatever
>>> > you want for create/attach/delete/snapshot, etc. You'd just call your
>>> > SAN API with the host info for the ACLs prior to when the disk is
>>> > attached (or the VM is started).  I'd have to look more at the
>>> > framework to know the details, in 4.1 I would do this in
>>> > getPhysicalDisk just prior to connecting up the LUN.
>>> >
>>> >
>>> > On Fri, Sep 13, 2013 at 10:27 PM, Mike Tutkowski
>>> > <mike.tutkow...@solidfire.com> wrote:
>>> >> OK, yeah, the ACL part will be interesting. That is a bit different
>>> from how
>>> >> it works with XenServer and VMware.
>>> >>
>>> >> Just to give you an idea how it works in 4.2 with XenServer:
>>> >>
>>> >> * The user creates a CS volume (this is just recorded in the
>>> cloud.volumes
>>> >> table).
>>> >>
>>> >> * The user attaches the volume as a disk to a VM for the first time
>>> (if the
>>> >> storage allocator picks the SolidFire plug-in, the storage framework
>>> invokes
>>> >> a method on the plug-in that creates a volume on the SAN...info like
>>> the IQN
>>> >> of the SAN volume is recorded in the DB).
>>> >>
>>> >> * CitrixResourceBase's execute(AttachVolumeCommand) is executed. It
>>> >> determines based on a flag passed in that the storage in question is
>>> >> "CloudStack-managed" storage (as opposed to "traditional" preallocated
>>> >> storage). This tells it to discover the iSCSI target. Once discovered
>>> it
>>> >> determines if the iSCSI target already contains a storage repository
>>> (it
>>> >> would if this were a re-attach situation). If it does contain an SR
>>> already,
>>> >> then there should already be one VDI, as well. If there is no SR, an
>>> SR is
>>> >> created and a single VDI is created within it (that takes up about as
>>> much
>>> >> space as was requested for the CloudStack volume).
>>> >>
>>> >> * The normal attach-volume logic continues (it depends on the
>>> existence of
>>> >> an SR and a VDI).
>>> >>
>>> >> The VMware case is essentially the same (mainly just substitute
>>> datastore
>>> >> for SR and VMDK for VDI).
>>> >>
>>> >> In both cases, all hosts in the cluster have discovered the iSCSI
>>> target,
>>> >> but only the host that is currently running the VM that is using the
>>> VDI (or
>>> >> VMKD) is actually using the disk.
>>> >>
>>> >> Live Migration should be OK because the hypervisors communicate with
>>> >> whatever metadata they have on the SR (or datastore).
>>> >>
>>> >> I see what you're saying with KVM, though.
>>> >>
>>> >> In that case, the hosts are clustered only in CloudStack's eyes. CS
>>> controls
>>> >> Live Migration. You don't really need a clustered filesystem on the
>>> LUN. The
>>> >> LUN could be handed over raw to the VM using it.
>>> >>
>>> >> If there is a way for me to update the ACL list on the SAN to have
>>> only a
>>> >> single KVM host have access to the volume, that would be ideal.
>>> >>
>>> >> Also, I agree I'll need to use iscsiadm to discover and log in to the
>>> iSCSI
>>> >> target. I'll also need to take the resultant new device and pass it
>>> into the
>>> >> VM.
>>> >>
>>> >> Does this sound reasonable? Please call me out on anything I seem
>>> incorrect
>>> >> about. :)
>>> >>
>>> >> Thanks for all the thought on this, Marcus!
>>> >>
>>> >>
>>> >> On Fri, Sep 13, 2013 at 8:25 PM, Marcus Sorensen <shadow...@gmail.com
>>> >
>>> >> wrote:
>>> >>>
>>> >>> Perfect. You'll have a domain def ( the VM), a disk def, and the
>>> attach
>>> >>> the disk def to the vm. You may need to do your own StorageAdaptor
>>> and run
>>> >>> iscsiadm commands to accomplish that, depending on how the libvirt
>>> iscsi
>>> >>> works. My impression is that a 1:1:1 pool/lun/volume isn't how it
>>> works on
>>> >>> xen at the momen., nor is it ideal.
>>> >>>
>>> >>> Your plugin will handle acls as far as which host can see which luns
>>> as
>>> >>> well, I remember discussing that months ago, so that a disk won't be
>>> >>> connected until the hypervisor has exclusive access, so it will be
>>> safe and
>>> >>> fence the disk from rogue nodes that cloudstack loses connectivity
>>> with. It
>>> >>> should revoke access to everything but the target host... Except for
>>> during
>>> >>> migration but we can discuss that later, there's a migration prep
>>> process
>>> >>> where the new host can be added to the acls, and the old host can be
>>> removed
>>> >>> post migration.
>>> >>>
>>> >>> On Sep 13, 2013 8:16 PM, "Mike Tutkowski" <
>>> mike.tutkow...@solidfire.com>
>>> >>> wrote:
>>> >>>>
>>> >>>> Yeah, that would be ideal.
>>> >>>>
>>> >>>> So, I would still need to discover the iSCSI target, log in to it,
>>> then
>>> >>>> figure out what /dev/sdX was created as a result (and leave it as
>>> is - do
>>> >>>> not format it with any file system...clustered or not). I would
>>> pass that
>>> >>>> device into the VM.
>>> >>>>
>>> >>>> Kind of accurate?
>>> >>>>
>>> >>>>
>>> >>>> On Fri, Sep 13, 2013 at 8:07 PM, Marcus Sorensen <
>>> shadow...@gmail.com>
>>> >>>> wrote:
>>> >>>>>
>>> >>>>> Look in LibvirtVMDef.java (I think) for the disk definitions.
>>> There are
>>> >>>>> ones that work for block devices rather than files. You can piggy
>>> back off
>>> >>>>> of the existing disk definitions and attach it to the vm as a
>>> block device.
>>> >>>>> The definition is an XML string per libvirt XML format. You may
>>> want to use
>>> >>>>> an alternate path to the disk rather than just /dev/sdx like I
>>> mentioned,
>>> >>>>> there are by-id paths to the block devices, as well as other ones
>>> that will
>>> >>>>> be consistent and easier for management, not sure how familiar you
>>> are with
>>> >>>>> device naming on Linux.
>>> >>>>>
>>> >>>>> On Sep 13, 2013 8:00 PM, "Marcus Sorensen" <shadow...@gmail.com>
>>> wrote:
>>> >>>>>>
>>> >>>>>> No, as that would rely on virtualized network/iscsi initiator
>>> inside
>>> >>>>>> the vm, which also sucks. I mean attach /dev/sdx (your lun on
>>> hypervisor) as
>>> >>>>>> a disk to the VM, rather than attaching some image file that
>>> resides on a
>>> >>>>>> filesystem, mounted on the host, living on a target.
>>> >>>>>>
>>> >>>>>> Actually, if you plan on the storage supporting live migration I
>>> think
>>> >>>>>> this is the only way. You can't put a filesystem on it and mount
>>> it in two
>>> >>>>>> places to facilitate migration unless its a clustered filesystem,
>>> in which
>>> >>>>>> case you're back to shared mount point.
>>> >>>>>>
>>> >>>>>> As far as I'm aware, the xenserver SR style is basically LVM with
>>> a xen
>>> >>>>>> specific cluster management, a custom CLVM. They don't use a
>>> filesystem
>>> >>>>>> either.
>>> >>>>>>
>>> >>>>>> On Sep 13, 2013 7:44 PM, "Mike Tutkowski"
>>> >>>>>> <mike.tutkow...@solidfire.com> wrote:
>>> >>>>>>>
>>> >>>>>>> When you say, "wire up the lun directly to the vm," do you mean
>>> >>>>>>> circumventing the hypervisor? I didn't think we could do that in
>>> CS.
>>> >>>>>>> OpenStack, on the other hand, always circumvents the hypervisor,
>>> as far as I
>>> >>>>>>> know.
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>> On Fri, Sep 13, 2013 at 7:40 PM, Marcus Sorensen <
>>> shadow...@gmail.com>
>>> >>>>>>> wrote:
>>> >>>>>>>>
>>> >>>>>>>> Better to wire up the lun directly to the vm unless there is a
>>> good
>>> >>>>>>>> reason not to.
>>> >>>>>>>>
>>> >>>>>>>> On Sep 13, 2013 7:40 PM, "Marcus Sorensen" <shadow...@gmail.com
>>> >
>>> >>>>>>>> wrote:
>>> >>>>>>>>>
>>> >>>>>>>>> You could do that, but as mentioned I think its a mistake to
>>> go to
>>> >>>>>>>>> the trouble of creating a 1:1 mapping of CS volumes to luns
>>> and then putting
>>> >>>>>>>>> a filesystem on it, mounting it, and then putting a QCOW2 or
>>> even RAW disk
>>> >>>>>>>>> image on that filesystem. You'll lose a lot of iops along the
>>> way, and have
>>> >>>>>>>>> more overhead with the filesystem and its journaling, etc.
>>> >>>>>>>>>
>>> >>>>>>>>> On Sep 13, 2013 7:33 PM, "Mike Tutkowski"
>>> >>>>>>>>> <mike.tutkow...@solidfire.com> wrote:
>>> >>>>>>>>>>
>>> >>>>>>>>>> Ah, OK, I didn't know that was such new ground in KVM with CS.
>>> >>>>>>>>>>
>>> >>>>>>>>>> So, the way people use our SAN with KVM and CS today is by
>>> >>>>>>>>>> selecting SharedMountPoint and specifying the location of the
>>> share.
>>> >>>>>>>>>>
>>> >>>>>>>>>> They can set up their share using Open iSCSI by discovering
>>> their
>>> >>>>>>>>>> iSCSI target, logging in to it, then mounting it somewhere on
>>> their file
>>> >>>>>>>>>> system.
>>> >>>>>>>>>>
>>> >>>>>>>>>> Would it make sense for me to just do that discovery, logging
>>> in,
>>> >>>>>>>>>> and mounting behind the scenes for them and letting the
>>> current code manage
>>> >>>>>>>>>> the rest as it currently does?
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>> On Fri, Sep 13, 2013 at 7:27 PM, Marcus Sorensen
>>> >>>>>>>>>> <shadow...@gmail.com> wrote:
>>> >>>>>>>>>>>
>>> >>>>>>>>>>> Oh, hypervisor snapshots are a bit different. I need to
>>> catch up
>>> >>>>>>>>>>> on the work done in KVM, but this is basically just disk
>>> snapshots + memory
>>> >>>>>>>>>>> dump. I still think disk snapshots would preferably be
>>> handled by the SAN,
>>> >>>>>>>>>>> and then memory dumps can go to secondary storage or
>>> something else. This is
>>> >>>>>>>>>>> relatively new ground with CS and KVM, so we will want to
>>> see how others are
>>> >>>>>>>>>>> planning theirs.
>>> >>>>>>>>>>>
>>> >>>>>>>>>>> On Sep 13, 2013 7:20 PM, "Marcus Sorensen" <
>>> shadow...@gmail.com>
>>> >>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>> Let me back up and say I don't think you'd use a vdi style
>>> on an
>>> >>>>>>>>>>>> iscsi lun. I think you'd want to treat it as a RAW format.
>>> Otherwise you're
>>> >>>>>>>>>>>> putting a filesystem on your lun, mounting it, creating a
>>> QCOW2 disk image,
>>> >>>>>>>>>>>> and that seems unnecessary and a performance killer.
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>> So probably attaching the raw iscsi lun as a disk to the
>>> VM, and
>>> >>>>>>>>>>>> handling snapshots on the San side via the storage plugin
>>> is best. My
>>> >>>>>>>>>>>> impression from the storage plugin refactor was that there
>>> was a snapshot
>>> >>>>>>>>>>>> service that would allow the San to handle snapshots.
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>> On Sep 13, 2013 7:15 PM, "Marcus Sorensen" <
>>> shadow...@gmail.com>
>>> >>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>> Ideally volume snapshots can be handled by the SAN back
>>> end, if
>>> >>>>>>>>>>>>> the SAN supports it. The cloudstack mgmt server could call
>>> your plugin for
>>> >>>>>>>>>>>>> volume snapshot and it would be hypervisor agnostic. As
>>> far as space, that
>>> >>>>>>>>>>>>> would depend on how your SAN handles it. With ours, we
>>> carve out luns from a
>>> >>>>>>>>>>>>> pool, and the snapshot spave comes from the pool and is
>>> independent of the
>>> >>>>>>>>>>>>> LUN size the host sees.
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>> On Sep 13, 2013 7:10 PM, "Mike Tutkowski"
>>> >>>>>>>>>>>>> <mike.tutkow...@solidfire.com> wrote:
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>> Hey Marcus,
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>> I wonder if the iSCSI storage pool type for libvirt won't
>>> work
>>> >>>>>>>>>>>>>> when you take into consideration hypervisor snapshots?
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>> On XenServer, when you take a hypervisor snapshot, the
>>> VDI for
>>> >>>>>>>>>>>>>> the snapshot is placed on the same storage repository as
>>> the volume is on.
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>> Same idea for VMware, I believe.
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>> So, what would happen in my case (let's say for XenServer
>>> and
>>> >>>>>>>>>>>>>> VMware for 4.3 because I don't support hypervisor
>>> snapshots in 4.2) is I'd
>>> >>>>>>>>>>>>>> make an iSCSI target that is larger than what the user
>>> requested for the
>>> >>>>>>>>>>>>>> CloudStack volume (which is fine because our SAN thinly
>>> provisions volumes,
>>> >>>>>>>>>>>>>> so the space is not actually used unless it needs to be).
>>> The CloudStack
>>> >>>>>>>>>>>>>> volume would be the only "object" on the SAN volume until
>>> a hypervisor
>>> >>>>>>>>>>>>>> snapshot is taken. This snapshot would also reside on the
>>> SAN volume.
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>> If this is also how KVM behaves and there is no creation
>>> of
>>> >>>>>>>>>>>>>> LUNs within an iSCSI target from libvirt (which, even if
>>> there were support
>>> >>>>>>>>>>>>>> for this, our SAN currently only allows one LUN per iSCSI
>>> target), then I
>>> >>>>>>>>>>>>>> don't see how using this model will work.
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>> Perhaps I will have to go enhance the current way this
>>> works
>>> >>>>>>>>>>>>>> with DIR?
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>> What do you think?
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>> Thanks
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>> On Fri, Sep 13, 2013 at 6:28 PM, Mike Tutkowski
>>> >>>>>>>>>>>>>> <mike.tutkow...@solidfire.com> wrote:
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>> That appears to be the way it's used for iSCSI access
>>> today.
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>> I suppose I could go that route, too, but I might as well
>>> >>>>>>>>>>>>>>> leverage what libvirt has for iSCSI instead.
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>> On Fri, Sep 13, 2013 at 6:26 PM, Marcus Sorensen
>>> >>>>>>>>>>>>>>> <shadow...@gmail.com> wrote:
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>> To your question about SharedMountPoint, I believe it
>>> just
>>> >>>>>>>>>>>>>>>> acts like a
>>> >>>>>>>>>>>>>>>> 'DIR' storage type or something similar to that. The
>>> end-user
>>> >>>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>>> responsible for mounting a file system that all KVM
>>> hosts can
>>> >>>>>>>>>>>>>>>> access,
>>> >>>>>>>>>>>>>>>> and CloudStack is oblivious to what is providing the
>>> storage.
>>> >>>>>>>>>>>>>>>> It could
>>> >>>>>>>>>>>>>>>> be NFS, or OCFS2, or some other clustered filesystem,
>>> >>>>>>>>>>>>>>>> cloudstack just
>>> >>>>>>>>>>>>>>>> knows that the provided directory path has VM images.
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>> On Fri, Sep 13, 2013 at 6:23 PM, Marcus Sorensen
>>> >>>>>>>>>>>>>>>> <shadow...@gmail.com> wrote:
>>> >>>>>>>>>>>>>>>> > Oh yes, you can use NFS, LVM, and iSCSI all at the
>>> same
>>> >>>>>>>>>>>>>>>> > time.
>>> >>>>>>>>>>>>>>>> > Multiples, in fact.
>>> >>>>>>>>>>>>>>>> >
>>> >>>>>>>>>>>>>>>> > On Fri, Sep 13, 2013 at 6:19 PM, Mike Tutkowski
>>> >>>>>>>>>>>>>>>> > <mike.tutkow...@solidfire.com> wrote:
>>> >>>>>>>>>>>>>>>> >> Looks like you can have multiple storage pools:
>>> >>>>>>>>>>>>>>>> >>
>>> >>>>>>>>>>>>>>>> >> mtutkowski@ubuntu:~$ virsh pool-list
>>> >>>>>>>>>>>>>>>> >> Name                 State      Autostart
>>> >>>>>>>>>>>>>>>> >> -----------------------------------------
>>> >>>>>>>>>>>>>>>> >> default              active     yes
>>> >>>>>>>>>>>>>>>> >> iSCSI                active     no
>>> >>>>>>>>>>>>>>>> >>
>>> >>>>>>>>>>>>>>>> >>
>>> >>>>>>>>>>>>>>>> >> On Fri, Sep 13, 2013 at 6:12 PM, Mike Tutkowski
>>> >>>>>>>>>>>>>>>> >> <mike.tutkow...@solidfire.com> wrote:
>>> >>>>>>>>>>>>>>>> >>>
>>> >>>>>>>>>>>>>>>> >>> Reading through the docs you pointed out.
>>> >>>>>>>>>>>>>>>> >>>
>>> >>>>>>>>>>>>>>>> >>> I see what you're saying now.
>>> >>>>>>>>>>>>>>>> >>>
>>> >>>>>>>>>>>>>>>> >>> You can create an iSCSI (libvirt) storage pool
>>> based on
>>> >>>>>>>>>>>>>>>> >>> an iSCSI target.
>>> >>>>>>>>>>>>>>>> >>>
>>> >>>>>>>>>>>>>>>> >>> In my case, the iSCSI target would only have one
>>> LUN, so
>>> >>>>>>>>>>>>>>>> >>> there would only
>>> >>>>>>>>>>>>>>>> >>> be one iSCSI (libvirt) storage volume in the
>>> (libvirt)
>>> >>>>>>>>>>>>>>>> >>> storage pool.
>>> >>>>>>>>>>>>>>>> >>>
>>> >>>>>>>>>>>>>>>> >>> As you say, my plug-in creates and destroys iSCSI
>>> >>>>>>>>>>>>>>>> >>> targets/LUNs on the
>>> >>>>>>>>>>>>>>>> >>> SolidFire SAN, so it is not a problem that libvirt
>>> does
>>> >>>>>>>>>>>>>>>> >>> not support
>>> >>>>>>>>>>>>>>>> >>> creating/deleting iSCSI targets/LUNs.
>>> >>>>>>>>>>>>>>>> >>>
>>> >>>>>>>>>>>>>>>> >>> It looks like I need to test this a bit to see if
>>> libvirt
>>> >>>>>>>>>>>>>>>> >>> supports
>>> >>>>>>>>>>>>>>>> >>> multiple iSCSI storage pools (as you mentioned,
>>> since
>>> >>>>>>>>>>>>>>>> >>> each one of its
>>> >>>>>>>>>>>>>>>> >>> storage pools would map to one of my iSCSI
>>> targets/LUNs).
>>> >>>>>>>>>>>>>>>> >>>
>>> >>>>>>>>>>>>>>>> >>>
>>> >>>>>>>>>>>>>>>> >>> On Fri, Sep 13, 2013 at 5:58 PM, Mike Tutkowski
>>> >>>>>>>>>>>>>>>> >>> <mike.tutkow...@solidfire.com> wrote:
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>> LibvirtStoragePoolDef has this type:
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>     public enum poolType {
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>         ISCSI("iscsi"), NETFS("netfs"),
>>> >>>>>>>>>>>>>>>> >>>> LOGICAL("logical"), DIR("dir"),
>>> >>>>>>>>>>>>>>>> >>>> RBD("rbd");
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>         String _poolType;
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>         poolType(String poolType) {
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>             _poolType = poolType;
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>         }
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>         @Override
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>         public String toString() {
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>             return _poolType;
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>         }
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>     }
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>> It doesn't look like the iSCSI type is currently
>>> being
>>> >>>>>>>>>>>>>>>> >>>> used, but I'm
>>> >>>>>>>>>>>>>>>> >>>> understanding more what you were getting at.
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>> Can you tell me for today (say, 4.2), when someone
>>> >>>>>>>>>>>>>>>> >>>> selects the
>>> >>>>>>>>>>>>>>>> >>>> SharedMountPoint option and uses it with iSCSI, is
>>> that
>>> >>>>>>>>>>>>>>>> >>>> the "netfs" option
>>> >>>>>>>>>>>>>>>> >>>> above or is that just for NFS?
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>> Thanks!
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>> On Fri, Sep 13, 2013 at 5:50 PM, Marcus Sorensen
>>> >>>>>>>>>>>>>>>> >>>> <shadow...@gmail.com>
>>> >>>>>>>>>>>>>>>> >>>> wrote:
>>> >>>>>>>>>>>>>>>> >>>>>
>>> >>>>>>>>>>>>>>>> >>>>> Take a look at this:
>>> >>>>>>>>>>>>>>>> >>>>>
>>> >>>>>>>>>>>>>>>> >>>>>
>>> http://libvirt.org/storage.html#StorageBackendISCSI
>>> >>>>>>>>>>>>>>>> >>>>>
>>> >>>>>>>>>>>>>>>> >>>>> "Volumes must be pre-allocated on the iSCSI
>>> server, and
>>> >>>>>>>>>>>>>>>> >>>>> cannot be
>>> >>>>>>>>>>>>>>>> >>>>> created via the libvirt APIs.", which I believe
>>> your
>>> >>>>>>>>>>>>>>>> >>>>> plugin will take
>>> >>>>>>>>>>>>>>>> >>>>> care of. Libvirt just does the work of logging in
>>> and
>>> >>>>>>>>>>>>>>>> >>>>> hooking it up to
>>> >>>>>>>>>>>>>>>> >>>>> the VM (I believe the Xen api does that work in
>>> the Xen
>>> >>>>>>>>>>>>>>>> >>>>> stuff).
>>> >>>>>>>>>>>>>>>> >>>>>
>>> >>>>>>>>>>>>>>>> >>>>> What I'm not sure about is whether this provides
>>> a 1:1
>>> >>>>>>>>>>>>>>>> >>>>> mapping, or if
>>> >>>>>>>>>>>>>>>> >>>>> it just allows you to register 1 iscsi device as a
>>> >>>>>>>>>>>>>>>> >>>>> pool. You may need
>>> >>>>>>>>>>>>>>>> >>>>> to write some test code or read up a bit more
>>> about
>>> >>>>>>>>>>>>>>>> >>>>> this. Let us know.
>>> >>>>>>>>>>>>>>>> >>>>> If it doesn't, you may just have to write your own
>>> >>>>>>>>>>>>>>>> >>>>> storage adaptor
>>> >>>>>>>>>>>>>>>> >>>>> rather than changing LibvirtStorageAdaptor.java.
>>>  We
>>> >>>>>>>>>>>>>>>> >>>>> can cross that
>>> >>>>>>>>>>>>>>>> >>>>> bridge when we get there.
>>> >>>>>>>>>>>>>>>> >>>>>
>>> >>>>>>>>>>>>>>>> >>>>> As far as interfacing with libvirt, see the java
>>> >>>>>>>>>>>>>>>> >>>>> bindings doc.
>>> >>>>>>>>>>>>>>>> >>>>> http://libvirt.org/sources/java/javadoc/ Normally,
>>> >>>>>>>>>>>>>>>> >>>>> you'll see a
>>> >>>>>>>>>>>>>>>> >>>>> connection object be made, then calls made to that
>>> >>>>>>>>>>>>>>>> >>>>> 'conn' object. You
>>> >>>>>>>>>>>>>>>> >>>>> can look at the LibvirtStorageAdaptor to see how
>>> that
>>> >>>>>>>>>>>>>>>> >>>>> is done for
>>> >>>>>>>>>>>>>>>> >>>>> other pool types, and maybe write some test java
>>> code
>>> >>>>>>>>>>>>>>>> >>>>> to see if you
>>> >>>>>>>>>>>>>>>> >>>>> can interface with libvirt and register iscsi
>>> storage
>>> >>>>>>>>>>>>>>>> >>>>> pools before you
>>> >>>>>>>>>>>>>>>> >>>>> get started.
>>> >>>>>>>>>>>>>>>> >>>>>
>>> >>>>>>>>>>>>>>>> >>>>> On Fri, Sep 13, 2013 at 5:31 PM, Mike Tutkowski
>>> >>>>>>>>>>>>>>>> >>>>> <mike.tutkow...@solidfire.com> wrote:
>>> >>>>>>>>>>>>>>>> >>>>> > So, Marcus, I need to investigate libvirt more,
>>> but
>>> >>>>>>>>>>>>>>>> >>>>> > you figure it
>>> >>>>>>>>>>>>>>>> >>>>> > supports
>>> >>>>>>>>>>>>>>>> >>>>> > connecting to/disconnecting from iSCSI targets,
>>> >>>>>>>>>>>>>>>> >>>>> > right?
>>> >>>>>>>>>>>>>>>> >>>>> >
>>> >>>>>>>>>>>>>>>> >>>>> >
>>> >>>>>>>>>>>>>>>> >>>>> > On Fri, Sep 13, 2013 at 5:29 PM, Mike Tutkowski
>>> >>>>>>>>>>>>>>>> >>>>> > <mike.tutkow...@solidfire.com> wrote:
>>> >>>>>>>>>>>>>>>> >>>>> >>
>>> >>>>>>>>>>>>>>>> >>>>> >> OK, thanks, Marcus
>>> >>>>>>>>>>>>>>>> >>>>> >>
>>> >>>>>>>>>>>>>>>> >>>>> >> I am currently looking through some of the
>>> classes
>>> >>>>>>>>>>>>>>>> >>>>> >> you pointed out
>>> >>>>>>>>>>>>>>>> >>>>> >> last
>>> >>>>>>>>>>>>>>>> >>>>> >> week or so.
>>> >>>>>>>>>>>>>>>> >>>>> >>
>>> >>>>>>>>>>>>>>>> >>>>> >>
>>> >>>>>>>>>>>>>>>> >>>>> >> On Fri, Sep 13, 2013 at 5:26 PM, Marcus
>>> Sorensen
>>> >>>>>>>>>>>>>>>> >>>>> >> <shadow...@gmail.com>
>>> >>>>>>>>>>>>>>>> >>>>> >> wrote:
>>> >>>>>>>>>>>>>>>> >>>>> >>>
>>> >>>>>>>>>>>>>>>> >>>>> >>> Yes, my guess is that you will need the iscsi
>>> >>>>>>>>>>>>>>>> >>>>> >>> initiator utilities
>>> >>>>>>>>>>>>>>>> >>>>> >>> installed. There should be standard packages
>>> for
>>> >>>>>>>>>>>>>>>> >>>>> >>> any distro. Then
>>> >>>>>>>>>>>>>>>> >>>>> >>> you'd call
>>> >>>>>>>>>>>>>>>> >>>>> >>> an agent storage adaptor to do the initiator
>>> login.
>>> >>>>>>>>>>>>>>>> >>>>> >>> See the info I
>>> >>>>>>>>>>>>>>>> >>>>> >>> sent
>>> >>>>>>>>>>>>>>>> >>>>> >>> previously about LibvirtStorageAdaptor.java
>>> and
>>> >>>>>>>>>>>>>>>> >>>>> >>> libvirt iscsi
>>> >>>>>>>>>>>>>>>> >>>>> >>> storage type
>>> >>>>>>>>>>>>>>>> >>>>> >>> to see if that fits your need.
>>> >>>>>>>>>>>>>>>> >>>>> >>>
>>> >>>>>>>>>>>>>>>> >>>>> >>> On Sep 13, 2013 4:55 PM, "Mike Tutkowski"
>>> >>>>>>>>>>>>>>>> >>>>> >>> <mike.tutkow...@solidfire.com>
>>> >>>>>>>>>>>>>>>> >>>>> >>> wrote:
>>> >>>>>>>>>>>>>>>> >>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>> >>>> Hi,
>>> >>>>>>>>>>>>>>>> >>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>> >>>> As you may remember, during the 4.2 release I
>>> >>>>>>>>>>>>>>>> >>>>> >>>> developed a SolidFire
>>> >>>>>>>>>>>>>>>> >>>>> >>>> (storage) plug-in for CloudStack.
>>> >>>>>>>>>>>>>>>> >>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>> >>>> This plug-in was invoked by the storage
>>> framework
>>> >>>>>>>>>>>>>>>> >>>>> >>>> at the necessary
>>> >>>>>>>>>>>>>>>> >>>>> >>>> times
>>> >>>>>>>>>>>>>>>> >>>>> >>>> so that I could dynamically create and delete
>>> >>>>>>>>>>>>>>>> >>>>> >>>> volumes on the
>>> >>>>>>>>>>>>>>>> >>>>> >>>> SolidFire SAN
>>> >>>>>>>>>>>>>>>> >>>>> >>>> (among other activities).
>>> >>>>>>>>>>>>>>>> >>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>> >>>> This is necessary so I can establish a 1:1
>>> mapping
>>> >>>>>>>>>>>>>>>> >>>>> >>>> between a
>>> >>>>>>>>>>>>>>>> >>>>> >>>> CloudStack
>>> >>>>>>>>>>>>>>>> >>>>> >>>> volume and a SolidFire volume for QoS.
>>> >>>>>>>>>>>>>>>> >>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>> >>>> In the past, CloudStack always expected the
>>> admin
>>> >>>>>>>>>>>>>>>> >>>>> >>>> to create large
>>> >>>>>>>>>>>>>>>> >>>>> >>>> volumes ahead of time and those volumes would
>>> >>>>>>>>>>>>>>>> >>>>> >>>> likely house many
>>> >>>>>>>>>>>>>>>> >>>>> >>>> root and
>>> >>>>>>>>>>>>>>>> >>>>> >>>> data disks (which is not QoS friendly).
>>> >>>>>>>>>>>>>>>> >>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>> >>>> To make this 1:1 mapping scheme work, I
>>> needed to
>>> >>>>>>>>>>>>>>>> >>>>> >>>> modify logic in
>>> >>>>>>>>>>>>>>>> >>>>> >>>> the
>>> >>>>>>>>>>>>>>>> >>>>> >>>> XenServer and VMware plug-ins so they could
>>> >>>>>>>>>>>>>>>> >>>>> >>>> create/delete storage
>>> >>>>>>>>>>>>>>>> >>>>> >>>> repositories/datastores as needed.
>>> >>>>>>>>>>>>>>>> >>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>> >>>> For 4.3 I want to make this happen with KVM.
>>> >>>>>>>>>>>>>>>> >>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>> >>>> I'm coming up to speed with how this might
>>> work on
>>> >>>>>>>>>>>>>>>> >>>>> >>>> KVM, but I'm
>>> >>>>>>>>>>>>>>>> >>>>> >>>> still
>>> >>>>>>>>>>>>>>>> >>>>> >>>> pretty new to KVM.
>>> >>>>>>>>>>>>>>>> >>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>> >>>> Does anyone familiar with KVM know how I
>>> will need
>>> >>>>>>>>>>>>>>>> >>>>> >>>> to interact with
>>> >>>>>>>>>>>>>>>> >>>>> >>>> the
>>> >>>>>>>>>>>>>>>> >>>>> >>>> iSCSI target? For example, will I have to
>>> expect
>>> >>>>>>>>>>>>>>>> >>>>> >>>> Open iSCSI will be
>>> >>>>>>>>>>>>>>>> >>>>> >>>> installed on the KVM host and use it for
>>> this to
>>> >>>>>>>>>>>>>>>> >>>>> >>>> work?
>>> >>>>>>>>>>>>>>>> >>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>> >>>> Thanks for any suggestions,
>>> >>>>>>>>>>>>>>>> >>>>> >>>> Mike
>>> >>>>>>>>>>>>>>>> >>>>> >>>>
>>> >>>>>>>>>>>>>>>> >>>>> >>>> --
>>> >>>>>>>>>>>>>>>> >>>>> >>>> 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>
*™*

Reply via email to