You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ja...@apache.org on 2014/02/28 12:18:25 UTC
[1/2] git commit: updated refs/heads/master to 100a911
Repository: cloudstack
Updated Branches:
refs/heads/master 5360ab3d4 -> 100a91122
CLOUDSTACK-6187: Fixed MigrateSystemVMCmd response for router
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/100a9112
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/100a9112
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/100a9112
Branch: refs/heads/master
Commit: 100a9112297213162ea9d9234e1954664690621a
Parents: cb1c287
Author: Jayapal <ja...@apache.org>
Authored: Fri Feb 28 11:01:43 2014 +0530
Committer: Jayapal <ja...@apache.org>
Committed: Fri Feb 28 16:46:57 2014 +0530
----------------------------------------------------------------------
server/src/com/cloud/api/ApiResponseHelper.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/100a9112/server/src/com/cloud/api/ApiResponseHelper.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java
index eb1f94a..81bfe21 100755
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@ -1118,7 +1118,7 @@ public class ApiResponseHelper implements ResponseGenerator {
@Override
public SystemVmResponse createSystemVmResponse(VirtualMachine vm) {
SystemVmResponse vmResponse = new SystemVmResponse();
- if (vm.getType() == Type.SecondaryStorageVm || vm.getType() == Type.ConsoleProxy) {
+ if (vm.getType() == Type.SecondaryStorageVm || vm.getType() == Type.ConsoleProxy || vm.getType() == Type.DomainRouter) {
// SystemVm vm = (SystemVm) systemVM;
vmResponse.setId(vm.getUuid());
// vmResponse.setObjectId(vm.getId());
[2/2] git commit: updated refs/heads/master to 100a911
Posted by ja...@apache.org.
CLOUDSTACK-6183: Unplug the nic when all the ips from the public subnet is released
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/cb1c2874
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/cb1c2874
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/cb1c2874
Branch: refs/heads/master
Commit: cb1c2874337ae322020557a71f78d3afa7fe0d13
Parents: 5360ab3
Author: Jayapal <ja...@apache.org>
Authored: Thu Feb 27 19:18:04 2014 +0530
Committer: Jayapal <ja...@apache.org>
Committed: Fri Feb 28 16:46:57 2014 +0530
----------------------------------------------------------------------
.../kvm/resource/LibvirtComputingResource.java | 80 ++++++++++++++++++++
.../xen/resource/CitrixResourceBase.java | 6 ++
2 files changed, 86 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cb1c2874/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index 853b7a9..5d7b0fd 100755
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -372,6 +372,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
@Override
public ExecutionResult cleanupCommand(NetworkElementCommand cmd) {
+ if (cmd instanceof IpAssocCommand && !(cmd instanceof IpAssocVpcCommand)) {
+ return cleanupNetworkElementCommand((IpAssocCommand)cmd);
+ }
return new ExecutionResult(true, null);
}
@@ -1938,6 +1941,24 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
vm.attachDevice(getVifDriver(nicTO.getType()).plug(nicTO, "Other PV (32-bit)").toString());
}
+
+ private void vifHotUnPlug (Connect conn, String vmName, String macAddr) throws InternalErrorException, LibvirtException {
+
+ Domain vm = null;
+ vm = getDomain(conn, vmName);
+ List<InterfaceDef> pluggedNics = getInterfaces(conn, vmName);
+ for (InterfaceDef pluggedNic : pluggedNics) {
+ if (pluggedNic.getMacAddress().equalsIgnoreCase(macAddr)) {
+ vm.detachDevice(pluggedNic.toString());
+ // We don't know which "traffic type" is associated with
+ // each interface at this point, so inform all vif drivers
+ for (VifDriver vifDriver : getAllVifDrivers()) {
+ vifDriver.unplug(pluggedNic);
+ }
+ }
+ }
+ }
+
private PlugNicAnswer execute(PlugNicCommand cmd) {
NicTO nic = cmd.getNic();
String vmName = cmd.getVmName();
@@ -2164,6 +2185,65 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
}
+ protected ExecutionResult cleanupNetworkElementCommand(IpAssocCommand cmd) {
+
+ String routerName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
+ String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP);
+ Connect conn;
+
+
+ try{
+ conn = LibvirtConnection.getConnectionByVmName(routerName);
+ List<InterfaceDef> nics = getInterfaces(conn, routerName);
+ Map<String, Integer> broadcastUriAllocatedToVM = new HashMap<String, Integer>();
+
+ Integer nicPos = 0;
+ for (InterfaceDef nic : nics) {
+ if (nic.getBrName().equalsIgnoreCase(_linkLocalBridgeName)) {
+ broadcastUriAllocatedToVM.put("LinkLocal", nicPos);
+ } else {
+ if (nic.getBrName().equalsIgnoreCase(_publicBridgeName) || nic.getBrName().equalsIgnoreCase(_privBridgeName) ||
+ nic.getBrName().equalsIgnoreCase(_guestBridgeName)) {
+ broadcastUriAllocatedToVM.put(BroadcastDomainType.Vlan.toUri(Vlan.UNTAGGED).toString(), nicPos);
+ } else {
+ String broadcastUri = getBroadcastUriFromBridge(nic.getBrName());
+ broadcastUriAllocatedToVM.put(broadcastUri, nicPos);
+ }
+ }
+ nicPos++;
+ }
+
+ IpAddressTO[] ips = cmd.getIpAddresses();
+ int numOfIps = ips.length;
+ int nicNum = 0;
+ for (IpAddressTO ip : ips) {
+
+ boolean newNic = false;
+ if (!broadcastUriAllocatedToVM.containsKey(ip.getBroadcastUri())) {
+ /* plug a vif into router */
+ VifHotPlug(conn, routerName, ip.getBroadcastUri(), ip.getVifMacAddress());
+ broadcastUriAllocatedToVM.put(ip.getBroadcastUri(), nicPos++);
+ newNic = true;
+ }
+ nicNum = broadcastUriAllocatedToVM.get(ip.getBroadcastUri());
+
+ if (numOfIps == 1 && !ip.isAdd()) {
+ vifHotUnPlug(conn, routerName, ip.getVifMacAddress());
+ networkUsage(routerIp, "deleteVif", "eth" + nicNum);
+ }
+ }
+
+ } catch (LibvirtException e) {
+ s_logger.error("ipassoccmd failed", e);
+ return new ExecutionResult(false, e.getMessage());
+ } catch (InternalErrorException e) {
+ s_logger.error("ipassoccmd failed", e);
+ return new ExecutionResult(false, e.getMessage());
+ }
+
+ return new ExecutionResult(true, null);
+ }
+
protected ManageSnapshotAnswer execute(final ManageSnapshotCommand cmd) {
String snapshotName = cmd.getSnapshotName();
String snapshotPath = cmd.getSnapshotPath();
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cb1c2874/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
index 48ae3ea..96d33c7 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
@@ -2032,6 +2032,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP);
try {
IpAddressTO[] ips = cmd.getIpAddresses();
+ int ipsCount = ips.length;
for (IpAddressTO ip : ips) {
VM router = getVM(conn, routerName);
@@ -2060,6 +2061,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
// to remove a VIF
boolean removeVif = false;
+ //there is only one ip in this public vlan and removing it, so remove the nic
+ if (ipsCount == 1 && !ip.isAdd()) {
+ removeVif = true;
+ }
+
if (correctVif == null) {
throw new InternalErrorException("Failed to find DomR VIF to associate/disassociate IP with.");
}