You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ya...@apache.org on 2014/03/11 21:24:35 UTC
[1/3] git commit: updated refs/heads/master to 3e097a0
Repository: cloudstack
Updated Branches:
refs/heads/master 36558e461 -> 3e097a0fb
CLOUDSTACK-6218: Serialize VR commands in VR resource
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/b399c315
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/b399c315
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/b399c315
Branch: refs/heads/master
Commit: b399c315a3fceae699fa24dc1ff2bbae191ddd07
Parents: 36558e4
Author: Sheng Yang <sh...@citrix.com>
Authored: Mon Mar 10 12:52:07 2014 -0700
Committer: Sheng Yang <sh...@citrix.com>
Committed: Tue Mar 11 11:58:56 2014 -0700
----------------------------------------------------------------------
.../virtualnetwork/VirtualRoutingResource.java | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b399c315/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
index f22a0db..29a176a 100755
--- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
+++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
@@ -77,6 +77,8 @@ import java.util.Map;
import java.util.Queue;
import java.util.UUID;
import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
/**
* VirtualNetworkResource controls and configures virtual networking
@@ -123,6 +125,7 @@ public class VirtualRoutingResource {
private static final Logger s_logger = Logger.getLogger(VirtualRoutingResource.class);
private VirtualRouterDeployer _vrDeployer;
private Map <String, Queue> _vrAggregateCommandsSet;
+ protected Map<String, Lock> _vrLockMap = new HashMap<String, Lock>();
private String _name;
private int _sleep;
@@ -137,13 +140,22 @@ public class VirtualRoutingResource {
public Answer executeRequest(final NetworkElementCommand cmd) {
boolean aggregated = false;
+ String routerName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
+ Lock lock;
+ if (_vrLockMap.containsKey(routerName)) {
+ lock = _vrLockMap.get(routerName);
+ } else {
+ lock = new ReentrantLock();
+ _vrLockMap.put(routerName, lock);
+ }
+ lock.lock();
+
try {
ExecutionResult rc = _vrDeployer.prepareCommand(cmd);
if (!rc.isSuccess()) {
s_logger.error("Failed to prepare VR command due to " + rc.getDetails());
return new Answer(cmd, false, rc.getDetails());
}
- String routerName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
assert cmd.getRouterAccessIp() != null : "Why there is no access IP for VR?";
@@ -174,6 +186,7 @@ public class VirtualRoutingResource {
} catch (final IllegalArgumentException e) {
return new Answer(cmd, false, e.getMessage());
} finally {
+ lock.unlock();
if (!aggregated) {
ExecutionResult rc = _vrDeployer.cleanupCommand(cmd);
if (!rc.isSuccess()) {
[2/3] git commit: updated refs/heads/master to 3e097a0
Posted by ya...@apache.org.
CLOUDSTACK-6047: Enable VR aggregation commands for VR start/reboot
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/f45de30d
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/f45de30d
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/f45de30d
Branch: refs/heads/master
Commit: f45de30d1b94df8bb32f9aa724521209f1ae6eb0
Parents: b399c31
Author: Sheng Yang <sh...@citrix.com>
Authored: Thu Mar 6 19:29:20 2014 -0800
Committer: Sheng Yang <sh...@citrix.com>
Committed: Tue Mar 11 13:04:26 2014 -0700
----------------------------------------------------------------------
.../element/AggregatedCommandExecutor.java | 28 +++++
.../api/routing/AggregationControlCommand.java | 44 +++++++
.../api/routing/FinishAggregationCommand.java | 31 -----
.../api/routing/StartAggregationCommand.java | 31 -----
.../virtualnetwork/VirtualRoutingResource.java | 108 +++++++++--------
.../VirtualRoutingResourceTest.java | 29 ++---
.../orchestration/NetworkOrchestrator.java | 105 +++++++++-------
.../network/element/VirtualRouterElement.java | 71 +++++++----
.../router/VirtualNetworkApplianceManager.java | 16 ++-
.../VirtualNetworkApplianceManagerImpl.java | 119 ++++++++++++-------
.../MockVpcVirtualNetworkApplianceManager.java | 34 ++++--
11 files changed, 367 insertions(+), 249 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f45de30d/api/src/com/cloud/network/element/AggregatedCommandExecutor.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/element/AggregatedCommandExecutor.java b/api/src/com/cloud/network/element/AggregatedCommandExecutor.java
new file mode 100644
index 0000000..012908f
--- /dev/null
+++ b/api/src/com/cloud/network/element/AggregatedCommandExecutor.java
@@ -0,0 +1,28 @@
+// 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 com.cloud.network.element;
+
+import com.cloud.deploy.DeployDestination;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.Network;
+
+public interface AggregatedCommandExecutor {
+ public boolean prepareAggregatedExecution(Network network, DeployDestination dest) throws ResourceUnavailableException;
+ public boolean completeAggregatedExecution(Network network, DeployDestination dest) throws ResourceUnavailableException;
+ public boolean cleanupAggregatedExecution(Network network, DeployDestination dest) throws ResourceUnavailableException;
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f45de30d/core/src/com/cloud/agent/api/routing/AggregationControlCommand.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/routing/AggregationControlCommand.java b/core/src/com/cloud/agent/api/routing/AggregationControlCommand.java
new file mode 100644
index 0000000..ef75360
--- /dev/null
+++ b/core/src/com/cloud/agent/api/routing/AggregationControlCommand.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 com.cloud.agent.api.routing;
+
+public class AggregationControlCommand extends NetworkElementCommand{
+ public enum Action {
+ Start,
+ Finish,
+ Cleanup,
+ }
+
+ private Action action;
+
+ protected AggregationControlCommand() {
+ super();
+ }
+
+ public AggregationControlCommand(Action action, String name, String ip, String guestIp) {
+ super();
+ this.action = action;
+ this.setAccessDetail(NetworkElementCommand.ROUTER_NAME, name);
+ this.setAccessDetail(NetworkElementCommand.ROUTER_IP, ip);
+ this.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, guestIp);
+ }
+
+ public Action getAction() {
+ return action;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f45de30d/core/src/com/cloud/agent/api/routing/FinishAggregationCommand.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/routing/FinishAggregationCommand.java b/core/src/com/cloud/agent/api/routing/FinishAggregationCommand.java
deleted file mode 100644
index bfafccd..0000000
--- a/core/src/com/cloud/agent/api/routing/FinishAggregationCommand.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// 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 com.cloud.agent.api.routing;
-
-public class FinishAggregationCommand extends NetworkElementCommand{
- protected FinishAggregationCommand() {
- super();
- }
-
- public FinishAggregationCommand(String name, String ip, String guestIp) {
- super();
- this.setAccessDetail(NetworkElementCommand.ROUTER_NAME, name);
- this.setAccessDetail(NetworkElementCommand.ROUTER_IP, ip);
- this.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, guestIp);
- }
-}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f45de30d/core/src/com/cloud/agent/api/routing/StartAggregationCommand.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/routing/StartAggregationCommand.java b/core/src/com/cloud/agent/api/routing/StartAggregationCommand.java
deleted file mode 100644
index fbf97a8..0000000
--- a/core/src/com/cloud/agent/api/routing/StartAggregationCommand.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// 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 com.cloud.agent.api.routing;
-
-public class StartAggregationCommand extends NetworkElementCommand{
- protected StartAggregationCommand() {
- super();
- }
-
- public StartAggregationCommand(String name, String ip, String guestIp) {
- super();
- this.setAccessDetail(NetworkElementCommand.ROUTER_NAME, name);
- this.setAccessDetail(NetworkElementCommand.ROUTER_IP, ip);
- this.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, guestIp);
- }
-}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f45de30d/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
index 29a176a..3712aba 100755
--- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
+++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
@@ -25,11 +25,12 @@ import com.cloud.agent.api.CheckS2SVpnConnectionsCommand;
import com.cloud.agent.api.GetDomRVersionAnswer;
import com.cloud.agent.api.GetDomRVersionCmd;
import com.cloud.agent.api.SetupGuestNetworkCommand;
+import com.cloud.agent.api.routing.AggregationControlCommand;
+import com.cloud.agent.api.routing.AggregationControlCommand.Action;
import com.cloud.agent.api.routing.CreateIpAliasCommand;
import com.cloud.agent.api.routing.DeleteIpAliasCommand;
import com.cloud.agent.api.routing.DhcpEntryCommand;
import com.cloud.agent.api.routing.DnsMasqConfigCommand;
-import com.cloud.agent.api.routing.FinishAggregationCommand;
import com.cloud.agent.api.routing.GroupAnswer;
import com.cloud.agent.api.routing.IpAliasTO;
import com.cloud.agent.api.routing.IpAssocCommand;
@@ -47,7 +48,6 @@ import com.cloud.agent.api.routing.SetSourceNatCommand;
import com.cloud.agent.api.routing.SetStaticNatRulesCommand;
import com.cloud.agent.api.routing.SetStaticRouteCommand;
import com.cloud.agent.api.routing.Site2SiteVpnCfgCommand;
-import com.cloud.agent.api.routing.StartAggregationCommand;
import com.cloud.agent.api.routing.VmDataCommand;
import com.cloud.agent.api.routing.VpnUsersCfgCommand;
import com.cloud.agent.api.to.DhcpTO;
@@ -163,10 +163,8 @@ public class VirtualRoutingResource {
return executeQueryCommand(cmd);
}
- if (cmd instanceof StartAggregationCommand) {
- return execute((StartAggregationCommand)cmd);
- } else if (cmd instanceof FinishAggregationCommand) {
- return execute((FinishAggregationCommand)cmd);
+ if (cmd instanceof AggregationControlCommand) {
+ return execute((AggregationControlCommand)cmd);
}
if (_vrAggregateCommandsSet.containsKey(routerName)) {
@@ -1032,15 +1030,6 @@ public class VirtualRoutingResource {
return false;
}
- private Answer execute(StartAggregationCommand cmd) {
- // Access IP would be used as ID for router
- String routerName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
- assert routerName != null;
- Queue<NetworkElementCommand> queue = new LinkedBlockingQueue<>();
- _vrAggregateCommandsSet.put(routerName, queue);
- return new Answer(cmd);
- }
-
private List<ConfigItem> generateCommandCfg(NetworkElementCommand cmd) {
List<ConfigItem> cfg;
if (cmd instanceof SetPortForwardingRulesVpcCommand) {
@@ -1091,51 +1080,70 @@ public class VirtualRoutingResource {
return cfg;
}
- private Answer execute(FinishAggregationCommand cmd) {
+ private Answer execute(AggregationControlCommand cmd) {
+ Action action = cmd.getAction();
String routerName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
assert routerName != null;
assert cmd.getRouterAccessIp() != null;
- Queue<NetworkElementCommand> queue = _vrAggregateCommandsSet.get(routerName);
- try {
- StringBuilder sb = new StringBuilder();
- sb.append("#Apache CloudStack Virtual Router Config File\n");
- sb.append("<version>\n" + _cfgVersion + "\n</version>\n");
- for (NetworkElementCommand command : queue) {
- List<ConfigItem> cfg = generateCommandCfg(command);
- if (cfg == null) {
- s_logger.warn("Unknown commands for VirtualRoutingResource, but continue: " + cmd.toString());
- continue;
- }
- for (ConfigItem c : cfg) {
- if (c.isFile()) {
- sb.append("<file>\n");
- sb.append(c.getFilePath() + c.getFileName() + "\n");
- sb.append(c.getFileContents() + "\n");
- sb.append("</file>\n");
- } else {
- sb.append("<script>\n");
- sb.append("/opt/cloud/bin/" + c.getScript() + " " + c.getArgs() + "\n");
- sb.append("</script>\n");
+ if (action == Action.Start) {
+ assert (!_vrAggregateCommandsSet.containsKey(routerName));
+
+ Queue<NetworkElementCommand> queue = new LinkedBlockingQueue<>();
+ _vrAggregateCommandsSet.put(routerName, queue);
+ return new Answer(cmd);
+ } else if (action == Action.Finish) {
+ Queue<NetworkElementCommand> queue = _vrAggregateCommandsSet.get(routerName);
+ try {
+ StringBuilder sb = new StringBuilder();
+ sb.append("#Apache CloudStack Virtual Router Config File\n");
+ sb.append("<version>\n" + _cfgVersion + "\n</version>\n");
+ for (NetworkElementCommand command : queue) {
+ List<ConfigItem> cfg = generateCommandCfg(command);
+ if (cfg == null) {
+ s_logger.warn("Unknown commands for VirtualRoutingResource, but continue: " + cmd.toString());
+ continue;
+ }
+
+ for (ConfigItem c : cfg) {
+ if (c.isFile()) {
+ sb.append("<file>\n");
+ sb.append(c.getFilePath() + c.getFileName() + "\n");
+ sb.append(c.getFileContents() + "\n");
+ sb.append("</file>\n");
+ } else {
+ sb.append("<script>\n");
+ sb.append("/opt/cloud/bin/" + c.getScript() + " " + c.getArgs() + "\n");
+ sb.append("</script>\n");
+ }
}
}
+ String cfgFilePath = "/var/cache/cloud/";
+ String cfgFileName = "VR-"+ UUID.randomUUID().toString() + ".cfg";
+ ExecutionResult result = _vrDeployer.createFileInVR(cmd.getRouterAccessIp(), cfgFilePath, cfgFileName, sb.toString());
+ if (!result.isSuccess()) {
+ return new Answer(cmd, false, result.getDetails());
+ }
+
+ result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.VR_CFG, "-c " + cfgFilePath + cfgFileName);
+ if (!result.isSuccess()) {
+ return new Answer(cmd, false, result.getDetails());
+ }
+ return new Answer(cmd);
+ } finally {
+ queue.clear();
+ _vrAggregateCommandsSet.remove(routerName);
}
- String cfgFilePath = "/var/cache/cloud/";
- String cfgFileName = "VR-"+ UUID.randomUUID().toString() + ".cfg";
- ExecutionResult result = _vrDeployer.createFileInVR(cmd.getRouterAccessIp(), cfgFilePath, cfgFileName, sb.toString());
- if (!result.isSuccess()) {
- return new Answer(cmd, false, result.getDetails());
+ } else if (action == Action.Cleanup) {
+ assert (_vrAggregateCommandsSet.containsKey(routerName));
+ Queue<NetworkElementCommand> queue = _vrAggregateCommandsSet.get(routerName);
+ if (queue != null) {
+ queue.clear();
}
+ _vrAggregateCommandsSet.remove(routerName);
- result = _vrDeployer.executeInVR(cmd.getRouterAccessIp(), VRScripts.VR_CFG, "-c " + cfgFilePath + cfgFileName);
- if (!result.isSuccess()) {
- return new Answer(cmd, false, result.getDetails());
- }
return new Answer(cmd);
- } finally {
- queue.clear();
- _vrAggregateCommandsSet.remove(routerName);
}
+ return new Answer(cmd, false, "Fail to recongize aggregation action " + action.toString());
}
-
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f45de30d/core/test/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResourceTest.java
----------------------------------------------------------------------
diff --git a/core/test/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResourceTest.java b/core/test/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResourceTest.java
index 4737019..48da1bb 100644
--- a/core/test/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResourceTest.java
+++ b/core/test/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResourceTest.java
@@ -19,11 +19,12 @@ package com.cloud.agent.resource.virtualnetwork;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.BumpUpPriorityCommand;
import com.cloud.agent.api.SetupGuestNetworkCommand;
+import com.cloud.agent.api.routing.AggregationControlCommand;
+import com.cloud.agent.api.routing.AggregationControlCommand.Action;
import com.cloud.agent.api.routing.CreateIpAliasCommand;
import com.cloud.agent.api.routing.DeleteIpAliasCommand;
import com.cloud.agent.api.routing.DhcpEntryCommand;
import com.cloud.agent.api.routing.DnsMasqConfigCommand;
-import com.cloud.agent.api.routing.FinishAggregationCommand;
import com.cloud.agent.api.routing.GroupAnswer;
import com.cloud.agent.api.routing.IpAliasTO;
import com.cloud.agent.api.routing.IpAssocCommand;
@@ -41,7 +42,6 @@ import com.cloud.agent.api.routing.SetSourceNatCommand;
import com.cloud.agent.api.routing.SetStaticNatRulesCommand;
import com.cloud.agent.api.routing.SetStaticRouteCommand;
import com.cloud.agent.api.routing.Site2SiteVpnCfgCommand;
-import com.cloud.agent.api.routing.StartAggregationCommand;
import com.cloud.agent.api.routing.VmDataCommand;
import com.cloud.agent.api.routing.VpnUsersCfgCommand;
import com.cloud.agent.api.to.DhcpTO;
@@ -84,7 +84,6 @@ public class VirtualRoutingResourceTest implements VirtualRouterDeployer {
NetworkElementCommand _currentCmd;
int _count;
String _file;
- boolean _aggregated = false;
String ROUTERIP = "169.254.3.4";
String ROUTERGUESTIP = "10.200.1.1";
@@ -138,8 +137,8 @@ public class VirtualRoutingResourceTest implements VirtualRouterDeployer {
}
private void verifyFile(NetworkElementCommand cmd, String path, String filename, String content) {
- if (cmd instanceof FinishAggregationCommand) {
- verifyFile((FinishAggregationCommand)cmd, path, filename, content);
+ if (cmd instanceof AggregationControlCommand) {
+ verifyFile((AggregationControlCommand)cmd, path, filename, content);
} else if (cmd instanceof LoadBalancerConfigCommand) {
verifyFile((LoadBalancerConfigCommand)cmd, path, filename, content);
}
@@ -190,10 +189,8 @@ public class VirtualRoutingResourceTest implements VirtualRouterDeployer {
verifyArgs((IpAssocCommand)cmd, script, args);
}
- if (cmd instanceof StartAggregationCommand) {
- return;
- } else if (cmd instanceof FinishAggregationCommand) {
- verifyArgs((FinishAggregationCommand)cmd, script, args);
+ if (cmd instanceof AggregationControlCommand) {
+ verifyArgs((AggregationControlCommand)cmd, script, args);
}
}
@@ -948,7 +945,7 @@ public class VirtualRoutingResourceTest implements VirtualRouterDeployer {
@Test
public void testAggregationCommands() {
List<NetworkElementCommand> cmds = new LinkedList<>();
- StartAggregationCommand startCmd = new StartAggregationCommand(ROUTERNAME, ROUTERIP, ROUTERGUESTIP);
+ AggregationControlCommand startCmd = new AggregationControlCommand(Action.Start, ROUTERNAME, ROUTERIP, ROUTERGUESTIP);
cmds.add(startCmd);
cmds.add(generateIpAssocCommand());
cmds.add(generateIpAssocVpcCommand());
@@ -979,26 +976,22 @@ public class VirtualRoutingResourceTest implements VirtualRouterDeployer {
cmds.add(generateSavePasswordCommand());
cmds.add(generateVmDataCommand());
- FinishAggregationCommand finishCmd = new FinishAggregationCommand(ROUTERNAME, ROUTERIP, ROUTERGUESTIP);
+ AggregationControlCommand finishCmd = new AggregationControlCommand(Action.Finish, ROUTERNAME, ROUTERIP, ROUTERGUESTIP);
cmds.add(finishCmd);
for (NetworkElementCommand cmd : cmds) {
Answer answer = _resource.executeRequest(cmd);
- if (!(cmd instanceof FinishAggregationCommand)) {
- assertTrue(answer.getResult());
- } else {
-
- }
+ assertTrue(answer.getResult());
}
}
- private void verifyArgs(FinishAggregationCommand cmd, String script, String args) {
+ private void verifyArgs(AggregationControlCommand cmd, String script, String args) {
assertEquals(script, VRScripts.VR_CFG);
assertTrue(args.startsWith("-c /var/cache/cloud/VR-"));
assertTrue(args.endsWith(".cfg"));
}
- protected void verifyFile(FinishAggregationCommand cmd, String path, String filename, String content) {
+ protected void verifyFile(AggregationControlCommand cmd, String path, String filename, String content) {
assertEquals(path, "/var/cache/cloud/");
assertTrue(filename.startsWith("VR-"));
assertTrue(filename.endsWith(".cfg"));
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f45de30d/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
index 7853c3b..e36dc62 100755
--- a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
@@ -16,37 +16,6 @@
// under the License.
package org.apache.cloudstack.engine.orchestration;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
-import javax.ejb.Local;
-import javax.inject.Inject;
-import javax.naming.ConfigurationException;
-
-import org.apache.cloudstack.acl.ControlledEntity.ACLType;
-import org.apache.cloudstack.context.CallContext;
-import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
-import org.apache.cloudstack.framework.config.ConfigDepot;
-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.managed.context.ManagedContextRunnable;
-import org.apache.cloudstack.region.PortableIpDao;
-import org.apache.log4j.Logger;
-
import com.cloud.agent.AgentManager;
import com.cloud.agent.Listener;
import com.cloud.agent.api.AgentControlAnswer;
@@ -127,6 +96,7 @@ import com.cloud.network.dao.PhysicalNetworkServiceProviderDao;
import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao;
import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO;
import com.cloud.network.dao.PhysicalNetworkVO;
+import com.cloud.network.element.AggregatedCommandExecutor;
import com.cloud.network.element.DhcpServiceProvider;
import com.cloud.network.element.IpDeployer;
import com.cloud.network.element.LoadBalancingServiceProvider;
@@ -199,6 +169,35 @@ import com.cloud.vm.dao.NicSecondaryIpDao;
import com.cloud.vm.dao.NicSecondaryIpVO;
import com.cloud.vm.dao.UserVmDao;
import com.cloud.vm.dao.VMInstanceDao;
+import org.apache.cloudstack.acl.ControlledEntity.ACLType;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
+import org.apache.cloudstack.framework.config.ConfigDepot;
+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.managed.context.ManagedContextRunnable;
+import org.apache.cloudstack.region.PortableIpDao;
+import org.apache.log4j.Logger;
+
+import javax.ejb.Local;
+import javax.inject.Inject;
+import javax.naming.ConfigurationException;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
/**
* NetworkManagerImpl implements NetworkManager.
@@ -1068,15 +1067,41 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
}
}
- // reapply all the firewall/staticNat/lb rules
- s_logger.debug("Reprogramming network " + network + " as a part of network implement");
- if (!reprogramNetworkRules(network.getId(), CallContext.current().getCallingAccount(), network)) {
- s_logger.warn("Failed to re-program the network as a part of network " + network + " implement");
- // see DataCenterVO.java
- ResourceUnavailableException ex = new ResourceUnavailableException("Unable to apply network rules as a part of network " + network + " implement", DataCenter.class,
- network.getDataCenterId());
- ex.addProxyObject(_entityMgr.findById(DataCenter.class, network.getDataCenterId()).getUuid());
- throw ex;
+ for (NetworkElement element : networkElements) {
+ if ((element instanceof AggregatedCommandExecutor) && (providersToImplement.contains(element.getProvider()))) {
+ ((AggregatedCommandExecutor)element).prepareAggregatedExecution(network, dest);
+ }
+ }
+
+ try {
+ // reapply all the firewall/staticNat/lb rules
+ s_logger.debug("Reprogramming network " + network + " as a part of network implement");
+ if (!reprogramNetworkRules(network.getId(), CallContext.current().getCallingAccount(), network)) {
+ s_logger.warn("Failed to re-program the network as a part of network " + network + " implement");
+ // see DataCenterVO.java
+ ResourceUnavailableException ex = new ResourceUnavailableException("Unable to apply network rules as a part of network " + network + " implement", DataCenter.class,
+ network.getDataCenterId());
+ ex.addProxyObject(_entityMgr.findById(DataCenter.class, network.getDataCenterId()).getUuid());
+ throw ex;
+ }
+ for (NetworkElement element : networkElements) {
+ if ((element instanceof AggregatedCommandExecutor) && (providersToImplement.contains(element.getProvider()))) {
+ if (!((AggregatedCommandExecutor)element).completeAggregatedExecution(network, dest)) {
+ s_logger.warn("Failed to re-program the network as a part of network " + network + " implement due to aggregated commands execution failure!");
+ // see DataCenterVO.java
+ ResourceUnavailableException ex = new ResourceUnavailableException("Unable to apply network rules as a part of network " + network + " implement", DataCenter.class,
+ network.getDataCenterId());
+ ex.addProxyObject(_entityMgr.findById(DataCenter.class, network.getDataCenterId()).getUuid());
+ throw ex;
+ }
+ }
+ }
+ } finally {
+ for (NetworkElement element : networkElements) {
+ if ((element instanceof AggregatedCommandExecutor) && (providersToImplement.contains(element.getProvider()))) {
+ ((AggregatedCommandExecutor)element).cleanupAggregatedExecution(network, dest);
+ }
+ }
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f45de30d/server/src/com/cloud/network/element/VirtualRouterElement.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java
index 455e75f..3f4ba5b 100755
--- a/server/src/com/cloud/network/element/VirtualRouterElement.java
+++ b/server/src/com/cloud/network/element/VirtualRouterElement.java
@@ -16,26 +16,6 @@
// under the License.
package com.cloud.network.element;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.ejb.Local;
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import com.google.gson.Gson;
-
-import org.apache.cloudstack.api.command.admin.router.ConfigureOvsElementCmd;
-import org.apache.cloudstack.api.command.admin.router.ConfigureVirtualRouterElementCmd;
-import org.apache.cloudstack.api.command.admin.router.CreateVirtualRouterElementCmd;
-import org.apache.cloudstack.api.command.admin.router.ListOvsElementsCmd;
-import org.apache.cloudstack.api.command.admin.router.ListVirtualRouterElementsCmd;
-import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
-
import com.cloud.agent.api.to.LoadBalancerTO;
import com.cloud.configuration.ConfigurationManager;
import com.cloud.dc.DataCenter;
@@ -101,6 +81,22 @@ import com.cloud.vm.VirtualMachine.State;
import com.cloud.vm.VirtualMachineProfile;
import com.cloud.vm.dao.DomainRouterDao;
import com.cloud.vm.dao.UserVmDao;
+import com.google.gson.Gson;
+import org.apache.cloudstack.api.command.admin.router.ConfigureOvsElementCmd;
+import org.apache.cloudstack.api.command.admin.router.ConfigureVirtualRouterElementCmd;
+import org.apache.cloudstack.api.command.admin.router.CreateVirtualRouterElementCmd;
+import org.apache.cloudstack.api.command.admin.router.ListOvsElementsCmd;
+import org.apache.cloudstack.api.command.admin.router.ListVirtualRouterElementsCmd;
+import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
+import org.apache.log4j.Logger;
+
+import javax.ejb.Local;
+import javax.inject.Inject;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
@Local(value = {NetworkElement.class, FirewallServiceProvider.class,
DhcpServiceProvider.class, UserDataServiceProvider.class,
@@ -110,7 +106,7 @@ import com.cloud.vm.dao.UserVmDao;
public class VirtualRouterElement extends AdapterBase implements VirtualRouterElementService, DhcpServiceProvider,
UserDataServiceProvider, SourceNatServiceProvider, StaticNatServiceProvider, FirewallServiceProvider,
LoadBalancingServiceProvider, PortForwardingServiceProvider, RemoteAccessVPNServiceProvider, IpDeployer,
- NetworkMigrationResponder {
+ NetworkMigrationResponder, AggregatedCommandExecutor {
private static final Logger s_logger = Logger.getLogger(VirtualRouterElement.class);
public static final AutoScaleCounterType AutoScaleCounterCpu = new AutoScaleCounterType("cpu");
public static final AutoScaleCounterType AutoScaleCounterMemory = new AutoScaleCounterType("memory");
@@ -1091,4 +1087,37 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
_userVmMgr.setupVmForPvlan(true, userVm.getHostId(), nic);
}
}
+
+ @Override
+ public boolean prepareAggregatedExecution(Network network, DeployDestination dest) throws ResourceUnavailableException {
+ List<DomainRouterVO> routers = getRouters(network, dest);
+
+ if ((routers == null) || (routers.size() == 0)) {
+ throw new ResourceUnavailableException("Can't find at least one router!", DataCenter.class, network.getDataCenterId());
+ }
+
+ return _routerMgr.prepareAggregatedExecution(network, routers);
+ }
+
+ @Override
+ public boolean completeAggregatedExecution(Network network, DeployDestination dest) throws ResourceUnavailableException {
+ List<DomainRouterVO> routers = getRouters(network, dest);
+
+ if ((routers == null) || (routers.size() == 0)) {
+ throw new ResourceUnavailableException("Can't find at least one router!", DataCenter.class, network.getDataCenterId());
+ }
+
+ return _routerMgr.completeAggregatedExecution(network, routers);
+ }
+
+ @Override
+ public boolean cleanupAggregatedExecution(Network network, DeployDestination dest) throws ResourceUnavailableException {
+ List<DomainRouterVO> routers = getRouters(network, dest);
+
+ if ((routers == null) || (routers.size() == 0)) {
+ throw new ResourceUnavailableException("Can't find at least one router!", DataCenter.class, network.getDataCenterId());
+ }
+
+ return _routerMgr.cleanupAggregatedExecution(network, routers);
+ }
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f45de30d/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java
index 9097b87..e3597ac 100644
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java
@@ -16,12 +16,8 @@
// under the License.
package com.cloud.network.router;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.cloudstack.framework.config.ConfigKey;
-
import com.cloud.deploy.DeployDestination;
+import com.cloud.exception.AgentUnavailableException;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.ResourceUnavailableException;
@@ -39,6 +35,10 @@ import com.cloud.utils.component.Manager;
import com.cloud.vm.DomainRouterVO;
import com.cloud.vm.NicProfile;
import com.cloud.vm.VirtualMachineProfile;
+import org.apache.cloudstack.framework.config.ConfigKey;
+
+import java.util.List;
+import java.util.Map;
/**
* NetworkManager manages the network for the different end users.
@@ -129,4 +129,10 @@ public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkA
boolean removeDhcpSupportForSubnet(Network network, List<DomainRouterVO> routers) throws ResourceUnavailableException;
boolean setupDhcpForPvlan(boolean add, DomainRouterVO router, Long hostId, NicProfile nic);
+
+ public boolean prepareAggregatedExecution(Network network, List<DomainRouterVO> routers) throws AgentUnavailableException;
+
+ public boolean completeAggregatedExecution(Network network, List<DomainRouterVO> routers) throws AgentUnavailableException;
+
+ public boolean cleanupAggregatedExecution(Network network, List<DomainRouterVO> routers) throws AgentUnavailableException;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f45de30d/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index 3c99867..74cfd74 100755
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -17,47 +17,6 @@
package com.cloud.network.router;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TimeZone;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
-import javax.ejb.Local;
-import javax.inject.Inject;
-import javax.naming.ConfigurationException;
-
-import org.apache.cloudstack.api.command.admin.router.RebootRouterCmd;
-import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd;
-import org.apache.cloudstack.api.command.admin.router.UpgradeRouterTemplateCmd;
-import org.apache.cloudstack.config.ApiServiceConfiguration;
-import org.apache.cloudstack.context.CallContext;
-import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
-import org.apache.cloudstack.framework.config.ConfigDepot;
-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.jobs.AsyncJobManager;
-import org.apache.cloudstack.framework.jobs.impl.AsyncJobVO;
-import org.apache.cloudstack.managed.context.ManagedContextRunnable;
-import org.apache.cloudstack.utils.identity.ManagementServerNode;
-import org.apache.log4j.Logger;
-
import com.cloud.agent.AgentManager;
import com.cloud.agent.Listener;
import com.cloud.agent.api.AgentControlAnswer;
@@ -78,6 +37,8 @@ import com.cloud.agent.api.PvlanSetupCommand;
import com.cloud.agent.api.StartupCommand;
import com.cloud.agent.api.check.CheckSshAnswer;
import com.cloud.agent.api.check.CheckSshCommand;
+import com.cloud.agent.api.routing.AggregationControlCommand;
+import com.cloud.agent.api.routing.AggregationControlCommand.Action;
import com.cloud.agent.api.routing.CreateIpAliasCommand;
import com.cloud.agent.api.routing.DeleteIpAliasCommand;
import com.cloud.agent.api.routing.DhcpEntryCommand;
@@ -277,6 +238,45 @@ import com.cloud.vm.dao.NicIpAliasVO;
import com.cloud.vm.dao.UserVmDao;
import com.cloud.vm.dao.UserVmDetailsDao;
import com.cloud.vm.dao.VMInstanceDao;
+import org.apache.cloudstack.api.command.admin.router.RebootRouterCmd;
+import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd;
+import org.apache.cloudstack.api.command.admin.router.UpgradeRouterTemplateCmd;
+import org.apache.cloudstack.config.ApiServiceConfiguration;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
+import org.apache.cloudstack.framework.config.ConfigDepot;
+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.jobs.AsyncJobManager;
+import org.apache.cloudstack.framework.jobs.impl.AsyncJobVO;
+import org.apache.cloudstack.managed.context.ManagedContextRunnable;
+import org.apache.cloudstack.utils.identity.ManagementServerNode;
+import org.apache.log4j.Logger;
+
+import javax.ejb.Local;
+import javax.inject.Inject;
+import javax.naming.ConfigurationException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TimeZone;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
/**
* VirtualNetworkApplianceManagerImpl manages the different types of virtual network appliances available in the Cloud Stack.
@@ -2320,12 +2320,20 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
final List<Long> routerGuestNtwkIds = _routerDao.getRouterNetworks(router.getId());
for (final Long guestNetworkId : routerGuestNtwkIds) {
+ AggregationControlCommand startCmd = new AggregationControlCommand(Action.Start, router.getInstanceName(), controlNic.getIp4Address(),
+ getRouterIpInNetwork(guestNetworkId, router.getId()));
+ cmds.addCommand(startCmd);
+
if (reprogramGuestNtwks) {
finalizeIpAssocForNetwork(cmds, router, provider, guestNetworkId, null);
finalizeNetworkRulesForNetwork(cmds, router, provider, guestNetworkId);
}
finalizeUserDataAndDhcpOnStart(cmds, router, provider, guestNetworkId);
+
+ AggregationControlCommand finishCmd = new AggregationControlCommand(Action.Finish, router.getInstanceName(), controlNic.getIp4Address(),
+ getRouterIpInNetwork(guestNetworkId, router.getId()));
+ cmds.addCommand(finishCmd);
}
@@ -2338,8 +2346,6 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
finalizeMonitorServiceOnStrat(cmds, profile, router, provider, routerGuestNtwkIds.get(0), false);
}
-
-
return true;
}
@@ -4259,4 +4265,31 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
}
}
}
+
+ protected boolean aggregationExecution(AggregationControlCommand.Action action, Network network, List<DomainRouterVO> routers) throws AgentUnavailableException {
+ for (DomainRouterVO router : routers) {
+ AggregationControlCommand cmd = new AggregationControlCommand(action, router.getInstanceName(), getRouterControlIp(router.getId()),
+ getRouterIpInNetwork(network.getId(), router.getId()));
+ Commands cmds = new Commands(cmd);
+ if (!sendCommandsToRouter(router, cmds)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean prepareAggregatedExecution(Network network, List<DomainRouterVO> routers) throws AgentUnavailableException {
+ return aggregationExecution(Action.Start, network, routers);
+ }
+
+ @Override
+ public boolean completeAggregatedExecution(Network network, List<DomainRouterVO> routers) throws AgentUnavailableException {
+ return aggregationExecution(Action.Finish, network, routers);
+ }
+
+ @Override
+ public boolean cleanupAggregatedExecution(Network network, List<DomainRouterVO> routers) throws AgentUnavailableException {
+ return aggregationExecution(Action.Cleanup, network, routers);
+ }
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f45de30d/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java
index e0c599d..cbed4ca 100644
--- a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java
+++ b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java
@@ -17,17 +17,8 @@
package com.cloud.vpc;
-import java.util.List;
-import java.util.Map;
-
-import javax.ejb.Local;
-import javax.naming.ConfigurationException;
-
-import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd;
-import org.apache.cloudstack.api.command.admin.router.UpgradeRouterTemplateCmd;
-import org.springframework.stereotype.Component;
-
import com.cloud.deploy.DeployDestination;
+import com.cloud.exception.AgentUnavailableException;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.ResourceUnavailableException;
@@ -53,6 +44,14 @@ import com.cloud.vm.DomainRouterVO;
import com.cloud.vm.NicProfile;
import com.cloud.vm.VirtualMachineProfile;
import com.cloud.vm.VirtualMachineProfile.Param;
+import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd;
+import org.apache.cloudstack.api.command.admin.router.UpgradeRouterTemplateCmd;
+import org.springframework.stereotype.Component;
+
+import javax.ejb.Local;
+import javax.naming.ConfigurationException;
+import java.util.List;
+import java.util.Map;
@Component
@Local(value = {VpcVirtualNetworkApplianceManager.class, VpcVirtualNetworkApplianceService.class})
@@ -420,6 +419,21 @@ public class MockVpcVirtualNetworkApplianceManager extends ManagerBase implement
}
@Override
+ public boolean prepareAggregatedExecution(Network network, List<DomainRouterVO> routers) throws AgentUnavailableException {
+ return true; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public boolean completeAggregatedExecution(Network network, List<DomainRouterVO> routers) throws AgentUnavailableException {
+ return true; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public boolean cleanupAggregatedExecution(Network network, List<DomainRouterVO> routers) throws AgentUnavailableException {
+ return true; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
public boolean startRemoteAccessVpn(RemoteAccessVpn vpn, VirtualRouter router) throws ResourceUnavailableException {
// TODO Auto-generated method stub
return false;
[3/3] git commit: updated refs/heads/master to 3e097a0
Posted by ya...@apache.org.
CLOUDSTACK-5779: Clean up leftover VR script in Xen
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/3e097a0f
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/3e097a0f
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/3e097a0f
Branch: refs/heads/master
Commit: 3e097a0fb289971dc2fc509e0ab5ed78b64cf81b
Parents: f45de30
Author: Sheng Yang <sh...@citrix.com>
Authored: Tue Mar 11 13:22:14 2014 -0700
Committer: Sheng Yang <sh...@citrix.com>
Committed: Tue Mar 11 13:22:14 2014 -0700
----------------------------------------------------------------------
.../vm/hypervisor/xenserver/createipAlias.sh | 25 --------------------
.../vm/hypervisor/xenserver/deleteipAlias.sh | 24 -------------------
scripts/vm/hypervisor/xenserver/vmops | 16 -------------
scripts/vm/hypervisor/xenserver/xcposs/patch | 12 ----------
scripts/vm/hypervisor/xenserver/xcpserver/patch | 9 -------
.../vm/hypervisor/xenserver/xenserver56/patch | 7 ------
.../hypervisor/xenserver/xenserver56fp1/patch | 7 ------
.../vm/hypervisor/xenserver/xenserver60/patch | 7 ------
.../vm/hypervisor/xenserver/xenserver62/patch | 7 ------
9 files changed, 114 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3e097a0f/scripts/vm/hypervisor/xenserver/createipAlias.sh
----------------------------------------------------------------------
diff --git a/scripts/vm/hypervisor/xenserver/createipAlias.sh b/scripts/vm/hypervisor/xenserver/createipAlias.sh
deleted file mode 100755
index 4ef6618..0000000
--- a/scripts/vm/hypervisor/xenserver/createipAlias.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env bash
-# 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.
-
-
-usage() {
- printf " %s routerip <alias_count:ip:netmask;alias_count2:ip2:netmask2;....> \n" $(basename $0) >&2
-}
-
-cert="/root/.ssh/id_rsa.cloud"
-ssh -p 3922 -q -o StrictHostKeyChecking=no -i $cert root@$1 "/root/createIpAlias.sh $2"
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3e097a0f/scripts/vm/hypervisor/xenserver/deleteipAlias.sh
----------------------------------------------------------------------
diff --git a/scripts/vm/hypervisor/xenserver/deleteipAlias.sh b/scripts/vm/hypervisor/xenserver/deleteipAlias.sh
deleted file mode 100644
index 7604172..0000000
--- a/scripts/vm/hypervisor/xenserver/deleteipAlias.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env bash
-# 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.
-
-usage() {
- printf " %s routerip <alias_count:ip:netmask;alias_count2:ip2:netmask2;....> \n" $(basename $0) >&2
-}
-
-cert="/root/.ssh/id_rsa.cloud"
-ssh -p 3922 -q -o StrictHostKeyChecking=no -i $cert root@$1 "/root/deleteIpAlias.sh $2 $3"
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3e097a0f/scripts/vm/hypervisor/xenserver/vmops
----------------------------------------------------------------------
diff --git a/scripts/vm/hypervisor/xenserver/vmops b/scripts/vm/hypervisor/xenserver/vmops
index 2f0f347..4174ef2 100755
--- a/scripts/vm/hypervisor/xenserver/vmops
+++ b/scripts/vm/hypervisor/xenserver/vmops
@@ -163,21 +163,6 @@ def pingtest(session, args):
return txt
@echo
-def savePassword(session, args):
- sargs = args['args']
- cmd = sargs.split(' ')
- cmd.insert(0, "/opt/cloud/bin/save_password_to_domr.sh")
- cmd.insert(0, "/bin/bash")
- try:
- txt = util.pread2(cmd)
- txt = 'success'
- except:
- logging.debug(" save password to domr failed " )
- txt = ''
-
- return txt
-
-@echo
def setLinkLocalIP(session, args):
brName = args['brName']
try:
@@ -1520,7 +1505,6 @@ if __name__ == "__main__":
XenAPIPlugin.dispatch({"pingtest": pingtest, "setup_iscsi":setup_iscsi, "gethostvmstats": gethostvmstats,
"getgateway": getgateway, "preparemigration": preparemigration,
"setIptables": setIptables, "pingdomr": pingdomr, "pingxenserver": pingxenserver,
- "savePassword": savePassword,
"routerProxy": routerProxy,
"createFile": createFile, "deleteFile": deleteFile,
"network_rules":network_rules,
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3e097a0f/scripts/vm/hypervisor/xenserver/xcposs/patch
----------------------------------------------------------------------
diff --git a/scripts/vm/hypervisor/xenserver/xcposs/patch b/scripts/vm/hypervisor/xenserver/xcposs/patch
index 2f902c2..08da883 100644
--- a/scripts/vm/hypervisor/xenserver/xcposs/patch
+++ b/scripts/vm/hypervisor/xenserver/xcposs/patch
@@ -39,13 +39,6 @@ setupxenserver.sh=..,0755,/opt/cloud/bin
make_migratable.sh=..,0755,/opt/cloud/bin
setup_iscsi.sh=..,0755,/opt/cloud/bin
pingtest.sh=../../..,0755,/opt/cloud/bin
-dhcp_entry.sh=../../../../network/domr/,0755,/opt/cloud/bin
-ipassoc.sh=../../../../network/domr/,0755,/opt/cloud/bin
-save_password_to_domr.sh=../../../../network/domr/,0755,/opt/cloud/bin
-networkUsage.sh=../../../../network/domr/,0755,/opt/cloud/bin
-call_firewall.sh=../../../../network/domr/,0755,/opt/cloud/bin
-call_loadbalancer.sh=../../../../network/domr/,0755,/opt/cloud/bin
-l2tp_vpn.sh=../../../../network/domr/,0755,/opt/cloud/bin
cloud-setup-bonding.sh=..,0755,/opt/cloud/bin
copy_vhd_to_secondarystorage.sh=..,0755,/opt/cloud/bin
copy_vhd_from_secondarystorage.sh=..,0755,/opt/cloud/bin
@@ -60,12 +53,7 @@ create_privatetemplate_from_snapshot.sh=..,0755,/opt/cloud/bin
upgrade_snapshot.sh=..,0755,/opt/cloud/bin
cloud-clean-vlan.sh=..,0755,/opt/cloud/bin
cloud-prepare-upgrade.sh=..,0755,/opt/cloud/bin
-getRouterStatus.sh=../../../../network/domr/,0755,/opt/cloud/bin
-bumpUpPriority.sh=../../../../network/domr/,0755,/opt/cloud/bin
-getDomRVersion.sh=../../../../network/domr/,0755,/opt/cloud/bin
router_proxy.sh=../../../../network/domr/,0755,/opt/cloud/bin
-createipAlias.sh=..,0755,/opt/cloud/bin
-deleteipAlias.sh=..,0755,/opt/cloud/bin
###add cloudstack plugin script for XCP
cloudstack_plugins.conf=..,0644,/etc/xensource
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3e097a0f/scripts/vm/hypervisor/xenserver/xcpserver/patch
----------------------------------------------------------------------
diff --git a/scripts/vm/hypervisor/xenserver/xcpserver/patch b/scripts/vm/hypervisor/xenserver/xcpserver/patch
index 01cd73b..2376424 100644
--- a/scripts/vm/hypervisor/xenserver/xcpserver/patch
+++ b/scripts/vm/hypervisor/xenserver/xcpserver/patch
@@ -39,13 +39,7 @@ setupxenserver.sh=..,0755,/opt/cloud/bin
make_migratable.sh=..,0755,/opt/cloud/bin
setup_iscsi.sh=..,0755,/opt/cloud/bin
pingtest.sh=../../..,0755,/opt/cloud/bin
-dhcp_entry.sh=../../../../network/domr/,0755,/opt/cloud/bin
-createipAlias.sh=..,0755,/opt/cloud/bin
-deleteipAlias.sh=..,0755,/opt/cloud/bin
router_proxy.sh=../../../../network/domr/,0755,/opt/cloud/bin
-save_password_to_domr.sh=../../../../network/domr/,0755,/opt/cloud/bin
-call_firewall.sh=../../../../network/domr/,0755,/opt/cloud/bin
-call_loadbalancer.sh=../../../../network/domr/,0755,/opt/cloud/bin
cloud-setup-bonding.sh=..,0755,/opt/cloud/bin
copy_vhd_to_secondarystorage.sh=..,0755,/opt/cloud/bin
copy_vhd_from_secondarystorage.sh=..,0755,/opt/cloud/bin
@@ -60,9 +54,6 @@ create_privatetemplate_from_snapshot.sh=..,0755,/opt/cloud/bin
upgrade_snapshot.sh=..,0755,/opt/cloud/bin
cloud-clean-vlan.sh=..,0755,/opt/cloud/bin
cloud-prepare-upgrade.sh=..,0755,/opt/cloud/bin
-getRouterStatus.sh=../../../../network/domr/,0755,/opt/cloud/bin
-bumpUpPriority.sh=../../../../network/domr/,0755,/opt/cloud/bin
-getDomRVersion.sh=../../../../network/domr/,0755,/opt/cloud/bin
add_to_vcpus_params_live.sh=..,0755,/opt/cloud/bin
###add cloudstack plugin script for XCP
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3e097a0f/scripts/vm/hypervisor/xenserver/xenserver56/patch
----------------------------------------------------------------------
diff --git a/scripts/vm/hypervisor/xenserver/xenserver56/patch b/scripts/vm/hypervisor/xenserver/xenserver56/patch
index 9473bca..16dcb57 100644
--- a/scripts/vm/hypervisor/xenserver/xenserver56/patch
+++ b/scripts/vm/hypervisor/xenserver/xenserver56/patch
@@ -39,12 +39,6 @@ make_migratable.sh=..,0755,/opt/cloud/bin
setup_iscsi.sh=..,0755,/opt/cloud/bin
cloud-setup-bonding.sh=..,0755,/opt/cloud/bin
pingtest.sh=../../..,0755,/opt/cloud/bin
-createipAlias.sh=..,0755,/opt/cloud/bin
-deleteipAlias.sh=..,0755,/opt/cloud/bin
-dhcp_entry.sh=../../../../network/domr/,0755,/opt/cloud/bin
-save_password_to_domr.sh=../../../../network/domr/,0755,/opt/cloud/bin
-call_firewall.sh=../../../../network/domr/,0755,/opt/cloud/bin
-call_loadbalancer.sh=../../../../network/domr/,0755,/opt/cloud/bin
router_proxy.sh=../../../../network/domr/,0755,/opt/cloud/bin
copy_vhd_to_secondarystorage.sh=..,0755,/opt/cloud/bin
copy_vhd_from_secondarystorage.sh=..,0755,/opt/cloud/bin
@@ -61,7 +55,6 @@ create_privatetemplate_from_snapshot.sh=..,0755,/opt/cloud/bin
upgrade_snapshot.sh=..,0755,/opt/cloud/bin
cloud-clean-vlan.sh=..,0755,/opt/cloud/bin
cloud-prepare-upgrade.sh=..,0755,/opt/cloud/bin
-bumpUpPriority.sh=../../../../network/domr/,0755,/opt/cloud/bin
swift=..,0755,/opt/cloud/bin
swiftxen=..,0755,/etc/xapi.d/plugins
s3xen=..,0755,/etc/xapi.d/plugins
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3e097a0f/scripts/vm/hypervisor/xenserver/xenserver56fp1/patch
----------------------------------------------------------------------
diff --git a/scripts/vm/hypervisor/xenserver/xenserver56fp1/patch b/scripts/vm/hypervisor/xenserver/xenserver56fp1/patch
index c91aa73..11bda07 100644
--- a/scripts/vm/hypervisor/xenserver/xenserver56fp1/patch
+++ b/scripts/vm/hypervisor/xenserver/xenserver56fp1/patch
@@ -38,12 +38,6 @@ setupxenserver.sh=..,0755,/opt/cloud/bin
make_migratable.sh=..,0755,/opt/cloud/bin
setup_iscsi.sh=..,0755,/opt/cloud/bin
pingtest.sh=../../..,0755,/opt/cloud/bin
-createipAlias.sh=..,0755,/opt/cloud/bin
-deleteipAlias.sh=..,0755,/opt/cloud/bin
-dhcp_entry.sh=../../../../network/domr/,0755,/opt/cloud/bin
-save_password_to_domr.sh=../../../../network/domr/,0755,/opt/cloud/bin
-call_firewall.sh=../../../../network/domr/,0755,/opt/cloud/bin
-call_loadbalancer.sh=../../../../network/domr/,0755,/opt/cloud/bin
router_proxy.sh=../../../../network/domr/,0755,/opt/cloud/bin
cloud-setup-bonding.sh=..,0755,/opt/cloud/bin
copy_vhd_to_secondarystorage.sh=..,0755,/opt/cloud/bin
@@ -60,7 +54,6 @@ create_privatetemplate_from_snapshot.sh=..,0755,/opt/cloud/bin
upgrade_snapshot.sh=..,0755,/opt/cloud/bin
cloud-clean-vlan.sh=..,0755,/opt/cloud/bin
cloud-prepare-upgrade.sh=..,0755,/opt/cloud/bin
-bumpUpPriority.sh=../../../../network/domr/,0755,/opt/cloud/bin
swift=..,0755,/opt/cloud/bin
swiftxen=..,0755,/etc/xapi.d/plugins
s3xen=..,0755,/etc/xapi.d/plugins
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3e097a0f/scripts/vm/hypervisor/xenserver/xenserver60/patch
----------------------------------------------------------------------
diff --git a/scripts/vm/hypervisor/xenserver/xenserver60/patch b/scripts/vm/hypervisor/xenserver/xenserver60/patch
index 5a648e0..662327b 100644
--- a/scripts/vm/hypervisor/xenserver/xenserver60/patch
+++ b/scripts/vm/hypervisor/xenserver/xenserver60/patch
@@ -40,14 +40,8 @@ id_rsa.cloud=../../../systemvm,0600,/root/.ssh
network_info.sh=..,0755,/opt/cloud/bin
setupxenserver.sh=..,0755,/opt/cloud/bin
make_migratable.sh=..,0755,/opt/cloud/bin
-createipAlias.sh=..,0755,/opt/cloud/bin
-deleteipAlias.sh=..,0755,/opt/cloud/bin
setup_iscsi.sh=..,0755,/opt/cloud/bin
pingtest.sh=../../..,0755,/opt/cloud/bin
-dhcp_entry.sh=../../../../network/domr/,0755,/opt/cloud/bin
-save_password_to_domr.sh=../../../../network/domr/,0755,/opt/cloud/bin
-call_firewall.sh=../../../../network/domr/,0755,/opt/cloud/bin
-call_loadbalancer.sh=../../../../network/domr/,0755,/opt/cloud/bin
router_proxy.sh=../../../../network/domr/,0755,/opt/cloud/bin
cloud-setup-bonding.sh=..,0755,/opt/cloud/bin
copy_vhd_to_secondarystorage.sh=..,0755,/opt/cloud/bin
@@ -64,7 +58,6 @@ create_privatetemplate_from_snapshot.sh=..,0755,/opt/cloud/bin
upgrade_snapshot.sh=..,0755,/opt/cloud/bin
cloud-clean-vlan.sh=..,0755,/opt/cloud/bin
cloud-prepare-upgrade.sh=..,0755,/opt/cloud/bin
-bumpUpPriority.sh=../../../../network/domr/,0755,/opt/cloud/bin
swift=..,0755,/opt/cloud/bin
swiftxen=..,0755,/etc/xapi.d/plugins
s3xen=..,0755,/etc/xapi.d/plugins
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3e097a0f/scripts/vm/hypervisor/xenserver/xenserver62/patch
----------------------------------------------------------------------
diff --git a/scripts/vm/hypervisor/xenserver/xenserver62/patch b/scripts/vm/hypervisor/xenserver/xenserver62/patch
index 70b86b4..05c619b 100644
--- a/scripts/vm/hypervisor/xenserver/xenserver62/patch
+++ b/scripts/vm/hypervisor/xenserver/xenserver62/patch
@@ -40,14 +40,8 @@ id_rsa.cloud=../../../systemvm,0600,/root/.ssh
network_info.sh=..,0755,/opt/cloud/bin
setupxenserver.sh=..,0755,/opt/cloud/bin
make_migratable.sh=..,0755,/opt/cloud/bin
-createipAlias.sh=..,0755,/opt/cloud/bin
-deleteipAlias.sh=..,0755,/opt/cloud/bin
setup_iscsi.sh=..,0755,/opt/cloud/bin
pingtest.sh=../../..,0755,/opt/cloud/bin
-dhcp_entry.sh=../../../../network/domr/,0755,/opt/cloud/bin
-save_password_to_domr.sh=../../../../network/domr/,0755,/opt/cloud/bin
-call_firewall.sh=../../../../network/domr/,0755,/opt/cloud/bin
-call_loadbalancer.sh=../../../../network/domr/,0755,/opt/cloud/bin
router_proxy.sh=../../../../network/domr/,0755,/opt/cloud/bin
cloud-setup-bonding.sh=..,0755,/opt/cloud/bin
kill_copy_process.sh=..,0755,/opt/cloud/bin
@@ -60,7 +54,6 @@ vhd-util=..,0755,/opt/cloud/bin
upgrade_snapshot.sh=..,0755,/opt/cloud/bin
cloud-clean-vlan.sh=..,0755,/opt/cloud/bin
cloud-prepare-upgrade.sh=..,0755,/opt/cloud/bin
-bumpUpPriority.sh=../../../../network/domr/,0755,/opt/cloud/bin
swift=..,0755,/opt/cloud/bin
swiftxen=..,0755,/etc/xapi.d/plugins
s3xen=..,0755,/etc/xapi.d/plugins