But currently there is no such hypervisor layer yet, and to me it's related to storage, not related to hypervisor. It's a property of a storage to support one hypervisor, two hypervisors, or all the hypervisors, not a property of hypervisor. I agree, that add a hypervisor type on the storagepoolcmd is not a proper solution, as we already see, it's not flexible enough for Solidfire. How about add a getSupportedHypervisors on storage plugin, which will return ImmutableSet<StorageProtocol>?
> -----Original Message----- > From: John Burwell [mailto:jburw...@basho.com] > Sent: Monday, June 17, 2013 1:42 PM > To: dev@cloudstack.apache.org > Subject: Re: Hypervisor Host Type Required at Zone Level for Primary Storage? > > Edison, > > For me, this issue comes back to the whole notion of the overloaded > StoragePoolType. A hypervisor plugin should declare a method akin to > getSupportedStorageProtocols() : ImmutableSet<StorageProtocol> which > the Hypervisor layer can use to filter the available DataStores from the > Storage subsystem. For example, as RBD support expands to other > hypervisors, we should only have to modify those hypervisor plugins -- not > the Hypervisor orchestration components or any aspect of the Storage layer. > > Thanks, > -John > > On Jun 17, 2013, at 4:27 PM, Edison Su <edison...@citrix.com> wrote: > > > There are storages which can only work with one hypervisor, e.g. > > Currently, Ceph can only work on KVM. And the data store created in > VCenter, can only work with Vmware. > > > > > > > >> -----Original Message----- > >> From: Mike Tutkowski [mailto:mike.tutkow...@solidfire.com] > >> Sent: Monday, June 17, 2013 1:12 PM > >> To: dev@cloudstack.apache.org > >> Subject: Re: Hypervisor Host Type Required at Zone Level for Primary > Storage? > >> > >> I figured you might have something to say about this, John. :) > >> > >> Yeah, I have no idea behind the motivation for this change other than > >> what Edison just said in a recent e-mail. > >> > >> It sounds like this change went in so that the allocators could look > >> at the VM characteristics and see the hypervisor type. With this > >> info, the allocator can decide if a particular zone-wide storage is > >> acceptable. This doesn't apply for my situation as I'm dealing with a > >> SAN, but some zone-wide storage is static (just a volume "out there" > >> somewhere). Once this volume is used for, say, XenServer purposes, it > can only be used for XenServer going forward. > >> > >> For more details, I would recommend Edison comment. > >> > >> > >> On Mon, Jun 17, 2013 at 2:01 PM, John Burwell <jburw...@basho.com> > >> wrote: > >> > >>> Mike, > >>> > >>> I know my thoughts will come as a galloping shock, but the idea of a > >>> hypervisor type being attached to a volume is the type of dependency > >>> I think we need to remove from the Storage layer. What attributes > >>> of a DataStore/StoragePool require association to a hypervisor type? > >>> My thought is that we should expose query methods allow the > >>> Hypervisor layer to determine if a DataStore/StoragePool requires > >>> such a reservation, and we track that reservation in the Hypervisor layer. > >>> > >>> Thanks, > >>> -John > >>> > >>> On Jun 17, 2013, at 3:48 PM, Mike Tutkowski > >>> <mike.tutkow...@solidfire.com> > >>> wrote: > >>> > >>>> Hi Edison, > >>>> > >>>> How's about if I add this logic into ZoneWideStoragePoolAllocator > >>> (below)? > >>>> > >>>> After filtering storage pools by tags, it saves off the ones that > >>>> are for any hypervisor. > >>>> > >>>> Next, we filter the list down more by hypervisor. > >>>> > >>>> Then, we add the storage pools back into the list that were for any > >>>> hypervisor. > >>>> > >>>> @Override > >>>> > >>>> protected List<StoragePool> select(DiskProfile dskCh, > >>>> > >>>> VirtualMachineProfile<? extends VirtualMachine> vmProfile, > >>>> > >>>> DeploymentPlan plan, ExcludeList avoid, int returnUpTo) { > >>>> > >>>> s_logger.debug("ZoneWideStoragePoolAllocator to find storage > >>>> pool"); > >>>> > >>>> List<StoragePool> suitablePools = new ArrayList<StoragePool>(); > >>>> > >>>> > >>>> List<StoragePoolVO> storagePools = > >>>> > >> > _storagePoolDao.findZoneWideStoragePoolsByTags(plan.getDataCenterId( > >>>> ), > >>>> dskCh.getTags()); > >>>> > >>>> > >>>> if (storagePools == null) { > >>>> > >>>> storagePools = new ArrayList<StoragePoolVO>(); > >>>> > >>>> } > >>>> > >>>> > >>>> List<StoragePoolVO> anyHypervisorStoragePools = > >>>> newArrayList<StoragePoolVO>(); > >>>> > >>>> > >>>> for (StoragePoolVO storagePool : storagePools) { > >>>> > >>>> if > >>>> (storagePool.getHypervisor().equals(HypervisorType.Any)) { > >>>> > >>>> anyHypervisorStoragePools.add(storagePool); > >>>> > >>>> } > >>>> > >>>> } > >>>> > >>>> > >>>> List<StoragePoolVO> storagePoolsByHypervisor = > >>>> > >>> > >> > _storagePoolDao.findZoneWideStoragePoolsByHypervisor(plan.getDataCent > >> e > >>> rId(), > >>>> dskCh.getHypervisorType()); > >>>> > >>>> > >>>> storagePools.retainAll(storagePoolsByHypervisor); > >>>> > >>>> > >>>> storagePools.addAll(anyHypervisorStoragePools); > >>>> > >>>> > >>>> // add remaining pools in zone, that did not match tags, to > >>>> avoid set > >>>> > >>>> List<StoragePoolVO> allPools = > >>>> > >> > _storagePoolDao.findZoneWideStoragePoolsByTags(plan.getDataCenterId( > >>>> ), > >>>> null); > >>>> > >>>> allPools.removeAll(storagePools); > >>>> > >>>> for (StoragePoolVO pool : allPools) { > >>>> > >>>> avoid.addPool(pool.getId()); > >>>> > >>>> } > >>>> > >>>> > >>>> for (StoragePoolVO storage : storagePools) { > >>>> > >>>> if (suitablePools.size() == returnUpTo) { > >>>> > >>>> break; > >>>> > >>>> } > >>>> > >>>> StoragePool pol = (StoragePool)this.dataStoreMgr > >>>> .getPrimaryDataStore(storage.getId()); > >>>> > >>>> if (filter(avoid, pol, dskCh, plan)) { > >>>> > >>>> suitablePools.add(pol); > >>>> > >>>> } else { > >>>> > >>>> avoid.addPool(pol.getId()); > >>>> > >>>> } > >>>> > >>>> } > >>>> > >>>> return suitablePools; > >>>> > >>>> } > >>>> > >>>> > >>>> On Mon, Jun 17, 2013 at 11:40 AM, Mike Tutkowski < > >>>> mike.tutkow...@solidfire.com> wrote: > >>>> > >>>>> Hi Edison, > >>>>> > >>>>> I haven't looked into this much, so maybe what I suggest here > >>>>> won't make sense, but here goes: > >>>>> > >>>>> What about a Hypervisor.MULTIPLE enum option ('Hypervisor' might > >>>>> not be the name of the enumeration...I forget). The > >>> ZoneWideStoragePoolAllocator > >>>>> could use this to be less choosy about if a storage pool qualifies > >>>>> to be used. > >>>>> > >>>>> Does that make any sense? > >>>>> > >>>>> Thanks! > >>>>> > >>>>> > >>>>> On Mon, Jun 17, 2013 at 11:28 AM, Edison Su <edison...@citrix.com> > >>> wrote: > >>>>> > >>>>>> I think it's due to this > >>>>>> > >>> https://cwiki.apache.org/confluence/display/CLOUDSTACK/Zone- > >> wide+prima > >>> ry+storage+target > >>>>>> There are zone-wide storages, may only work with one particular > >>>>>> hypervisor. For example, the data store created on VCenter can be > >>> shared by > >>>>>> all the clusters in a DC, but only for vmware. And, CloudStack > >>>>>> supports multiple hypervisors in one Zone, so, somehow, need a > >>>>>> way to tell mgt server, for a particular zone-wide storage, which > >>>>>> can only work with certain hypervisors. > >>>>>> You can treat hypervisor type on the storage pool, is another > >>>>>> tag, to help storage pool allocator to find proper storage pool. > >>>>>> But seems hypervisor type is not enough for your case, as your > >>>>>> storage pool can > >>> work > >>>>>> with both vmware/xenserver, but not for other hypervisors(that's > >>>>>> your current code's implementation limitation, not your storage > >>>>>> itself > >>> can't do > >>>>>> that). > >>>>>> So I'd think you need to extend ZoneWideStoragePoolAllocator, > >>>>>> maybe, a new allocator called: > >>>>>> solidfirezonewidestoragepoolAllocator. And, > >>> replace > >>>>>> the following line in applicationContext.xml: > >>>>>> <bean id="zoneWideStoragePoolAllocator" > >>>>>> > >>> > >> class="org.apache.cloudstack.storage.allocator.ZoneWideStoragePoolAll > >> ocat > >> or" > >>>>>> /> > >>>>>> With your solidfirezonewidestoragepoolAllocator > >>>>>> It also means, for each CloudStack mgt server deployment, admin > >>>>>> needs > >>> to > >>>>>> configure applicationContext.xml for their needs. > >>>>>> > >>>>>>> -----Original Message----- > >>>>>>> From: Mike Tutkowski [mailto:mike.tutkow...@solidfire.com] > >>>>>>> Sent: Saturday, June 15, 2013 11:34 AM > >>>>>>> To: dev@cloudstack.apache.org > >>>>>>> Subject: Hypervisor Host Type Required at Zone Level for Primary > >>>>>> Storage? > >>>>>>> > >>>>>>> Hi, > >>>>>>> > >>>>>>> I recently updated my local repo and noticed that we now require > >>>>>>> a hypervisor type to be associated with zone-wide primary storage. > >>>>>>> > >>>>>>> I was wondering what the motivation for this might be? > >>>>>>> > >>>>>>> In my case, my zone-wide primary storage represents a SAN. > >>>>>>> Volumes are carved out of the SAN as needed and can currently be > >>>>>>> utilized on both > >>>>>> Xen > >>>>>>> and VMware (although, of course, once you've used a given > volume > >>>>>>> on > >>> one > >>>>>>> hypervisor type or the other, you can only continue to use it > >>>>>>> with > >>> that > >>>>>>> hypervisor type). > >>>>>>> > >>>>>>> I guess the point being my primary storage can be associated > >>>>>>> with more > >>>>>> than > >>>>>>> one hypervisor type because of its dynamic nature. > >>>>>>> > >>>>>>> Can someone fill me in on the reasons behind this recent change > >>>>>>> and recommendations on how I should proceed here? > >>>>>>> > >>>>>>> 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<http://solidfire.com/solution/overview/?video=play> > >>>>>>> *(tm)* > >>>>>> > >>>>> > >>>>> > >>>>> > >>>>> -- > >>>>> *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> > >>>>> *(tm)* > >>>>> > >>>> > >>>> > >>>> > >>>> -- > >>>> *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> > >>>> *(tm)* > >>> > >>> > >> > >> > >> -- > >> *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> > >> *(tm)*