diff --git a/engine/api/src/main/java/org/apache/cloudstack/engine/orchestration/service/NetworkOrchestrationService.java b/engine/api/src/main/java/org/apache/cloudstack/engine/orchestration/service/NetworkOrchestrationService.java index bf58c72c133..6d7c540613b 100644 --- a/engine/api/src/main/java/org/apache/cloudstack/engine/orchestration/service/NetworkOrchestrationService.java +++ b/engine/api/src/main/java/org/apache/cloudstack/engine/orchestration/service/NetworkOrchestrationService.java @@ -100,6 +100,9 @@ public interface NetworkOrchestrationService { ConfigKey RollingRestartEnabled = new ConfigKey("Advanced", Boolean.class, "network.rolling.restart", "true", "Whether to allow or deny rolling restart of network routers.", true); + static final ConfigKey TUNGSTEN_ENABLED = new ConfigKey<>(Boolean.class, "tungsten.plugin.enable", "Advanced", "false", + "Indicates whether to enable the Tungsten plugin", false, ConfigKey.Scope.Zone, null); + List setupNetwork(Account owner, NetworkOffering offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) throws ConcurrentOperationException; diff --git a/engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java index 8e910c55cab..b74c11cf138 100644 --- a/engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java +++ b/engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java @@ -42,6 +42,7 @@ import com.cloud.configuration.Config; import com.cloud.utils.NumbersUtil; import org.apache.cloudstack.agent.lb.IndirectAgentLB; import org.apache.cloudstack.ca.CAManager; +import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; import org.apache.cloudstack.framework.config.ConfigKey; import org.apache.cloudstack.framework.config.Configurable; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; @@ -1783,6 +1784,7 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl Map params = new HashMap(); params.put(Config.RouterAggregationCommandEachTimeout.toString(), _configDao.getValue(Config.RouterAggregationCommandEachTimeout.toString())); params.put(Config.MigrateWait.toString(), _configDao.getValue(Config.MigrateWait.toString())); + params.put(NetworkOrchestrationService.TUNGSTEN_ENABLED.key(), String.valueOf(NetworkOrchestrationService.TUNGSTEN_ENABLED.valueIn(host.getDataCenterId()))); try { SetHostParamsCommand cmds = new SetHostParamsCommand(params); diff --git a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java index 1a3edb59a07..577b0915dde 100644 --- a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java +++ b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java @@ -4648,6 +4648,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra public ConfigKey[] getConfigKeys() { return new ConfigKey[]{NetworkGcWait, NetworkGcInterval, NetworkLockTimeout, GuestDomainSuffix, NetworkThrottlingRate, MinVRVersion, - PromiscuousMode, MacAddressChanges, ForgedTransmits, MacLearning, RollingRestartEnabled}; + PromiscuousMode, MacAddressChanges, ForgedTransmits, MacLearning, RollingRestartEnabled, + TUNGSTEN_ENABLED }; } } diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index a24a0464b0e..b5260b37965 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -50,7 +50,7 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.ParserConfigurationException; import org.apache.cloudstack.api.ApiConstants.IoDriverPolicy; -import org.apache.cloudstack.network.tungsten.service.TungstenService; +import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; import org.apache.cloudstack.storage.configdrive.ConfigDrive; import org.apache.cloudstack.storage.to.PrimaryDataStoreTO; import org.apache.cloudstack.storage.to.TemplateObjectTO; @@ -462,6 +462,8 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv protected LibvirtDomainXMLParser parser = new LibvirtDomainXMLParser(); + private boolean isTungstenEnabled = false; + private static Gson gson = new Gson(); /** @@ -1396,6 +1398,10 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv _migrateWait = intValue; } + if (params.get(NetworkOrchestrationService.TUNGSTEN_ENABLED.key()) != null) { + isTungstenEnabled = Boolean.parseBoolean(params.get(NetworkOrchestrationService.TUNGSTEN_ENABLED.key())); + } + return true; } @@ -1481,8 +1487,8 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv defaultVifDriverName = DEFAULT_BRIDGE_VIF_DRIVER_CLASS_NAME; } } - tungstenVifDriver = getVifDriverClass(DEFAULT_TUNGSTEN_VIF_DRIVER_CLASS_NAME, params); _defaultVifDriver = getVifDriverClass(defaultVifDriverName, params); + tungstenVifDriver = getVifDriverClass(DEFAULT_TUNGSTEN_VIF_DRIVER_CLASS_NAME, params); // Load any per-traffic-type vif drivers for (final Map.Entry entry : params.entrySet()) { @@ -1556,7 +1562,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv final Set vifDrivers = new HashSet(); vifDrivers.add(_defaultVifDriver); - if (TungstenService.isTungstenEnabled(Long.parseLong(_dcId))) { + if (isTungstenEnabled) { vifDrivers.add(tungstenVifDriver); } vifDrivers.addAll(_trafficTypeVifDrivers.values()); diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/VRouterVifDriver.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/VRouterVifDriver.java index 5876602bc64..e6d9801e22c 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/VRouterVifDriver.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/VRouterVifDriver.java @@ -107,7 +107,8 @@ public class VRouterVifDriver extends VifDriverBase { @Override public boolean isExistingBridge(String bridgeName) { File f = new File("/sys/devices/virtual/net/" + bridgeName); - return f.exists(); + File bridge = new File("/sys/devices/virtual/net/" + bridgeName + "/bridge"); + return f.exists() && ! bridge.exists(); } @Override diff --git a/plugins/network-elements/tungsten/src/main/java/org/apache/cloudstack/network/tungsten/service/TungstenService.java b/plugins/network-elements/tungsten/src/main/java/org/apache/cloudstack/network/tungsten/service/TungstenService.java index 5f6b02b7214..25c405bf97c 100644 --- a/plugins/network-elements/tungsten/src/main/java/org/apache/cloudstack/network/tungsten/service/TungstenService.java +++ b/plugins/network-elements/tungsten/src/main/java/org/apache/cloudstack/network/tungsten/service/TungstenService.java @@ -25,7 +25,6 @@ import com.cloud.network.element.TungstenProviderVO; import com.cloud.network.lb.LoadBalancingRule; import com.cloud.vm.VMInstanceVO; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.framework.config.ConfigKey; import org.apache.cloudstack.network.tungsten.api.response.TungstenFabricAddressGroupResponse; import org.apache.cloudstack.network.tungsten.api.response.TungstenFabricApplicationPolicySetResponse; import org.apache.cloudstack.network.tungsten.api.response.TungstenFabricFirewallPolicyResponse; @@ -42,13 +41,6 @@ import java.util.List; public interface TungstenService { - static final ConfigKey TUNGSTEN_ENABLED = new ConfigKey(Boolean.class, "tungsten.plugin.enable", "Advanced", "false", - "Indicates whether to enable the Tungsten plugin", false, ConfigKey.Scope.Zone, null); - - static Boolean isTungstenEnabled(long zoneId) { - return TUNGSTEN_ENABLED.valueIn(zoneId); - } - String getTungstenProjectFqn(Network network); List getTungstenProviders(); diff --git a/plugins/network-elements/tungsten/src/main/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImpl.java b/plugins/network-elements/tungsten/src/main/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImpl.java index f54aaba1d77..ad20a98984f 100644 --- a/plugins/network-elements/tungsten/src/main/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImpl.java +++ b/plugins/network-elements/tungsten/src/main/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImpl.java @@ -115,8 +115,6 @@ import net.juniper.tungsten.api.types.VirtualMachineInterface; import net.juniper.tungsten.api.types.VirtualNetwork; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.context.CallContext; -import org.apache.cloudstack.framework.config.ConfigKey; -import org.apache.cloudstack.framework.config.Configurable; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.framework.messagebus.MessageBus; import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkGatewayToLogicalRouterCommand; @@ -230,7 +228,7 @@ import java.util.concurrent.TimeUnit; import javax.inject.Inject; -public class TungstenServiceImpl extends ManagerBase implements TungstenService, Configurable { +public class TungstenServiceImpl extends ManagerBase implements TungstenService { private static final Logger s_logger = Logger.getLogger(TungstenServiceImpl.class); private static final String NETWORK = "network"; @@ -2540,16 +2538,4 @@ public class TungstenServiceImpl extends ManagerBase implements TungstenService, } return resultList; } - - @Override - public String getConfigComponentName() { - return TungstenServiceImpl.class.getSimpleName(); - } - - @Override - public ConfigKey[] getConfigKeys() { - return new ConfigKey[] { - TUNGSTEN_ENABLED - }; - } } diff --git a/scripts/vm/network/tungsten/create_tap_device.sh b/scripts/vm/network/tungsten/create_tap_device.sh old mode 100644 new mode 100755 diff --git a/scripts/vm/network/tungsten/delete_tap_device.sh b/scripts/vm/network/tungsten/delete_tap_device.sh old mode 100644 new mode 100755 diff --git a/scripts/vm/network/tungsten/setup_tungsten_vrouter.sh b/scripts/vm/network/tungsten/setup_tungsten_vrouter.sh old mode 100644 new mode 100755 diff --git a/scripts/vm/network/tungsten/update_tungsten_loadbalancer_ssl.sh b/scripts/vm/network/tungsten/update_tungsten_loadbalancer_ssl.sh old mode 100644 new mode 100755 diff --git a/scripts/vm/network/tungsten/update_tungsten_loadbalancer_stats.sh b/scripts/vm/network/tungsten/update_tungsten_loadbalancer_stats.sh old mode 100644 new mode 100755