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.ZoneWideStoragePoolAllocat > 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)*