Return-Path: X-Original-To: apmail-incubator-cloudstack-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-cloudstack-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 694A0D849 for ; Fri, 2 Nov 2012 01:08:46 +0000 (UTC) Received: (qmail 9946 invoked by uid 500); 2 Nov 2012 01:08:44 -0000 Delivered-To: apmail-incubator-cloudstack-commits-archive@incubator.apache.org Received: (qmail 9865 invoked by uid 500); 2 Nov 2012 01:08:44 -0000 Mailing-List: contact cloudstack-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: cloudstack-dev@incubator.apache.org Delivered-To: mailing list cloudstack-commits@incubator.apache.org Received: (qmail 9500 invoked by uid 99); 2 Nov 2012 01:08:44 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 02 Nov 2012 01:08:44 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 18A5C51C19; Fri, 2 Nov 2012 01:08:44 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: kelveny@apache.org To: cloudstack-commits@incubator.apache.org X-Mailer: ASF-Git Admin Mailer Subject: [10/11] add volume service skeleton Message-Id: <20121102010844.18A5C51C19@tyr.zones.apache.org> Date: Fri, 2 Nov 2012 01:08:44 +0000 (UTC) http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/image/db/ImageDataVO.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/image/db/ImageDataVO.java b/platform/storage/src/org/apache/cloudstack/storage/image/db/ImageDataVO.java new file mode 100644 index 0000000..d50be88 --- /dev/null +++ b/platform/storage/src/org/apache/cloudstack/storage/image/db/ImageDataVO.java @@ -0,0 +1,381 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.storage.image.db; + +import java.util.Date; +import java.util.Map; +import java.util.UUID; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.TableGenerator; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; + +import com.cloud.api.Identity; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.storage.Storage; +import com.cloud.storage.VMTemplateVO; +import com.cloud.storage.Storage.TemplateType; +import com.cloud.utils.db.GenericDao; + +@Entity +@Table(name="vm_template") +public class ImageDataVO implements Identity { + @Id + @TableGenerator(name="vm_template_sq", table="sequence", pkColumnName="name", valueColumnName="value", pkColumnValue="vm_template_seq", allocationSize=1) + @Column(name="id", nullable = false) + private long id; + + @Column(name="format") + private String format; + + @Column(name="unique_name") + private String uniqueName; + + @Column(name="name") + private String name = null; + + @Column(name="public") + private boolean publicTemplate = true; + + @Column(name="featured") + private boolean featured; + + @Column(name="type") + private Storage.TemplateType templateType; + + @Column(name="url") + private String url = null; + + @Column(name="hvm") + private boolean requiresHvm; + + @Column(name="bits") + private int bits; + + @Temporal(value=TemporalType.TIMESTAMP) + @Column(name=GenericDao.CREATED_COLUMN) + private Date created = null; + + @Column(name=GenericDao.REMOVED) + @Temporal(TemporalType.TIMESTAMP) + private Date removed; + + @Column(name="account_id") + private long accountId; + + @Column(name="checksum") + private String checksum; + + @Column(name="display_text", length=4096) + private String displayText; + + @Column(name="enable_password") + private boolean enablePassword; + + @Column(name="guest_os_id") + private long guestOSId; + + @Column(name="bootable") + private boolean bootable = true; + + @Column(name="prepopulate") + private boolean prepopulate = false; + + @Column(name="cross_zones") + private boolean crossZones = false; + + @Column(name="hypervisor_type") + @Enumerated(value=EnumType.STRING) + private HypervisorType hypervisorType; + + @Column(name="extractable") + private boolean extractable = true; + + @Column(name="source_template_id") + private Long sourceTemplateId; + + @Column(name="template_tag") + private String templateTag; + + @Column(name="uuid") + private String uuid; + + @Column(name="sort_key") + private int sortKey; + + @Column(name="enable_sshkey") + private boolean enableSshKey; + + @Transient + Map details; + + + public String getUniqueName() { + return uniqueName; + } + + public void setUniqueName(String uniqueName) { + this.uniqueName = uniqueName; + } + + protected ImageDataVO() { + this.uuid = UUID.randomUUID().toString(); + } + + public boolean getEnablePassword() { + return enablePassword; + } + + public String getFormat() { + return format; + } + + public void setEnablePassword(boolean enablePassword) { + this.enablePassword = enablePassword; + } + + public void setFormat(String format) { + this.format = format; + } + + public long getId() { + return id; + } + + public TemplateType getTemplateType() { + return templateType; + } + + public void setTemplateType(TemplateType type) { + this.templateType = type; + } + + public boolean requiresHvm() { + return requiresHvm; + } + + public int getBits() { + return bits; + } + + public void setBits(int bits) { + this.bits = bits; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Date getRemoved() { + return removed; + } + + public boolean isPublicTemplate() { + return publicTemplate; + } + + public void setPublicTemplate(boolean publicTemplate) { + this.publicTemplate = publicTemplate; + } + + public boolean isFeatured() { + return featured; + } + + public void setFeatured(boolean featured) { + this.featured = featured; + } + + public Date getCreated() { + return created; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public long getAccountId() { + return accountId; + } + + public String getChecksum() { + return checksum; + } + + public void setChecksum(String checksum) { + this.checksum = checksum; + } + + public String getDisplayText() { + return displayText; + } + + public void setDisplayText(String displayText) { + this.displayText = displayText; + } + + public long getGuestOSId() { + return guestOSId; + } + + public void setGuestOSId(long guestOSId) { + this.guestOSId = guestOSId; + } + + public boolean isBootable() { + return bootable; + } + + public void setBootable(boolean bootable) { + this.bootable = bootable; + } + + public void setPrepopulate(boolean prepopulate) { + this.prepopulate = prepopulate; + } + + public boolean isPrepopulate() { + return prepopulate; + } + + public void setCrossZones(boolean crossZones) { + this.crossZones = crossZones; + } + + public boolean isCrossZones() { + return crossZones; + } + + public HypervisorType getHypervisorType() { + return hypervisorType; + } + + public void setHypervisorType(HypervisorType hyperType) { + hypervisorType = hyperType; + } + + public boolean isExtractable() { + return extractable; + } + + public void setExtractable(boolean extractable) { + this.extractable = extractable; + } + + public Long getSourceTemplateId() { + return sourceTemplateId; + } + + public void setSourceTemplateId(Long sourceTemplateId) { + this.sourceTemplateId = sourceTemplateId; + } + + public String getTemplateTag() { + return templateTag; + } + + public void setTemplateTag(String templateTag) { + this.templateTag = templateTag; + } + + public long getDomainId() { + return -1; + } + + @Override + public String getUuid() { + return this.uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public Map getDetails() { + return this.details; + } + + public void setDetails(Map details) { + this.details = details; + } + + @Override + public boolean equals(Object that) { + if (this == that ) { + return true; + } + if (!(that instanceof VMTemplateVO)){ + return false; + } + VMTemplateVO other = (VMTemplateVO)that; + + return ((this.getUniqueName().equals(other.getUniqueName()))); + } + + @Override + public int hashCode() { + return uniqueName.hashCode(); + } + + @Transient + String toString; + @Override + public String toString() { + if (toString == null) { + toString = new StringBuilder("Tmpl[").append(id).append("-").append(format).append("-").append(uniqueName).toString(); + } + return toString; + } + + public void setRemoved(Date removed) { + this.removed = removed; + } + + public void setSortKey(int key) { + sortKey = key; + } + + public int getSortKey() { + return sortKey; + } + + public boolean getEnableSshKey() { + return enableSshKey; + } + + public void setEnableSshKey(boolean enable) { + enableSshKey = enable; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/image/format/BAREMETAL.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/image/format/BAREMETAL.java b/platform/storage/src/org/apache/cloudstack/storage/image/format/BAREMETAL.java new file mode 100644 index 0000000..c3de2f1 --- /dev/null +++ b/platform/storage/src/org/apache/cloudstack/storage/image/format/BAREMETAL.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.storage.image.format; + +import org.apache.cloudstack.storage.BaseType; +import org.springframework.stereotype.Component; + +@Component +public class BAREMETAL extends BaseType implements ImageFormat { + private final String type = "BAREMETAL"; + @Override + public String toString() { + return type; + } +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/image/format/ISO.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/image/format/ISO.java b/platform/storage/src/org/apache/cloudstack/storage/image/format/ISO.java new file mode 100644 index 0000000..f27d16b --- /dev/null +++ b/platform/storage/src/org/apache/cloudstack/storage/image/format/ISO.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.storage.image.format; + +import org.apache.cloudstack.storage.BaseType; +import org.springframework.stereotype.Component; + +@Component +public class ISO extends BaseType implements ImageFormat { + private final String type = "ISO"; + @Override + public String toString() { + return type; + } +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/image/format/ImageFormat.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/image/format/ImageFormat.java b/platform/storage/src/org/apache/cloudstack/storage/image/format/ImageFormat.java new file mode 100644 index 0000000..f02694a --- /dev/null +++ b/platform/storage/src/org/apache/cloudstack/storage/image/format/ImageFormat.java @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.storage.image.format; + +public interface ImageFormat { + +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/image/format/ImageFormatHelper.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/image/format/ImageFormatHelper.java b/platform/storage/src/org/apache/cloudstack/storage/image/format/ImageFormatHelper.java new file mode 100644 index 0000000..6ecb9b0 --- /dev/null +++ b/platform/storage/src/org/apache/cloudstack/storage/image/format/ImageFormatHelper.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.storage.image.format; + +import java.util.List; + +import javax.inject.Inject; + +import org.springframework.stereotype.Component; + +@Component +public class ImageFormatHelper { + private static List formats; + private static final ImageFormat defaultFormat = new Unknown(); + @Inject + public void setFormats(List formats) { + ImageFormatHelper.formats = formats; + } + + public static ImageFormat getFormat(String format) { + for(ImageFormat fm : formats) { + if (fm.equals(format)) { + return fm; + } + } + return ImageFormatHelper.defaultFormat; + } +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/image/format/OVA.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/image/format/OVA.java b/platform/storage/src/org/apache/cloudstack/storage/image/format/OVA.java new file mode 100644 index 0000000..46f77a0 --- /dev/null +++ b/platform/storage/src/org/apache/cloudstack/storage/image/format/OVA.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.storage.image.format; + +import org.apache.cloudstack.storage.BaseType; +import org.springframework.stereotype.Component; + +@Component +public class OVA extends BaseType implements ImageFormat { + private final String type = "OVA"; + @Override + public String toString() { + return type; + } +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/image/format/QCOW2.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/image/format/QCOW2.java b/platform/storage/src/org/apache/cloudstack/storage/image/format/QCOW2.java new file mode 100644 index 0000000..9e13ebb --- /dev/null +++ b/platform/storage/src/org/apache/cloudstack/storage/image/format/QCOW2.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.storage.image.format; + +import org.apache.cloudstack.storage.BaseType; +import org.springframework.stereotype.Component; + +@Component("imageformat_qcow2") +public class QCOW2 extends BaseType implements ImageFormat { + private final String type = "QCOW2"; + @Override + public String toString() { + return type; + } +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/image/format/Unknown.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/image/format/Unknown.java b/platform/storage/src/org/apache/cloudstack/storage/image/format/Unknown.java new file mode 100644 index 0000000..341be64 --- /dev/null +++ b/platform/storage/src/org/apache/cloudstack/storage/image/format/Unknown.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.storage.image.format; + +import org.apache.cloudstack.storage.BaseType; +import org.springframework.stereotype.Component; + +@Component +public class Unknown extends BaseType implements ImageFormat { + private final String type = "Unknown"; + + @Override + public String toString() { + return type; + } +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/image/format/VHD.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/image/format/VHD.java b/platform/storage/src/org/apache/cloudstack/storage/image/format/VHD.java new file mode 100644 index 0000000..4a02e5f --- /dev/null +++ b/platform/storage/src/org/apache/cloudstack/storage/image/format/VHD.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.storage.image.format; + +import org.apache.cloudstack.storage.BaseType; + +public class VHD extends BaseType implements ImageFormat { + private final String type = "VHD"; + @Override + public String toString() { + return type; + } +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProvider.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProvider.java b/platform/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProvider.java new file mode 100644 index 0000000..42933f4 --- /dev/null +++ b/platform/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProvider.java @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.storage.image.provider; + +import org.apache.cloudstack.storage.image.store.ImageDataStore; + +public interface ImageDataStoreProvider { + ImageDataStore getImageDataStore(long imageStoreId); +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/image/store/ImageDataStore.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/image/store/ImageDataStore.java b/platform/storage/src/org/apache/cloudstack/storage/image/store/ImageDataStore.java new file mode 100644 index 0000000..db7c265 --- /dev/null +++ b/platform/storage/src/org/apache/cloudstack/storage/image/store/ImageDataStore.java @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.storage.image.store; + +public interface ImageDataStore { + +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/manager/PrimaryDataStoreManagerImpl.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/manager/PrimaryDataStoreManagerImpl.java b/platform/storage/src/org/apache/cloudstack/storage/manager/PrimaryDataStoreManagerImpl.java index 6faf6d7..2cae6a8 100644 --- a/platform/storage/src/org/apache/cloudstack/storage/manager/PrimaryDataStoreManagerImpl.java +++ b/platform/storage/src/org/apache/cloudstack/storage/manager/PrimaryDataStoreManagerImpl.java @@ -26,6 +26,7 @@ import org.apache.cloudstack.platform.subsystem.api.storage.DataStore; import org.apache.cloudstack.platform.subsystem.api.storage.DataStore.StoreType; import org.apache.cloudstack.platform.subsystem.api.storage.DataStoreLifeCycle; import org.apache.cloudstack.platform.subsystem.api.storage.StorageProvider; +import org.apache.cloudstack.storage.datastore.PrimaryDataStore; import com.cloud.dc.ClusterVO; import com.cloud.dc.DataCenterVO; @@ -126,4 +127,16 @@ public class PrimaryDataStoreManagerImpl implements PrimaryDataStoreManager { return spool; } + @Override + public PrimaryDataStore addDataStore(long zoneId, long podId, long clusterId, long hostId, String URI, String storageType, String poolName, String storageProviderName, Map params) { + // TODO Auto-generated method stub + return null; + } + + @Override + public PrimaryDataStore getDataStore(String id) { + // TODO Auto-generated method stub + return null; + } + } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/volume/Volume.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/volume/Volume.java b/platform/storage/src/org/apache/cloudstack/storage/volume/Volume.java index fb1c37d..35eaa3b 100644 --- a/platform/storage/src/org/apache/cloudstack/storage/volume/Volume.java +++ b/platform/storage/src/org/apache/cloudstack/storage/volume/Volume.java @@ -2,19 +2,23 @@ package org.apache.cloudstack.storage.volume; import javax.inject.Inject; -import org.apache.cloudstack.platform.subsystem.api.storage.DataStore; import org.apache.cloudstack.storage.datastore.PrimaryDataStore; +import org.apache.cloudstack.storage.datastore.PrimaryDataStoreInfo; import org.apache.cloudstack.storage.volume.db.VolumeDao; import org.apache.cloudstack.storage.volume.db.VolumeVO; import org.apache.cloudstack.storage.volume.disktype.VolumeDiskType; import org.apache.cloudstack.storage.volume.disktype.VolumeDiskTypeHelper; import org.apache.cloudstack.storage.volume.type.VolumeType; import org.apache.cloudstack.storage.volume.type.VolumeTypeHelper; +import org.apache.log4j.Logger; -import com.cloud.utils.fsm.StateObject; +import com.cloud.utils.fsm.NoTransitionException; +import com.cloud.utils.fsm.StateMachine2; -public class Volume implements StateObject { +public class Volume { + private static final Logger s_logger = Logger.getLogger(Volume.class); protected VolumeVO volumeVO; + private StateMachine2 _volStateMachine; protected PrimaryDataStore dataStore; @Inject VolumeDiskTypeHelper diskTypeHelper; @@ -28,7 +32,30 @@ public class Volume implements StateObject { this.dataStore = dataStore; } - @Override + public String getUuid() { + return volumeVO.getUuid(); + } + + public void setUuid(String uuid) { + volumeVO.setUuid(uuid); + } + + public String getPath() { + return volumeVO.getPath(); + } + + public String getTemplateUuid() { + return null; + } + + public String getTemplatePath() { + return null; + } + + public PrimaryDataStoreInfo getDataStoreInfo() { + return dataStore.getDataStoreInfo(); + } + public VolumeState getState() { return volumeVO.getState(); } @@ -49,10 +76,24 @@ public class Volume implements StateObject { return volumeTypeHelper.getType(volumeVO.getVolumeType()); } + public long getVolumeId() { + return volumeVO.getId(); + } + public void setVolumeDiskType(VolumeDiskType type) { volumeVO.setDiskType(type.toString()); } + public boolean stateTransit(VolumeEvent event) { + boolean result = false; + try { + result = _volStateMachine.transitTo(volumeVO, event, null, volumeDao); + } catch (NoTransitionException e) { + s_logger.debug("Failed to transit volume: " + this.getVolumeId() + ", due to: " + e.toString()); + } + return result; + } + public void update() { volumeDao.update(volumeVO.getId(), volumeVO); volumeVO = volumeDao.findById(volumeVO.getId()); http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeInfo.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeInfo.java b/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeInfo.java new file mode 100644 index 0000000..0c6981a --- /dev/null +++ b/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeInfo.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.storage.volume; + +import org.apache.cloudstack.storage.datastore.PrimaryDataStoreInfo; +import org.apache.cloudstack.storage.volume.disktype.VolumeDiskType; +import org.apache.cloudstack.storage.volume.type.VolumeType; + +public class VolumeInfo { + private long size; + private String uuid; + private String path; + private PrimaryDataStoreInfo dataStoreInfo; + private String baseTemplateUuid; + private String baseTemplatePath; + private VolumeType type; + private VolumeDiskType diskType; + + public VolumeInfo(Volume volume) { + this.size = volume.getSize(); + this.uuid = volume.getUuid(); + this.baseTemplatePath = volume.getTemplatePath(); + this.baseTemplateUuid = volume.getTemplateUuid(); + this.dataStoreInfo = volume.getDataStoreInfo(); + this.diskType = volume.getDiskType(); + this.type = volume.getType(); + } + + public long getSize() { + return this.size; + } + + public String getUuid() { + return this.uuid; + } + + public String getPath() { + return this.path; + } + + public PrimaryDataStoreInfo getDataStore() { + return this.dataStoreInfo; + } + + public String getTemplateUuid() { + return this.baseTemplateUuid; + } + + public String getTemplatePath() { + return this.baseTemplatePath; + } + + public VolumeType getType() { + return this.type; + } + + public VolumeDiskType getDiskType() { + return this.diskType; + } +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java b/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java index 79aa645..63e247c 100644 --- a/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java +++ b/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java @@ -18,6 +18,7 @@ */ package org.apache.cloudstack.storage.volume; +import org.apache.cloudstack.storage.volume.disktype.VolumeDiskType; import org.apache.cloudstack.storage.volume.type.VolumeType; public interface VolumeService { @@ -34,7 +35,7 @@ public interface VolumeService { * * @return the volume object */ - Volume createVolume(long volumeId, long dataStoreId); + Volume createVolume(long volumeId, long dataStoreId, VolumeDiskType diskType); /** * Delete volume http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java b/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java index a44f82d..145813f 100644 --- a/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java +++ b/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java @@ -20,7 +20,10 @@ package org.apache.cloudstack.storage.volume; import javax.inject.Inject; +import org.apache.cloudstack.storage.datastore.PrimaryDataStore; +import org.apache.cloudstack.storage.datastore.manager.PrimaryDataStoreManager; import org.apache.cloudstack.storage.volume.db.VolumeDao; +import org.apache.cloudstack.storage.volume.disktype.VolumeDiskType; import org.apache.cloudstack.storage.volume.type.VolumeType; import org.springframework.stereotype.Service; @@ -30,10 +33,12 @@ import com.cloud.utils.db.DB; public class VolumeServiceImpl implements VolumeService { @Inject VolumeDao volDao; + @Inject + PrimaryDataStoreManager dataStoreMgr; @Override - public Volume createVolume(long volumeId, long dataStoreId) { - // TODO Auto-generated method stub - return null; + public Volume createVolume(long volumeId, long dataStoreId, VolumeDiskType diskType) { + PrimaryDataStore dataStore = dataStoreMgr.getPrimaryDataStore(dataStoreId); + return dataStore.createVolume(volumeId, diskType); } @DB http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeState.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeState.java b/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeState.java index 6b81f00..f2ebafa 100644 --- a/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeState.java +++ b/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeState.java @@ -18,6 +18,8 @@ */ package org.apache.cloudstack.storage.volume; +import org.apache.cloudstack.storage.volume.db.VolumeVO; + import com.cloud.utils.fsm.StateMachine2; public enum VolumeState { @@ -36,7 +38,7 @@ public enum VolumeState { _description = description; } - public static StateMachine2 getStateMachine() { + public static StateMachine2 getStateMachine() { return s_fsm; } @@ -44,7 +46,7 @@ public enum VolumeState { return _description; } - private final static StateMachine2 s_fsm = new StateMachine2(); + private final static StateMachine2 s_fsm = new StateMachine2(); static { s_fsm.addTransition(Allocated, VolumeEvent.CreateRequested, Creating); s_fsm.addTransition(Allocated, VolumeEvent.DestroyRequested, Destroy); http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java b/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java index 7f2cede..48da123 100644 --- a/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java +++ b/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java @@ -39,10 +39,11 @@ import com.cloud.api.Identity; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.utils.NumbersUtil; import com.cloud.utils.db.GenericDao; +import com.cloud.utils.fsm.StateObject; @Entity @Table(name = "volumes") -public class VolumeVO implements Identity { +public class VolumeVO implements Identity, StateObject{ @Id @TableGenerator(name = "volume_sq", table = "sequence", pkColumnName = "name", valueColumnName = "value", pkColumnValue = "volume_seq", allocationSize = 1) @GeneratedValue(strategy = GenerationType.TABLE) http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeHelper.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeHelper.java b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeHelper.java index 666f89b..c51e25f 100644 --- a/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeHelper.java +++ b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeHelper.java @@ -8,17 +8,22 @@ import org.springframework.stereotype.Component; @Component public class VolumeDiskTypeHelper { + + static private List diskTypes; + static final private VolumeDiskType defaultType = new Unknown(); + @Inject - protected List diskTypes; - protected VolumeDiskType defaultType = new Unknown(); + public void setDiskTypes(List diskTypes) { + VolumeDiskTypeHelper.diskTypes = diskTypes; + } - public VolumeDiskType getDiskType(String type) { + public static VolumeDiskType getDiskType(String type) { for (VolumeDiskType diskType : diskTypes) { if (diskType.equals(type)) { return diskType; } } - return defaultType; + return VolumeDiskTypeHelper.defaultType; } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeType.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeType.java b/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeType.java index 6f11b09..e423a5e 100644 --- a/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeType.java +++ b/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeType.java @@ -19,5 +19,4 @@ package org.apache.cloudstack.storage.volume.type; public interface VolumeType { - boolean equals(String type); } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeBase.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeBase.java b/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeBase.java index 3597517..830873c 100644 --- a/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeBase.java +++ b/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeBase.java @@ -4,12 +4,23 @@ public class VolumeTypeBase implements VolumeType { protected String type = "Unknown"; @Override - public boolean equals(String type) { - if (this.type.equalsIgnoreCase(type)) { + public boolean equals(Object that) { + if (this == that) { return true; + } + if (that instanceof String) { + if (this.toString().equalsIgnoreCase((String)that)) { + return true; + } + } else if (that instanceof VolumeTypeBase) { + VolumeTypeBase th = (VolumeTypeBase)that; + if (this.toString().equalsIgnoreCase(th.toString())) { + return true; + } } else { return false; } + return false; } @Override http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeHelper.java ---------------------------------------------------------------------- diff --git a/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeHelper.java b/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeHelper.java index 8f56758..9443475 100644 --- a/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeHelper.java +++ b/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeHelper.java @@ -8,17 +8,21 @@ import org.springframework.stereotype.Component; @Component public class VolumeTypeHelper { + static private List types; + private static VolumeType defaultType = new Unknown(); + @Inject - private List types; - private VolumeType defaultType = new Unknown(); + public void setTypes(List types) { + VolumeTypeHelper.types = types; + } - public VolumeType getType(String type) { + public static VolumeType getType(String type) { for (VolumeType ty : types) { if (ty.equals(type)) { return ty; } } - return defaultType; + return VolumeTypeHelper.defaultType; } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/platform/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java ---------------------------------------------------------------------- diff --git a/platform/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java b/platform/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java index ca3a366..8771d02 100644 --- a/platform/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java +++ b/platform/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java @@ -28,12 +28,20 @@ import javax.inject.Inject; import org.apache.cloudstack.storage.datastore.DefaultPrimaryDataStoreImpl; import org.apache.cloudstack.storage.datastore.provider.DefaultPrimaryDatastoreProviderImpl; import org.apache.cloudstack.storage.datastore.provider.PrimaryDataStoreProvider; +import org.apache.cloudstack.storage.image.format.ISO; +import org.apache.cloudstack.storage.image.format.ImageFormat; +import org.apache.cloudstack.storage.image.format.ImageFormatHelper; +import org.apache.cloudstack.storage.image.format.OVA; +import org.apache.cloudstack.storage.image.format.Unknown; import org.apache.cloudstack.storage.volume.VolumeMotionService; import org.apache.cloudstack.storage.volume.VolumeService; import org.apache.cloudstack.storage.volume.db.VolumeDao; +import org.apache.cloudstack.storage.volume.disktype.QCOW2; import org.apache.cloudstack.storage.volume.disktype.VHD; import org.apache.cloudstack.storage.volume.disktype.VMDK; +import org.apache.cloudstack.storage.volume.disktype.VolumeDiskType; import org.apache.cloudstack.storage.volume.disktype.VolumeDiskTypeHelper; +import org.apache.cloudstack.storage.volume.type.Iso; import org.apache.cloudstack.storage.volume.type.VolumeTypeHelper; import org.junit.Before; import org.junit.Test; @@ -60,10 +68,6 @@ public class volumeServiceTest { protected VolumeDao volumeDao; @Autowired protected VolumeMotionService vmotion; - @Autowired - protected VolumeTypeHelper volTypeHelper; - @Inject - protected VolumeDiskTypeHelper volDiskTypeHelper; @Before public void setUp() { Mockito.when(vmotion.copyVolume(null, null)).thenReturn(false); @@ -91,22 +95,34 @@ public class volumeServiceTest { @Test public void test1() { - System.out.println(volTypeHelper.getType("Root")); - System.out.println(volDiskTypeHelper.getDiskType("vmdk")); + System.out.println(VolumeTypeHelper.getType("Root")); + System.out.println(VolumeDiskTypeHelper.getDiskType("vmdk")); + System.out.println(ImageFormatHelper.getFormat("ova")); assertFalse(new VMDK().equals(new VHD())); VMDK vmdk = new VMDK(); assertTrue(vmdk.equals(vmdk)); VMDK newvmdk = new VMDK(); assertTrue(vmdk.equals(newvmdk)); + + ImageFormat ova = new OVA(); + ImageFormat iso = new ISO(); + assertTrue(ova.equals(new OVA())); + assertFalse(ova.equals(iso)); + assertTrue(ImageFormatHelper.getFormat("test").equals(new Unknown())); + + VolumeDiskType qcow2 = new QCOW2(); + ImageFormat qcow2format = new org.apache.cloudstack.storage.image.format.QCOW2(); + assertFalse(qcow2.equals(qcow2format)); + } - @Test + //@Test public void testStaticBean() { DefaultPrimaryDatastoreProviderImpl provider = ComponentInject.inject(DefaultPrimaryDatastoreProviderImpl.class); assertNotNull(provider.dataStoreDao); DefaultPrimaryDataStoreImpl dpdsi = new DefaultPrimaryDataStoreImpl(null, null, null); ComponentInject.inject(dpdsi); - assertNotNull(dpdsi.volumeDao); + //assertNotNull(dpdsi.volumeDao); } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/server/src/com/cloud/host/dao/HostDao.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/host/dao/HostDao.java b/server/src/com/cloud/host/dao/HostDao.java index 58bd8be..4760035 100755 --- a/server/src/com/cloud/host/dao/HostDao.java +++ b/server/src/com/cloud/host/dao/HostDao.java @@ -68,6 +68,7 @@ public interface HostDao extends GenericDao, StateDao findHypervisorHostInCluster(long clusterId); /** http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3423c5d7/server/src/com/cloud/host/dao/HostDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/host/dao/HostDaoImpl.java b/server/src/com/cloud/host/dao/HostDaoImpl.java index ab1e77e..990aef8 100755 --- a/server/src/com/cloud/host/dao/HostDaoImpl.java +++ b/server/src/com/cloud/host/dao/HostDaoImpl.java @@ -73,6 +73,7 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao protected final SearchBuilder IdStatusSearch; protected final SearchBuilder TypeDcSearch; protected final SearchBuilder TypeDcStatusSearch; + protected final SearchBuilder TypeClusterStatusSearch; protected final SearchBuilder MsStatusSearch; protected final SearchBuilder DcPrivateIpAddressSearch; protected final SearchBuilder DcStorageIpAddressSearch; @@ -157,7 +158,14 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao TypeDcStatusSearch.and("status", TypeDcStatusSearch.entity().getStatus(), SearchCriteria.Op.EQ); TypeDcStatusSearch.and("resourceState", TypeDcStatusSearch.entity().getResourceState(), SearchCriteria.Op.EQ); TypeDcStatusSearch.done(); - + + TypeClusterStatusSearch = createSearchBuilder(); + TypeClusterStatusSearch.and("type", TypeClusterStatusSearch.entity().getType(), SearchCriteria.Op.EQ); + TypeClusterStatusSearch.and("cluster", TypeClusterStatusSearch.entity().getClusterId(), SearchCriteria.Op.EQ); + TypeClusterStatusSearch.and("status", TypeClusterStatusSearch.entity().getStatus(), SearchCriteria.Op.EQ); + TypeClusterStatusSearch.and("resourceState", TypeClusterStatusSearch.entity().getResourceState(), SearchCriteria.Op.EQ); + TypeClusterStatusSearch.done(); + IdStatusSearch = createSearchBuilder(); IdStatusSearch.and("id", IdStatusSearch.entity().getId(), SearchCriteria.Op.EQ); IdStatusSearch.and("states", IdStatusSearch.entity().getStatus(), SearchCriteria.Op.IN); @@ -764,4 +772,15 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao return findOneBy(sc); } + @Override + public List findHypervisorHostInCluster(long clusterId) { + SearchCriteria sc = TypeClusterStatusSearch.create(); + sc.setParameters("type", Host.Type.Routing); + sc.setParameters("cluster", clusterId); + sc.setParameters("status", Status.Up); + sc.setParameters("resourceState", ResourceState.Enabled); + + return listBy(sc); + } + }