diff --git a/server/src/main/java/com/cloud/network/router/NetworkHelperImpl.java b/server/src/main/java/com/cloud/network/router/NetworkHelperImpl.java index cc947bd05031..4eaaae719973 100644 --- a/server/src/main/java/com/cloud/network/router/NetworkHelperImpl.java +++ b/server/src/main/java/com/cloud/network/router/NetworkHelperImpl.java @@ -567,7 +567,14 @@ protected String getNoHypervisorsErrMsgDetails() { protected List getHypervisors(final RouterDeploymentDefinition routerDeploymentDefinition) throws InsufficientServerCapacityException { final DeployDestination dest = routerDeploymentDefinition.getDest(); List hypervisors = new ArrayList(); - if (dest.getCluster() != null) { + HypervisorType routerHypervisorType = HypervisorType.None; + final String routerHypervisorTypeStr = VirtualNetworkApplianceManager.VirtualRouterHypervisorType.valueIn(routerDeploymentDefinition.getOwner().getId()); + if (routerHypervisorTypeStr != null) { + routerHypervisorType = HypervisorType.getType(routerHypervisorTypeStr); + } + if (routerHypervisorType != HypervisorType.None) { + hypervisors.add(routerHypervisorType); + } else if (dest.getCluster() != null) { if (dest.getCluster().getHypervisorType() == HypervisorType.Ovm) { hypervisors.add(getClusterToStartDomainRouterForOvm(dest.getCluster().getPodId())); } else { diff --git a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManager.java b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManager.java index 18f669ee91b3..18b718e19d3d 100644 --- a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManager.java +++ b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManager.java @@ -45,6 +45,7 @@ public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkA static final String SetServiceMonitorCK = "network.router.EnableServiceMonitoring"; static final String RouterAlertsCheckIntervalCK = "router.alerts.check.interval"; static final String VirtualRouterServiceOfferingCK = "router.service.offering"; + static final String VirtualRouterHypervisorTypeCK = "router.hypervisor.type"; static final String RouterHealthChecksConfigRefreshIntervalCK = "router.health.checks.config.refresh.interval"; static final String RouterHealthChecksResultFetchIntervalCK = "router.health.checks.results.fetch.interval"; @@ -77,6 +78,9 @@ public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkA static final ConfigKey VirtualRouterServiceOffering = new ConfigKey(String.class, VirtualRouterServiceOfferingCK, "Advanced", "", "Uuid of the service offering used by virtual routers; if NULL - system offering will be used", true, ConfigKey.Scope.Account, null); + static final ConfigKey VirtualRouterHypervisorType = new ConfigKey(String.class, VirtualRouterHypervisorTypeCK, "Advanced", "", + "Hypervisor type used to create virtual routers, valid values are: XenServer, KVM, VMware, Hyperv, VirtualBox, Parralels, BareMetal, Ovm, LXC, Any; " + + "if NULL - virtual router will be created with same hypervisor as user vm", true, ConfigKey.Scope.Account, null); // Health checks static final ConfigKey RouterHealthChecksEnabled = new ConfigKey(Boolean.class, "router.health.checks.enabled", "Advanced", "true", diff --git a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index b243c16acd81..2d04608719d5 100644 --- a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -3236,6 +3236,7 @@ public ConfigKey[] getConfigKeys() { RouterVersionCheckEnabled, SetServiceMonitor, VirtualRouterServiceOffering, + VirtualRouterHypervisorType, RouterAlertsCheckInterval, RouterHealthChecksEnabled, RouterHealthChecksBasicInterval,