This is an automated email from the ASF dual-hosted git repository.
rohit pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/main by this push:
new 93f31828f59 Hypervisor as class (#8798)
93f31828f59 is described below
commit 93f31828f59b1a15e9c78afbd735ba9c218513b4
Author: Vishesh <[email protected]>
AuthorDate: Tue Apr 2 17:36:15 2024 +0530
Hypervisor as class (#8798)
* HypervisorType as a class
* Fixup
* fixup
* Add missing annotation
* Resolve comments
* Handle parallels typo
* Add missing @Convert annotation
---
.../main/java/com/cloud/hypervisor/Hypervisor.java | 126 +++++++++++++--------
.../main/java/com/cloud/serializer/GsonHelper.java | 3 +
.../transport/HypervisorTypeAdaptor.java | 53 +++++++++
.../com/cloud/vm/VirtualMachineManagerImpl.java | 15 +--
.../datacenter/entity/api/db/EngineClusterVO.java | 3 +
.../datacenter/entity/api/db/EngineHostVO.java | 3 +-
.../src/main/java/com/cloud/dc/ClusterVO.java | 3 +
.../src/main/java/com/cloud/host/HostVO.java | 3 +-
.../cloud/hypervisor/HypervisorCapabilitiesVO.java | 6 +-
.../com/cloud/storage/GuestOSHypervisorVO.java | 3 +
.../main/java/com/cloud/storage/SnapshotVO.java | 4 +-
.../main/java/com/cloud/storage/VMTemplateVO.java | 4 +-
.../upgrade/SystemVmTemplateRegistration.java | 6 +-
.../com/cloud/upgrade/dao/Upgrade41500to41510.java | 89 +++++++--------
.../src/main/java/com/cloud/vm/VMInstanceVO.java | 4 +-
.../download/DirectDownloadCertificateVO.java | 3 +
.../engine/cloud/entity/api/db/VMEntityVO.java | 4 +-
.../storage/datastore/db/StoragePoolVO.java | 3 +-
.../cloudstack/util/HypervisorTypeConverter.java | 38 +++++++
.../java/com/cloud/utils/db/GenericDaoBase.java | 8 +-
.../lb/InternalLoadBalancerVMManagerImpl.java | 26 ++---
.../cloud/network/ovs/OvsTunnelManagerImpl.java | 18 ++-
.../com/cloud/api/query/vo/DomainRouterJoinVO.java | 4 +-
.../java/com/cloud/api/query/vo/HostJoinVO.java | 4 +-
.../com/cloud/api/query/vo/SnapshotJoinVO.java | 4 +-
.../com/cloud/api/query/vo/StoragePoolJoinVO.java | 3 +-
.../com/cloud/api/query/vo/TemplateJoinVO.java | 4 +-
.../java/com/cloud/api/query/vo/UserVmJoinVO.java | 3 +-
.../java/com/cloud/api/query/vo/VolumeJoinVO.java | 4 +-
.../java/com/cloud/network/NetworkModelImpl.java | 104 +++++++----------
.../java/com/cloud/storage/StorageManagerImpl.java | 28 ++---
.../com/cloud/template/TemplateAdapterBase.java | 14 ++-
.../main/java/com/cloud/vm/UserVmManagerImpl.java | 22 ++--
33 files changed, 369 insertions(+), 250 deletions(-)
diff --git a/api/src/main/java/com/cloud/hypervisor/Hypervisor.java
b/api/src/main/java/com/cloud/hypervisor/Hypervisor.java
index 2f0cc736af3..e1108b34a83 100644
--- a/api/src/main/java/com/cloud/hypervisor/Hypervisor.java
+++ b/api/src/main/java/com/cloud/hypervisor/Hypervisor.java
@@ -17,55 +17,45 @@
package com.cloud.hypervisor;
import com.cloud.storage.Storage.ImageFormat;
+import org.apache.commons.lang3.StringUtils;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;
+import java.util.Objects;
public class Hypervisor {
+ public static class HypervisorType {
+ private static final Map<String, HypervisorType> hypervisorTypeMap =
new LinkedHashMap<>();
+ public static final HypervisorType None = new HypervisorType("None");
//for storage hosts
+ public static final HypervisorType XenServer = new
HypervisorType("XenServer", ImageFormat.VHD);
+ public static final HypervisorType KVM = new HypervisorType("KVM",
ImageFormat.QCOW2);
+ public static final HypervisorType VMware = new
HypervisorType("VMware", ImageFormat.OVA);
+ public static final HypervisorType Hyperv = new
HypervisorType("Hyperv");
+ public static final HypervisorType VirtualBox = new
HypervisorType("VirtualBox");
+ public static final HypervisorType Parralels = new
HypervisorType("Parralels");
+ public static final HypervisorType BareMetal = new
HypervisorType("BareMetal");
+ public static final HypervisorType Simulator = new
HypervisorType("Simulator");
+ public static final HypervisorType Ovm = new HypervisorType("Ovm",
ImageFormat.RAW);
+ public static final HypervisorType Ovm3 = new HypervisorType("Ovm3",
ImageFormat.RAW);
+ public static final HypervisorType LXC = new HypervisorType("LXC");
+ public static final HypervisorType Custom = new
HypervisorType("Custom");
+ public static final HypervisorType Any = new HypervisorType("Any");
/*If you don't care about the hypervisor type*/
+ private final String name;
+ private final ImageFormat imageFormat;
- static Map<String, HypervisorType> hypervisorTypeMap;
- static Map<HypervisorType, ImageFormat> supportedImageFormatMap;
-
- public enum HypervisorType {
- None, //for storage hosts
- XenServer,
- KVM,
- VMware,
- Hyperv,
- VirtualBox,
- Parralels,
- BareMetal,
- Simulator,
- Ovm,
- Ovm3,
- LXC,
- Custom,
-
- Any; /*If you don't care about the hypervisor type*/
-
- static {
- hypervisorTypeMap = new HashMap<>();
- hypervisorTypeMap.put("xenserver", HypervisorType.XenServer);
- hypervisorTypeMap.put("kvm", HypervisorType.KVM);
- hypervisorTypeMap.put("vmware", HypervisorType.VMware);
- hypervisorTypeMap.put("hyperv", HypervisorType.Hyperv);
- hypervisorTypeMap.put("virtualbox", HypervisorType.VirtualBox);
- hypervisorTypeMap.put("parallels", HypervisorType.Parralels);
- hypervisorTypeMap.put("baremetal", HypervisorType.BareMetal);
- hypervisorTypeMap.put("simulator", HypervisorType.Simulator);
- hypervisorTypeMap.put("ovm", HypervisorType.Ovm);
- hypervisorTypeMap.put("lxc", HypervisorType.LXC);
- hypervisorTypeMap.put("any", HypervisorType.Any);
- hypervisorTypeMap.put("ovm3", HypervisorType.Ovm3);
- hypervisorTypeMap.put("custom", HypervisorType.Custom);
-
- supportedImageFormatMap = new HashMap<>();
- supportedImageFormatMap.put(HypervisorType.XenServer,
ImageFormat.VHD);
- supportedImageFormatMap.put(HypervisorType.KVM, ImageFormat.QCOW2);
- supportedImageFormatMap.put(HypervisorType.VMware,
ImageFormat.OVA);
- supportedImageFormatMap.put(HypervisorType.Ovm, ImageFormat.RAW);
- supportedImageFormatMap.put(HypervisorType.Ovm3, ImageFormat.RAW);
+ public HypervisorType(String name) {
+ this(name, null);
+ }
+
+ public HypervisorType(String name, ImageFormat imageFormat) {
+ this.name = name;
+ this.imageFormat = imageFormat;
+ if (name.equals("Parralels")){ // typo in the original code
+ hypervisorTypeMap.put("parallels", this);
+ } else {
+ hypervisorTypeMap.putIfAbsent(name.toLowerCase(Locale.ROOT),
this);
+ }
}
public static HypervisorType getType(String hypervisor) {
@@ -75,24 +65,62 @@ public class Hypervisor {
hypervisorTypeMap.getOrDefault(hypervisor.toLowerCase(Locale.ROOT),
HypervisorType.None));
}
+ public static HypervisorType[] values() {
+ return
hypervisorTypeMap.values().toArray(HypervisorType[]::new).clone();
+ }
+
+ public static HypervisorType valueOf(String name) {
+ if (StringUtils.isBlank(name)) {
+ return null;
+ }
+
+ HypervisorType hypervisorType =
hypervisorTypeMap.get(name.toLowerCase(Locale.ROOT));
+ if (hypervisorType == null) {
+ throw new IllegalArgumentException("HypervisorType '" + name +
"' not found");
+ }
+ return hypervisorType;
+ }
+
/**
* Returns the display name of a hypervisor type in case the custom
hypervisor is used,
* using the 'hypervisor.custom.display.name' setting. Otherwise,
returns hypervisor name
*/
public String getHypervisorDisplayName() {
- return !Hypervisor.HypervisorType.Custom.equals(this) ?
- this.toString() :
- HypervisorGuru.HypervisorCustomDisplayName.value();
+ return HypervisorType.Custom.equals(this) ?
HypervisorGuru.HypervisorCustomDisplayName.value() : name;
}
/**
* This method really needs to be part of the properties of the
hypervisor type itself.
*
- * @param hyperType
* @return
*/
- public static ImageFormat getSupportedImageFormat(HypervisorType
hyperType) {
- return supportedImageFormatMap.getOrDefault(hyperType, null);
+ public ImageFormat getSupportedImageFormat() {
+ return imageFormat;
+ }
+
+ public String name() {
+ return name;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(name);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o == this) {
+ return true;
+ } else if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ HypervisorType that = (HypervisorType) o;
+ return Objects.equals(name, that.name);
+ }
+
+ @Override
+ public String toString() {
+ return name;
}
}
diff --git a/core/src/main/java/com/cloud/serializer/GsonHelper.java
b/core/src/main/java/com/cloud/serializer/GsonHelper.java
index 5d3a9944c48..2d2cecf2618 100644
--- a/core/src/main/java/com/cloud/serializer/GsonHelper.java
+++ b/core/src/main/java/com/cloud/serializer/GsonHelper.java
@@ -21,6 +21,8 @@ package com.cloud.serializer;
import java.util.List;
+import com.cloud.hypervisor.Hypervisor;
+import org.apache.cloudstack.transport.HypervisorTypeAdaptor;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
@@ -75,6 +77,7 @@ public class GsonHelper {
builder.registerTypeAdapter(new TypeToken<Pair<Long, Long>>() {
}.getType(), new NwGroupsCommandTypeAdaptor());
builder.registerTypeAdapter(Storage.StoragePoolType.class, new
StoragePoolTypeAdaptor());
+ builder.registerTypeAdapter(Hypervisor.HypervisorType.class, new
HypervisorTypeAdaptor());
Gson gson = builder.create();
dsAdaptor.initGson(gson);
dtAdaptor.initGson(gson);
diff --git
a/core/src/main/java/org/apache/cloudstack/transport/HypervisorTypeAdaptor.java
b/core/src/main/java/org/apache/cloudstack/transport/HypervisorTypeAdaptor.java
new file mode 100644
index 00000000000..bc4d3c3a6e3
--- /dev/null
+++
b/core/src/main/java/org/apache/cloudstack/transport/HypervisorTypeAdaptor.java
@@ -0,0 +1,53 @@
+// 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.transport;
+
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonNull;
+import com.google.gson.JsonParseException;
+import com.google.gson.JsonPrimitive;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+
+import java.lang.reflect.Type;
+
+/**
+ * {@link HypervisorType} acts as extendable set of singleton objects and
should return same result when used "=="
+ * or {@link Object#equals(Object)}.
+ * To support that, need to return existing object for a given name instead of
creating new.
+ */
+public class HypervisorTypeAdaptor implements
JsonDeserializer<HypervisorType>, JsonSerializer<HypervisorType> {
+ @Override
+ public HypervisorType deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
+ if (json instanceof JsonPrimitive && ((JsonPrimitive)
json).isString()) {
+ return HypervisorType.valueOf(json.getAsString());
+ }
+ return null;
+ }
+
+ @Override
+ public JsonElement serialize(HypervisorType src, Type typeOfSrc,
JsonSerializationContext context) {
+ String name = src.name();
+ if (name == null) {
+ return new JsonNull();
+ }
+ return new JsonPrimitive(name);
+ }
+}
diff --git
a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
index ea44a8d8cb9..4372741de66 100755
---
a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
+++
b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -1735,17 +1735,12 @@ public class VirtualMachineManagerImpl extends
ManagerBase implements VirtualMac
return ExecuteInSequence.value();
}
- switch (hypervisorType) {
- case KVM:
- case XenServer:
- case Hyperv:
- case LXC:
- return false;
- case VMware:
- return StorageManager.shouldExecuteInSequenceOnVmware();
- default:
- return ExecuteInSequence.value();
+ if (Set.of(HypervisorType.KVM, HypervisorType.XenServer,
HypervisorType.Hyperv, HypervisorType.LXC).contains(hypervisorType)) {
+ return false;
+ } else if (hypervisorType.equals(HypervisorType.VMware)) {
+ return StorageManager.shouldExecuteInSequenceOnVmware();
}
+ return ExecuteInSequence.value();
}
@Override
diff --git
a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineClusterVO.java
b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineClusterVO.java
index 75965fe4bd1..be35cea3c07 100644
---
a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineClusterVO.java
+++
b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineClusterVO.java
@@ -26,8 +26,10 @@ import com.cloud.utils.db.StateMachine;
import org.apache.cloudstack.api.Identity;
import
org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
import
org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
import javax.persistence.Column;
+import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
@@ -62,6 +64,7 @@ public class EngineClusterVO implements EngineCluster,
Identity {
long podId;
@Column(name = "hypervisor_type")
+ @Convert(converter = HypervisorTypeConverter.class)
String hypervisorType;
@Column(name = "cluster_type")
diff --git
a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineHostVO.java
b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineHostVO.java
index 5315bca4b9a..f8535b6b6cc 100644
---
a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineHostVO.java
+++
b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/datacenter/entity/api/db/EngineHostVO.java
@@ -50,6 +50,7 @@ import com.cloud.util.StoragePoolTypeConverter;
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.db.GenericDao;
import com.cloud.utils.db.StateMachine;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
@Entity
@Table(name = "host")
@@ -118,7 +119,7 @@ public class EngineHostVO implements EngineHost, Identity {
private String storageMacAddressDeux;
@Column(name = "hypervisor_type", updatable = true, nullable = false)
- @Enumerated(value = EnumType.STRING)
+ @Convert(converter = HypervisorTypeConverter.class)
private HypervisorType hypervisorType;
@Column(name = "proxy_port")
diff --git a/engine/schema/src/main/java/com/cloud/dc/ClusterVO.java
b/engine/schema/src/main/java/com/cloud/dc/ClusterVO.java
index f60765e2856..90591690eb0 100644
--- a/engine/schema/src/main/java/com/cloud/dc/ClusterVO.java
+++ b/engine/schema/src/main/java/com/cloud/dc/ClusterVO.java
@@ -22,8 +22,10 @@ import com.cloud.org.Grouping;
import com.cloud.org.Managed.ManagedState;
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.db.GenericDao;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
import javax.persistence.Column;
+import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
@@ -56,6 +58,7 @@ public class ClusterVO implements Cluster {
long podId;
@Column(name = "hypervisor_type")
+ @Convert(converter = HypervisorTypeConverter.class)
String hypervisorType;
@Column(name = "cluster_type")
diff --git a/engine/schema/src/main/java/com/cloud/host/HostVO.java
b/engine/schema/src/main/java/com/cloud/host/HostVO.java
index ab3d2ecc009..3e64d20d0e2 100644
--- a/engine/schema/src/main/java/com/cloud/host/HostVO.java
+++ b/engine/schema/src/main/java/com/cloud/host/HostVO.java
@@ -42,6 +42,7 @@ import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
import org.apache.cloudstack.utils.jsinterpreter.TagAsRuleHelper;
import
org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
import org.apache.commons.lang.BooleanUtils;
@@ -125,7 +126,7 @@ public class HostVO implements Host {
private String storageMacAddressDeux;
@Column(name = "hypervisor_type", updatable = true, nullable = false)
- @Enumerated(value = EnumType.STRING)
+ @Convert(converter = HypervisorTypeConverter.class)
private HypervisorType hypervisorType;
@Column(name = "proxy_port")
diff --git
a/engine/schema/src/main/java/com/cloud/hypervisor/HypervisorCapabilitiesVO.java
b/engine/schema/src/main/java/com/cloud/hypervisor/HypervisorCapabilitiesVO.java
index 5ab684c1100..4455c7491dd 100644
---
a/engine/schema/src/main/java/com/cloud/hypervisor/HypervisorCapabilitiesVO.java
+++
b/engine/schema/src/main/java/com/cloud/hypervisor/HypervisorCapabilitiesVO.java
@@ -19,9 +19,8 @@ package com.cloud.hypervisor;
import java.util.UUID;
import javax.persistence.Column;
+import javax.persistence.Convert;
import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@@ -29,6 +28,7 @@ import javax.persistence.Table;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.utils.NumbersUtil;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
@Entity
@Table(name = "hypervisor_capabilities")
@@ -39,7 +39,7 @@ public class HypervisorCapabilitiesVO implements
HypervisorCapabilities {
private long id;
@Column(name = "hypervisor_type")
- @Enumerated(value = EnumType.STRING)
+ @Convert(converter = HypervisorTypeConverter.class)
private HypervisorType hypervisorType;
@Column(name = "hypervisor_version")
diff --git
a/engine/schema/src/main/java/com/cloud/storage/GuestOSHypervisorVO.java
b/engine/schema/src/main/java/com/cloud/storage/GuestOSHypervisorVO.java
index e900d28a864..cae1e1b7eee 100644
--- a/engine/schema/src/main/java/com/cloud/storage/GuestOSHypervisorVO.java
+++ b/engine/schema/src/main/java/com/cloud/storage/GuestOSHypervisorVO.java
@@ -20,6 +20,7 @@ import java.util.Date;
import java.util.UUID;
import javax.persistence.Column;
+import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@@ -28,6 +29,7 @@ import javax.persistence.Table;
import com.cloud.hypervisor.Hypervisor;
import com.cloud.utils.db.GenericDao;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
@Entity
@Table(name = "guest_os_hypervisor")
@@ -44,6 +46,7 @@ public class GuestOSHypervisorVO implements GuestOSHypervisor
{
String guestOsName;
@Column(name = "hypervisor_type")
+ @Convert(converter = HypervisorTypeConverter.class)
String hypervisorType;
@Column(name = "hypervisor_version")
diff --git a/engine/schema/src/main/java/com/cloud/storage/SnapshotVO.java
b/engine/schema/src/main/java/com/cloud/storage/SnapshotVO.java
index e9d6df85c2f..39d2cdd0b77 100644
--- a/engine/schema/src/main/java/com/cloud/storage/SnapshotVO.java
+++ b/engine/schema/src/main/java/com/cloud/storage/SnapshotVO.java
@@ -20,6 +20,7 @@ import java.util.Date;
import java.util.UUID;
import javax.persistence.Column;
+import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
@@ -28,6 +29,7 @@ import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
@@ -89,7 +91,7 @@ public class SnapshotVO implements Snapshot {
Date removed;
@Column(name = "hypervisor_type")
- @Enumerated(value = EnumType.STRING)
+ @Convert(converter = HypervisorTypeConverter.class)
HypervisorType hypervisorType;
@Expose
diff --git a/engine/schema/src/main/java/com/cloud/storage/VMTemplateVO.java
b/engine/schema/src/main/java/com/cloud/storage/VMTemplateVO.java
index 44e4dc920ab..25b02db6479 100644
--- a/engine/schema/src/main/java/com/cloud/storage/VMTemplateVO.java
+++ b/engine/schema/src/main/java/com/cloud/storage/VMTemplateVO.java
@@ -21,6 +21,7 @@ import java.util.Map;
import java.util.UUID;
import javax.persistence.Column;
+import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
@@ -32,6 +33,7 @@ import javax.persistence.TemporalType;
import javax.persistence.Transient;
import com.cloud.user.UserData;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
import
org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
@@ -108,7 +110,7 @@ public class VMTemplateVO implements VirtualMachineTemplate
{
private boolean crossZones = false;
@Column(name = "hypervisor_type")
- @Enumerated(value = EnumType.STRING)
+ @Convert(converter = HypervisorTypeConverter.class)
private HypervisorType hypervisorType;
@Column(name = "extractable")
diff --git
a/engine/schema/src/main/java/com/cloud/upgrade/SystemVmTemplateRegistration.java
b/engine/schema/src/main/java/com/cloud/upgrade/SystemVmTemplateRegistration.java
index 428bd0260b8..33371fc436e 100644
---
a/engine/schema/src/main/java/com/cloud/upgrade/SystemVmTemplateRegistration.java
+++
b/engine/schema/src/main/java/com/cloud/upgrade/SystemVmTemplateRegistration.java
@@ -446,7 +446,7 @@ public class SystemVmTemplateRegistration {
private List<String> fetchAllHypervisors(Long zoneId) {
List<String> hypervisorList = new ArrayList<>();
List<Hypervisor.HypervisorType> hypervisorTypes =
clusterDao.getAvailableHypervisorInZone(zoneId);
- hypervisorList =
hypervisorTypes.stream().distinct().map(Enum::name).collect(Collectors.toList());
+ hypervisorList =
hypervisorTypes.stream().distinct().map(Hypervisor.HypervisorType::name).collect(Collectors.toList());
return hypervisorList;
}
@@ -719,8 +719,8 @@ public class SystemVmTemplateRegistration {
}
private void validateTemplates(Set<Hypervisor.HypervisorType>
hypervisorsInUse) {
- Set<String> hypervisors = hypervisorsInUse.stream().map(Enum::name).
- map(name ->
name.toLowerCase(Locale.ROOT)).map(this::getHypervisorName).collect(Collectors.toSet());
+ Set<String> hypervisors = hypervisorsInUse.stream().
+ map(Hypervisor.HypervisorType::name).map(name ->
name.toLowerCase(Locale.ROOT)).map(this::getHypervisorName).collect(Collectors.toSet());
List<String> templates = new ArrayList<>();
for (Hypervisor.HypervisorType hypervisorType : hypervisorsInUse) {
templates.add(FileNames.get(hypervisorType));
diff --git
a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41500to41510.java
b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41500to41510.java
index 0ca81be3936..a6b77813fa1 100644
--- a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41500to41510.java
+++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41500to41510.java
@@ -31,6 +31,13 @@ import java.util.Set;
import com.cloud.hypervisor.Hypervisor;
import com.cloud.utils.exception.CloudRuntimeException;
+import static com.cloud.hypervisor.Hypervisor.HypervisorType.Hyperv;
+import static com.cloud.hypervisor.Hypervisor.HypervisorType.KVM;
+import static com.cloud.hypervisor.Hypervisor.HypervisorType.LXC;
+import static com.cloud.hypervisor.Hypervisor.HypervisorType.Ovm3;
+import static com.cloud.hypervisor.Hypervisor.HypervisorType.VMware;
+import static com.cloud.hypervisor.Hypervisor.HypervisorType.XenServer;
+
public class Upgrade41500to41510 extends DbUpgradeAbstractImpl implements
DbUpgradeSystemVmTemplate {
@Override
@@ -71,27 +78,19 @@ public class Upgrade41500to41510 extends
DbUpgradeAbstractImpl implements DbUpgr
final Set<Hypervisor.HypervisorType> hypervisorsListInUse = new
HashSet<Hypervisor.HypervisorType>();
try (PreparedStatement pstmt = conn.prepareStatement("select
distinct(hypervisor_type) from `cloud`.`cluster` where removed is null");
ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) {
- switch (Hypervisor.HypervisorType.getType(rs.getString(1))) {
- case XenServer:
-
hypervisorsListInUse.add(Hypervisor.HypervisorType.XenServer);
- break;
- case KVM:
-
hypervisorsListInUse.add(Hypervisor.HypervisorType.KVM);
- break;
- case VMware:
-
hypervisorsListInUse.add(Hypervisor.HypervisorType.VMware);
- break;
- case Hyperv:
-
hypervisorsListInUse.add(Hypervisor.HypervisorType.Hyperv);
- break;
- case LXC:
-
hypervisorsListInUse.add(Hypervisor.HypervisorType.LXC);
- break;
- case Ovm3:
-
hypervisorsListInUse.add(Hypervisor.HypervisorType.Ovm3);
- break;
- default:
- break;
+ Hypervisor.HypervisorType type =
Hypervisor.HypervisorType.getType(rs.getString(1));
+ if (type.equals(XenServer)) {
+ hypervisorsListInUse.add(XenServer);
+ } else if (type.equals(KVM)) {
+ hypervisorsListInUse.add(KVM);
+ } else if (type.equals(VMware)) {
+ hypervisorsListInUse.add(VMware);
+ } else if (type.equals(Hyperv)) {
+ hypervisorsListInUse.add(Hyperv);
+ } else if (type.equals(LXC)) {
+ hypervisorsListInUse.add(LXC);
+ } else if (type.equals(Ovm3)) {
+ hypervisorsListInUse.add(Ovm3);
}
}
} catch (final SQLException e) {
@@ -101,45 +100,45 @@ public class Upgrade41500to41510 extends
DbUpgradeAbstractImpl implements DbUpgr
final Map<Hypervisor.HypervisorType, String> NewTemplateNameList = new
HashMap<Hypervisor.HypervisorType, String>() {
{
- put(Hypervisor.HypervisorType.KVM, "systemvm-kvm-4.15.1");
- put(Hypervisor.HypervisorType.VMware,
"systemvm-vmware-4.15.1");
- put(Hypervisor.HypervisorType.XenServer,
"systemvm-xenserver-4.15.1");
- put(Hypervisor.HypervisorType.Hyperv,
"systemvm-hyperv-4.15.1");
- put(Hypervisor.HypervisorType.LXC, "systemvm-lxc-4.15.1");
- put(Hypervisor.HypervisorType.Ovm3, "systemvm-ovm3-4.15.1");
+ put(KVM, "systemvm-kvm-4.15.1");
+ put(VMware, "systemvm-vmware-4.15.1");
+ put(XenServer, "systemvm-xenserver-4.15.1");
+ put(Hyperv, "systemvm-hyperv-4.15.1");
+ put(LXC, "systemvm-lxc-4.15.1");
+ put(Ovm3, "systemvm-ovm3-4.15.1");
}
};
final Map<Hypervisor.HypervisorType, String>
routerTemplateConfigurationNames = new HashMap<Hypervisor.HypervisorType,
String>() {
{
- put(Hypervisor.HypervisorType.KVM, "router.template.kvm");
- put(Hypervisor.HypervisorType.VMware,
"router.template.vmware");
- put(Hypervisor.HypervisorType.XenServer,
"router.template.xenserver");
- put(Hypervisor.HypervisorType.Hyperv,
"router.template.hyperv");
- put(Hypervisor.HypervisorType.LXC, "router.template.lxc");
- put(Hypervisor.HypervisorType.Ovm3, "router.template.ovm3");
+ put(KVM, "router.template.kvm");
+ put(VMware, "router.template.vmware");
+ put(XenServer, "router.template.xenserver");
+ put(Hyperv, "router.template.hyperv");
+ put(LXC, "router.template.lxc");
+ put(Ovm3, "router.template.ovm3");
}
};
final Map<Hypervisor.HypervisorType, String> newTemplateUrl = new
HashMap<Hypervisor.HypervisorType, String>() {
{
- put(Hypervisor.HypervisorType.KVM,
"https://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.1-kvm.qcow2.bz2");
- put(Hypervisor.HypervisorType.VMware,
"https://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.1-vmware.ova");
- put(Hypervisor.HypervisorType.XenServer,
"https://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.1-xen.vhd.bz2");
- put(Hypervisor.HypervisorType.Hyperv,
"https://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.1-hyperv.vhd.zip");
- put(Hypervisor.HypervisorType.LXC,
"https://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.1-kvm.qcow2.bz2");
- put(Hypervisor.HypervisorType.Ovm3,
"https://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.1-ovm.raw.bz2");
+ put(KVM,
"https://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.1-kvm.qcow2.bz2");
+ put(VMware,
"https://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.1-vmware.ova");
+ put(XenServer,
"https://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.1-xen.vhd.bz2");
+ put(Hyperv,
"https://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.1-hyperv.vhd.zip");
+ put(LXC,
"https://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.1-kvm.qcow2.bz2");
+ put(Ovm3,
"https://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.1-ovm.raw.bz2");
}
};
final Map<Hypervisor.HypervisorType, String> newTemplateChecksum = new
HashMap<Hypervisor.HypervisorType, String>() {
{
- put(Hypervisor.HypervisorType.KVM,
"0e9f9a7d0957c3e0a2088e41b2da2cec");
- put(Hypervisor.HypervisorType.XenServer,
"86373992740b1eca8aff8b08ebf3aea5");
- put(Hypervisor.HypervisorType.VMware,
"4006982765846d373eb3719b2fe4d720");
- put(Hypervisor.HypervisorType.Hyperv,
"0b9514e4b6cba1f636fea2125f0f7a5f");
- put(Hypervisor.HypervisorType.LXC,
"0e9f9a7d0957c3e0a2088e41b2da2cec");
- put(Hypervisor.HypervisorType.Ovm3,
"ae3977e696b3e6c81bdcbb792d514d29");
+ put(KVM, "0e9f9a7d0957c3e0a2088e41b2da2cec");
+ put(XenServer, "86373992740b1eca8aff8b08ebf3aea5");
+ put(VMware, "4006982765846d373eb3719b2fe4d720");
+ put(Hyperv, "0b9514e4b6cba1f636fea2125f0f7a5f");
+ put(LXC, "0e9f9a7d0957c3e0a2088e41b2da2cec");
+ put(Ovm3, "ae3977e696b3e6c81bdcbb792d514d29");
}
};
diff --git a/engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java
b/engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java
index adcf28a29b3..a1600e04350 100644
--- a/engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java
+++ b/engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java
@@ -26,6 +26,7 @@ import java.util.Map;
import java.util.UUID;
import javax.persistence.Column;
+import javax.persistence.Convert;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
@@ -41,6 +42,7 @@ import javax.persistence.TemporalType;
import javax.persistence.Transient;
import org.apache.cloudstack.backup.Backup;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
import
org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
import org.apache.commons.codec.binary.Base64;
import org.apache.logging.log4j.Logger;
@@ -159,7 +161,7 @@ public class VMInstanceVO implements VirtualMachine,
FiniteStateObject<State, Vi
protected String reservationId;
@Column(name = "hypervisor_type")
- @Enumerated(value = EnumType.STRING)
+ @Convert(converter = HypervisorTypeConverter.class)
protected HypervisorType hypervisorType;
@Column(name = "dynamically_scalable")
diff --git
a/engine/schema/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadCertificateVO.java
b/engine/schema/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadCertificateVO.java
index 1e43e164ba4..36aefa201f3 100644
---
a/engine/schema/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadCertificateVO.java
+++
b/engine/schema/src/main/java/org/apache/cloudstack/direct/download/DirectDownloadCertificateVO.java
@@ -17,8 +17,10 @@
package org.apache.cloudstack.direct.download;
import com.cloud.hypervisor.Hypervisor;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
import javax.persistence.Column;
+import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@@ -45,6 +47,7 @@ public class DirectDownloadCertificateVO implements
DirectDownloadCertificate {
private String certificate;
@Column(name = "hypervisor_type")
+ @Convert(converter = HypervisorTypeConverter.class)
private Hypervisor.HypervisorType hypervisorType;
@Column(name = "zone_id")
diff --git
a/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VMEntityVO.java
b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VMEntityVO.java
index 4b96dd1641a..af48e5e04ac 100644
---
a/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VMEntityVO.java
+++
b/engine/schema/src/main/java/org/apache/cloudstack/engine/cloud/entity/api/db/VMEntityVO.java
@@ -24,6 +24,7 @@ import java.util.Map;
import java.util.UUID;
import javax.persistence.Column;
+import javax.persistence.Convert;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
@@ -48,6 +49,7 @@ import com.cloud.utils.fsm.FiniteStateObject;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.State;
import com.google.gson.Gson;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
@Entity
@Table(name = "vm_instance")
@@ -146,7 +148,7 @@ public class VMEntityVO implements VirtualMachine,
FiniteStateObject<State, Virt
protected String reservationId;
@Column(name = "hypervisor_type")
- @Enumerated(value = EnumType.STRING)
+ @Convert(converter = HypervisorTypeConverter.class)
protected HypervisorType hypervisorType;
@Transient
diff --git
a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
index 27179a8467e..707091adb87 100644
---
a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
+++
b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
@@ -25,6 +25,7 @@ import com.cloud.util.StoragePoolTypeConverter;
import com.cloud.utils.UriUtils;
import com.cloud.utils.db.Encrypt;
import com.cloud.utils.db.GenericDao;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
import javax.persistence.Column;
import javax.persistence.Convert;
@@ -118,7 +119,7 @@ public class StoragePoolVO implements StoragePool {
private Long capacityIops;
@Column(name = "hypervisor")
- @Enumerated(value = EnumType.STRING)
+ @Convert(converter = HypervisorTypeConverter.class)
private HypervisorType hypervisor;
@Column(name = "parent")
diff --git
a/engine/schema/src/main/java/org/apache/cloudstack/util/HypervisorTypeConverter.java
b/engine/schema/src/main/java/org/apache/cloudstack/util/HypervisorTypeConverter.java
new file mode 100644
index 00000000000..57c12a9b7fa
--- /dev/null
+++
b/engine/schema/src/main/java/org/apache/cloudstack/util/HypervisorTypeConverter.java
@@ -0,0 +1,38 @@
+// 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
+// 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.util;
+
+import com.cloud.hypervisor.Hypervisor;
+
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+
+/**
+ * Converts {@link com.cloud.hypervisor.Hypervisor.HypervisorType} to and from
{@link String} using {@link
com.cloud.hypervisor.Hypervisor.HypervisorType#name()}.
+ */
+@Converter
+public class HypervisorTypeConverter implements
AttributeConverter<Hypervisor.HypervisorType, String> {
+ @Override
+ public String convertToDatabaseColumn(Hypervisor.HypervisorType attribute)
{
+ return attribute != null ? attribute.name() : null;
+ }
+
+ @Override
+ public Hypervisor.HypervisorType convertToEntityAttribute(String dbData) {
+ return dbData != null ? Hypervisor.HypervisorType.valueOf(dbData) :
null;
+ }
+}
diff --git a/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java
b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java
index 2385dc61293..bc940c24e02 100644
--- a/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java
+++ b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java
@@ -1636,8 +1636,12 @@ public abstract class GenericDaoBase<T, ID extends
Serializable> extends Compone
} else if (attr.getValue() != null && attr.getValue() instanceof Long)
{
pstmt.setLong(j, (Long)attr.getValue());
} else if(attr.field.getDeclaredAnnotation(Convert.class) != null) {
- Object val =
_conversionSupport.convertToDatabaseColumn(attr.field, value);
- pstmt.setObject(j, val);
+ if (value instanceof String) {
+ pstmt.setString(j, (String)value);
+ } else {
+ Object val =
_conversionSupport.convertToDatabaseColumn(attr.field, value);
+ pstmt.setObject(j, val);
+ }
} else if (attr.field.getType() == String.class) {
final String str;
try {
diff --git
a/plugins/network-elements/internal-loadbalancer/src/main/java/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
b/plugins/network-elements/internal-loadbalancer/src/main/java/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
index 3c890bafaa9..9a5c5a7c6a9 100644
---
a/plugins/network-elements/internal-loadbalancer/src/main/java/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
+++
b/plugins/network-elements/internal-loadbalancer/src/main/java/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
@@ -118,6 +118,12 @@ import com.cloud.vm.VirtualMachineProfile.Param;
import com.cloud.vm.dao.DomainRouterDao;
import com.cloud.vm.dao.NicDao;
+import static com.cloud.hypervisor.Hypervisor.HypervisorType.Hyperv;
+import static com.cloud.hypervisor.Hypervisor.HypervisorType.KVM;
+import static com.cloud.hypervisor.Hypervisor.HypervisorType.LXC;
+import static com.cloud.hypervisor.Hypervisor.HypervisorType.VMware;
+import static com.cloud.hypervisor.Hypervisor.HypervisorType.XenServer;
+
public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
InternalLoadBalancerVMManager, InternalLoadBalancerVMService,
VirtualMachineGuru {
static final private String InternalLbVmNamePrefix = "b";
@@ -202,7 +208,7 @@ public class InternalLoadBalancerVMManagerImpl extends
ManagerBase implements In
} else if (nic.getTrafficType() == TrafficType.Control) {
controlNic = nic;
// Internal LB control command is sent over management server
in VMware
- if (dest.getHost().getHypervisorType() ==
HypervisorType.VMware) {
+ if (dest.getHost().getHypervisorType() == VMware) {
if (logger.isInfoEnabled()) {
logger.info("Check if we need to add management server
explicit route to Internal LB. pod cidr: " + dest.getPod().getCidrAddress() +
"/" +
dest.getPod().getCidrSize() + ", pod gateway:
" + dest.getPod().getGateway() + ", management host: " + _mgmtHost);
@@ -748,24 +754,16 @@ public class InternalLoadBalancerVMManagerImpl extends
ManagerBase implements In
logger.debug("Creating the internal lb vm " + id + " in
datacenter " + dest.getDataCenter() + " with hypervisor type " + hType);
}
String templateName = null;
- switch (hType) {
- case XenServer:
+ if (hType.equals(XenServer)) {
templateName =
VirtualNetworkApplianceManager.RouterTemplateXen.valueIn(dest.getDataCenter().getId());
- break;
- case KVM:
+ } else if (hType.equals(KVM)) {
templateName =
VirtualNetworkApplianceManager.RouterTemplateKvm.valueIn(dest.getDataCenter().getId());
- break;
- case VMware:
+ } else if (hType.equals(VMware)) {
templateName =
VirtualNetworkApplianceManager.RouterTemplateVmware.valueIn(dest.getDataCenter().getId());
- break;
- case Hyperv:
+ } else if (hType.equals(Hyperv)) {
templateName =
VirtualNetworkApplianceManager.RouterTemplateHyperV.valueIn(dest.getDataCenter().getId());
- break;
- case LXC:
+ } else if (hType.equals(LXC)) {
templateName =
VirtualNetworkApplianceManager.RouterTemplateLxc.valueIn(dest.getDataCenter().getId());
- break;
- default:
- break;
}
final VMTemplateVO template =
_templateDao.findRoutingTemplate(hType, templateName);
diff --git
a/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/OvsTunnelManagerImpl.java
b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/OvsTunnelManagerImpl.java
index c2fed4b75bc..c99a6fd5de3 100644
---
a/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/OvsTunnelManagerImpl.java
+++
b/plugins/network-elements/ovs/src/main/java/com/cloud/network/ovs/OvsTunnelManagerImpl.java
@@ -29,6 +29,7 @@ import javax.persistence.EntityExistsException;
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
import org.apache.cloudstack.framework.messagebus.MessageBus;
import org.apache.cloudstack.framework.messagebus.MessageSubscriber;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import com.cloud.agent.AgentManager;
@@ -240,23 +241,18 @@ public class OvsTunnelManagerImpl extends ManagerBase
implements OvsTunnelManage
HypervisorType hvType = host.getHypervisorType();
String label = null;
- switch (hvType) {
- case XenServer:
+ if (hvType.equals(HypervisorType.XenServer)) {
label = physNetTT.getXenNetworkLabel();
- if ((label != null) && (!label.equals(""))) {
+ if (StringUtils.isNotBlank(label)) {
physNetLabel = label;
}
- break;
- case KVM:
+ } else if (hvType.equals(HypervisorType.KVM)) {
label = physNetTT.getKvmNetworkLabel();
- if ((label != null) && (!label.equals(""))) {
+ if (StringUtils.isNotBlank(label)) {
physNetLabel = label;
}
- break;
- default:
- throw new CloudRuntimeException("Hypervisor " +
- hvType.toString() +
- " unsupported by OVS Tunnel Manager");
+ } else {
+ throw new CloudRuntimeException(String.format("Hypervisor %s
unsupported by OVS Tunnel Manager", hvType));
}
// Try to fetch GRE endpoint IP address for cloud db
diff --git
a/server/src/main/java/com/cloud/api/query/vo/DomainRouterJoinVO.java
b/server/src/main/java/com/cloud/api/query/vo/DomainRouterJoinVO.java
index a907506af54..1be7583daf5 100644
--- a/server/src/main/java/com/cloud/api/query/vo/DomainRouterJoinVO.java
+++ b/server/src/main/java/com/cloud/api/query/vo/DomainRouterJoinVO.java
@@ -20,6 +20,7 @@ import java.net.URI;
import java.util.Date;
import javax.persistence.Column;
+import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
@@ -37,6 +38,7 @@ import com.cloud.user.Account;
import com.cloud.utils.db.GenericDao;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.State;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
@Entity
@Table(name = "domain_router_view")
@@ -138,7 +140,7 @@ public class DomainRouterJoinVO extends BaseViewVO
implements ControlledViewEnti
private ResourceState hostResourceState;
@Column(name="hypervisor_type")
- @Enumerated(value=EnumType.STRING)
+ @Convert(converter = HypervisorTypeConverter.class)
private Hypervisor.HypervisorType hypervisorType;
@Column(name = "template_id", updatable = true, nullable = true, length =
17)
diff --git a/server/src/main/java/com/cloud/api/query/vo/HostJoinVO.java
b/server/src/main/java/com/cloud/api/query/vo/HostJoinVO.java
index 78a45429463..40e844c95da 100644
--- a/server/src/main/java/com/cloud/api/query/vo/HostJoinVO.java
+++ b/server/src/main/java/com/cloud/api/query/vo/HostJoinVO.java
@@ -20,6 +20,7 @@ import java.util.Arrays;
import java.util.Date;
import javax.persistence.Column;
+import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
@@ -38,6 +39,7 @@ import org.apache.cloudstack.api.Identity;
import org.apache.cloudstack.api.InternalIdentity;
import org.apache.cloudstack.ha.HAConfig;
import org.apache.cloudstack.outofbandmanagement.OutOfBandManagement;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
import org.apache.commons.lang3.StringUtils;
/**
@@ -76,7 +78,7 @@ public class HostJoinVO extends BaseViewVO implements
InternalIdentity, Identity
private String version;
@Column(name = "hypervisor_type")
- @Enumerated(value = EnumType.STRING)
+ @Convert(converter = HypervisorTypeConverter.class)
private HypervisorType hypervisorType;
@Column(name = "hypervisor_version")
diff --git a/server/src/main/java/com/cloud/api/query/vo/SnapshotJoinVO.java
b/server/src/main/java/com/cloud/api/query/vo/SnapshotJoinVO.java
index 9ec74dac128..29d3e73fd26 100644
--- a/server/src/main/java/com/cloud/api/query/vo/SnapshotJoinVO.java
+++ b/server/src/main/java/com/cloud/api/query/vo/SnapshotJoinVO.java
@@ -20,6 +20,7 @@ package com.cloud.api.query.vo;
import java.util.Date;
import javax.persistence.Column;
+import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
@@ -34,6 +35,7 @@ import com.cloud.storage.VMTemplateStorageResourceAssoc;
import com.cloud.storage.Volume;
import com.cloud.user.Account;
import com.cloud.utils.db.GenericDao;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
@Entity
@Table(name = "snapshot_view")
@@ -71,7 +73,7 @@ public class SnapshotJoinVO extends
BaseViewWithTagInformationVO implements Cont
private Snapshot.LocationType locationType;
@Column(name = "hypervisor_type")
- @Enumerated(value = EnumType.STRING)
+ @Convert(converter = HypervisorTypeConverter.class)
Hypervisor.HypervisorType hypervisorType;
@Column(name = "account_id")
diff --git a/server/src/main/java/com/cloud/api/query/vo/StoragePoolJoinVO.java
b/server/src/main/java/com/cloud/api/query/vo/StoragePoolJoinVO.java
index 85e904be973..762f4a14fe5 100644
--- a/server/src/main/java/com/cloud/api/query/vo/StoragePoolJoinVO.java
+++ b/server/src/main/java/com/cloud/api/query/vo/StoragePoolJoinVO.java
@@ -36,6 +36,7 @@ import com.cloud.storage.ScopeType;
import com.cloud.storage.Storage.StoragePoolType;
import com.cloud.storage.StoragePoolStatus;
import com.cloud.utils.db.GenericDao;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
/**
* Storage Pool DB view.
@@ -138,7 +139,7 @@ public class StoragePoolJoinVO extends BaseViewVO
implements InternalIdentity, I
private Long capacityIops;
@Column(name = "hypervisor")
- @Enumerated(value = EnumType.STRING)
+ @Convert(converter = HypervisorTypeConverter.class)
private HypervisorType hypervisor;
@Column(name = "storage_provider_name")
diff --git a/server/src/main/java/com/cloud/api/query/vo/TemplateJoinVO.java
b/server/src/main/java/com/cloud/api/query/vo/TemplateJoinVO.java
index a8ed60d23bd..babc5ac5567 100644
--- a/server/src/main/java/com/cloud/api/query/vo/TemplateJoinVO.java
+++ b/server/src/main/java/com/cloud/api/query/vo/TemplateJoinVO.java
@@ -19,6 +19,7 @@ package com.cloud.api.query.vo;
import java.util.Date;
import javax.persistence.Column;
+import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
@@ -36,6 +37,7 @@ import
com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
import com.cloud.template.VirtualMachineTemplate;
import com.cloud.template.VirtualMachineTemplate.State;
import com.cloud.utils.db.GenericDao;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
@Entity
@Table(name = "template_view")
@@ -114,7 +116,7 @@ public class TemplateJoinVO extends
BaseViewWithTagInformationVO implements Cont
private boolean crossZones = false;
@Column(name = "hypervisor_type")
- @Enumerated(value = EnumType.STRING)
+ @Convert(converter = HypervisorTypeConverter.class)
private HypervisorType hypervisorType;
@Column(name = "extractable")
diff --git a/server/src/main/java/com/cloud/api/query/vo/UserVmJoinVO.java
b/server/src/main/java/com/cloud/api/query/vo/UserVmJoinVO.java
index 3896e9fa5fc..bf6c05c62f8 100644
--- a/server/src/main/java/com/cloud/api/query/vo/UserVmJoinVO.java
+++ b/server/src/main/java/com/cloud/api/query/vo/UserVmJoinVO.java
@@ -43,6 +43,7 @@ import com.cloud.util.StoragePoolTypeConverter;
import com.cloud.utils.db.GenericDao;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.State;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
@Entity
@Table(name = "user_vm_view")
@@ -128,7 +129,7 @@ public class UserVmJoinVO extends
BaseViewWithTagInformationVO implements Contro
private String guestOsUuid;
@Column(name = "hypervisor_type")
- @Enumerated(value = EnumType.STRING)
+ @Convert(converter = HypervisorTypeConverter.class)
private HypervisorType hypervisorType;
@Column(name = "ha_enabled", updatable = true, nullable = true)
diff --git a/server/src/main/java/com/cloud/api/query/vo/VolumeJoinVO.java
b/server/src/main/java/com/cloud/api/query/vo/VolumeJoinVO.java
index a8d568ff245..8a9804c8e96 100644
--- a/server/src/main/java/com/cloud/api/query/vo/VolumeJoinVO.java
+++ b/server/src/main/java/com/cloud/api/query/vo/VolumeJoinVO.java
@@ -19,6 +19,7 @@ package com.cloud.api.query.vo;
import java.util.Date;
import javax.persistence.Column;
+import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
@@ -33,6 +34,7 @@ import com.cloud.storage.Volume;
import com.cloud.user.Account;
import com.cloud.utils.db.GenericDao;
import com.cloud.vm.VirtualMachine;
+import org.apache.cloudstack.util.HypervisorTypeConverter;
@Entity
@Table(name = "volume_view")
@@ -179,7 +181,7 @@ public class VolumeJoinVO extends
BaseViewWithTagInformationVO implements Contro
private String errorString;
@Column(name = "hypervisor_type")
- @Enumerated(value = EnumType.STRING)
+ @Convert(converter = HypervisorTypeConverter.class)
private HypervisorType hypervisorType;
@Column(name = "disk_offering_id")
diff --git a/server/src/main/java/com/cloud/network/NetworkModelImpl.java
b/server/src/main/java/com/cloud/network/NetworkModelImpl.java
index 07e471c377f..1a994d5c0a5 100644
--- a/server/src/main/java/com/cloud/network/NetworkModelImpl.java
+++ b/server/src/main/java/com/cloud/network/NetworkModelImpl.java
@@ -1300,22 +1300,16 @@ public class NetworkModelImpl extends ManagerBase
implements NetworkModel, Confi
PhysicalNetworkTrafficTypeVO mgmtTraffic =
_pNTrafficTypeDao.findBy(mgmtPhyNetwork.getId(), TrafficType.Management);
if (mgmtTraffic != null) {
String label = null;
- switch (hypervisorType) {
- case XenServer:
- label = mgmtTraffic.getXenNetworkLabel();
- break;
- case KVM:
- label = mgmtTraffic.getKvmNetworkLabel();
- break;
- case VMware:
- label = mgmtTraffic.getVmwareNetworkLabel();
- break;
- case Hyperv:
- label = mgmtTraffic.getHypervNetworkLabel();
- break;
- case Ovm3:
- label = mgmtTraffic.getOvm3NetworkLabel();
- break;
+ if (hypervisorType.equals(HypervisorType.XenServer)) {
+ label = mgmtTraffic.getXenNetworkLabel();
+ } else if (hypervisorType.equals(HypervisorType.KVM)) {
+ label = mgmtTraffic.getKvmNetworkLabel();
+ } else if (hypervisorType.equals(HypervisorType.VMware)) {
+ label = mgmtTraffic.getVmwareNetworkLabel();
+ } else if (hypervisorType.equals(HypervisorType.Hyperv)) {
+ label = mgmtTraffic.getHypervNetworkLabel();
+ } else if (hypervisorType.equals(HypervisorType.Ovm3)) {
+ label = mgmtTraffic.getOvm3NetworkLabel();
}
return label;
}
@@ -1335,22 +1329,16 @@ public class NetworkModelImpl extends ManagerBase
implements NetworkModel, Confi
PhysicalNetworkTrafficTypeVO storageTraffic =
_pNTrafficTypeDao.findBy(storagePhyNetwork.getId(), TrafficType.Storage);
if (storageTraffic != null) {
String label = null;
- switch (hypervisorType) {
- case XenServer:
- label = storageTraffic.getXenNetworkLabel();
- break;
- case KVM:
- label = storageTraffic.getKvmNetworkLabel();
- break;
- case VMware:
- label = storageTraffic.getVmwareNetworkLabel();
- break;
- case Hyperv:
- label = storageTraffic.getHypervNetworkLabel();
- break;
- case Ovm3:
- label = storageTraffic.getOvm3NetworkLabel();
- break;
+ if (hypervisorType.equals(HypervisorType.XenServer)) {
+ label = storageTraffic.getXenNetworkLabel();
+ } else if (hypervisorType.equals(HypervisorType.KVM)) {
+ label = storageTraffic.getKvmNetworkLabel();
+ } else if (hypervisorType.equals(HypervisorType.VMware)) {
+ label = storageTraffic.getVmwareNetworkLabel();
+ } else if (hypervisorType.equals(HypervisorType.Hyperv)) {
+ label = storageTraffic.getHypervNetworkLabel();
+ } else if (hypervisorType.equals(HypervisorType.Ovm3)) {
+ label = storageTraffic.getOvm3NetworkLabel();
}
return label;
}
@@ -1860,22 +1848,16 @@ public class NetworkModelImpl extends ManagerBase
implements NetworkModel, Confi
PhysicalNetworkTrafficTypeVO publicTraffic =
_pNTrafficTypeDao.findBy(publicPhyNetwork.getId(), TrafficType.Public);
if (publicTraffic != null) {
String label = null;
- switch (hypervisorType) {
- case XenServer:
- label = publicTraffic.getXenNetworkLabel();
- break;
- case KVM:
- label = publicTraffic.getKvmNetworkLabel();
- break;
- case VMware:
- label = publicTraffic.getVmwareNetworkLabel();
- break;
- case Hyperv:
- label = publicTraffic.getHypervNetworkLabel();
- break;
- case Ovm3:
- label = publicTraffic.getOvm3NetworkLabel();
- break;
+ if (hypervisorType.equals(HypervisorType.XenServer)) {
+ label = publicTraffic.getXenNetworkLabel();
+ } else if (hypervisorType.equals(HypervisorType.KVM)) {
+ label = publicTraffic.getKvmNetworkLabel();
+ } else if (hypervisorType.equals(HypervisorType.VMware)) {
+ label = publicTraffic.getVmwareNetworkLabel();
+ } else if (hypervisorType.equals(HypervisorType.Hyperv)) {
+ label = publicTraffic.getHypervNetworkLabel();
+ } else if (hypervisorType.equals(HypervisorType.Ovm3)) {
+ label = publicTraffic.getOvm3NetworkLabel();
}
return label;
}
@@ -1895,22 +1877,16 @@ public class NetworkModelImpl extends ManagerBase
implements NetworkModel, Confi
PhysicalNetworkTrafficTypeVO guestTraffic =
_pNTrafficTypeDao.findBy(guestPhyNetwork.getId(), TrafficType.Guest);
if (guestTraffic != null) {
String label = null;
- switch (hypervisorType) {
- case XenServer:
- label = guestTraffic.getXenNetworkLabel();
- break;
- case KVM:
- label = guestTraffic.getKvmNetworkLabel();
- break;
- case VMware:
- label = guestTraffic.getVmwareNetworkLabel();
- break;
- case Hyperv:
- label = guestTraffic.getHypervNetworkLabel();
- break;
- case Ovm3:
- label = guestTraffic.getOvm3NetworkLabel();
- break;
+ if (hypervisorType.equals(HypervisorType.XenServer)) {
+ label = guestTraffic.getXenNetworkLabel();
+ } else if (hypervisorType.equals(HypervisorType.KVM)) {
+ label = guestTraffic.getKvmNetworkLabel();
+ } else if (hypervisorType.equals(HypervisorType.VMware)) {
+ label = guestTraffic.getVmwareNetworkLabel();
+ } else if (hypervisorType.equals(HypervisorType.Hyperv)) {
+ label = guestTraffic.getHypervNetworkLabel();
+ } else if (hypervisorType.equals(HypervisorType.Ovm3)) {
+ label = guestTraffic.getOvm3NetworkLabel();
}
return label;
}
diff --git a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java
b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java
index a68acb543f9..75d7e8d3a0a 100644
--- a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java
+++ b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java
@@ -3094,24 +3094,16 @@ public class StorageManagerImpl extends ManagerBase
implements StorageManager, C
private String getValidTemplateName(Long zoneId, HypervisorType hType) {
String templateName = null;
- switch (hType) {
- case XenServer:
- templateName =
VirtualNetworkApplianceManager.RouterTemplateXen.valueIn(zoneId);
- break;
- case KVM:
- templateName =
VirtualNetworkApplianceManager.RouterTemplateKvm.valueIn(zoneId);
- break;
- case VMware:
- templateName =
VirtualNetworkApplianceManager.RouterTemplateVmware.valueIn(zoneId);
- break;
- case Hyperv:
- templateName =
VirtualNetworkApplianceManager.RouterTemplateHyperV.valueIn(zoneId);
- break;
- case LXC:
- templateName =
VirtualNetworkApplianceManager.RouterTemplateLxc.valueIn(zoneId);
- break;
- default:
- break;
+ if (hType.equals(HypervisorType.XenServer)) {
+ templateName =
VirtualNetworkApplianceManager.RouterTemplateXen.valueIn(zoneId);
+ } else if (hType.equals(HypervisorType.KVM)) {
+ templateName =
VirtualNetworkApplianceManager.RouterTemplateKvm.valueIn(zoneId);
+ } else if (hType.equals(HypervisorType.VMware)) {
+ templateName =
VirtualNetworkApplianceManager.RouterTemplateVmware.valueIn(zoneId);
+ } else if (hType.equals(HypervisorType.Hyperv)) {
+ templateName =
VirtualNetworkApplianceManager.RouterTemplateHyperV.valueIn(zoneId);
+ } else if (hType.equals(HypervisorType.LXC)) {
+ templateName =
VirtualNetworkApplianceManager.RouterTemplateLxc.valueIn(zoneId);
}
return templateName;
}
diff --git a/server/src/main/java/com/cloud/template/TemplateAdapterBase.java
b/server/src/main/java/com/cloud/template/TemplateAdapterBase.java
index 195f336b38b..d663a9ae0b7 100644
--- a/server/src/main/java/com/cloud/template/TemplateAdapterBase.java
+++ b/server/src/main/java/com/cloud/template/TemplateAdapterBase.java
@@ -17,6 +17,7 @@
package com.cloud.template;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -81,6 +82,7 @@ import com.cloud.utils.component.AdapterBase;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.vm.UserVmVO;
import com.cloud.vm.dao.UserVmDao;
+import org.apache.commons.lang3.StringUtils;
public abstract class TemplateAdapterBase extends AdapterBase implements
TemplateAdapter {
protected @Inject
@@ -285,8 +287,10 @@ public abstract class TemplateAdapterBase extends
AdapterBase implements Templat
HypervisorType hypervisorType =
HypervisorType.getType(cmd.getHypervisor());
if(hypervisorType == HypervisorType.None) {
- throw new InvalidParameterValueException("Hypervisor Type: " +
cmd.getHypervisor() + " is invalid. Supported Hypervisor types are "
- +
EnumUtils.listValues(HypervisorType.values()).replace("None, ", ""));
+ throw new InvalidParameterValueException(String.format(
+ "Hypervisor Type: %s is invalid. Supported Hypervisor
types are: %s",
+ cmd.getHypervisor(),
+
StringUtils.join(Arrays.stream(HypervisorType.values()).filter(h -> h !=
HypervisorType.None).map(HypervisorType::name).toArray(), ", ")));
}
Map details = cmd.getDetails();
@@ -327,8 +331,10 @@ public abstract class TemplateAdapterBase extends
AdapterBase implements Templat
}
if(!params.isIso() && params.getHypervisorType() ==
HypervisorType.None) {
- throw new InvalidParameterValueException("Hypervisor Type: " +
params.getHypervisorType() + " is invalid. Supported Hypervisor types are "
- +
EnumUtils.listValues(HypervisorType.values()).replace("None, ", ""));
+ throw new InvalidParameterValueException(String.format(
+ "Hypervisor Type: %s is invalid. Supported Hypervisor
types are: %s",
+ params.getHypervisorType(),
+
StringUtils.join(Arrays.stream(HypervisorType.values()).filter(h -> h !=
HypervisorType.None).map(HypervisorType::name).toArray(), ", ")));
}
return prepare(params.isIso(), params.getUserId(), params.getName(),
params.getDisplayText(), params.getBits(),
diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
index e5fe2537891..fbcbac66dc3 100644
--- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
@@ -6359,19 +6359,15 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
String decodedUrl = decodeExtraConfig(extraConfig);
HypervisorType hypervisorType = vm.getHypervisorType();
- switch (hypervisorType) {
- case XenServer:
- persistExtraConfigXenServer(decodedUrl, vm);
- break;
- case KVM:
- persistExtraConfigKvm(decodedUrl, vm);
- break;
- case VMware:
- persistExtraConfigVmware(decodedUrl, vm);
- break;
- default:
- String msg = String.format("This hypervisor %s is not
supported for use with this feature", hypervisorType.toString());
- throw new CloudRuntimeException(msg);
+ if (hypervisorType.equals(HypervisorType.XenServer)) {
+ persistExtraConfigXenServer(decodedUrl, vm);
+ } else if (hypervisorType.equals(HypervisorType.KVM)) {
+ persistExtraConfigKvm(decodedUrl, vm);
+ } else if (hypervisorType.equals(HypervisorType.VMware)) {
+ persistExtraConfigVmware(decodedUrl, vm);
+ } else {
+ String msg = String.format("This hypervisor %s is not supported
for use with this feature", hypervisorType.toString());
+ throw new CloudRuntimeException(msg);
}
}