diff --git a/agent/.classpath b/agent/.classpath
index f36c50ee1f6..f2bd7d7bc6e 100644
--- a/agent/.classpath
+++ b/agent/.classpath
@@ -12,5 +12,6 @@
+
diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java
index e5319d555d8..8598b9fa29b 100644
--- a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java
+++ b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java
@@ -53,6 +53,7 @@ import javax.ejb.Local;
import javax.naming.ConfigurationException;
import org.apache.log4j.Logger;
+import org.apache.xmlrpc.XmlRpcException;
import org.libvirt.Connect;
import org.libvirt.Domain;
import org.libvirt.DomainInfo;
@@ -78,6 +79,7 @@ import com.cloud.agent.api.CheckHealthCommand;
import com.cloud.agent.api.CheckStateCommand;
import com.cloud.agent.api.CheckVirtualMachineAnswer;
import com.cloud.agent.api.CheckVirtualMachineCommand;
+import com.cloud.agent.api.CleanupNetworkRulesCmd;
import com.cloud.agent.api.Command;
import com.cloud.agent.api.CreatePrivateTemplateFromSnapshotCommand;
import com.cloud.agent.api.CreatePrivateTemplateFromVolumeCommand;
@@ -104,16 +106,17 @@ import com.cloud.agent.api.ManageSnapshotAnswer;
import com.cloud.agent.api.ManageSnapshotCommand;
import com.cloud.agent.api.MigrateAnswer;
import com.cloud.agent.api.MigrateCommand;
-import com.cloud.agent.api.MirrorCommand;
import com.cloud.agent.api.ModifySshKeysCommand;
import com.cloud.agent.api.ModifyStoragePoolAnswer;
import com.cloud.agent.api.ModifyStoragePoolCommand;
+import com.cloud.agent.api.NetworkRulesSystemVmCommand;
import com.cloud.agent.api.NetworkUsageAnswer;
import com.cloud.agent.api.NetworkUsageCommand;
import com.cloud.agent.api.PingCommand;
import com.cloud.agent.api.PingRoutingCommand;
import com.cloud.agent.api.PingRoutingWithNwGroupsCommand;
import com.cloud.agent.api.PingTestCommand;
+import com.cloud.agent.api.PrepareForMigrationAnswer;
import com.cloud.agent.api.PrepareForMigrationCommand;
import com.cloud.agent.api.ReadyAnswer;
import com.cloud.agent.api.ReadyCommand;
@@ -165,8 +168,9 @@ import com.cloud.agent.resource.virtualnetwork.VirtualRoutingResource;
import com.cloud.exception.InternalErrorException;
import com.cloud.host.Host.Type;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.network.NetworkEnums.RouterPrivateIpStrategy;
import com.cloud.network.Networks.BroadcastDomainType;
+import com.cloud.network.Networks.RouterPrivateIpStrategy;
+import com.cloud.network.Networks.IsolationType;
import com.cloud.network.Networks.TrafficType;
import com.cloud.resource.ServerResource;
import com.cloud.resource.ServerResourceBase;
@@ -798,8 +802,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
return execute((GetHostStatsCommand)cmd);
} else if (cmd instanceof CheckStateCommand) {
return executeRequest(cmd);
- } else if (cmd instanceof MirrorCommand) {
- return executeRequest(cmd);
} else if (cmd instanceof CheckHealthCommand) {
return execute((CheckHealthCommand)cmd);
} else if (cmd instanceof PrepareForMigrationCommand) {
@@ -866,6 +868,10 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
return execute((CheckSshCommand) cmd);
} else if (cmd instanceof NetworkUsageCommand) {
return execute((NetworkUsageCommand) cmd);
+ } else if (cmd instanceof NetworkRulesSystemVmCommand) {
+ return execute((NetworkRulesSystemVmCommand)cmd);
+ } else if (cmd instanceof CleanupNetworkRulesCmd) {
+ return execute((CleanupNetworkRulesCmd)cmd);
} else {
s_logger.warn("Unsupported command ");
return Answer.createUnsupportedCommandAnswer(cmd);
@@ -887,7 +893,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
KVMHABase.NfsStoragePool sp = new KVMHABase.NfsStoragePool(cmd.getPool().getUuid(),
- cmd.getPool().getHostAddress(),
+ cmd.getPool().getHost(),
cmd.getPool().getPath(),
_mountPoint + File.separator + cmd.getPool().getUuid(),
PoolType.PrimaryStorage);
@@ -1083,7 +1089,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
String result = command.execute();
if (result != null) {
s_logger.debug("Failed to backup snaptshot: " + result);
- return new BackupSnapshotAnswer(cmd, false, result, null);
+ return new BackupSnapshotAnswer(cmd, false, result, null, true);
}
/*Delete the snapshot on primary*/
@@ -1119,15 +1125,15 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
result = command.execute();
if (result != null) {
s_logger.debug("Failed to backup snapshot: " + result);
- return new BackupSnapshotAnswer(cmd, false, "Failed to backup snapshot: " + result, null);
+ return new BackupSnapshotAnswer(cmd, false, "Failed to backup snapshot: " + result, null, true);
}
}
} catch (LibvirtException e) {
- return new BackupSnapshotAnswer(cmd, false, e.toString(), null);
+ return new BackupSnapshotAnswer(cmd, false, e.toString(), null, true);
} catch (URISyntaxException e) {
- return new BackupSnapshotAnswer(cmd, false, e.toString(), null);
+ return new BackupSnapshotAnswer(cmd, false, e.toString(), null, true);
}
- return new BackupSnapshotAnswer(cmd, true, null, snapshotDestPath + File.separator + snapshotName);
+ return new BackupSnapshotAnswer(cmd, true, null, snapshotDestPath + File.separator + snapshotName, true);
}
protected DeleteSnapshotBackupAnswer execute(final DeleteSnapshotBackupCommand cmd) {
@@ -1571,6 +1577,11 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
}
+ private Answer execute(CleanupNetworkRulesCmd cmd) {
+ boolean result = cleanup_rules();
+ return new Answer(cmd, result, "");
+ }
+
protected GetVncPortAnswer execute(GetVncPortCommand cmd) {
try {
Connect conn = LibvirtConnection.getConnection();
@@ -1725,6 +1736,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
_vms.put(cmd.getVmName(), State.Running);
}
}
+
return new CheckVirtualMachineAnswer(cmd, state, vncPort);
} catch (LibvirtException e) {
return new CheckVirtualMachineAnswer(cmd, e.getMessage());
@@ -1816,26 +1828,44 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
private synchronized Answer execute(PrepareForMigrationCommand cmd) {
-// final String vmName = cmd.getVmName();
-// String result = null;
-//
-// if (cmd.getVnet() != null && !isDirectAttachedNetwork(cmd.getVnet())) {
-// final String vnet = getVnetId(cmd.getVnet());
-// if (vnet != null) {
-// try {
-// createVnet(vnet, _pifs.first()); /*TODO: Need to add public network for domR*/
-// } catch (InternalErrorException e) {
-// return new PrepareForMigrationAnswer(cmd, false, result);
-// }
-// }
-// }
-//
-// synchronized(_vms) {
-// _vms.put(vmName, State.Migrating);
-// }
-//
-// return new PrepareForMigrationAnswer(cmd, result == null, result);
- return null;
+
+ VirtualMachineTO vm = cmd.getVirtualMachine();
+ if (s_logger.isDebugEnabled()) {
+ s_logger.debug("Preparing host for migrating " + vm);
+ }
+
+ NicTO[] nics = vm.getNics();
+ try {
+ Connect conn = LibvirtConnection.getConnection();
+ for (NicTO nic : nics) {
+ String vlanId = null;
+ if (nic.getBroadcastType() == BroadcastDomainType.Vlan) {
+ URI broadcastUri = nic.getBroadcastUri();
+ vlanId = broadcastUri.getHost();
+ }
+ if (nic.getType() == TrafficType.Guest) {
+ if (nic.getBroadcastType() == BroadcastDomainType.Vlan && !vlanId.equalsIgnoreCase("untagged")){
+ createVlanBr(vlanId, _pifs.first());
+ }
+ } else if (nic.getType() == TrafficType.Control) {
+ /*Make sure the network is still there*/
+ createControlNetwork(conn);
+ } else if (nic.getType() == TrafficType.Public) {
+ if (nic.getBroadcastType() == BroadcastDomainType.Vlan && !vlanId.equalsIgnoreCase("untagged")) {
+ createVlanBr(vlanId, _pifs.second());
+ }
+ }
+ }
+ synchronized (_vms) {
+ _vms.put(vm.getName(), State.Migrating);
+ }
+
+ return new PrepareForMigrationAnswer(cmd);
+ } catch (LibvirtException e) {
+ return new PrepareForMigrationAnswer(cmd, e.toString());
+ } catch (InternalErrorException e) {
+ return new PrepareForMigrationAnswer(cmd, e.toString());
+ }
}
public void createVnet(String vnetId, String pif) throws InternalErrorException {
@@ -2207,7 +2237,12 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
if (vmSpec.getType() != VirtualMachine.Type.User) {
default_network_rules_for_systemvm(vmName);
} else {
- default_network_rules(vmName, vmSpec.getNics()[0].getIp(), vmSpec.getId(), vmSpec.getNics()[0].getMac());
+ NicTO[] nics = vmSpec.getNics();
+ for (NicTO nic : nics) {
+ if (nic.getIsolationUri() != null && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString())) {
+ default_network_rules(vmName, vmSpec.getNics()[0].getIp(), vmSpec.getId(), vmSpec.getNics()[0].getMac());
+ }
+ }
}
// Attach each data volume to the VM, if there is a deferred attached disk
@@ -2220,8 +2255,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
return new StartAnswer(cmd);
} catch (Exception e) {
s_logger.warn("Exception ", e);
- if (conn != null)
- handleVmStartFailure(conn, vmName, vm);
+ if (conn != null) {
+ handleVmStartFailure(conn, vmName, vm);
+ }
return new StartAnswer(cmd, e.getMessage());
} finally {
synchronized (_vms) {
@@ -3472,6 +3508,19 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
return true;
}
+ private boolean cleanup_rules() {
+ if (!_can_bridge_firewall) {
+ return false;
+ }
+ Script cmd = new Script(_securityGroupPath, _timeout, s_logger);
+ cmd.add("cleanup_rules");
+ String result = cmd.execute();
+ if (result != null) {
+ return false;
+ }
+ return true;
+ }
+
private String get_rule_logs_for_vms() {
Script cmd = new Script(_securityGroupPath, _timeout, s_logger);
cmd.add("get_rule_logs_for_vms");
@@ -3575,4 +3624,13 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
return storage;
}
+
+ private Answer execute(NetworkRulesSystemVmCommand cmd) {
+ boolean success = false;
+ if (cmd.getType() != VirtualMachine.Type.User) {
+ success = default_network_rules_for_systemvm(cmd.getVmName());
+ }
+
+ return new Answer(cmd, success, "");
+ }
}
diff --git a/api/.classpath b/api/.classpath
index e52580d102b..dc73036afd7 100644
--- a/api/.classpath
+++ b/api/.classpath
@@ -5,5 +5,6 @@
+
diff --git a/core/src/com/cloud/agent/api/AgentControlAnswer.java b/api/src/com/cloud/agent/api/AgentControlAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/AgentControlAnswer.java
rename to api/src/com/cloud/agent/api/AgentControlAnswer.java
diff --git a/core/src/com/cloud/agent/api/AgentControlCommand.java b/api/src/com/cloud/agent/api/AgentControlCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/AgentControlCommand.java
rename to api/src/com/cloud/agent/api/AgentControlCommand.java
diff --git a/core/src/com/cloud/agent/api/AttachIsoCommand.java b/api/src/com/cloud/agent/api/AttachIsoCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/AttachIsoCommand.java
rename to api/src/com/cloud/agent/api/AttachIsoCommand.java
diff --git a/core/src/com/cloud/agent/api/AttachVolumeAnswer.java b/api/src/com/cloud/agent/api/AttachVolumeAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/AttachVolumeAnswer.java
rename to api/src/com/cloud/agent/api/AttachVolumeAnswer.java
diff --git a/core/src/com/cloud/agent/api/AttachVolumeCommand.java b/api/src/com/cloud/agent/api/AttachVolumeCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/AttachVolumeCommand.java
rename to api/src/com/cloud/agent/api/AttachVolumeCommand.java
diff --git a/core/src/com/cloud/agent/api/BackupSnapshotAnswer.java b/api/src/com/cloud/agent/api/BackupSnapshotAnswer.java
similarity index 87%
rename from core/src/com/cloud/agent/api/BackupSnapshotAnswer.java
rename to api/src/com/cloud/agent/api/BackupSnapshotAnswer.java
index 93b5fe78520..807ce0d3851 100644
--- a/core/src/com/cloud/agent/api/BackupSnapshotAnswer.java
+++ b/api/src/com/cloud/agent/api/BackupSnapshotAnswer.java
@@ -20,14 +20,16 @@ package com.cloud.agent.api;
public class BackupSnapshotAnswer extends Answer {
private String backupSnapshotName;
+ private boolean full;
protected BackupSnapshotAnswer() {
}
- public BackupSnapshotAnswer(BackupSnapshotCommand cmd, boolean success, String result, String backupSnapshotName) {
+ public BackupSnapshotAnswer(BackupSnapshotCommand cmd, boolean success, String result, String backupSnapshotName, boolean full) {
super(cmd, success, result);
this.backupSnapshotName = backupSnapshotName;
+ this.full = full;
}
/**
@@ -36,4 +38,8 @@ public class BackupSnapshotAnswer extends Answer {
public String getBackupSnapshotName() {
return backupSnapshotName;
}
+
+ public boolean isFull() {
+ return full;
+ }
}
diff --git a/core/src/com/cloud/agent/api/BackupSnapshotCommand.java b/api/src/com/cloud/agent/api/BackupSnapshotCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/BackupSnapshotCommand.java
rename to api/src/com/cloud/agent/api/BackupSnapshotCommand.java
diff --git a/core/src/com/cloud/agent/api/CancelCommand.java b/api/src/com/cloud/agent/api/CancelCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CancelCommand.java
rename to api/src/com/cloud/agent/api/CancelCommand.java
diff --git a/core/src/com/cloud/agent/api/ChangeAgentAnswer.java b/api/src/com/cloud/agent/api/ChangeAgentAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ChangeAgentAnswer.java
rename to api/src/com/cloud/agent/api/ChangeAgentAnswer.java
diff --git a/core/src/com/cloud/agent/api/ChangeAgentCommand.java b/api/src/com/cloud/agent/api/ChangeAgentCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ChangeAgentCommand.java
rename to api/src/com/cloud/agent/api/ChangeAgentCommand.java
diff --git a/core/src/com/cloud/agent/api/CheckHealthAnswer.java b/api/src/com/cloud/agent/api/CheckHealthAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckHealthAnswer.java
rename to api/src/com/cloud/agent/api/CheckHealthAnswer.java
diff --git a/core/src/com/cloud/agent/api/CheckHealthCommand.java b/api/src/com/cloud/agent/api/CheckHealthCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckHealthCommand.java
rename to api/src/com/cloud/agent/api/CheckHealthCommand.java
diff --git a/core/src/com/cloud/agent/api/CheckOnHostAnswer.java b/api/src/com/cloud/agent/api/CheckOnHostAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckOnHostAnswer.java
rename to api/src/com/cloud/agent/api/CheckOnHostAnswer.java
diff --git a/core/src/com/cloud/agent/api/CheckOnHostCommand.java b/api/src/com/cloud/agent/api/CheckOnHostCommand.java
similarity index 93%
rename from core/src/com/cloud/agent/api/CheckOnHostCommand.java
rename to api/src/com/cloud/agent/api/CheckOnHostCommand.java
index 38f808713ba..2bbb564acd4 100644
--- a/core/src/com/cloud/agent/api/CheckOnHostCommand.java
+++ b/api/src/com/cloud/agent/api/CheckOnHostCommand.java
@@ -18,7 +18,7 @@
package com.cloud.agent.api;
import com.cloud.agent.api.to.HostTO;
-import com.cloud.host.HostVO;
+import com.cloud.host.Host;
public class CheckOnHostCommand extends Command {
HostTO host;
@@ -27,7 +27,7 @@ public class CheckOnHostCommand extends Command {
}
- public CheckOnHostCommand(HostVO host) {
+ public CheckOnHostCommand(Host host) {
this.host = new HostTO(host);
}
diff --git a/core/src/com/cloud/agent/api/CheckStateAnswer.java b/api/src/com/cloud/agent/api/CheckStateAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckStateAnswer.java
rename to api/src/com/cloud/agent/api/CheckStateAnswer.java
diff --git a/core/src/com/cloud/agent/api/CheckStateCommand.java b/api/src/com/cloud/agent/api/CheckStateCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckStateCommand.java
rename to api/src/com/cloud/agent/api/CheckStateCommand.java
diff --git a/core/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java b/api/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java
rename to api/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java
diff --git a/core/src/com/cloud/agent/api/CheckVirtualMachineCommand.java b/api/src/com/cloud/agent/api/CheckVirtualMachineCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CheckVirtualMachineCommand.java
rename to api/src/com/cloud/agent/api/CheckVirtualMachineCommand.java
diff --git a/core/src/com/cloud/agent/api/CleanupNetworkRulesCmd.java b/api/src/com/cloud/agent/api/CleanupNetworkRulesCmd.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CleanupNetworkRulesCmd.java
rename to api/src/com/cloud/agent/api/CleanupNetworkRulesCmd.java
diff --git a/core/src/com/cloud/agent/api/ConsoleAccessAuthenticationAnswer.java b/api/src/com/cloud/agent/api/ConsoleAccessAuthenticationAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ConsoleAccessAuthenticationAnswer.java
rename to api/src/com/cloud/agent/api/ConsoleAccessAuthenticationAnswer.java
diff --git a/core/src/com/cloud/agent/api/ConsoleAccessAuthenticationCommand.java b/api/src/com/cloud/agent/api/ConsoleAccessAuthenticationCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ConsoleAccessAuthenticationCommand.java
rename to api/src/com/cloud/agent/api/ConsoleAccessAuthenticationCommand.java
diff --git a/core/src/com/cloud/agent/api/ConsoleProxyLoadReportCommand.java b/api/src/com/cloud/agent/api/ConsoleProxyLoadReportCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ConsoleProxyLoadReportCommand.java
rename to api/src/com/cloud/agent/api/ConsoleProxyLoadReportCommand.java
diff --git a/core/src/com/cloud/agent/api/CreatePrivateTemplateFromSnapshotCommand.java b/api/src/com/cloud/agent/api/CreatePrivateTemplateFromSnapshotCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CreatePrivateTemplateFromSnapshotCommand.java
rename to api/src/com/cloud/agent/api/CreatePrivateTemplateFromSnapshotCommand.java
diff --git a/core/src/com/cloud/agent/api/CreatePrivateTemplateFromVolumeCommand.java b/api/src/com/cloud/agent/api/CreatePrivateTemplateFromVolumeCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CreatePrivateTemplateFromVolumeCommand.java
rename to api/src/com/cloud/agent/api/CreatePrivateTemplateFromVolumeCommand.java
diff --git a/core/src/com/cloud/agent/api/CreateVolumeFromSnapshotAnswer.java b/api/src/com/cloud/agent/api/CreateVolumeFromSnapshotAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CreateVolumeFromSnapshotAnswer.java
rename to api/src/com/cloud/agent/api/CreateVolumeFromSnapshotAnswer.java
diff --git a/core/src/com/cloud/agent/api/CreateVolumeFromSnapshotCommand.java b/api/src/com/cloud/agent/api/CreateVolumeFromSnapshotCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CreateVolumeFromSnapshotCommand.java
rename to api/src/com/cloud/agent/api/CreateVolumeFromSnapshotCommand.java
diff --git a/core/src/com/cloud/agent/api/CronCommand.java b/api/src/com/cloud/agent/api/CronCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/CronCommand.java
rename to api/src/com/cloud/agent/api/CronCommand.java
diff --git a/core/src/com/cloud/agent/api/DeleteSnapshotBackupAnswer.java b/api/src/com/cloud/agent/api/DeleteSnapshotBackupAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/DeleteSnapshotBackupAnswer.java
rename to api/src/com/cloud/agent/api/DeleteSnapshotBackupAnswer.java
diff --git a/core/src/com/cloud/agent/api/DeleteSnapshotBackupCommand.java b/api/src/com/cloud/agent/api/DeleteSnapshotBackupCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/DeleteSnapshotBackupCommand.java
rename to api/src/com/cloud/agent/api/DeleteSnapshotBackupCommand.java
diff --git a/core/src/com/cloud/agent/api/DeleteSnapshotsDirCommand.java b/api/src/com/cloud/agent/api/DeleteSnapshotsDirCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/DeleteSnapshotsDirCommand.java
rename to api/src/com/cloud/agent/api/DeleteSnapshotsDirCommand.java
diff --git a/core/src/com/cloud/agent/api/DeleteStoragePoolCommand.java b/api/src/com/cloud/agent/api/DeleteStoragePoolCommand.java
similarity index 70%
rename from core/src/com/cloud/agent/api/DeleteStoragePoolCommand.java
rename to api/src/com/cloud/agent/api/DeleteStoragePoolCommand.java
index 5f16b454bbb..98972e2be31 100644
--- a/core/src/com/cloud/agent/api/DeleteStoragePoolCommand.java
+++ b/api/src/com/cloud/agent/api/DeleteStoragePoolCommand.java
@@ -21,34 +21,34 @@ package com.cloud.agent.api;
import java.io.File;
import java.util.UUID;
-import com.cloud.storage.StoragePoolVO;
+import com.cloud.agent.api.to.StorageFilerTO;
+import com.cloud.storage.StoragePool;
public class DeleteStoragePoolCommand extends Command {
- StoragePoolVO pool;
+ StorageFilerTO pool;
public static final String LOCAL_PATH_PREFIX="/mnt/";
String localPath;
-
public DeleteStoragePoolCommand() {
}
- public DeleteStoragePoolCommand(StoragePoolVO pool, String localPath) {
- this.pool = new StoragePoolVO(pool);
+ public DeleteStoragePoolCommand(StoragePool pool, String localPath) {
+ this.pool = new StorageFilerTO(pool);
this.localPath = localPath;
}
- public DeleteStoragePoolCommand(StoragePoolVO pool) {
- this(new StoragePoolVO(pool), LOCAL_PATH_PREFIX + File.separator + UUID.nameUUIDFromBytes((pool.getHostAddress() + pool.getPath()).getBytes()));
+ public DeleteStoragePoolCommand(StoragePool pool) {
+ this(pool, LOCAL_PATH_PREFIX + File.separator + UUID.nameUUIDFromBytes((pool.getHostAddress() + pool.getPath()).getBytes()));
}
- public StoragePoolVO getPool() {
+ public StorageFilerTO getPool() {
return pool;
}
- public void setPool(StoragePoolVO pool) {
- this.pool = new StoragePoolVO(pool);
+ public void setPool(StoragePool pool) {
+ this.pool = new StorageFilerTO(pool);
}
@Override
diff --git a/core/src/com/cloud/agent/api/FenceAnswer.java b/api/src/com/cloud/agent/api/FenceAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/FenceAnswer.java
rename to api/src/com/cloud/agent/api/FenceAnswer.java
diff --git a/core/src/com/cloud/agent/api/FenceCommand.java b/api/src/com/cloud/agent/api/FenceCommand.java
similarity index 92%
rename from core/src/com/cloud/agent/api/FenceCommand.java
rename to api/src/com/cloud/agent/api/FenceCommand.java
index 3b47909ce87..ffbc01e51aa 100644
--- a/core/src/com/cloud/agent/api/FenceCommand.java
+++ b/api/src/com/cloud/agent/api/FenceCommand.java
@@ -17,8 +17,8 @@
*/
package com.cloud.agent.api;
-import com.cloud.host.HostVO;
-import com.cloud.vm.VMInstanceVO;
+import com.cloud.host.Host;
+import com.cloud.vm.VirtualMachine;
public class FenceCommand extends Command {
@@ -30,7 +30,7 @@ public class FenceCommand extends Command {
String hostGuid;
String hostIp;
- public FenceCommand(VMInstanceVO vm, HostVO host) {
+ public FenceCommand(VirtualMachine vm, Host host) {
super();
vmName = vm.getInstanceName();
hostGuid = host.getGuid();
diff --git a/core/src/com/cloud/agent/api/GetFileStatsAnswer.java b/api/src/com/cloud/agent/api/GetFileStatsAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetFileStatsAnswer.java
rename to api/src/com/cloud/agent/api/GetFileStatsAnswer.java
diff --git a/core/src/com/cloud/agent/api/GetFileStatsCommand.java b/api/src/com/cloud/agent/api/GetFileStatsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetFileStatsCommand.java
rename to api/src/com/cloud/agent/api/GetFileStatsCommand.java
diff --git a/core/src/com/cloud/agent/api/GetHostStatsAnswer.java b/api/src/com/cloud/agent/api/GetHostStatsAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetHostStatsAnswer.java
rename to api/src/com/cloud/agent/api/GetHostStatsAnswer.java
diff --git a/core/src/com/cloud/agent/api/GetHostStatsCommand.java b/api/src/com/cloud/agent/api/GetHostStatsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetHostStatsCommand.java
rename to api/src/com/cloud/agent/api/GetHostStatsCommand.java
diff --git a/core/src/com/cloud/agent/api/GetStorageStatsAnswer.java b/api/src/com/cloud/agent/api/GetStorageStatsAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetStorageStatsAnswer.java
rename to api/src/com/cloud/agent/api/GetStorageStatsAnswer.java
diff --git a/core/src/com/cloud/agent/api/GetStorageStatsCommand.java b/api/src/com/cloud/agent/api/GetStorageStatsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetStorageStatsCommand.java
rename to api/src/com/cloud/agent/api/GetStorageStatsCommand.java
diff --git a/core/src/com/cloud/agent/api/GetVmStatsAnswer.java b/api/src/com/cloud/agent/api/GetVmStatsAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetVmStatsAnswer.java
rename to api/src/com/cloud/agent/api/GetVmStatsAnswer.java
diff --git a/core/src/com/cloud/agent/api/GetVmStatsCommand.java b/api/src/com/cloud/agent/api/GetVmStatsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetVmStatsCommand.java
rename to api/src/com/cloud/agent/api/GetVmStatsCommand.java
diff --git a/core/src/com/cloud/agent/api/GetVncPortAnswer.java b/api/src/com/cloud/agent/api/GetVncPortAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetVncPortAnswer.java
rename to api/src/com/cloud/agent/api/GetVncPortAnswer.java
diff --git a/core/src/com/cloud/agent/api/GetVncPortCommand.java b/api/src/com/cloud/agent/api/GetVncPortCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/GetVncPortCommand.java
rename to api/src/com/cloud/agent/api/GetVncPortCommand.java
diff --git a/core/src/com/cloud/agent/api/HostStatsEntry.java b/api/src/com/cloud/agent/api/HostStatsEntry.java
similarity index 100%
rename from core/src/com/cloud/agent/api/HostStatsEntry.java
rename to api/src/com/cloud/agent/api/HostStatsEntry.java
diff --git a/core/src/com/cloud/agent/api/MaintainAnswer.java b/api/src/com/cloud/agent/api/MaintainAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/MaintainAnswer.java
rename to api/src/com/cloud/agent/api/MaintainAnswer.java
diff --git a/core/src/com/cloud/agent/api/MaintainCommand.java b/api/src/com/cloud/agent/api/MaintainCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/MaintainCommand.java
rename to api/src/com/cloud/agent/api/MaintainCommand.java
diff --git a/core/src/com/cloud/agent/api/ManageSnapshotAnswer.java b/api/src/com/cloud/agent/api/ManageSnapshotAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ManageSnapshotAnswer.java
rename to api/src/com/cloud/agent/api/ManageSnapshotAnswer.java
diff --git a/core/src/com/cloud/agent/api/ManageSnapshotCommand.java b/api/src/com/cloud/agent/api/ManageSnapshotCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ManageSnapshotCommand.java
rename to api/src/com/cloud/agent/api/ManageSnapshotCommand.java
diff --git a/core/src/com/cloud/agent/api/MigrateAnswer.java b/api/src/com/cloud/agent/api/MigrateAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/MigrateAnswer.java
rename to api/src/com/cloud/agent/api/MigrateAnswer.java
diff --git a/core/src/com/cloud/agent/api/MigrateCommand.java b/api/src/com/cloud/agent/api/MigrateCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/MigrateCommand.java
rename to api/src/com/cloud/agent/api/MigrateCommand.java
diff --git a/core/src/com/cloud/agent/api/ModifySshKeysCommand.java b/api/src/com/cloud/agent/api/ModifySshKeysCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ModifySshKeysCommand.java
rename to api/src/com/cloud/agent/api/ModifySshKeysCommand.java
diff --git a/core/src/com/cloud/agent/api/NetworkUsageAnswer.java b/api/src/com/cloud/agent/api/NetworkUsageAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/NetworkUsageAnswer.java
rename to api/src/com/cloud/agent/api/NetworkUsageAnswer.java
diff --git a/core/src/com/cloud/agent/api/NetworkUsageCommand.java b/api/src/com/cloud/agent/api/NetworkUsageCommand.java
similarity index 82%
rename from core/src/com/cloud/agent/api/NetworkUsageCommand.java
rename to api/src/com/cloud/agent/api/NetworkUsageCommand.java
index 5ecf9741959..43472fe4383 100644
--- a/core/src/com/cloud/agent/api/NetworkUsageCommand.java
+++ b/api/src/com/cloud/agent/api/NetworkUsageCommand.java
@@ -21,6 +21,7 @@ package com.cloud.agent.api;
public class NetworkUsageCommand extends Command {
private String privateIP;
private String domRName;
+ private String option;
protected NetworkUsageCommand() {
@@ -31,6 +32,13 @@ public class NetworkUsageCommand extends Command {
this.privateIP = privateIP;
this.domRName = domRName;
}
+
+ public NetworkUsageCommand(String privateIP, String domRName, String option)
+ {
+ this.privateIP = privateIP;
+ this.domRName = domRName;
+ this.option = option;
+ }
public String getPrivateIP() {
return privateIP;
@@ -40,6 +48,10 @@ public class NetworkUsageCommand extends Command {
return domRName;
}
+ public String getOption() {
+ return option;
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/core/src/com/cloud/agent/api/PingAnswer.java b/api/src/com/cloud/agent/api/PingAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PingAnswer.java
rename to api/src/com/cloud/agent/api/PingAnswer.java
diff --git a/core/src/com/cloud/agent/api/PingCommand.java b/api/src/com/cloud/agent/api/PingCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PingCommand.java
rename to api/src/com/cloud/agent/api/PingCommand.java
diff --git a/core/src/com/cloud/agent/api/PingRoutingCommand.java b/api/src/com/cloud/agent/api/PingRoutingCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PingRoutingCommand.java
rename to api/src/com/cloud/agent/api/PingRoutingCommand.java
diff --git a/api/src/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java b/api/src/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java
new file mode 100644
index 00000000000..06a4de581b7
--- /dev/null
+++ b/api/src/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java
@@ -0,0 +1,48 @@
+/**
+ * Copyright (C) 2010 Cloud.com. All rights reserved.
+ *
+ * This software is licensed under the GNU General Public License v3 or later.
+ *
+ * It is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or any later
+version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+package com.cloud.agent.api;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.cloud.host.Host;
+import com.cloud.utils.Pair;
+import com.cloud.vm.VirtualMachine.State;
+
+
+public class PingRoutingWithNwGroupsCommand extends PingRoutingCommand {
+ HashMap> newGroupStates;
+
+ protected PingRoutingWithNwGroupsCommand() {
+ super();
+ }
+
+ public PingRoutingWithNwGroupsCommand(Host.Type type, long id, Map states, HashMap> nwGrpStates) {
+ super(type, id, states);
+ newGroupStates = nwGrpStates;
+ }
+
+ public HashMap> getNewGroupStates() {
+ return newGroupStates;
+ }
+
+ public void setNewGroupStates(HashMap> newGroupStates) {
+ this.newGroupStates = newGroupStates;
+ }
+}
diff --git a/core/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java b/api/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java
rename to api/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java
diff --git a/core/src/com/cloud/agent/api/PingStorageCommand.java b/api/src/com/cloud/agent/api/PingStorageCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PingStorageCommand.java
rename to api/src/com/cloud/agent/api/PingStorageCommand.java
diff --git a/core/src/com/cloud/agent/api/PingTestCommand.java b/api/src/com/cloud/agent/api/PingTestCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PingTestCommand.java
rename to api/src/com/cloud/agent/api/PingTestCommand.java
diff --git a/core/src/com/cloud/agent/api/PoolEjectCommand.java b/api/src/com/cloud/agent/api/PoolEjectCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PoolEjectCommand.java
rename to api/src/com/cloud/agent/api/PoolEjectCommand.java
diff --git a/core/src/com/cloud/agent/api/PrepareForMigrationAnswer.java b/api/src/com/cloud/agent/api/PrepareForMigrationAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/PrepareForMigrationAnswer.java
rename to api/src/com/cloud/agent/api/PrepareForMigrationAnswer.java
diff --git a/core/src/com/cloud/agent/api/PrepareForMigrationCommand.java b/api/src/com/cloud/agent/api/PrepareForMigrationCommand.java
similarity index 81%
rename from core/src/com/cloud/agent/api/PrepareForMigrationCommand.java
rename to api/src/com/cloud/agent/api/PrepareForMigrationCommand.java
index c9d7e87fcb1..f73b75c752f 100644
--- a/core/src/com/cloud/agent/api/PrepareForMigrationCommand.java
+++ b/api/src/com/cloud/agent/api/PrepareForMigrationCommand.java
@@ -17,10 +17,7 @@
*/
package com.cloud.agent.api;
-import java.util.List;
-
import com.cloud.agent.api.to.VirtualMachineTO;
-import com.cloud.storage.VolumeVO;
public class PrepareForMigrationCommand extends StartCommand {
@@ -31,10 +28,6 @@ public class PrepareForMigrationCommand extends StartCommand {
super(vm);
}
- public PrepareForMigrationCommand(String vmName, String vnet, String[] storageHosts, List vols, boolean mirrored) {
- //super(vmName, storageHosts, vols, mirrored);
- }
-
@Override
public boolean executeInSequence() {
return true;
diff --git a/core/src/com/cloud/agent/api/ReadyAnswer.java b/api/src/com/cloud/agent/api/ReadyAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ReadyAnswer.java
rename to api/src/com/cloud/agent/api/ReadyAnswer.java
diff --git a/core/src/com/cloud/agent/api/ReadyCommand.java b/api/src/com/cloud/agent/api/ReadyCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ReadyCommand.java
rename to api/src/com/cloud/agent/api/ReadyCommand.java
diff --git a/core/src/com/cloud/agent/api/RebootAnswer.java b/api/src/com/cloud/agent/api/RebootAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/RebootAnswer.java
rename to api/src/com/cloud/agent/api/RebootAnswer.java
diff --git a/core/src/com/cloud/agent/api/RebootCommand.java b/api/src/com/cloud/agent/api/RebootCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/RebootCommand.java
rename to api/src/com/cloud/agent/api/RebootCommand.java
diff --git a/core/src/com/cloud/agent/api/RebootRouterCommand.java b/api/src/com/cloud/agent/api/RebootRouterCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/RebootRouterCommand.java
rename to api/src/com/cloud/agent/api/RebootRouterCommand.java
diff --git a/core/src/com/cloud/agent/api/SecStorageFirewallCfgCommand.java b/api/src/com/cloud/agent/api/SecStorageFirewallCfgCommand.java
similarity index 50%
rename from core/src/com/cloud/agent/api/SecStorageFirewallCfgCommand.java
rename to api/src/com/cloud/agent/api/SecStorageFirewallCfgCommand.java
index a27cbfa95ab..1b2f7b3e84b 100644
--- a/core/src/com/cloud/agent/api/SecStorageFirewallCfgCommand.java
+++ b/api/src/com/cloud/agent/api/SecStorageFirewallCfgCommand.java
@@ -18,74 +18,17 @@
package com.cloud.agent.api;
-import java.lang.reflect.Type;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
import org.apache.log4j.Logger;
-import com.cloud.agent.transport.Request;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonArray;
-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.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
import com.google.gson.annotations.Expose;
-import com.google.gson.reflect.TypeToken;
public class SecStorageFirewallCfgCommand extends Command {
private static final Logger s_logger = Logger.getLogger(SecStorageFirewallCfgCommand.class);
- public static class PortConfigListTypeAdaptor implements JsonDeserializer>, JsonSerializer> {
- static final GsonBuilder s_gBuilder;
- static {
- s_gBuilder = Request.initBuilder();
- }
-
- static final Type listType = new TypeToken>() {}.getType();
-
- public PortConfigListTypeAdaptor() {
- }
-
- public JsonElement serialize(List src, Type typeOfSrc, JsonSerializationContext context) {
- if (src.size() == 0) {
- s_logger.info("Returning JsonNull");
- return new JsonNull();
- }
- Gson json = s_gBuilder.create();
- s_logger.debug("Returning gson tree");
- JsonArray array = new JsonArray();
- for (PortConfig pc : src) {
- array.add(json.toJsonTree(pc));
- }
-
- return array;
- }
-
- public List deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
- throws JsonParseException {
- if (json.isJsonNull()) {
- return new ArrayList();
- }
- Gson jsonp = s_gBuilder.create();
- List pcs = new ArrayList();
- JsonArray array = json.getAsJsonArray();
- Iterator it = array.iterator();
- while (it.hasNext()) {
- JsonElement element = it.next();
- pcs.add(jsonp.fromJson(element, PortConfig.class));
- }
- return pcs;
- }
-
- }
public static class PortConfig {
@Expose boolean add;
@Expose String sourceIp;
diff --git a/core/src/com/cloud/agent/api/SecStorageSetupCommand.java b/api/src/com/cloud/agent/api/SecStorageSetupCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/SecStorageSetupCommand.java
rename to api/src/com/cloud/agent/api/SecStorageSetupCommand.java
diff --git a/core/src/com/cloud/agent/api/SecurityIngressRuleAnswer.java b/api/src/com/cloud/agent/api/SecurityIngressRuleAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/SecurityIngressRuleAnswer.java
rename to api/src/com/cloud/agent/api/SecurityIngressRuleAnswer.java
diff --git a/core/src/com/cloud/agent/api/SecurityIngressRulesCmd.java b/api/src/com/cloud/agent/api/SecurityIngressRulesCmd.java
similarity index 100%
rename from core/src/com/cloud/agent/api/SecurityIngressRulesCmd.java
rename to api/src/com/cloud/agent/api/SecurityIngressRulesCmd.java
diff --git a/core/src/com/cloud/agent/api/SetupAnswer.java b/api/src/com/cloud/agent/api/SetupAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/SetupAnswer.java
rename to api/src/com/cloud/agent/api/SetupAnswer.java
diff --git a/core/src/com/cloud/agent/api/SetupCommand.java b/api/src/com/cloud/agent/api/SetupCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/SetupCommand.java
rename to api/src/com/cloud/agent/api/SetupCommand.java
diff --git a/core/src/com/cloud/agent/api/ShutdownCommand.java b/api/src/com/cloud/agent/api/ShutdownCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ShutdownCommand.java
rename to api/src/com/cloud/agent/api/ShutdownCommand.java
diff --git a/core/src/com/cloud/agent/api/SnapshotCommand.java b/api/src/com/cloud/agent/api/SnapshotCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/SnapshotCommand.java
rename to api/src/com/cloud/agent/api/SnapshotCommand.java
diff --git a/core/src/com/cloud/agent/api/StartAnswer.java b/api/src/com/cloud/agent/api/StartAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartAnswer.java
rename to api/src/com/cloud/agent/api/StartAnswer.java
diff --git a/core/src/com/cloud/agent/api/StartupAnswer.java b/api/src/com/cloud/agent/api/StartupAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartupAnswer.java
rename to api/src/com/cloud/agent/api/StartupAnswer.java
diff --git a/core/src/com/cloud/agent/api/StartupCommand.java b/api/src/com/cloud/agent/api/StartupCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartupCommand.java
rename to api/src/com/cloud/agent/api/StartupCommand.java
diff --git a/core/src/com/cloud/agent/api/StartupExternalFirewallCommand.java b/api/src/com/cloud/agent/api/StartupExternalFirewallCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartupExternalFirewallCommand.java
rename to api/src/com/cloud/agent/api/StartupExternalFirewallCommand.java
diff --git a/core/src/com/cloud/agent/api/StartupExternalLoadBalancerCommand.java b/api/src/com/cloud/agent/api/StartupExternalLoadBalancerCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartupExternalLoadBalancerCommand.java
rename to api/src/com/cloud/agent/api/StartupExternalLoadBalancerCommand.java
diff --git a/core/src/com/cloud/agent/api/StartupProxyCommand.java b/api/src/com/cloud/agent/api/StartupProxyCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartupProxyCommand.java
rename to api/src/com/cloud/agent/api/StartupProxyCommand.java
diff --git a/core/src/com/cloud/agent/api/StartupRoutingCommand.java b/api/src/com/cloud/agent/api/StartupRoutingCommand.java
similarity index 98%
rename from core/src/com/cloud/agent/api/StartupRoutingCommand.java
rename to api/src/com/cloud/agent/api/StartupRoutingCommand.java
index f55bad47a01..390a4787431 100755
--- a/core/src/com/cloud/agent/api/StartupRoutingCommand.java
+++ b/api/src/com/cloud/agent/api/StartupRoutingCommand.java
@@ -20,7 +20,7 @@ import java.util.HashMap;
import java.util.Map;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.network.NetworkEnums.RouterPrivateIpStrategy;
+import com.cloud.network.Networks.RouterPrivateIpStrategy;
import com.cloud.vm.VirtualMachine.State;
public class StartupRoutingCommand extends StartupCommand {
diff --git a/core/src/com/cloud/agent/api/StartupStorageCommand.java b/api/src/com/cloud/agent/api/StartupStorageCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StartupStorageCommand.java
rename to api/src/com/cloud/agent/api/StartupStorageCommand.java
diff --git a/core/src/com/cloud/agent/api/StopAnswer.java b/api/src/com/cloud/agent/api/StopAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StopAnswer.java
rename to api/src/com/cloud/agent/api/StopAnswer.java
diff --git a/core/src/com/cloud/agent/api/StopCommand.java b/api/src/com/cloud/agent/api/StopCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/StopCommand.java
rename to api/src/com/cloud/agent/api/StopCommand.java
diff --git a/core/src/com/cloud/agent/api/UpgradeAnswer.java b/api/src/com/cloud/agent/api/UpgradeAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/UpgradeAnswer.java
rename to api/src/com/cloud/agent/api/UpgradeAnswer.java
diff --git a/core/src/com/cloud/agent/api/UpgradeCommand.java b/api/src/com/cloud/agent/api/UpgradeCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/UpgradeCommand.java
rename to api/src/com/cloud/agent/api/UpgradeCommand.java
diff --git a/core/src/com/cloud/agent/api/ValidateSnapshotAnswer.java b/api/src/com/cloud/agent/api/ValidateSnapshotAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ValidateSnapshotAnswer.java
rename to api/src/com/cloud/agent/api/ValidateSnapshotAnswer.java
diff --git a/core/src/com/cloud/agent/api/ValidateSnapshotCommand.java b/api/src/com/cloud/agent/api/ValidateSnapshotCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/ValidateSnapshotCommand.java
rename to api/src/com/cloud/agent/api/ValidateSnapshotCommand.java
diff --git a/core/src/com/cloud/agent/api/VmStatsEntry.java b/api/src/com/cloud/agent/api/VmStatsEntry.java
similarity index 100%
rename from core/src/com/cloud/agent/api/VmStatsEntry.java
rename to api/src/com/cloud/agent/api/VmStatsEntry.java
diff --git a/core/src/com/cloud/agent/api/check/CheckSshAnswer.java b/api/src/com/cloud/agent/api/check/CheckSshAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/check/CheckSshAnswer.java
rename to api/src/com/cloud/agent/api/check/CheckSshAnswer.java
diff --git a/core/src/com/cloud/agent/api/check/CheckSshCommand.java b/api/src/com/cloud/agent/api/check/CheckSshCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/check/CheckSshCommand.java
rename to api/src/com/cloud/agent/api/check/CheckSshCommand.java
diff --git a/core/src/com/cloud/agent/api/proxy/CheckConsoleProxyLoadCommand.java b/api/src/com/cloud/agent/api/proxy/CheckConsoleProxyLoadCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/proxy/CheckConsoleProxyLoadCommand.java
rename to api/src/com/cloud/agent/api/proxy/CheckConsoleProxyLoadCommand.java
diff --git a/core/src/com/cloud/agent/api/proxy/ConsoleProxyLoadAnswer.java b/api/src/com/cloud/agent/api/proxy/ConsoleProxyLoadAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/proxy/ConsoleProxyLoadAnswer.java
rename to api/src/com/cloud/agent/api/proxy/ConsoleProxyLoadAnswer.java
diff --git a/core/src/com/cloud/agent/api/proxy/ProxyCommand.java b/api/src/com/cloud/agent/api/proxy/ProxyCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/proxy/ProxyCommand.java
rename to api/src/com/cloud/agent/api/proxy/ProxyCommand.java
diff --git a/core/src/com/cloud/agent/api/proxy/UpdateCertificateCommand.java b/api/src/com/cloud/agent/api/proxy/UpdateCertificateCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/proxy/UpdateCertificateCommand.java
rename to api/src/com/cloud/agent/api/proxy/UpdateCertificateCommand.java
diff --git a/core/src/com/cloud/agent/api/proxy/WatchConsoleProxyLoadCommand.java b/api/src/com/cloud/agent/api/proxy/WatchConsoleProxyLoadCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/proxy/WatchConsoleProxyLoadCommand.java
rename to api/src/com/cloud/agent/api/proxy/WatchConsoleProxyLoadCommand.java
diff --git a/api/src/com/cloud/agent/api/routing/LoadBalancerConfigCommand.java b/api/src/com/cloud/agent/api/routing/LoadBalancerConfigCommand.java
index e1078227cec..a672fdb4100 100644
--- a/api/src/com/cloud/agent/api/routing/LoadBalancerConfigCommand.java
+++ b/api/src/com/cloud/agent/api/routing/LoadBalancerConfigCommand.java
@@ -26,10 +26,14 @@ import com.cloud.agent.api.to.LoadBalancerTO;
public class LoadBalancerConfigCommand extends NetworkElementCommand {
LoadBalancerTO[] loadBalancers;
+ protected LoadBalancerConfigCommand() {
+
+ }
+
public LoadBalancerConfigCommand( LoadBalancerTO[] loadBalancers) {
this.loadBalancers = loadBalancers;
}
-
+
public LoadBalancerTO[] getLoadBalancers() {
return loadBalancers;
diff --git a/core/src/com/cloud/agent/api/routing/RemoteAccessVpnCfgCommand.java b/api/src/com/cloud/agent/api/routing/RemoteAccessVpnCfgCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/RemoteAccessVpnCfgCommand.java
rename to api/src/com/cloud/agent/api/routing/RemoteAccessVpnCfgCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/SavePasswordCommand.java b/api/src/com/cloud/agent/api/routing/SavePasswordCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/SavePasswordCommand.java
rename to api/src/com/cloud/agent/api/routing/SavePasswordCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/UserDataCommand.java b/api/src/com/cloud/agent/api/routing/UserDataCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/UserDataCommand.java
rename to api/src/com/cloud/agent/api/routing/UserDataCommand.java
diff --git a/core/src/com/cloud/agent/api/routing/VpnUsersCfgCommand.java b/api/src/com/cloud/agent/api/routing/VpnUsersCfgCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/routing/VpnUsersCfgCommand.java
rename to api/src/com/cloud/agent/api/routing/VpnUsersCfgCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/AbstractDownloadCommand.java b/api/src/com/cloud/agent/api/storage/AbstractDownloadCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/AbstractDownloadCommand.java
rename to api/src/com/cloud/agent/api/storage/AbstractDownloadCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/AbstractUploadCommand.java b/api/src/com/cloud/agent/api/storage/AbstractUploadCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/AbstractUploadCommand.java
rename to api/src/com/cloud/agent/api/storage/AbstractUploadCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/CopyVolumeAnswer.java b/api/src/com/cloud/agent/api/storage/CopyVolumeAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/CopyVolumeAnswer.java
rename to api/src/com/cloud/agent/api/storage/CopyVolumeAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/CopyVolumeCommand.java b/api/src/com/cloud/agent/api/storage/CopyVolumeCommand.java
similarity index 87%
rename from core/src/com/cloud/agent/api/storage/CopyVolumeCommand.java
rename to api/src/com/cloud/agent/api/storage/CopyVolumeCommand.java
index 152bd1563e0..3e367230795 100644
--- a/core/src/com/cloud/agent/api/storage/CopyVolumeCommand.java
+++ b/api/src/com/cloud/agent/api/storage/CopyVolumeCommand.java
@@ -19,13 +19,14 @@
package com.cloud.agent.api.storage;
import com.cloud.agent.api.Command;
-import com.cloud.storage.StoragePoolVO;
+import com.cloud.agent.api.to.StorageFilerTO;
+import com.cloud.storage.StoragePool;
public class CopyVolumeCommand extends Command {
long volumeId;
String volumePath;
- StoragePoolVO pool;
+ StorageFilerTO pool;
String secondaryStorageURL;
boolean toSecondaryStorage;
String vmName;
@@ -33,10 +34,10 @@ public class CopyVolumeCommand extends Command {
public CopyVolumeCommand() {
}
- public CopyVolumeCommand(long volumeId, String volumePath, StoragePoolVO pool, String secondaryStorageURL, boolean toSecondaryStorage) {
+ public CopyVolumeCommand(long volumeId, String volumePath, StoragePool pool, String secondaryStorageURL, boolean toSecondaryStorage) {
this.volumeId = volumeId;
this.volumePath = volumePath;
- this.pool = pool;
+ this.pool = new StorageFilerTO(pool);
this.secondaryStorageURL = secondaryStorageURL;
this.toSecondaryStorage = toSecondaryStorage;
}
@@ -54,7 +55,7 @@ public class CopyVolumeCommand extends Command {
return volumeId;
}
- public StoragePoolVO getPool() {
+ public StorageFilerTO getPool() {
return pool;
}
diff --git a/core/src/com/cloud/agent/api/storage/CreateAnswer.java b/api/src/com/cloud/agent/api/storage/CreateAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/CreateAnswer.java
rename to api/src/com/cloud/agent/api/storage/CreateAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/CreateEntityDownloadURLAnswer.java b/api/src/com/cloud/agent/api/storage/CreateEntityDownloadURLAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/CreateEntityDownloadURLAnswer.java
rename to api/src/com/cloud/agent/api/storage/CreateEntityDownloadURLAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/CreateEntityDownloadURLCommand.java b/api/src/com/cloud/agent/api/storage/CreateEntityDownloadURLCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/CreateEntityDownloadURLCommand.java
rename to api/src/com/cloud/agent/api/storage/CreateEntityDownloadURLCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/CreatePrivateTemplateAnswer.java b/api/src/com/cloud/agent/api/storage/CreatePrivateTemplateAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/CreatePrivateTemplateAnswer.java
rename to api/src/com/cloud/agent/api/storage/CreatePrivateTemplateAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/CreatePrivateTemplateCommand.java b/api/src/com/cloud/agent/api/storage/CreatePrivateTemplateCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/CreatePrivateTemplateCommand.java
rename to api/src/com/cloud/agent/api/storage/CreatePrivateTemplateCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLAnswer.java b/api/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLAnswer.java
rename to api/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLCommand.java b/api/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLCommand.java
rename to api/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/DeleteTemplateCommand.java b/api/src/com/cloud/agent/api/storage/DeleteTemplateCommand.java
similarity index 96%
rename from core/src/com/cloud/agent/api/storage/DeleteTemplateCommand.java
rename to api/src/com/cloud/agent/api/storage/DeleteTemplateCommand.java
index f65b07d755f..5d09d3dd9d8 100644
--- a/core/src/com/cloud/agent/api/storage/DeleteTemplateCommand.java
+++ b/api/src/com/cloud/agent/api/storage/DeleteTemplateCommand.java
@@ -19,7 +19,6 @@
package com.cloud.agent.api.storage;
import com.cloud.agent.api.Command;
-import com.cloud.storage.StoragePoolVO;
public class DeleteTemplateCommand extends Command {
diff --git a/core/src/com/cloud/agent/api/storage/DestroyAnswer.java b/api/src/com/cloud/agent/api/storage/DestroyAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/DestroyAnswer.java
rename to api/src/com/cloud/agent/api/storage/DestroyAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/DestroyCommand.java b/api/src/com/cloud/agent/api/storage/DestroyCommand.java
similarity index 85%
rename from core/src/com/cloud/agent/api/storage/DestroyCommand.java
rename to api/src/com/cloud/agent/api/storage/DestroyCommand.java
index 6a624e983c2..c5e3de08b85 100755
--- a/core/src/com/cloud/agent/api/storage/DestroyCommand.java
+++ b/api/src/com/cloud/agent/api/storage/DestroyCommand.java
@@ -19,9 +19,9 @@ package com.cloud.agent.api.storage;
import com.cloud.agent.api.to.VolumeTO;
import com.cloud.storage.Storage;
-import com.cloud.storage.StoragePoolVO;
-import com.cloud.storage.VMTemplateStoragePoolVO;
-import com.cloud.storage.VolumeVO;
+import com.cloud.storage.StoragePool;
+import com.cloud.storage.VMTemplateStorageResourceAssoc;
+import com.cloud.storage.Volume;
public class DestroyCommand extends StorageCommand {
// in VMware, things are designed around VM instead of volume, we need it the volume VM context if the volume is attached
@@ -31,12 +31,12 @@ public class DestroyCommand extends StorageCommand {
protected DestroyCommand() {
}
- public DestroyCommand(StoragePoolVO pool, VolumeVO volume, String vmName) {
+ public DestroyCommand(StoragePool pool, Volume volume, String vmName) {
this.volume = new VolumeTO(volume, pool);
this.vmName = vmName;
}
- public DestroyCommand(StoragePoolVO pool, VMTemplateStoragePoolVO templatePoolRef) {
+ public DestroyCommand(StoragePool pool, VMTemplateStorageResourceAssoc templatePoolRef) {
volume = new VolumeTO(templatePoolRef.getId(), null, Storage.StorageResourceType.STORAGE_POOL, pool.getPoolType(),
pool.getUuid(), null, pool.getPath(),
templatePoolRef.getInstallPath(), templatePoolRef.getTemplateSize(), null);
diff --git a/core/src/com/cloud/agent/api/storage/DownloadAnswer.java b/api/src/com/cloud/agent/api/storage/DownloadAnswer.java
similarity index 91%
rename from core/src/com/cloud/agent/api/storage/DownloadAnswer.java
rename to api/src/com/cloud/agent/api/storage/DownloadAnswer.java
index 6fc8599374d..5b361944f39 100644
--- a/core/src/com/cloud/agent/api/storage/DownloadAnswer.java
+++ b/api/src/com/cloud/agent/api/storage/DownloadAnswer.java
@@ -21,14 +21,14 @@ import java.io.File;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.Command;
-import com.cloud.storage.VMTemplateHostVO;
+import com.cloud.storage.VMTemplateStorageResourceAssoc;
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
public class DownloadAnswer extends Answer {
private String jobId;
private int downloadPct;
private String errorString;
- private VMTemplateHostVO.Status downloadStatus;
+ private VMTemplateStorageResourceAssoc.Status downloadStatus;
private String downloadPath;
private String installPath;
private long templateSize = 0L;
@@ -45,7 +45,7 @@ public class DownloadAnswer extends Answer {
return downloadStatus.toString();
}
- public VMTemplateHostVO.Status getDownloadStatus() {
+ public VMTemplateStorageResourceAssoc.Status getDownloadStatus() {
return downloadStatus;
}
@@ -94,8 +94,9 @@ public class DownloadAnswer extends Answer {
}
private static String fixPath(String path){
- if (path == null)
- return path;
+ if (path == null) {
+ return path;
+ }
if (path.startsWith(File.separator)) {
path=path.substring(File.separator.length());
}
@@ -105,7 +106,7 @@ public class DownloadAnswer extends Answer {
return path;
}
- public void setDownloadStatus(VMTemplateHostVO.Status downloadStatus) {
+ public void setDownloadStatus(VMTemplateStorageResourceAssoc.Status downloadStatus) {
this.downloadStatus = downloadStatus;
}
diff --git a/core/src/com/cloud/agent/api/storage/DownloadCommand.java b/api/src/com/cloud/agent/api/storage/DownloadCommand.java
similarity index 94%
rename from core/src/com/cloud/agent/api/storage/DownloadCommand.java
rename to api/src/com/cloud/agent/api/storage/DownloadCommand.java
index ea5c37806f0..700eb0e40a4 100644
--- a/core/src/com/cloud/agent/api/storage/DownloadCommand.java
+++ b/api/src/com/cloud/agent/api/storage/DownloadCommand.java
@@ -17,8 +17,8 @@
*/
package com.cloud.agent.api.storage;
-import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.Storage.ImageFormat;
+import com.cloud.template.VirtualMachineTemplate;
/**
@@ -64,9 +64,9 @@ public class DownloadCommand extends AbstractDownloadCommand {
this.maxDownloadSizeInBytes = that.getMaxDownloadSizeInBytes();
}
- public DownloadCommand(VMTemplateVO template, Long maxDownloadSizeInBytes) {
+ public DownloadCommand(VirtualMachineTemplate template, Long maxDownloadSizeInBytes) {
super(template.getUniqueName(), template.getUrl(), template.getFormat(), template.getAccountId());
- this.hvm = template.requiresHvm();
+ this.hvm = template.isRequiresHvm();
this.checksum = template.getChecksum();
this.id = template.getId();
this.description = template.getDisplayText();
diff --git a/core/src/com/cloud/agent/api/storage/DownloadProgressCommand.java b/api/src/com/cloud/agent/api/storage/DownloadProgressCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/DownloadProgressCommand.java
rename to api/src/com/cloud/agent/api/storage/DownloadProgressCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityAnswer.java b/api/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityAnswer.java
rename to api/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityCommand.java b/api/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityCommand.java
rename to api/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/PrimaryStorageDownloadAnswer.java b/api/src/com/cloud/agent/api/storage/PrimaryStorageDownloadAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/PrimaryStorageDownloadAnswer.java
rename to api/src/com/cloud/agent/api/storage/PrimaryStorageDownloadAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java b/api/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java
rename to api/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/StorageCommand.java b/api/src/com/cloud/agent/api/storage/StorageCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/StorageCommand.java
rename to api/src/com/cloud/agent/api/storage/StorageCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/UpgradeDiskAnswer.java b/api/src/com/cloud/agent/api/storage/UpgradeDiskAnswer.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/UpgradeDiskAnswer.java
rename to api/src/com/cloud/agent/api/storage/UpgradeDiskAnswer.java
diff --git a/core/src/com/cloud/agent/api/storage/UpgradeDiskCommand.java b/api/src/com/cloud/agent/api/storage/UpgradeDiskCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/UpgradeDiskCommand.java
rename to api/src/com/cloud/agent/api/storage/UpgradeDiskCommand.java
diff --git a/core/src/com/cloud/agent/api/storage/UploadAnswer.java b/api/src/com/cloud/agent/api/storage/UploadAnswer.java
similarity index 83%
rename from core/src/com/cloud/agent/api/storage/UploadAnswer.java
rename to api/src/com/cloud/agent/api/storage/UploadAnswer.java
index b878bf7ca6b..d122218fcda 100755
--- a/core/src/com/cloud/agent/api/storage/UploadAnswer.java
+++ b/api/src/com/cloud/agent/api/storage/UploadAnswer.java
@@ -4,7 +4,7 @@ import java.io.File;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.Command;
-import com.cloud.storage.UploadVO;
+import com.cloud.storage.Upload;
public class UploadAnswer extends Answer {
@@ -12,7 +12,7 @@ public class UploadAnswer extends Answer {
private String jobId;
private int uploadPct;
private String errorString;
- private UploadVO.Status uploadStatus;
+ private Upload.Status uploadStatus;
private String uploadPath;
private String installPath;
public Long templateSize = 0L;
@@ -28,7 +28,7 @@ public class UploadAnswer extends Answer {
return uploadStatus.toString();
}
- public UploadVO.Status getUploadStatus() {
+ public Upload.Status getUploadStatus() {
return uploadStatus;
}
@@ -50,7 +50,7 @@ public class UploadAnswer extends Answer {
}
public UploadAnswer(String jobId, int uploadPct, String errorString,
- UploadVO.Status uploadStatus, String fileSystemPath, String installPath, long templateSize) {
+ Upload.Status uploadStatus, String fileSystemPath, String installPath, long templateSize) {
super();
this.jobId = jobId;
this.uploadPct = uploadPct;
@@ -62,7 +62,7 @@ public class UploadAnswer extends Answer {
}
public UploadAnswer(String jobId, int uploadPct, Command command,
- UploadVO.Status uploadStatus, String fileSystemPath, String installPath) {
+ Upload.Status uploadStatus, String fileSystemPath, String installPath) {
super(command);
this.jobId = jobId;
this.uploadPct = uploadPct;
@@ -72,8 +72,9 @@ public class UploadAnswer extends Answer {
}
private static String fixPath(String path){
- if (path == null)
- return path;
+ if (path == null) {
+ return path;
+ }
if (path.startsWith(File.separator)) {
path=path.substring(File.separator.length());
}
@@ -83,7 +84,7 @@ public class UploadAnswer extends Answer {
return path;
}
- public void setUploadStatus(UploadVO.Status uploadStatus) {
+ public void setUploadStatus(Upload.Status uploadStatus) {
this.uploadStatus = uploadStatus;
}
diff --git a/core/src/com/cloud/agent/api/storage/UploadCommand.java b/api/src/com/cloud/agent/api/storage/UploadCommand.java
similarity index 78%
rename from core/src/com/cloud/agent/api/storage/UploadCommand.java
rename to api/src/com/cloud/agent/api/storage/UploadCommand.java
index a3f0695694b..6b50bba308b 100644
--- a/core/src/com/cloud/agent/api/storage/UploadCommand.java
+++ b/api/src/com/cloud/agent/api/storage/UploadCommand.java
@@ -1,15 +1,14 @@
package com.cloud.agent.api.storage;
-import com.cloud.storage.VMTemplateHostVO;
-import com.cloud.storage.Upload.Type;
-import com.cloud.storage.VMTemplateVO;
-import com.cloud.agent.api.storage.AbstractUploadCommand;
import com.cloud.agent.api.storage.DownloadCommand.PasswordAuth;
+import com.cloud.agent.api.to.TemplateTO;
+import com.cloud.storage.Upload.Type;
+import com.cloud.template.VirtualMachineTemplate;
public class UploadCommand extends AbstractUploadCommand {
- private VMTemplateVO template;
+ private TemplateTO template;
private String url;
private String installPath;
private boolean hvm;
@@ -20,14 +19,14 @@ public class UploadCommand extends AbstractUploadCommand {
private long id;
private Type type;
- public UploadCommand(VMTemplateVO template, String url, VMTemplateHostVO vmTemplateHost) {
+ public UploadCommand(VirtualMachineTemplate template, String url, String installPath, long sizeInBytes) {
- this.template = template;
+ this.template = new TemplateTO(template);
this.url = url;
- this.installPath = vmTemplateHost.getInstallPath();
+ this.installPath = installPath;
this.checksum = template.getChecksum();
this.id = template.getId();
- this.templateSizeInBytes = vmTemplateHost.getSize();
+ this.templateSizeInBytes = sizeInBytes;
}
@@ -56,19 +55,21 @@ public class UploadCommand extends AbstractUploadCommand {
}
- public VMTemplateVO getTemplate() {
+ public TemplateTO getTemplate() {
return template;
}
- public void setTemplate(VMTemplateVO template) {
+ public void setTemplate(TemplateTO template) {
this.template = template;
}
- public String getUrl() {
+ @Override
+ public String getUrl() {
return url;
}
- public void setUrl(String url) {
+ @Override
+ public void setUrl(String url) {
this.url = url;
}
diff --git a/core/src/com/cloud/agent/api/storage/UploadProgressCommand.java b/api/src/com/cloud/agent/api/storage/UploadProgressCommand.java
similarity index 100%
rename from core/src/com/cloud/agent/api/storage/UploadProgressCommand.java
rename to api/src/com/cloud/agent/api/storage/UploadProgressCommand.java
diff --git a/core/src/com/cloud/agent/api/to/HostTO.java b/api/src/com/cloud/agent/api/to/HostTO.java
similarity index 97%
rename from core/src/com/cloud/agent/api/to/HostTO.java
rename to api/src/com/cloud/agent/api/to/HostTO.java
index 91cfa65437e..bb80215666d 100644
--- a/core/src/com/cloud/agent/api/to/HostTO.java
+++ b/api/src/com/cloud/agent/api/to/HostTO.java
@@ -17,7 +17,7 @@
*/
package com.cloud.agent.api.to;
-import com.cloud.host.HostVO;
+import com.cloud.host.Host;
public class HostTO {
private String guid;
@@ -29,7 +29,7 @@ public class HostTO {
protected HostTO() {
}
- public HostTO(HostVO vo) {
+ public HostTO(Host vo) {
guid = vo.getGuid();
privateNetwork = new NetworkTO(vo.getPrivateIpAddress(), vo.getPrivateNetmask(), vo.getPrivateMacAddress());
if (vo.getPublicIpAddress() != null) {
diff --git a/api/src/com/cloud/agent/api/to/IpAddressTO.java b/api/src/com/cloud/agent/api/to/IpAddressTO.java
index d85998e4941..799a1658f69 100644
--- a/api/src/com/cloud/agent/api/to/IpAddressTO.java
+++ b/api/src/com/cloud/agent/api/to/IpAddressTO.java
@@ -13,9 +13,10 @@ public class IpAddressTO {
private String vlanNetmask;
private String vifMacAddress;
private String guestIp;
+ private Integer networkRate;
- public IpAddressTO(String ipAddress, boolean add, boolean firstIP, boolean sourceNat, String vlanId, String vlanGateway, String vlanNetmask, String vifMacAddress, String guestIp) {
+ public IpAddressTO(String ipAddress, boolean add, boolean firstIP, boolean sourceNat, String vlanId, String vlanGateway, String vlanNetmask, String vifMacAddress, String guestIp, Integer networkRate) {
this.publicIp = ipAddress;
this.add = add;
this.firstIP = firstIP;
@@ -25,6 +26,7 @@ public class IpAddressTO {
this.vlanNetmask = vlanNetmask;
this.vifMacAddress = vifMacAddress;
this.guestIp = guestIp;
+ this.networkRate = networkRate;
}
protected IpAddressTO() {
@@ -73,5 +75,9 @@ public class IpAddressTO {
public String getVifMacAddress() {
return vifMacAddress;
}
+
+ public Integer getNetworkRate() {
+ return networkRate;
+ }
}
diff --git a/api/src/com/cloud/agent/api/to/NicTO.java b/api/src/com/cloud/agent/api/to/NicTO.java
index 95e0de0447e..3b73ca1f0b0 100644
--- a/api/src/com/cloud/agent/api/to/NicTO.java
+++ b/api/src/com/cloud/agent/api/to/NicTO.java
@@ -5,7 +5,7 @@ package com.cloud.agent.api.to;
public class NicTO extends NetworkTO {
int deviceId;
- Integer networkRateMbps;
+ int networkRateMbps;
Integer networkRateMulticastMbps;
boolean defaultNic;
diff --git a/core/src/com/cloud/agent/api/to/TemplateTO.java b/api/src/com/cloud/agent/api/to/TemplateTO.java
similarity index 89%
rename from core/src/com/cloud/agent/api/to/TemplateTO.java
rename to api/src/com/cloud/agent/api/to/TemplateTO.java
index 02372598170..126a7b911e1 100644
--- a/core/src/com/cloud/agent/api/to/TemplateTO.java
+++ b/api/src/com/cloud/agent/api/to/TemplateTO.java
@@ -17,9 +17,8 @@
*/
package com.cloud.agent.api.to;
-import com.cloud.storage.VMTemplateStoragePoolVO;
-import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.Storage.ImageFormat;
+import com.cloud.template.VirtualMachineTemplate;
public class TemplateTO {
private long id;
@@ -29,7 +28,7 @@ public class TemplateTO {
protected TemplateTO() {
}
- public TemplateTO(VMTemplateVO template, VMTemplateStoragePoolVO storedAt) {
+ public TemplateTO(VirtualMachineTemplate template) {
this.id = template.getId();
this.uniqueName = template.getUniqueName();
this.format = template.getFormat();
diff --git a/api/src/com/cloud/api/ApiConstants.java b/api/src/com/cloud/api/ApiConstants.java
index 7b9f96a1bcf..d2c3fcc80ff 100755
--- a/api/src/com/cloud/api/ApiConstants.java
+++ b/api/src/com/cloud/api/ApiConstants.java
@@ -129,6 +129,7 @@ public class ApiConstants {
public static final String SECRET_KEY = "secretkey";
public static final String SECURITY_GROUP_LIST = "securitygrouplist";
public static final String SECURITY_GROUP_NAME = "securitygroupname";
+ public static final String SECURITY_GROUP_ID = "securitygroupid";
public static final String SENT = "sent";
public static final String SENT_BYTES = "sentbytes";
public static final String SERVICE_OFFERING_ID = "serviceofferingid";
@@ -178,5 +179,6 @@ public class ApiConstants {
public static final String IS_DEFAULT = "isdefault";
public static final String IS_SYSTEM = "issystem";
public static final String AVAILABILITY = "availability";
+ public static final String NETWORKRATE = "networkrate";
}
diff --git a/api/src/com/cloud/api/commands/AuthorizeSecurityGroupIngressCmd.java b/api/src/com/cloud/api/commands/AuthorizeSecurityGroupIngressCmd.java
index 1dc774b402b..17ff761afb9 100644
--- a/api/src/com/cloud/api/commands/AuthorizeSecurityGroupIngressCmd.java
+++ b/api/src/com/cloud/api/commands/AuthorizeSecurityGroupIngressCmd.java
@@ -32,6 +32,7 @@ import com.cloud.api.BaseCmd;
import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
import com.cloud.api.ServerApiException;
+import com.cloud.api.BaseCmd.CommandType;
import com.cloud.api.response.IngressRuleResponse;
import com.cloud.api.response.SecurityGroupResponse;
import com.cloud.event.EventTypes;
@@ -65,8 +66,8 @@ public class AuthorizeSecurityGroupIngressCmd extends BaseAsyncCmd {
@Parameter(name=ApiConstants.ICMP_CODE, type=CommandType.INTEGER, description="error code for this icmp message")
private Integer icmpCode;
- @Parameter(name=ApiConstants.SECURITY_GROUP_NAME, type=CommandType.STRING, required=true, description="the security group name")
- private String securityGroupName;
+ @Parameter(name=ApiConstants.SECURITY_GROUP_ID, type=CommandType.LONG, required=true, description="The ID of the security group")
+ private Long securityGroupId;
@Parameter(name=ApiConstants.CIDR_LIST, type=CommandType.LIST, collectionType=CommandType.STRING, description="the cidr list associated")
private List cidrList;
@@ -109,8 +110,8 @@ public class AuthorizeSecurityGroupIngressCmd extends BaseAsyncCmd {
return icmpType;
}
- public String getSecurityGroupName() {
- return securityGroupName;
+ public Long getSecurityGroupId() {
+ return securityGroupId;
}
public String getProtocol() {
@@ -192,7 +193,7 @@ public class AuthorizeSecurityGroupIngressCmd extends BaseAsyncCmd {
sb.append("");
}
- return "authorizing ingress to group: " + getSecurityGroupName() + " to " + sb.toString();
+ return "authorizing ingress to group: " + getSecurityGroupId() + " to " + sb.toString();
}
@Override
diff --git a/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java b/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java
index 2c6822254f5..9e95f07bb1f 100644
--- a/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java
+++ b/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java
@@ -58,6 +58,9 @@ public class CreateNetworkOfferingCmd extends BaseCmd {
@Parameter(name=ApiConstants.AVAILABILITY, type=CommandType.STRING, description="the availability of network offering. Default value is Required")
private String availability;
+
+ @Parameter(name=ApiConstants.NETWORKRATE, type=CommandType.INTEGER, description="data transfer rate in megabits per second allowed.")
+ private Integer networkRate;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
@@ -91,6 +94,10 @@ public class CreateNetworkOfferingCmd extends BaseCmd {
//Verify availability
return availability == null ? Availability.Required.toString() : availability;
}
+
+ public Integer getNetworkRate() {
+ return networkRate;
+ }
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
diff --git a/api/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java b/api/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java
index 51fe94a76c0..8501b7c2147 100644
--- a/api/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java
+++ b/api/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java
@@ -31,6 +31,7 @@ import com.cloud.event.EventTypes;
import com.cloud.exception.NetworkRuleConflictException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.rules.PortForwardingRule;
+import com.cloud.user.Account;
import com.cloud.user.UserContext;
import com.cloud.utils.net.Ip;
@@ -163,7 +164,13 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements
@Override
public long getEntityOwnerId() {
- return _entityMgr.findById(PortForwardingRule.class, getEntityId()).getAccountId();
+ Account account = UserContext.current().getCaller();
+
+ if (account != null) {
+ return account.getId();
+ }
+
+ return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked
}
@Override
diff --git a/api/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java b/api/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java
index d746eace132..66300fa072b 100644
--- a/api/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java
+++ b/api/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java
@@ -29,6 +29,7 @@ import com.cloud.api.response.VlanIpRangeResponse;
import com.cloud.dc.Vlan;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientCapacityException;
+import com.cloud.exception.ResourceUnavailableException;
@Implementation(description="Creates a VLAN IP range.", responseObject=VlanIpRangeResponse.class)
public class CreateVlanIpRangeCmd extends BaseCmd {
@@ -132,7 +133,7 @@ public class CreateVlanIpRangeCmd extends BaseCmd {
}
@Override
- public void execute(){
+ public void execute() throws ResourceUnavailableException{
try {
Vlan result = _configService.createVlanAndPublicIpRange(this);
if (result != null) {
@@ -148,6 +149,6 @@ public class CreateVlanIpRangeCmd extends BaseCmd {
} catch (InsufficientCapacityException ex) {
s_logger.info(ex);
throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage());
- }
+ }
}
}
diff --git a/api/src/com/cloud/api/commands/DeleteSecurityGroupCmd.java b/api/src/com/cloud/api/commands/DeleteSecurityGroupCmd.java
index 46ca04a800d..515cabd1b11 100644
--- a/api/src/com/cloud/api/commands/DeleteSecurityGroupCmd.java
+++ b/api/src/com/cloud/api/commands/DeleteSecurityGroupCmd.java
@@ -7,6 +7,7 @@ import com.cloud.api.BaseCmd;
import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
import com.cloud.api.ServerApiException;
+import com.cloud.api.BaseCmd.CommandType;
import com.cloud.api.response.SuccessResponse;
import com.cloud.exception.ResourceInUseException;
@@ -25,8 +26,8 @@ public class DeleteSecurityGroupCmd extends BaseCmd {
@Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the domain ID of account owning the security group")
private Long domainId;
- @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the security group name")
- private String securityGroupName;
+ @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the security group")
+ private Long id;
/////////////////////////////////////////////////////
@@ -41,11 +42,12 @@ public class DeleteSecurityGroupCmd extends BaseCmd {
return domainId;
}
- public String getSecurityGroupName() {
- return securityGroupName;
+ public Long getId() {
+ return id;
}
+
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
diff --git a/api/src/com/cloud/api/commands/DeployVMCmd.java b/api/src/com/cloud/api/commands/DeployVMCmd.java
index c0a7fc2abd3..6f4343f365f 100644
--- a/api/src/com/cloud/api/commands/DeployVMCmd.java
+++ b/api/src/com/cloud/api/commands/DeployVMCmd.java
@@ -215,7 +215,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd {
@Override
public String getEventType() {
- return EventTypes.EVENT_VM_START;
+ return EventTypes.EVENT_VM_CREATE;
}
@Override
diff --git a/api/src/com/cloud/api/commands/ListAccountsCmd.java b/api/src/com/cloud/api/commands/ListAccountsCmd.java
index 004f62a4952..e8a7ac0b3ec 100644
--- a/api/src/com/cloud/api/commands/ListAccountsCmd.java
+++ b/api/src/com/cloud/api/commands/ListAccountsCmd.java
@@ -26,6 +26,7 @@ import com.cloud.api.ApiConstants;
import com.cloud.api.BaseListCmd;
import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
+import com.cloud.api.BaseCmd.CommandType;
import com.cloud.api.response.AccountResponse;
import com.cloud.api.response.ListResponse;
import com.cloud.user.Account;
@@ -57,7 +58,9 @@ public class ListAccountsCmd extends BaseListCmd {
@Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="list accounts by state. Valid states are enabled, disabled, and locked.")
private String state;
-
+ @Parameter(name=ApiConstants.IS_RECURSIVE, type=CommandType.BOOLEAN, description="defaults to false, but if true, lists all accounts from the parent specified by the domain id till leaves.")
+ private Boolean recursive;
+
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
@@ -85,6 +88,10 @@ public class ListAccountsCmd extends BaseListCmd {
public String getState() {
return state;
}
+
+ public Boolean isRecursive() {
+ return recursive;
+ }
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
diff --git a/api/src/com/cloud/api/commands/ListHypervisorsCmd.java b/api/src/com/cloud/api/commands/ListHypervisorsCmd.java
index 60fc69bfae0..e017fc2eb66 100644
--- a/api/src/com/cloud/api/commands/ListHypervisorsCmd.java
+++ b/api/src/com/cloud/api/commands/ListHypervisorsCmd.java
@@ -21,8 +21,10 @@ import java.util.ArrayList;
import org.apache.log4j.Logger;
+import com.cloud.api.ApiConstants;
import com.cloud.api.BaseCmd;
import com.cloud.api.Implementation;
+import com.cloud.api.Parameter;
import com.cloud.api.response.HypervisorResponse;
import com.cloud.api.response.ListResponse;
@@ -36,18 +38,39 @@ public class ListHypervisorsCmd extends BaseCmd {
return s_name;
}
+
+ /////////////////////////////////////////////////////
+ //////////////// API parameters /////////////////////
+ /////////////////////////////////////////////////////
+
+ @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the zone id for listing hypervisors.")
+ private Long zoneId;
+
+ /////////////////////////////////////////////////////
+ /////////////////// Accessors ///////////////////////
+ /////////////////////////////////////////////////////
+
+ public Long getZoneId() {
+ return this.zoneId;
+ }
+
+ /////////////////////////////////////////////////////
+ /////////////// API Implementation///////////////////
+ /////////////////////////////////////////////////////
+
@Override
public void execute(){
String[] result = _mgr.getHypervisors(this);
ListResponse response = new ListResponse();
ArrayList responses = new ArrayList();
- for (String hypervisor : result) {
- HypervisorResponse hypervisorResponse = new HypervisorResponse();
- hypervisorResponse.setName(hypervisor);
- hypervisorResponse.setObjectName("hypervisor");
- responses.add(hypervisorResponse);
+ if(result != null) {
+ for (String hypervisor : result) {
+ HypervisorResponse hypervisorResponse = new HypervisorResponse();
+ hypervisorResponse.setName(hypervisor);
+ hypervisorResponse.setObjectName("hypervisor");
+ responses.add(hypervisorResponse);
+ }
}
-
response.setResponses(responses);
response.setResponseName(getCommandName());
this.setResponseObject(response);
diff --git a/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java b/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java
index 3d0ce6d3c81..bb012859a13 100644
--- a/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java
+++ b/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java
@@ -42,6 +42,12 @@ public class ListPortForwardingRulesCmd extends BaseListCmd {
@Parameter(name=ApiConstants.IP_ADDRESS, type=CommandType.STRING, description="the IP address of the port forwarding services")
private String ipAddress;
+
+ @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="account. Must be used with the domainId parameter.")
+ private String accountName;
+
+ @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the domain ID. If used with the account parameter, lists port forwarding rules for the specified account in this domain.")
+ private Long domainId;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
@@ -50,6 +56,14 @@ public class ListPortForwardingRulesCmd extends BaseListCmd {
public String getIpAddress() {
return ipAddress;
}
+
+ public String getAccountName() {
+ return accountName;
+ }
+
+ public Long getDomainId() {
+ return domainId;
+ }
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
diff --git a/api/src/com/cloud/api/commands/ListSnapshotsCmd.java b/api/src/com/cloud/api/commands/ListSnapshotsCmd.java
index e01f0e7a71b..0e8b4cd048a 100644
--- a/api/src/com/cloud/api/commands/ListSnapshotsCmd.java
+++ b/api/src/com/cloud/api/commands/ListSnapshotsCmd.java
@@ -26,6 +26,7 @@ import com.cloud.api.ApiConstants;
import com.cloud.api.BaseListCmd;
import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
+import com.cloud.api.BaseCmd.CommandType;
import com.cloud.api.response.ListResponse;
import com.cloud.api.response.SnapshotResponse;
import com.cloud.async.AsyncJob;
@@ -62,6 +63,8 @@ public class ListSnapshotsCmd extends BaseListCmd {
@Parameter(name=ApiConstants.VOLUME_ID, type=CommandType.LONG, description="the ID of the disk volume")
private Long volumeId;
+ @Parameter(name=ApiConstants.IS_RECURSIVE, type=CommandType.BOOLEAN, description="defaults to false, but if true, lists all snapshots from the parent specified by the domain id till leaves.")
+ private Boolean recursive;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
@@ -94,6 +97,10 @@ public class ListSnapshotsCmd extends BaseListCmd {
return volumeId;
}
+ public Boolean isRecursive() {
+ return recursive;
+
+ }
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
diff --git a/api/src/com/cloud/api/commands/ListVMsCmd.java b/api/src/com/cloud/api/commands/ListVMsCmd.java
index db5f7238e78..d90cf80128c 100644
--- a/api/src/com/cloud/api/commands/ListVMsCmd.java
+++ b/api/src/com/cloud/api/commands/ListVMsCmd.java
@@ -47,6 +47,9 @@ public class ListVMsCmd extends BaseListCmd {
@Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the domain ID. If used with the account parameter, lists virtual machines for the specified account in this domain.")
private Long domainId;
+ @Parameter(name=ApiConstants.IS_RECURSIVE, type=CommandType.BOOLEAN, description="defaults to false, but if true, lists all vms from the parent specified by the domain id till leaves.")
+ private Boolean recursive;
+
@Parameter(name=ApiConstants.GROUP_ID, type=CommandType.LONG, description="the group ID")
private Long groupId;
@@ -126,6 +129,9 @@ public class ListVMsCmd extends BaseListCmd {
return networkId;
}
+ public Boolean isRecursive() {
+ return recursive;
+ }
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
diff --git a/api/src/com/cloud/api/commands/ListVolumesCmd.java b/api/src/com/cloud/api/commands/ListVolumesCmd.java
index 368aeade8fe..ee4282e2d2f 100755
--- a/api/src/com/cloud/api/commands/ListVolumesCmd.java
+++ b/api/src/com/cloud/api/commands/ListVolumesCmd.java
@@ -26,6 +26,7 @@ import com.cloud.api.ApiConstants;
import com.cloud.api.BaseListCmd;
import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
+import com.cloud.api.BaseCmd.CommandType;
import com.cloud.api.response.ListResponse;
import com.cloud.api.response.VolumeResponse;
import com.cloud.async.AsyncJob;
@@ -68,6 +69,9 @@ public class ListVolumesCmd extends BaseListCmd {
@Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the ID of the availability zone")
private Long zoneId;
+ @Parameter(name=ApiConstants.IS_RECURSIVE, type=CommandType.BOOLEAN, description="defaults to false, but if true, lists all volumes from the parent specified by the domain id till leaves.")
+ private Boolean recursive;
+
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
@@ -108,6 +112,10 @@ public class ListVolumesCmd extends BaseListCmd {
return zoneId;
}
+ public Boolean isRecursive() {
+ return recursive;
+ }
+
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
diff --git a/api/src/com/cloud/api/commands/RebootVMCmd.java b/api/src/com/cloud/api/commands/RebootVMCmd.java
index f63833f7bec..d88386ceb29 100644
--- a/api/src/com/cloud/api/commands/RebootVMCmd.java
+++ b/api/src/com/cloud/api/commands/RebootVMCmd.java
@@ -28,6 +28,8 @@ import com.cloud.api.ServerApiException;
import com.cloud.api.response.UserVmResponse;
import com.cloud.async.AsyncJob;
import com.cloud.event.EventTypes;
+import com.cloud.exception.InsufficientCapacityException;
+import com.cloud.exception.ResourceUnavailableException;
import com.cloud.user.Account;
import com.cloud.uservm.UserVm;
@@ -89,7 +91,7 @@ public class RebootVMCmd extends BaseAsyncCmd {
}
@Override
- public void execute(){
+ public void execute() throws ResourceUnavailableException, InsufficientCapacityException{
UserVm result = _userVmService.rebootVirtualMachine(this);
if (result !=null){
UserVmResponse response = _responseGenerator.createUserVmResponse(result);
diff --git a/api/src/com/cloud/api/commands/ResetVMPasswordCmd.java b/api/src/com/cloud/api/commands/ResetVMPasswordCmd.java
index 234156fd7ec..4b62ab30de0 100644
--- a/api/src/com/cloud/api/commands/ResetVMPasswordCmd.java
+++ b/api/src/com/cloud/api/commands/ResetVMPasswordCmd.java
@@ -30,6 +30,8 @@ import com.cloud.api.ServerApiException;
import com.cloud.api.response.UserVmResponse;
import com.cloud.async.AsyncJob;
import com.cloud.event.EventTypes;
+import com.cloud.exception.InsufficientCapacityException;
+import com.cloud.exception.ResourceUnavailableException;
import com.cloud.user.Account;
import com.cloud.uservm.UserVm;
@@ -107,7 +109,7 @@ public class ResetVMPasswordCmd extends BaseAsyncCmd {
Random _rand = new Random(System.currentTimeMillis());
@Override
- public void execute(){
+ public void execute() throws ResourceUnavailableException, InsufficientCapacityException{
password = Long.toHexString(_rand.nextLong());
UserVm result = _userVmService.resetVMPassword(this, password);
if (result != null){
diff --git a/api/src/com/cloud/api/commands/RestartNetworkCmd.java b/api/src/com/cloud/api/commands/RestartNetworkCmd.java
index b03c5d73ca9..32a91b75afd 100644
--- a/api/src/com/cloud/api/commands/RestartNetworkCmd.java
+++ b/api/src/com/cloud/api/commands/RestartNetworkCmd.java
@@ -44,20 +44,14 @@ public class RestartNetworkCmd extends BaseAsyncCmd {
//////////////// API parameters /////////////////////
/////////////////////////////////////////////////////
- @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the ID of the availability zone you want to acquire an public IP address from")
- private Long zoneId;
- @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="The network this ip address should be associated to.")
- private Long networkId;
+ @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The network this ip address should be associated to.")
+ private Long id;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
-
- public long getZoneId() {
- return zoneId;
- }
public String getEventDescription() {
return "Restarting network: " + getNetworkId();
@@ -68,13 +62,13 @@ public class RestartNetworkCmd extends BaseAsyncCmd {
}
public long getEntityOwnerId() {
- return _networkService.getNetwork(networkId).getAccountId();
+ return _networkService.getNetwork(id).getAccountId();
}
public Long getNetworkId() {
- Network network = _networkService.getNetwork(networkId);
+ Network network = _networkService.getNetwork(id);
if (network == null) {
- throw new InvalidParameterValueException("Unable to find network by id " + networkId);
+ throw new InvalidParameterValueException("Unable to find network by id " + id);
} else {
return network.getId();
}
diff --git a/api/src/com/cloud/api/commands/RevokeSecurityGroupIngressCmd.java b/api/src/com/cloud/api/commands/RevokeSecurityGroupIngressCmd.java
index 916a72153f1..75032d2ac12 100644
--- a/api/src/com/cloud/api/commands/RevokeSecurityGroupIngressCmd.java
+++ b/api/src/com/cloud/api/commands/RevokeSecurityGroupIngressCmd.java
@@ -13,6 +13,7 @@ import com.cloud.api.BaseCmd;
import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
import com.cloud.api.ServerApiException;
+import com.cloud.api.BaseCmd.CommandType;
import com.cloud.api.response.SuccessResponse;
import com.cloud.event.EventTypes;
import com.cloud.user.Account;
@@ -47,8 +48,8 @@ public class RevokeSecurityGroupIngressCmd extends BaseAsyncCmd {
@Parameter(name=ApiConstants.ICMP_TYPE, type=CommandType.INTEGER, description="type for this icmp message")
private Integer icmpType;
- @Parameter(name=ApiConstants.SECURITY_GROUP_NAME, type=CommandType.STRING, required=true, description="name of the security group")
- private String securityGroupName;
+ @Parameter(name=ApiConstants.SECURITY_GROUP_ID, type=CommandType.LONG, required=true, description="The ID of the security group")
+ private Long securityGroupId;
@Parameter(name=ApiConstants.PROTOCOL, type=CommandType.STRING, description="protocol used")
private String protocol;
@@ -87,8 +88,8 @@ public class RevokeSecurityGroupIngressCmd extends BaseAsyncCmd {
return icmpType;
}
- public String getSecurityGroupName() {
- return securityGroupName;
+ public Long getSecurityGroupId() {
+ return securityGroupId;
}
public String getProtocol() {
@@ -165,7 +166,7 @@ public class RevokeSecurityGroupIngressCmd extends BaseAsyncCmd {
sb.append("");
}
- return "revoking ingress from group: " + getSecurityGroupName() + " for " + sb.toString();
+ return "revoking ingress from group: " + getSecurityGroupId() + " for " + sb.toString();
}
@Override
diff --git a/api/src/com/cloud/api/response/AccountResponse.java b/api/src/com/cloud/api/response/AccountResponse.java
index a4ed2931ea8..98f4172757a 100644
--- a/api/src/com/cloud/api/response/AccountResponse.java
+++ b/api/src/com/cloud/api/response/AccountResponse.java
@@ -17,6 +17,8 @@
*/
package com.cloud.api.response;
+import java.util.List;
+
import com.cloud.api.ApiConstants;
import com.cloud.serializer.Param;
import com.google.gson.annotations.SerializedName;
@@ -99,6 +101,9 @@ public class AccountResponse extends BaseResponse {
@SerializedName(ApiConstants.IS_CLEANUP_REQUIRED) @Param(description="true if the account requires cleanup")
private Boolean cleanupRequired;
+
+ @SerializedName("user") @Param(description="the list of users associated with account", responseObject = NicResponse.class)
+ private List users;
public Long getId() {
return id;
@@ -307,4 +312,12 @@ public class AccountResponse extends BaseResponse {
public void setCleanupRequired(Boolean cleanupRequired) {
this.cleanupRequired = cleanupRequired;
}
+
+ public List getUsers() {
+ return this.users;
+ }
+
+ public void setUsers(List users) {
+ this.users = users;
+ }
}
diff --git a/api/src/com/cloud/api/response/NetworkOfferingResponse.java b/api/src/com/cloud/api/response/NetworkOfferingResponse.java
index 47bf6e98436..c0310bf51f6 100644
--- a/api/src/com/cloud/api/response/NetworkOfferingResponse.java
+++ b/api/src/com/cloud/api/response/NetworkOfferingResponse.java
@@ -2,6 +2,7 @@ package com.cloud.api.response;
import java.util.Date;
+import com.cloud.api.ApiConstants;
import com.cloud.serializer.Param;
import com.google.gson.annotations.SerializedName;
@@ -35,6 +36,9 @@ public class NetworkOfferingResponse extends BaseResponse{
@SerializedName("availability") @Param(description="availability of the network offering")
private String availability;
+
+ @SerializedName(ApiConstants.NETWORKRATE) @Param(description="data transfer rate in megabits per second allowed.")
+ private Integer networkRate;
public Long getId() {
return id;
@@ -123,4 +127,12 @@ public class NetworkOfferingResponse extends BaseResponse{
public void setAvailability(String availability) {
this.availability = availability;
}
+
+ public Integer getNetworkRate() {
+ return networkRate;
+ }
+
+ public void setNetworkRate(Integer networkRate) {
+ this.networkRate = networkRate;
+ }
}
diff --git a/api/src/com/cloud/configuration/ConfigurationService.java b/api/src/com/cloud/configuration/ConfigurationService.java
index a98965e23c9..b4e9f404890 100644
--- a/api/src/com/cloud/configuration/ConfigurationService.java
+++ b/api/src/com/cloud/configuration/ConfigurationService.java
@@ -28,9 +28,12 @@ import com.cloud.dc.Vlan;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.Networks.TrafficType;
import com.cloud.offering.DiskOffering;
import com.cloud.offering.NetworkOffering;
import com.cloud.offering.ServiceOffering;
+import com.cloud.user.Account;
public interface ConfigurationService {
@@ -173,7 +176,7 @@ public interface ConfigurationService {
* @throws
* @return The new Vlan object
*/
- Vlan createVlanAndPublicIpRange(CreateVlanIpRangeCmd cmd) throws InsufficientCapacityException, ConcurrentOperationException, InvalidParameterValueException;
+ Vlan createVlanAndPublicIpRange(CreateVlanIpRangeCmd cmd) throws InsufficientCapacityException, ConcurrentOperationException, InvalidParameterValueException, ResourceUnavailableException;
boolean deleteVlanIpRange(DeleteVlanIpRangeCmd cmd);
@@ -184,5 +187,13 @@ public interface ConfigurationService {
List extends NetworkOffering> searchForNetworkOfferings(ListNetworkOfferingsCmd cmd);
boolean deleteNetworkOffering(DeleteNetworkOfferingCmd cmd);
+
+ NetworkOffering getNetworkOffering(long id);
+
+ Integer getNetworkRate(long networkOfferingId);
+
+ Account getVlanAccount(long vlanId);
+
+ List extends NetworkOffering> listNetworkOfferings(TrafficType trafficType, boolean systemOnly);
}
diff --git a/api/src/com/cloud/event/ActionEvent.java b/api/src/com/cloud/event/ActionEvent.java
index f489e380cb2..61ff14ba968 100644
--- a/api/src/com/cloud/event/ActionEvent.java
+++ b/api/src/com/cloud/event/ActionEvent.java
@@ -28,6 +28,7 @@ import java.lang.annotation.Target;
@Retention(RUNTIME)
public @interface ActionEvent {
boolean create() default false;
+ boolean async() default false;
String eventType();
String eventDescription();
}
diff --git a/api/src/com/cloud/host/Host.java b/api/src/com/cloud/host/Host.java
index 3aaa504069c..ef5baf1cb53 100755
--- a/api/src/com/cloud/host/Host.java
+++ b/api/src/com/cloud/host/Host.java
@@ -19,8 +19,7 @@ package com.cloud.host;
import java.util.Date;
-import com.cloud.host.Status;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
/**
@@ -56,7 +55,7 @@ public interface Host {
/**
* @return id of the host.
*/
- Long getId();
+ long getId();
/**
* @return name of the machine.
@@ -145,27 +144,46 @@ public interface Host {
/**
* @return version
*/
- public String getVersion();
+ String getVersion();
/*
* @return total size
*/
- public long getTotalSize();
+ long getTotalSize();
/*
* @return capabilities
*/
- public String getCapabilities();
+ String getCapabilities();
/*
* @return last pinged time
*/
- public long getLastPinged();
+ long getLastPinged();
/*
* @return management server id
*/
- public Long getManagementServerId();
+ Long getManagementServerId();
/*
*@return removal date
*/
- public Date getRemoved();
+ Date getRemoved();
+
+ Long getClusterId();
+
+ String getPublicIpAddress();
+
+ String getPublicNetmask();
+
+ String getPrivateNetmask();
+
+ String getStorageNetmask();
+
+ String getStorageMacAddress();
+
+ String getPublicMacAddress();
+
+ String getPrivateMacAddress();
+
+ String getStorageNetmaskDeux();
+
+ String getStorageMacAddressDeux();
- public Long getClusterId();
}
diff --git a/core/src/com/cloud/host/HostEnvironment.java b/api/src/com/cloud/host/HostEnvironment.java
similarity index 100%
rename from core/src/com/cloud/host/HostEnvironment.java
rename to api/src/com/cloud/host/HostEnvironment.java
diff --git a/core/src/com/cloud/host/HostStats.java b/api/src/com/cloud/host/HostStats.java
similarity index 100%
rename from core/src/com/cloud/host/HostStats.java
rename to api/src/com/cloud/host/HostStats.java
diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java
index 5b0a9da8860..a6a83d83f85 100644
--- a/api/src/com/cloud/network/NetworkService.java
+++ b/api/src/com/cloud/network/NetworkService.java
@@ -26,6 +26,7 @@ import com.cloud.api.commands.ListNetworksCmd;
import com.cloud.api.commands.RestartNetworkCmd;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientAddressCapacityException;
+import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.exception.PermissionDeniedException;
import com.cloud.exception.ResourceAllocationException;
@@ -51,7 +52,7 @@ public interface NetworkService {
List extends Network> searchForNetworks(ListNetworksCmd cmd) throws InvalidParameterValueException, PermissionDeniedException;
boolean deleteNetwork(long networkId) throws InvalidParameterValueException, PermissionDeniedException;
- boolean restartNetwork(RestartNetworkCmd cmd) throws ConcurrentOperationException, ResourceUnavailableException;
+ boolean restartNetwork(RestartNetworkCmd cmd) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException;
int getActiveNicsInNetwork(long networkId);
diff --git a/api/src/com/cloud/network/Networks.java b/api/src/com/cloud/network/Networks.java
index 889ca567047..4527574a4d3 100644
--- a/api/src/com/cloud/network/Networks.java
+++ b/api/src/com/cloud/network/Networks.java
@@ -36,6 +36,14 @@ public class Networks {
Firewall
}
+ public enum RouterPrivateIpStrategy {
+ None,
+ DcGlobal, //global to data center
+ HostLocal;
+
+ public static String DummyPrivateIp = "169.254.1.1";
+ }
+
/**
* Different ways to assign ip address to this network.
*/
diff --git a/api/src/com/cloud/network/element/NetworkElement.java b/api/src/com/cloud/network/element/NetworkElement.java
index ec49880afe5..36a20dc0cc3 100644
--- a/api/src/com/cloud/network/element/NetworkElement.java
+++ b/api/src/com/cloud/network/element/NetworkElement.java
@@ -78,6 +78,15 @@ public interface NetworkElement extends Adapter {
*/
boolean shutdown(Network network, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException;
+ /**
+ * The network is being restarted.
+ * @param network
+ * @param context
+ * @return
+ * @throws ConcurrentOperationException
+ * @throws ResourceUnavailableException
+ */
+ boolean restart(Network network, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException;
/**
* The network is being destroyed.
diff --git a/api/src/com/cloud/network/ovs/OvsCreateTunnelAnswer.java b/api/src/com/cloud/network/ovs/OvsCreateTunnelAnswer.java
new file mode 100644
index 00000000000..3c4cc45aef4
--- /dev/null
+++ b/api/src/com/cloud/network/ovs/OvsCreateTunnelAnswer.java
@@ -0,0 +1,68 @@
+package com.cloud.network.ovs;
+
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.Command;
+
+public class OvsCreateTunnelAnswer extends Answer {
+ Long from;
+ Long to;
+ long account;
+ String inPortName;
+
+ //for debug info
+ String fromIp;
+ String toIp;
+ String key;
+ String bridge;
+
+ public OvsCreateTunnelAnswer(Command cmd, boolean success, String details, String bridge) {
+ super(cmd, success, details);
+ OvsCreateTunnelCommand c = (OvsCreateTunnelCommand)cmd;
+ from = c.getFrom();
+ to = c.getTo();
+ account = c.getAccount();
+ inPortName = "[]";
+ fromIp = c.getFromIp();
+ toIp = c.getRemoteIp();
+ key = c.getKey();
+ this.bridge = bridge;
+ }
+
+ public OvsCreateTunnelAnswer(Command cmd, boolean success, String details, String inPortName, String bridge) {
+ this(cmd, success, details, bridge);
+ this.inPortName = inPortName;
+ }
+
+
+ public Long getFrom() {
+ return from;
+ }
+
+ public Long getTo() {
+ return to;
+ }
+
+ public long getAccount() {
+ return account;
+ }
+
+ public String getInPortName() {
+ return inPortName;
+ }
+
+ public String getFromIp() {
+ return fromIp;
+ }
+
+ public String getToIp() {
+ return toIp;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public String getBridge() {
+ return bridge;
+ }
+}
diff --git a/api/src/com/cloud/network/ovs/OvsCreateTunnelCommand.java b/api/src/com/cloud/network/ovs/OvsCreateTunnelCommand.java
new file mode 100644
index 00000000000..8ac772d07e2
--- /dev/null
+++ b/api/src/com/cloud/network/ovs/OvsCreateTunnelCommand.java
@@ -0,0 +1,53 @@
+package com.cloud.network.ovs;
+
+import com.cloud.agent.api.Command;
+
+public class OvsCreateTunnelCommand extends Command {
+ String key;
+ String remoteIp;
+ Long from;
+ Long to;
+ long account;
+
+ //for debug info
+ String fromIp;
+
+ @Override
+ public boolean executeInSequence() {
+ return true;
+ }
+
+ public OvsCreateTunnelCommand(String remoteIp, String key, Long from, Long to, long account, String fromIp) {
+ this.remoteIp = remoteIp;
+ this.key = key;
+ this.from = from;
+ this.to = to;
+ this.account = account;
+ this.fromIp = fromIp;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public String getRemoteIp() {
+ return remoteIp;
+ }
+
+ public Long getFrom() {
+ return from;
+ }
+
+ public Long getTo() {
+ return to;
+ }
+
+ public long getAccount() {
+ return account;
+ }
+
+ public String getFromIp() {
+ return fromIp;
+ }
+
+}
diff --git a/api/src/com/cloud/network/ovs/OvsDestroyTunnelCommand.java b/api/src/com/cloud/network/ovs/OvsDestroyTunnelCommand.java
new file mode 100644
index 00000000000..65e12179ab0
--- /dev/null
+++ b/api/src/com/cloud/network/ovs/OvsDestroyTunnelCommand.java
@@ -0,0 +1,27 @@
+package com.cloud.network.ovs;
+
+import com.cloud.agent.api.Command;
+
+public class OvsDestroyTunnelCommand extends Command {
+ long account;
+ String inPortName;
+
+ public OvsDestroyTunnelCommand(long account, String inPortName) {
+ this.account = account;
+ this.inPortName = inPortName;
+ }
+
+ public long getAccount() {
+ return account;
+ }
+
+ public String getInPortName() {
+ return inPortName;
+ }
+
+ @Override
+ public boolean executeInSequence() {
+ return true;
+ }
+
+}
diff --git a/api/src/com/cloud/network/router/VirtualRouter.java b/api/src/com/cloud/network/router/VirtualRouter.java
index 51c9cb2341a..152611f3bdb 100755
--- a/api/src/com/cloud/network/router/VirtualRouter.java
+++ b/api/src/com/cloud/network/router/VirtualRouter.java
@@ -39,21 +39,6 @@ public interface VirtualRouter extends VirtualMachine {
public String getPublicNetmask();
- public String getPrivateNetmask();
-
- public String getVnet();
-
- public String getVlanId();
-
- public String getZoneVlan();
-
- public String getGuestZoneMacAddress();
-
- /**
- * @return the gateway address for the router to use.
- */
- public String getGateway();
-
/**
* @return the ram size for this machine.
*/
@@ -66,26 +51,9 @@ public interface VirtualRouter extends VirtualMachine {
*/
String getPublicIpAddress();
- String getDns1();
- String getDns2();
String getDomain();
- /**
- * @return account id that the domain router belongs to.
- */
- long getAccountId();
-
- /**
- * @return domain id that the domain router belongs to.
- */
- long getDomainId();
-
Role getRole();
-
- /**
- * @return the range of dhcp addresses served (start and end)
- */
- String[] getDhcpRange();
void setRamSize(int ramSize);
}
diff --git a/api/src/com/cloud/resource/Concierge.java b/api/src/com/cloud/resource/Concierge.java
deleted file mode 100644
index 04b1538ef5b..00000000000
--- a/api/src/com/cloud/resource/Concierge.java
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- *
- */
-package com.cloud.resource;
-
-import com.cloud.utils.component.Adapter;
-
-public interface Concierge extends Adapter {
-
-}
diff --git a/api/src/com/cloud/resource/Resource.java b/api/src/com/cloud/resource/Resource.java
deleted file mode 100644
index cb76142513e..00000000000
--- a/api/src/com/cloud/resource/Resource.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
- *
- */
-package com.cloud.resource;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
-
-import com.cloud.utils.fsm.FiniteState;
-import com.cloud.utils.fsm.StateMachine;
-
-/**
- * Indicates a resource in CloudStack.
- * Any resource that requires an reservation and release system
- * must implement this interface.
- *
- */
-public interface Resource {
- enum Event {
- ReservationRequested,
- ReleaseRequested,
- CancelRequested,
- OperationCompleted,
- OperationFailed,
- }
-
- enum State implements FiniteState {
- Allocated("Resource is allocated but not reserved"),
- Reserving("Resource is being reserved right now"),
- Reserved("Resource has been reserved."),
- Releasing("Resource is being released"),
- Deallocating("Resource is being deallocated");
-
- String _description;
-
- @Override
- public StateMachine getStateMachine() {
- return s_fsm;
- }
-
- @Override
- public State getNextState(Event event) {
- return s_fsm.getNextState(this, event);
- }
-
- @Override
- public List getFromStates(Event event) {
- return s_fsm.getFromStates(this, event);
- }
-
- @Override
- public Set getPossibleEvents() {
- return s_fsm.getPossibleEvents(this);
- }
-
- private State(String description) {
- _description = description;
- }
-
- @Override
- public String getDescription() {
- return _description;
- }
-
- final static private StateMachine s_fsm = new StateMachine();
- static {
- s_fsm.addTransition(State.Allocated, Event.ReservationRequested, State.Reserving);
- s_fsm.addTransition(State.Reserving, Event.CancelRequested, State.Allocated);
- s_fsm.addTransition(State.Reserving, Event.OperationCompleted, State.Reserved);
- s_fsm.addTransition(State.Reserving, Event.OperationFailed, State.Allocated);
- s_fsm.addTransition(State.Reserved, Event.ReleaseRequested, State.Releasing);
- s_fsm.addTransition(State.Releasing, Event.OperationCompleted, State.Allocated);
- s_fsm.addTransition(State.Releasing, Event.OperationFailed, State.Reserved);
- }
- }
-
- enum ReservationStrategy {
- PlaceHolder,
- Create,
- Start;
- }
-
- /**
- * @return id in the CloudStack database
- */
- long getId();
-
- /**
- * @return reservation id returned by the allocation source. This can be the
- * String version of the database id if the allocation source does not need it's
- * own implementation of the reservation id. This is passed back to the
- * allocation source to release the resource.
- */
- String getReservationId();
-
- /**
- * @return unique name for the allocation source.
- */
- String getReserver();
-
- /**
- * @return the time a reservation request was made to the allocation source.
- */
- Date getUpdateTime();
-
- /**
- * @return the expected reservation interval. -1 indicates
- */
- int getExpectedReservationInterval();
-
- /**
- * @return the expected release interval.
- */
- int getExpectedReleaseInterval();
-
- /**
- * @return the reservation state of the resource.
- */
- State getState();
-
- ReservationStrategy getReservationStrategy();
-}
diff --git a/core/src/com/cloud/storage/StorageStats.java b/api/src/com/cloud/storage/StorageStats.java
similarity index 100%
rename from core/src/com/cloud/storage/StorageStats.java
rename to api/src/com/cloud/storage/StorageStats.java
diff --git a/core/src/com/cloud/storage/VMTemplateStorageResourceAssoc.java b/api/src/com/cloud/storage/VMTemplateStorageResourceAssoc.java
similarity index 61%
rename from core/src/com/cloud/storage/VMTemplateStorageResourceAssoc.java
rename to api/src/com/cloud/storage/VMTemplateStorageResourceAssoc.java
index d42c7f10cb7..a78db8d3ac4 100644
--- a/core/src/com/cloud/storage/VMTemplateStorageResourceAssoc.java
+++ b/api/src/com/cloud/storage/VMTemplateStorageResourceAssoc.java
@@ -26,40 +26,42 @@ import java.util.Date;
public interface VMTemplateStorageResourceAssoc {
public static enum Status {UNKNOWN, DOWNLOAD_ERROR, NOT_DOWNLOADED, DOWNLOAD_IN_PROGRESS, DOWNLOADED, ABANDONED, UPLOADED, NOT_UPLOADED, UPLOAD_ERROR, UPLOAD_IN_PROGRESS}
- public String getInstallPath();
+ String getInstallPath();
- public long getTemplateId();
+ long getTemplateId();
- public void setTemplateId(long templateId);
+ void setTemplateId(long templateId);
- public int getDownloadPercent();
+ int getDownloadPercent();
- public void setDownloadPercent(int downloadPercent);
+ void setDownloadPercent(int downloadPercent);
- public void setDownloadState(Status downloadState);
+ void setDownloadState(Status downloadState);
- public Long getId();
+ long getId();
- public Date getCreated();
+ Date getCreated();
- public Date getLastUpdated();
+ Date getLastUpdated();
- public void setLastUpdated(Date date);
+ void setLastUpdated(Date date);
- public void setInstallPath(String installPath);
+ void setInstallPath(String installPath);
- public Status getDownloadState();
+ Status getDownloadState();
- public void setLocalDownloadPath(String localPath);
+ void setLocalDownloadPath(String localPath);
- public String getLocalDownloadPath();
+ String getLocalDownloadPath();
- public void setErrorString(String errorString);
+ void setErrorString(String errorString);
- public String getErrorString();
+ String getErrorString();
- public void setJobId(String jobId);
+ void setJobId(String jobId);
- public String getJobId();;
+ String getJobId();;
+
+ long getTemplateSize();
}
diff --git a/api/src/com/cloud/storage/Volume.java b/api/src/com/cloud/storage/Volume.java
index 2e650fb5179..b830eefb8ac 100755
--- a/api/src/com/cloud/storage/Volume.java
+++ b/api/src/com/cloud/storage/Volume.java
@@ -152,7 +152,6 @@ public interface Volume extends ControlledEntity, BasedOn {
Date getCreated();
AsyncInstanceCreateStatus getStatus();
- boolean getDestroyed();
long getDiskOfferingId();
diff --git a/core/src/com/cloud/storage/VolumeStats.java b/api/src/com/cloud/storage/VolumeStats.java
similarity index 100%
rename from core/src/com/cloud/storage/VolumeStats.java
rename to api/src/com/cloud/storage/VolumeStats.java
diff --git a/api/src/com/cloud/template/VirtualMachineTemplate.java b/api/src/com/cloud/template/VirtualMachineTemplate.java
index 6228f95ac3e..3a40f25f1fb 100755
--- a/api/src/com/cloud/template/VirtualMachineTemplate.java
+++ b/api/src/com/cloud/template/VirtualMachineTemplate.java
@@ -77,4 +77,10 @@ public interface VirtualMachineTemplate extends ControlledEntity {
HypervisorType getHypervisorType();
int getBits();
+
+ String getUniqueName();
+
+ String getUrl();
+
+ String getChecksum();
}
diff --git a/api/src/com/cloud/user/AccountService.java b/api/src/com/cloud/user/AccountService.java
index 839abac4864..20019cbfa12 100644
--- a/api/src/com/cloud/user/AccountService.java
+++ b/api/src/com/cloud/user/AccountService.java
@@ -33,10 +33,12 @@ import com.cloud.api.commands.UpdateAccountCmd;
import com.cloud.api.commands.UpdateResourceLimitCmd;
import com.cloud.api.commands.UpdateUserCmd;
import com.cloud.configuration.ResourceLimit;
+import com.cloud.domain.Domain;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.exception.PermissionDeniedException;
import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.utils.Pair;
public interface AccountService {
@@ -143,6 +145,8 @@ public interface AccountService {
Account finalizeOwner(Account caller, String accountName, Long domainId);
+ Pair finalizeAccountDomainForList(Account caller, String accountName, Long domainId);
+
Account getActiveAccount(String accountName, Long domainId);
Account getActiveAccount(Long accountId);
@@ -150,5 +154,7 @@ public interface AccountService {
Account getAccount(Long accountId);
User getActiveUser(long userId);
+
+ Domain getDomain(long id);
}
diff --git a/api/src/com/cloud/user/UserContext.java b/api/src/com/cloud/user/UserContext.java
index 1a48d159bd5..c4ec8ef7d93 100644
--- a/api/src/com/cloud/user/UserContext.java
+++ b/api/src/com/cloud/user/UserContext.java
@@ -32,6 +32,7 @@ public class UserContext {
private String sessionId;
private Account account;
private long startEventId = 0;
+ private long accountId;
private boolean apiServer;
@@ -112,4 +113,12 @@ public class UserContext {
return startEventId;
}
+ public long getAccountId() {
+ return accountId;
+ }
+
+ public void setAccountId(long accountId) {
+ this.accountId = accountId;
+ }
+
}
diff --git a/api/src/com/cloud/uservm/UserVm.java b/api/src/com/cloud/uservm/UserVm.java
index 4b0c90abe73..3cfe57babda 100755
--- a/api/src/com/cloud/uservm/UserVm.java
+++ b/api/src/com/cloud/uservm/UserVm.java
@@ -25,38 +25,6 @@ import com.cloud.vm.VirtualMachine;
*/
public interface UserVm extends VirtualMachine, ControlledEntity {
- /**
- * @return service offering id
- */
- @Override
- long getServiceOfferingId();
-
- /**
- * @return the domain router associated with this vm.
- Long getDomainRouterId();
- */
-
- /**
- * @return the vnet associated with this vm.
- */
- String getVnet();
-
- /**
- * @return the domain this vm instance belongs to.
- */
- @Override
- long getDomainId();
-
- /**
- * @return ip address within the guest network.
- */
- String getGuestIpAddress();
-
- /**
- * @return mac address of the guest network.
- */
- String getGuestMacAddress();
-
Long getIsoId();
String getDisplayName();
@@ -65,8 +33,6 @@ public interface UserVm extends VirtualMachine, ControlledEntity {
String getPassword();
- Long getDomainRouterId();
-
void setUserData(String userData);
String getDetail(String name);
diff --git a/api/src/com/cloud/vm/Nic.java b/api/src/com/cloud/vm/Nic.java
index 0576b553e6a..951dbe22950 100644
--- a/api/src/com/cloud/vm/Nic.java
+++ b/api/src/com/cloud/vm/Nic.java
@@ -18,15 +18,112 @@
package com.cloud.vm;
import java.net.URI;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
import com.cloud.network.Networks.Mode;
-import com.cloud.resource.Resource;
+import com.cloud.utils.fsm.FiniteState;
+import com.cloud.utils.fsm.StateMachine;
/**
* Nic represents one nic on the VM.
*/
-public interface Nic extends Resource {
+public interface Nic {
+ enum Event {
+ ReservationRequested,
+ ReleaseRequested,
+ CancelRequested,
+ OperationCompleted,
+ OperationFailed,
+ }
+
+ public enum State implements FiniteState {
+ Allocated("Resource is allocated but not reserved"),
+ Reserving("Resource is being reserved right now"),
+ Reserved("Resource has been reserved."),
+ Releasing("Resource is being released"),
+ Deallocating("Resource is being deallocated");
+
+ String _description;
+
+ @Override
+ public StateMachine getStateMachine() {
+ return s_fsm;
+ }
+
+ @Override
+ public State getNextState(Event event) {
+ return s_fsm.getNextState(this, event);
+ }
+
+ @Override
+ public List getFromStates(Event event) {
+ return s_fsm.getFromStates(this, event);
+ }
+
+ @Override
+ public Set getPossibleEvents() {
+ return s_fsm.getPossibleEvents(this);
+ }
+
+ private State(String description) {
+ _description = description;
+ }
+
+ @Override
+ public String getDescription() {
+ return _description;
+ }
+
+ final static private StateMachine s_fsm = new StateMachine();
+ static {
+ s_fsm.addTransition(State.Allocated, Event.ReservationRequested, State.Reserving);
+ s_fsm.addTransition(State.Reserving, Event.CancelRequested, State.Allocated);
+ s_fsm.addTransition(State.Reserving, Event.OperationCompleted, State.Reserved);
+ s_fsm.addTransition(State.Reserving, Event.OperationFailed, State.Allocated);
+ s_fsm.addTransition(State.Reserved, Event.ReleaseRequested, State.Releasing);
+ s_fsm.addTransition(State.Releasing, Event.OperationCompleted, State.Allocated);
+ s_fsm.addTransition(State.Releasing, Event.OperationFailed, State.Reserved);
+ }
+ }
+
+ public enum ReservationStrategy {
+ PlaceHolder,
+ Create,
+ Start;
+ }
+
+ /**
+ * @return id in the CloudStack database
+ */
+ long getId();
+
+ /**
+ * @return reservation id returned by the allocation source. This can be the
+ * String version of the database id if the allocation source does not need it's
+ * own implementation of the reservation id. This is passed back to the
+ * allocation source to release the resource.
+ */
+ String getReservationId();
+
+ /**
+ * @return unique name for the allocation source.
+ */
+ String getReserver();
+
+ /**
+ * @return the time a reservation request was made to the allocation source.
+ */
+ Date getUpdateTime();
+
+ /**
+ * @return the reservation state of the resource.
+ */
+ State getState();
+
+ ReservationStrategy getReservationStrategy();
boolean isDefaultNic();
String getIp4Address();
@@ -54,5 +151,4 @@ public interface Nic extends Resource {
URI getIsolationUri();
URI getBroadcastUri();
-
}
diff --git a/api/src/com/cloud/vm/NicProfile.java b/api/src/com/cloud/vm/NicProfile.java
index 1786e2b2235..519d5e3eb2e 100644
--- a/api/src/com/cloud/vm/NicProfile.java
+++ b/api/src/com/cloud/vm/NicProfile.java
@@ -10,8 +10,7 @@ import com.cloud.network.Networks.AddressFormat;
import com.cloud.network.Networks.BroadcastDomainType;
import com.cloud.network.Networks.Mode;
import com.cloud.network.Networks.TrafficType;
-import com.cloud.resource.Resource;
-import com.cloud.resource.Resource.ReservationStrategy;
+import com.cloud.vm.Nic.ReservationStrategy;
public class NicProfile {
long id;
@@ -34,6 +33,7 @@ public class NicProfile {
Integer deviceId;
String dns1;
String dns2;
+ int networkRate;
public String getDns1() {
return dns1;
@@ -182,8 +182,12 @@ public class NicProfile {
public void setIp4Address(String ip4Address) {
this.ip4Address = ip4Address;
}
+
+ public int getNetworkRate() {
+ return networkRate;
+ }
- public NicProfile(Nic nic, Network network, URI broadcastUri, URI isolationUri) {
+ public NicProfile(Nic nic, Network network, URI broadcastUri, URI isolationUri, Integer networkRate) {
this.id = nic.getId();
this.networkId = network.getId();
this.gateway = nic.getGateway();
@@ -203,6 +207,9 @@ public class NicProfile {
this.netmask = nic.getNetmask();
this.dns1 = network.getDns1();
this.dns2 = network.getDns2();
+ if (networkRate != null) {
+ this.networkRate = networkRate;
+ }
}
public NicProfile(long id, BroadcastDomainType type, Mode mode, long vmId) {
@@ -212,7 +219,7 @@ public class NicProfile {
this.vmId = vmId;
}
- public NicProfile(Resource.ReservationStrategy strategy, String ip4Address, String macAddress, String gateway, String netmask) {
+ public NicProfile(ReservationStrategy strategy, String ip4Address, String macAddress, String gateway, String netmask) {
this.format = AddressFormat.Ip4;
this.ip4Address = ip4Address;
this.macAddress = macAddress;
diff --git a/api/src/com/cloud/vm/UserVmService.java b/api/src/com/cloud/vm/UserVmService.java
index b102c7cbcb0..85b873cdd2b 100755
--- a/api/src/com/cloud/vm/UserVmService.java
+++ b/api/src/com/cloud/vm/UserVmService.java
@@ -73,7 +73,7 @@ public interface UserVmService {
* @param cmd - the command specifying vmId, password
* @return the VM if reset worked successfully, null otherwise
*/
- UserVm resetVMPassword(ResetVMPasswordCmd cmd, String password);
+ UserVm resetVMPassword(ResetVMPasswordCmd cmd, String password) throws ResourceUnavailableException, InsufficientCapacityException;
/**
* Attaches the specified volume to the specified VM
@@ -93,7 +93,7 @@ public interface UserVmService {
UserVm startVirtualMachine(StartVMCmd cmd) throws StorageUnavailableException, ExecutionException, ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException;
UserVm stopVirtualMachine(StopVMCmd cmd) throws ServerApiException, ConcurrentOperationException;
- UserVm rebootVirtualMachine(RebootVMCmd cmd);
+ UserVm rebootVirtualMachine(RebootVMCmd cmd) throws InsufficientCapacityException, ResourceUnavailableException;
UserVm updateVirtualMachine(UpdateVMCmd cmd);
UserVm recoverVirtualMachine(RecoverVMCmd cmd) throws ResourceAllocationException;
diff --git a/core/src/com/cloud/vm/VmStats.java b/api/src/com/cloud/vm/VmStats.java
similarity index 100%
rename from core/src/com/cloud/vm/VmStats.java
rename to api/src/com/cloud/vm/VmStats.java
diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties
index aa3523cc0fa..18190deb55f 100644
--- a/client/WEB-INF/classes/resources/messages.properties
+++ b/client/WEB-INF/classes/resources/messages.properties
@@ -36,6 +36,168 @@ label.cluster=Cluster
label.domain.name=Domain Name
label.advanced=Advanced
label.details=Details
+label.users=Users
+label.detaching.disk=Detaching Disk
+label.id=ID
+label.role=Role
+label.account.name=Account Name
+label.vms=VMs
+label.ips=IPs
+label.ip=IP
+label.bytes.received=Bytes Received
+label.bytes.sent=Bytes Sent
+label.state=State
+label.save=Save
+label.cancel=Cancel
+label.add.account=Add Account
+label.add.user=Add User
+label.waiting=Waiting
+label.api.key=API Key
+label.secret.key=Secret Key
+label.email=Email
+label.first.name=First Name
+label.last.name=Last Name
+label.timezone=Timezone
+label.instance.limits=Instance Limits
+label.instance=Instance
+label.ip.limits=Public IP Limits
+label.volume.limits=Volume Limits
+label.snapshot.limits=Snapshot Limits
+label.template.limits=Template Limits
+label.adding=Adding
+label.sent=Sent
+label.user=User
+label.domain.admin=Domain Admin
+label.admin=Admin
+label.by.role=By Role
+label.type=Type
+label.type.id=Type ID
+label.description=Description
+label.hypervisor.type=Hypervisor Type
+label.cluster.type=Cluster Type
+label.host.name=Host Name
+label.vcenter.datastore=vCenter Datastore
+label.vcenter.address=vCenter Address
+label.vcenter.username=vCenter Username
+label.vcenter.password=vCenter Password
+label.vcenter.datacenter=vCenter Datacenter
+label.vcenter.host=vCenter Host
+label.protocol=Protocol
+label.nfs=NFS
+label.iscsi=iSCSI
+label.vmfs=VMFS
+label.server=Server
+label.path=Path
+label.target.iqn=Target IQN
+label.lun=LUN
+label.tags=Tags
+label.system.capacity=System Wide Capacity
+label.public.ips=Public IP Addresses
+label.allocated=Allocated
+label.private.ips=Private IP Addresses
+label.private.ip=Private IP Address
+label.guest.ip=Guest IP Address
+label.memory.allocated=Memory Allocated
+label.memory.used=Memory Used
+label.cpu.allocated=CPU Allocated
+label.primary.allocated=Primary Storage Allocated
+label.used=Used
+label.primary.used=Primary Storage Used
+label.secondary.used=Secondary Storage Used
+label.general.alerts=General Alerts
+label.no.alerts=No Recent Alerts
+label.host.alerts=Host Alerts
+label.disk.volume=Disk Volume
+label.snapshots=Snapshots
+label.accounts=Accounts
+label.recent.errors=Recent Errors
+label.no.errors=No Recent Errors
+label.resources=Resources
+label.running.vms=Running VMs
+label.stopped.vms=Stopped VMs
+label.total.vms=Total VMs
+label.available.public.ips=Available Public IP Addresses
+label.owned.public.ips=Owned Public IP Addresses
+label.my.account=My Account
+label.account.id=Account ID
+label.account=Account
+label.display.text=Display Text
+label.disk.size=Disk Size
+label.add.disk.offering=Add Disk Offering
+label.custom.disk.size=Custom Disk Size
+label.no=No
+label.yes=Yes
+label.public=Public
+label.admin.accounts=Admin Accounts
+label.resource.limits=Resource Limits
+label.instances=Instances
+label.add.domain=Add Domain
+label.parent.domain=Parent Domain
+label.volumes=Volumes
+label.initiated.by=Initiated By
+label.owner.account=Owner Account
+label.level=Level
+label.date=Date
+label.by.type=By Type
+label.by.level=By Level
+label.info=Info
+label.warn=Warn
+label.error=Error
+label.value=Value
+label.edit=Edit
+label.hosts=Hosts
+label.host=Host
+label.virtual.appliances=Virtual Appliances
+label.system.vms=System VMs
+label.statistics=Statistics
+label.ip.address=IP Address
+label.version=Version
+label.os.preference=OS Preference
+label.last.disconnected=Last Disconnected
+label.cpu=CPU
+label.memory.total=Memory Total
+label.network.read=Network Read
+label.network.write=Network Write
+label.ip.or.fqdn=IP or FQDN
+label.disk.total=Disk Total
+label.disk.allocated=Disk Allocated
+label.created=Created
+label.system.vm.type=System VM Type
+label.public.ip=Public IP Address
+label.by.state=By State
+label.port.forwarding=Port Forwarding
+label.load.balancer=Load Balancer
+label.vpn=VPN
+label.vlan=VLAN
+label.source.nat=Source NAT
+label.network.type=Network Type
+label.network.id=Network ID
+label.associated.network.id=Associated Network ID
+label.static.nat=Static NAT
+label.static.nat.to=Static NAT to
+label.public.port=Public Port
+label.private.port=Private Port
+label.protocol=Protocol
+label.algorithm=Algorithm
+label.enabling.vpn=Enabling VPN
+label.acquire.new.ip=Acquire New IP
+label.manage=Manage
+label.delete=Delete
+label.assign=Assign
+label.assign.to.load.balancer=Assigning instance to load balancer
+label.remove.from.load.balancer=Removing instance from load balancer
+label.revoke=Revoke
+label.removing.user=Removing User
+label.enabling.vpn.access=Enabling VPN Access
+label.disabling.vpn.access=Disabling VPN Access
+label.adding.user=Adding User
+label.service.offering=Service Offering
+
+label.lang.english=English
+label.lang.chinese=Chinese
+
+label.theme.default=Default Theme
+label.theme.grey=Custom - Grey
label.menu.dashboard=Dashboard
label.menu.instances=Instances
@@ -58,6 +220,8 @@ label.menu.my.isos=My ISOs
label.menu.featured.isos=Featured ISOs
label.menu.community.isos=Community ISOs
label.menu.accounts=Accounts
+label.menu.my.accounts=My Accounts
+label.menu.all.accounts=All Accounts
label.menu.domains=Domains
label.menu.events=Events
label.menu.alerts=Alerts
@@ -69,15 +233,36 @@ label.menu.system.vms=System VMs
label.menu.configuration=Configuration
label.menu.service.offerings=Service Offerings
label.menu.disk.offerings=Disk Offerings
+label.menu.network.offerings=Network Offerings
label.menu.global.settings=Global Settings
label.menu.security.groups=Security Groups
+
label.vm.start=Start VM
label.vm.stop=Stop VM
label.vm.reboot=Reboot VM
label.vm.destroy=Destroy VM
#Messages
+message.edit.limits=Please specify limits to the following resources. A "-1" indicates no limit to the amount of resources create.
+message.disable.account=Please confirm you want to disable this account. By disabling the account, all users for this account will no longer have access to their cloud resources. All running virtual machines will be immediately shut down.
+message.lock.account=Please confirm you want to lock this account. By locking the account, all users for this account will no longer be able to manage their cloud resources. Existing resources can still be accessed.
+message.enable.account=Please confirm you want to enable this account.user
+message.new.user=Specify the following to add a new user to the account
+message.edit.confirm=Please confirm your changes before clicking 'Save'
+message.add.host=Please specify the following parameters to add a new host
+message.add.primary=Please specify the following parameters to add a new primary storage
+message.add.disk.offering=Please specify the following parameters to add a new disk offering
+message.restart.mgmt.server=Please restart your management server(s) for your new settings to take effect.
+message.update.os.preference=Please choose a OS preference for this host. All virtual instances with similar preferences will be first allocated to this host before choosing another.
+message.enabled.vpn=Your VPN access is currently enabled and can be accessed via the IP
+message.enabled.vpn.ip.sec=Your IPSec pre-shared key is
+message.enable.vpn=VPN access is currently not enabled. Please click here to enable VPN.
+message.remove.vpn.access=Please confirm you want to remove VPN access from the following user
+message.enable.vpn.access=VPN is currently disabled for this IP Address. Would you like to enable VPN access?
+message.disable.vpn.access=Please confirm you want to disable VPN Access.
+message.acquire.public.ip=Please select a zone from which you want to acquire your new IP from.
+message.allow.vpn.access=Please enter a username and password of the user that you want to allow VPN access.
#Errors
error.login=Your username/password does not match our records.
diff --git a/client/WEB-INF/classes/resources/resource.properties b/client/WEB-INF/classes/resources/resource.properties
index 260e5ca880e..0422dc41523 100644
--- a/client/WEB-INF/classes/resources/resource.properties
+++ b/client/WEB-INF/classes/resources/resource.properties
@@ -112,43 +112,13 @@ please.specify.the.new.name.you.want.to.change.for.the.virtual.machine = Please
please.specify.the.new.group.you.want.to.assign.the.virtual.machine.to = Please specify the new group you want to assign the virtual machine to
after.changing.service.offering.you.must.restart.the.virtual.machine.for.new.service.offering.to.take.effect = After changing service offering, you must restart the virtual machine for the new service offering to take effect.
creating.a.template.of.disk.volume.could.take.up.to.several.hours.depending.on.the.size.of.the.disk.volume = Creating a template of disk volume could take up to several hours depending on the size of the disk volume
-please.confirm.you.want.to.change.the.root.password.for.the.virtual.machine = Please confirm you want to change the ROOT password for the virtual machine
-please.confirm.you.want.to.enable.HA.for.your.virtual.machine.once.HA.is.enabled.your.virtual.machine.will.be.automatically.restarted.in.the.event.it.is.detected.to.have.failed = Please confirm you want to enable HA for your virtual machine. Once HA is enabled, your virtual machine will be automatically restarted in the event it is detected to have failed.
-please.confirm.you.want.to.disable.HA.for.the.virtual.machine.once.HA.is.disabled.the.virtual.machine.will.no.longer.be.automatically.restarted.in.the.event.of.a.failure = Please confirm you want to disable HA for the virtual machine. Once HA is disabled, the virtual machine will no longer be be automatically restarted in the event of a failure.
-the.ISO.is.used.by.all.zones.please.confirm.you.want.to.delete.it.from.all.zones = The ISO is used by all zones. Please confirm you want to delete it from all zones.
-please.confirm.you.want.to.delete.the.ISO = Please confirm you want to delete the ISO
-the.template.is.used.by.all.zones.please.confirm.you.want.to.delete.it.from.all.zones = The template is used by all zones. Please confirm you want to delete it from all zones.
-please.confirm.you.want.to.delete.the.template = Please confirm you want to delete the template
please.specify.limits.to.the.various.resources.-1.means.the.resource.has.no.limits = Please specify limits to the various resources. -1 means the resource has no limits.
please.confirm.you.want.to.disable.account.that.will.prevent.account.access.to.the.cloud.and.shut.down.all.existing.virtual.machines = Please confirm you want to disable account that will prevent account access to the cloud and shut down all existing virtual machines.
please.confirm.you.want.to.lock.account.that.will.prevent.account.access.to.the.cloud = Please confirm you want to lock account that will prevent account access to the cloud.
please.confirm.you.want.to.enable.account = Please confirm you want to enable account.
please.select.an.available.zone.to.associate.your.new.ip.with..acquiring.additional.ip.may.cost.you.an.additional.dollars.per.month. = Please select an availability zone to associate your new IP with. Acquiring additional IP may cost you an additional dollars per month.
-please.confirm.you.want.to.release.this.IP.address = Please confirm you want to release this IP address
please.restart.your.management.server.for.your.new.settings.to.take.effect = Please RESTART your management server for your new settings to take effect
-enabling.maintenance.mode.will.cause.a.live.migration.of.all.running.instances.on.this.host.to.any.available.host = Enabling maintenance mode will cause a live migration of all running instances on this host to any available host.
-please.confirm.you.want.to.cancel.maintenance.for.the.host = Please confirm you want to cancel maintenance for the host
-please.confirm.you.want.to.force.a.reconnection.for.the.host = Please confirm you want to force a reconnection for the host
-please.confirm.you.want.to.remove.the.host.from.the.management.server = Please confirm you want to remove the host from the management server
Please.choose.a.OS.preference.for.this.host..Virtual.machines.will.always.be.allocated.to.hosts.with.an.OS.preference.that.matches.with.the.OS.type.of.the.template.chosen.for.the.virtual.machine.before.choosing.other.hosts. = Please choose a OS preference for this host. Virtual machines will always be allocated to hosts with an OS preference that matches with the OS type of the template chosen for the virtual machine before choosing other hosts.
-please.confirm.you.want.to.delete.the.primary.storage = Please confirm you want to delete the primary storage
-please.confirm.you.want.to.delete.the.secondary.storage = Please confirm you want to delete the secondary storage
-
-please.confirm.you.want.to.start.instance = Please confirm you want to start instance
-please.confirm.you.want.to.stop.instance = Please confirm you want to stop instance
-please.confirm.you.want.to.reboot.instance = Please confirm you want to reboot instance
-please.confirm.you.want.to.destroy.instance = Please confirm you want to destroy instance
-please.confirm.you.want.to.restore.instance = Please confirm you want to restore instance
-
-please.confirm.you.want.to.start.router = Please confirm you want to start router
-please.confirm.you.want.to.stop.router = Please confirm you want to stop router
-please.confirm.you.want.to.reboot.router = Please confirm you want to reboot router
-
-
-please.confirm.you.want.to.start.systemVM = Please confirm you want to start system VM
-please.confirm.you.want.to.stop.systemVM = Please confirm you want to stop system VM
-please.confirm.you.want.to.reboot.systemVM = Please confirm you want to reboot system VM
-
customizable.during.VM.creation = Customizable during VM creation
physical.resources = Physical Resources
diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in
index 84b56bebca6..f021a7fe50c 100755
--- a/client/tomcatconf/components.xml.in
+++ b/client/tomcatconf/components.xml.in
@@ -61,9 +61,6 @@
-
-
-
diff --git a/console-proxy/.classpath b/console-proxy/.classpath
index 521b7a55fa9..5a34eae6642 100644
--- a/console-proxy/.classpath
+++ b/console-proxy/.classpath
@@ -4,6 +4,6 @@
-
+
diff --git a/console-viewer/.classpath b/console-viewer/.classpath
index 170f58a8bbb..e8a8d8c0a84 100644
--- a/console-viewer/.classpath
+++ b/console-viewer/.classpath
@@ -2,6 +2,6 @@
-
+
diff --git a/core/.classpath b/core/.classpath
index db9b9a922f1..f014c3e0d03 100644
--- a/core/.classpath
+++ b/core/.classpath
@@ -38,6 +38,7 @@
-
+
+
diff --git a/core/src/com/cloud/agent/api/CheckOnVmAnswer.java b/core/src/com/cloud/agent/api/CheckOnVmAnswer.java
deleted file mode 100644
index 84885962223..00000000000
--- a/core/src/com/cloud/agent/api/CheckOnVmAnswer.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
- *
- * This software is licensed under the GNU General Public License v3 or later.
- *
- * It is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-package com.cloud.agent.api;
-
-public class CheckOnVmAnswer extends Answer {
- boolean determined;
- boolean alive;
-
- protected CheckOnVmAnswer() {
- }
-
- public CheckOnVmAnswer(CheckOnVmCommand cmd, Boolean alive) {
- this(cmd, alive, null);
- }
-
- public CheckOnVmAnswer(CheckOnVmCommand cmd, Boolean alive, String details) {
- super(cmd, true, details);
- if (alive == null) {
- determined = false;
- } else {
- determined = true;
- this.alive = alive;
- }
- }
-
- public CheckOnVmAnswer(CheckOnVmCommand cmd, Exception e) {
- super(cmd, e);
- }
-
- public boolean isDetermined() {
- return determined;
- }
-
- public boolean isAlive() {
- return alive;
- }
-}
diff --git a/core/src/com/cloud/agent/api/CheckOnVmCommand.java b/core/src/com/cloud/agent/api/CheckOnVmCommand.java
deleted file mode 100644
index 09275570aa0..00000000000
--- a/core/src/com/cloud/agent/api/CheckOnVmCommand.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
- *
- * This software is licensed under the GNU General Public License v3 or later.
- *
- * It is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-package com.cloud.agent.api;
-
-import com.cloud.host.HostVO;
-import com.cloud.vm.VMInstanceVO;
-
-/**
- * @author ahuang
- *
- */
-public class CheckOnVmCommand extends Command {
-
- protected CheckOnVmCommand() {
- }
-
- public CheckOnVmCommand(VMInstanceVO vm, HostVO host) {
-
- }
-
- @Override
- public boolean executeInSequence() {
- return false;
- }
-
-}
diff --git a/core/src/com/cloud/agent/api/MirrorAnswer.java b/core/src/com/cloud/agent/api/MirrorAnswer.java
deleted file mode 100644
index eb627ab6a82..00000000000
--- a/core/src/com/cloud/agent/api/MirrorAnswer.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
- *
- * This software is licensed under the GNU General Public License v3 or later.
- *
- * It is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-package com.cloud.agent.api;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.cloud.storage.Volume;
-import com.cloud.storage.VolumeVO;
-
-
-/**
- * @author chiradeep
- *
- */
-public class MirrorAnswer extends Answer {
- public enum MirrorState {
- NOT_MIRRORED,
- ACTIVE,
- DEGRADED,
- FAILED
- }
-
- public enum DiskState {
- ACTIVE,
- REBUILD,
- FAILED
- }
-
- public class MirrorInfo {
- public Volume.VolumeType volType;
- public VolumeVO vol1;
- public VolumeVO vol2;
- public DiskState disk1State;
- public DiskState disk2State;
- public MirrorState mirrorState;
- public int rebuildPct;
- }
-
- String vmName;
- //List mirrorInfo = new ArrayList();
- String error;
-
-
- protected MirrorAnswer() {
- }
-
-
- public MirrorAnswer(MirrorCommand cmd, String vmName, String err) {
- super(cmd, false, err);
- this.vmName = vmName;
- }
-
- public MirrorAnswer(MirrorCommand cmd, String vmName){
- super(cmd, true, null);
- this.vmName = vmName;
- }
-
- public String getVmName() {
- return vmName;
- }
-
-
- public void setVmName(String vmName) {
- this.vmName = vmName;
- }
-
-
-
-}
diff --git a/core/src/com/cloud/agent/api/MirrorCommand.java b/core/src/com/cloud/agent/api/MirrorCommand.java
deleted file mode 100644
index c7d10f4abe5..00000000000
--- a/core/src/com/cloud/agent/api/MirrorCommand.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
- * Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
- *
- * This software is licensed under the GNU General Public License v3 or later.
- *
- * It is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-package com.cloud.agent.api;
-
-import java.util.List;
-
-import com.cloud.storage.VolumeVO;
-
-public class MirrorCommand extends Command {
-
- protected String vmName;
- protected String removeHost;
- protected String addHost;
- protected List removeVols;
- protected List addVols;
-
-
- public MirrorCommand(String vmName, String removeHost, String addHost,
- List removeVols, List addVols) {
- super();
- this.vmName = vmName;
- this.removeHost = removeHost;
- this.addHost = addHost;
- this.removeVols = removeVols;
- this.addVols = addVols;
- }
-
- protected MirrorCommand() {
- //satisfies gson
- }
-
- public String getVmName() {
- return vmName;
- }
-
-
- public void setVmName(String vmName) {
- this.vmName = vmName;
- }
-
-
- public String getRemoveHost() {
- return removeHost;
- }
-
-
- public void setRemoveHost(String removeHost) {
- this.removeHost = removeHost;
- }
-
-
- public String getAddHost() {
- return addHost;
- }
-
-
- public void setAddHost(String addHost) {
- this.addHost = addHost;
- }
-
-
- public List getRemoveVols() {
- return removeVols;
- }
-
-
- public void setRemoveVols(List removeVols) {
- this.removeVols = removeVols;
- }
-
-
- public List getAddVols() {
- return addVols;
- }
-
-
- public void setAddVols(List addVols) {
- this.addVols = addVols;
- }
-
-
- @Override
- public boolean executeInSequence() {
- return true;
- }
-
-
-}
\ No newline at end of file
diff --git a/core/src/com/cloud/agent/api/NetworkRulesSystemVmCommand.java b/core/src/com/cloud/agent/api/NetworkRulesSystemVmCommand.java
new file mode 100644
index 00000000000..79539051334
--- /dev/null
+++ b/core/src/com/cloud/agent/api/NetworkRulesSystemVmCommand.java
@@ -0,0 +1,69 @@
+package com.cloud.agent.api;
+
+import com.cloud.vm.VirtualMachine;
+
+public class NetworkRulesSystemVmCommand extends Command {
+ /**
+ * Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
+ *
+ * This software is licensed under the GNU General Public License v3 or later.
+ *
+ * It is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+ private String vmName;
+ private long vmId;
+ private String pubIp;
+ private String mac;
+ private VirtualMachine.Type type;
+
+ protected NetworkRulesSystemVmCommand() {
+
+ }
+
+ public NetworkRulesSystemVmCommand(String vmName, VirtualMachine.Type type) {
+ this.vmName = vmName;
+ }
+
+ public NetworkRulesSystemVmCommand(String vmName, long vmId, String publicIP, String mac, VirtualMachine.Type type) {
+ this.vmName = vmName;
+ this.vmId = vmId;
+ this.pubIp = publicIP;
+ this.mac = mac;
+ this.type = type;
+ }
+
+ public String getVmName() {
+ return vmName;
+ }
+
+ public long getVmId() {
+ return vmId;
+ }
+
+ public String getIp() {
+ return pubIp;
+ }
+
+ public String getMac() {
+ return mac;
+ }
+
+ public VirtualMachine.Type getType() {
+ return type;
+ }
+ @Override
+ public boolean executeInSequence() {
+ return false;
+ }
+}
diff --git a/core/src/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java b/core/src/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java
deleted file mode 100644
index 09b4748ff91..00000000000
--- a/core/src/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/**
- * Copyright (C) 2010 Cloud.com. All rights reserved.
- *
- * This software is licensed under the GNU General Public License v3 or later.
- *
- * It is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or any later
-version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-package com.cloud.agent.api;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.cloud.agent.transport.Request;
-import com.cloud.host.Host;
-import com.cloud.utils.Pair;
-import com.cloud.vm.VirtualMachine.State;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonArray;
-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.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-
-public class PingRoutingWithNwGroupsCommand extends PingRoutingCommand {
- HashMap> newGroupStates;
-
- public static class NwGroupsCommandTypeAdaptor implements JsonDeserializer>, JsonSerializer> {
- static final GsonBuilder s_gBuilder;
- static {
- s_gBuilder = Request.initBuilder();
- }
-
- public NwGroupsCommandTypeAdaptor() {
- }
-
- @Override
- public JsonElement serialize(Pair src,
- java.lang.reflect.Type typeOfSrc, JsonSerializationContext context) {
- JsonArray array = new JsonArray();
- Gson json = s_gBuilder.create();
- if(src.first() != null) {
- array.add(json.toJsonTree(src.first()));
- } else {
- array.add(new JsonNull());
- }
-
- if (src.second() != null) {
- array.add(json.toJsonTree(src.second()));
- } else {
- array.add(new JsonNull());
- }
-
- return array;
- }
-
- @Override
- public Pair deserialize(JsonElement json,
- java.lang.reflect.Type type, JsonDeserializationContext context)
- throws JsonParseException {
- Pair pairs = new Pair(null, null);
- JsonArray array = json.getAsJsonArray();
- if (array.size() != 2) {
- return pairs;
- }
- JsonElement element = array.get(0);
- if (!element.isJsonNull()) {
- pairs.first(element.getAsLong());
- }
-
- element = array.get(1);
- if (!element.isJsonNull()) {
- pairs.second(element.getAsLong());
- }
-
- return pairs;
- }
-
- }
- protected PingRoutingWithNwGroupsCommand() {
- super();
- }
-
- public PingRoutingWithNwGroupsCommand(Host.Type type, long id, Map states, HashMap> nwGrpStates) {
- super(type, id, states);
- newGroupStates = nwGrpStates;
- }
-
- public HashMap> getNewGroupStates() {
- return newGroupStates;
- }
-
- public void setNewGroupStates(HashMap> newGroupStates) {
- this.newGroupStates = newGroupStates;
- }
-}
diff --git a/core/src/com/cloud/agent/api/routing/LoadBalancerCfgCommand.java b/core/src/com/cloud/agent/api/routing/LoadBalancerCfgCommand.java
deleted file mode 100644
index 3190e2a35d8..00000000000
--- a/core/src/com/cloud/agent/api/routing/LoadBalancerCfgCommand.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
- *
- * This software is licensed under the GNU General Public License v3 or later.
- *
- * It is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-package com.cloud.agent.api.routing;
-
-import com.cloud.network.LoadBalancerConfigurator;
-
-/**
- * @author chiradeep
- *
- */
-public class LoadBalancerCfgCommand extends NetworkElementCommand {
- private String [] config;
- private String [] addFwRules;
- private String [] removeFwRules;;
- private String routerName;
- private String routerIp;
-
- //no-args to satisfy gson
- protected LoadBalancerCfgCommand() {
-
- }
-
- public LoadBalancerCfgCommand(String[] config, String[][] addRemoveRules, String routerName, String routerIp) {
- super();
- this.config = config;
- this.addFwRules = addRemoveRules[LoadBalancerConfigurator.ADD];
- this.removeFwRules = addRemoveRules[LoadBalancerConfigurator.REMOVE];
- this.routerName = routerName;
- this.routerIp = routerIp;
- }
-
- public String getRouterName() {
- return routerName;
- }
-
- public String getRouterIp() {
- return routerIp;
- }
-
- public String[] getConfig() {
- return config;
- }
-
- public void setConfig(String[] config) {
- this.config = config;
- }
-
- public String[] getAddFwRules() {
- return addFwRules;
- }
-
- public String[] getRemoveFwRules() {
- return removeFwRules;
- }
-
- @Override
- public boolean executeInSequence() {
- return false;
- }
-
-}
diff --git a/core/src/com/cloud/agent/api/storage/ShareAnswer.java b/core/src/com/cloud/agent/api/storage/ShareAnswer.java
deleted file mode 100644
index 1ddbdd33505..00000000000
--- a/core/src/com/cloud/agent/api/storage/ShareAnswer.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
- *
- * This software is licensed under the GNU General Public License v3 or later.
- *
- * It is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-package com.cloud.agent.api.storage;
-
-import java.util.Map;
-
-import com.cloud.agent.api.Answer;
-
-public class ShareAnswer extends Answer {
-
- protected ShareAnswer() {
- }
-
- Map mapping;
-
- public ShareAnswer(ShareCommand cmd, Map mapping) {
- super(cmd, true, null);
- this.mapping = mapping;
- }
-
- public ShareAnswer(ShareCommand cmd, String details) {
- super(cmd, false, details);
- }
-
- public Map getMappings() {
- return mapping;
- }
-
-}
diff --git a/core/src/com/cloud/agent/api/storage/ShareCommand.java b/core/src/com/cloud/agent/api/storage/ShareCommand.java
deleted file mode 100644
index 09ad9957594..00000000000
--- a/core/src/com/cloud/agent/api/storage/ShareCommand.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
- *
- * This software is licensed under the GNU General Public License v3 or later.
- *
- * It is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-package com.cloud.agent.api.storage;
-
-import java.util.List;
-
-import com.cloud.storage.VolumeVO;
-
-public class ShareCommand extends StorageCommand {
- public static String UnshareAll = "unshare_all";
-
- private boolean share;
- private boolean removePreviousShare;
- private List volumes;
- private String vmName;
- private String initiatorIqn;
-
- protected ShareCommand() {
- }
-
- public ShareCommand(String vmName, List vols, String initiatorIqn, boolean removePreviousShare) {
- super();
- this.vmName = vmName;
- this.initiatorIqn = initiatorIqn;
- this.share = true;
- this.volumes = vols;
- this.removePreviousShare = removePreviousShare;
- }
-
- public ShareCommand(String vmName, List vols, String initiatorIqn) {
- super();
- this.vmName = vmName;
- this.initiatorIqn = initiatorIqn;
- this.share = false;
- this.volumes = vols;
- this.removePreviousShare = true;
- }
-
- public ShareCommand(String vmName, List vols) {
- super();
- this.vmName = vmName;
- this.initiatorIqn = UnshareAll;
- this.share = false;
- this.volumes = vols;
- this.removePreviousShare = true;
- }
-
- // NOTE: We set this to false because we leave it up to the business logic
- // to make sure it is already created before calling shared.
- @Override
- public boolean executeInSequence() {
- return false;
- }
-
- public boolean isShare() {
- return share;
- }
-
- public List getVolumes() {
- return volumes;
- }
-
- public String getVmName() {
- return vmName;
- }
-
- public String getInitiatorIqn() {
- return initiatorIqn;
- }
-
- public boolean removePreviousShare() {
- return removePreviousShare;
- }
-}
diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
index c1357c1385d..393198c0fe7 100755
--- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
+++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java
@@ -47,9 +47,8 @@ import com.cloud.agent.api.proxy.WatchConsoleProxyLoadCommand;
import com.cloud.agent.api.routing.DhcpEntryCommand;
import com.cloud.agent.api.routing.IPAssocCommand;
import com.cloud.agent.api.routing.IpAssocAnswer;
-import com.cloud.agent.api.routing.LoadBalancerCfgCommand;
-import com.cloud.agent.api.routing.NetworkElementCommand;
import com.cloud.agent.api.routing.LoadBalancerConfigCommand;
+import com.cloud.agent.api.routing.NetworkElementCommand;
import com.cloud.agent.api.routing.SavePasswordCommand;
import com.cloud.agent.api.routing.SetPortForwardingRulesAnswer;
import com.cloud.agent.api.routing.SetPortForwardingRulesCommand;
@@ -98,8 +97,6 @@ public class VirtualRoutingResource implements Manager {
try {
if (cmd instanceof SetPortForwardingRulesCommand ) {
return execute((SetPortForwardingRulesCommand)cmd);
- }else if (cmd instanceof LoadBalancerCfgCommand) {
- return execute((LoadBalancerCfgCommand)cmd);
} else if (cmd instanceof LoadBalancerConfigCommand) {
return execute((LoadBalancerConfigCommand)cmd);
} else if (cmd instanceof IPAssocCommand) {
@@ -239,39 +236,6 @@ public class VirtualRoutingResource implements Manager {
return new Answer(cmd);
}
- protected Answer execute(final LoadBalancerCfgCommand cmd) {
-
- File tmpCfgFile = null;
- try {
- String cfgFilePath = "";
- String routerIP = null;
-
- if (cmd.getRouterIp() != null) {
- tmpCfgFile = File.createTempFile(cmd.getRouterIp().replace('.', '_'), "cfg");
- final PrintWriter out
- = new PrintWriter(new BufferedWriter(new FileWriter(tmpCfgFile)));
- for (int i=0; i < cmd.getConfig().length; i++) {
- out.println(cmd.getConfig()[i]);
- }
- out.close();
- cfgFilePath = tmpCfgFile.getAbsolutePath();
- routerIP = cmd.getRouterIp();
- }
-
- final String result = setLoadBalancerConfig(cfgFilePath,
- cmd.getAddFwRules(), cmd.getRemoveFwRules(),
- routerIP);
-
- return new Answer(cmd, result == null, result);
- } catch (final IOException e) {
- return new Answer(cmd, false, e.getMessage());
- } finally {
- if (tmpCfgFile != null) {
- tmpCfgFile.delete();
- }
- }
- }
-
protected Answer execute(final IPAssocCommand cmd) {
IpAddressTO[] ips = cmd.getIpAddresses();
String[] results = new String[cmd.getIpAddresses().length];
diff --git a/core/src/com/cloud/agent/transport/Request.java b/core/src/com/cloud/agent/transport/Request.java
index c8a3e22ad73..298eeed1107 100755
--- a/core/src/com/cloud/agent/transport/Request.java
+++ b/core/src/com/cloud/agent/transport/Request.java
@@ -19,14 +19,14 @@ package com.cloud.agent.transport;
import java.lang.reflect.Type;
import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
import org.apache.log4j.Logger;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.Command;
-import com.cloud.agent.api.PingRoutingWithNwGroupsCommand;
-import com.cloud.agent.api.SecStorageFirewallCfgCommand;
import com.cloud.agent.api.SecStorageFirewallCfgCommand.PortConfig;
import com.cloud.exception.UnsupportedVersionException;
import com.cloud.storage.VolumeVO;
@@ -35,6 +35,14 @@ import com.cloud.utils.Pair;
import com.cloud.utils.exception.CloudRuntimeException;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
+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.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
import com.google.gson.reflect.TypeToken;
/**
@@ -64,8 +72,9 @@ public class Request {
public static Version get(final byte ver) throws UnsupportedVersionException {
for (final Version version : Version.values()) {
- if (ver == version.ordinal())
+ if (ver == version.ordinal()) {
return version;
+ }
}
throw new UnsupportedVersionException("Can't lookup version: " + ver, UnsupportedVersionException.UnknownVersion);
}
@@ -86,8 +95,8 @@ public class Request {
s_gBuilder.registerTypeAdapter(Answer[].class, new ArrayTypeAdaptor());
final Type listType = new TypeToken>() {}.getType();
s_gBuilder.registerTypeAdapter(listType, new VolListTypeAdaptor());
- s_gBuilder.registerTypeAdapter(new TypeToken>() {}.getType(), new SecStorageFirewallCfgCommand.PortConfigListTypeAdaptor());
- s_gBuilder.registerTypeAdapter(new TypeToken>() {}.getType(), new PingRoutingWithNwGroupsCommand.NwGroupsCommandTypeAdaptor());
+ s_gBuilder.registerTypeAdapter(new TypeToken>() {}.getType(), new PortConfigListTypeAdaptor());
+ s_gBuilder.registerTypeAdapter(new TypeToken>() {}.getType(), new NwGroupsCommandTypeAdaptor());
s_logger.info("Builder inited.");
}
@@ -368,4 +377,103 @@ public class Request {
public static boolean isControl(final byte[] bytes) {
return (bytes[3] & FLAG_CONTROL) > 0;
}
+
+ public static class NwGroupsCommandTypeAdaptor implements JsonDeserializer>, JsonSerializer> {
+ static final GsonBuilder s_gBuilder;
+ static {
+ s_gBuilder = Request.initBuilder();
+ }
+
+ public NwGroupsCommandTypeAdaptor() {
+ }
+
+ @Override
+ public JsonElement serialize(Pair src,
+ java.lang.reflect.Type typeOfSrc, JsonSerializationContext context) {
+ JsonArray array = new JsonArray();
+ Gson json = s_gBuilder.create();
+ if(src.first() != null) {
+ array.add(json.toJsonTree(src.first()));
+ } else {
+ array.add(new JsonNull());
+ }
+
+ if (src.second() != null) {
+ array.add(json.toJsonTree(src.second()));
+ } else {
+ array.add(new JsonNull());
+ }
+
+ return array;
+ }
+
+ @Override
+ public Pair deserialize(JsonElement json,
+ java.lang.reflect.Type type, JsonDeserializationContext context)
+ throws JsonParseException {
+ Pair pairs = new Pair(null, null);
+ JsonArray array = json.getAsJsonArray();
+ if (array.size() != 2) {
+ return pairs;
+ }
+ JsonElement element = array.get(0);
+ if (!element.isJsonNull()) {
+ pairs.first(element.getAsLong());
+ }
+
+ element = array.get(1);
+ if (!element.isJsonNull()) {
+ pairs.second(element.getAsLong());
+ }
+
+ return pairs;
+ }
+
+ }
+
+ public static class PortConfigListTypeAdaptor implements JsonDeserializer>, JsonSerializer> {
+ static final GsonBuilder s_gBuilder;
+ static {
+ s_gBuilder = Request.initBuilder();
+ }
+
+ static final Type listType = new TypeToken>() {}.getType();
+
+ public PortConfigListTypeAdaptor() {
+ }
+
+ @Override
+ public JsonElement serialize(List src, Type typeOfSrc, JsonSerializationContext context) {
+ if (src.size() == 0) {
+ s_logger.info("Returning JsonNull");
+ return new JsonNull();
+ }
+ Gson json = s_gBuilder.create();
+ s_logger.debug("Returning gson tree");
+ JsonArray array = new JsonArray();
+ for (PortConfig pc : src) {
+ array.add(json.toJsonTree(pc));
+ }
+
+ return array;
+ }
+
+ @Override
+ public List deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
+ throws JsonParseException {
+ if (json.isJsonNull()) {
+ return new ArrayList();
+ }
+ Gson jsonp = s_gBuilder.create();
+ List pcs = new ArrayList();
+ JsonArray array = json.getAsJsonArray();
+ Iterator it = array.iterator();
+ while (it.hasNext()) {
+ JsonElement element = it.next();
+ pcs.add(jsonp.fromJson(element, PortConfig.class));
+ }
+ return pcs;
+ }
+
+ }
}
diff --git a/core/src/com/cloud/host/HostVO.java b/core/src/com/cloud/host/HostVO.java
index 53f0c6c5b7b..af1bea360a1 100644
--- a/core/src/com/cloud/host/HostVO.java
+++ b/core/src/com/cloud/host/HostVO.java
@@ -38,6 +38,7 @@ import javax.persistence.Transient;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.storage.Storage.StoragePoolType;
+import com.cloud.utils.NumbersUtil;
import com.cloud.utils.db.GenericDao;
@Entity
@@ -48,7 +49,7 @@ public class HostVO implements Host {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
- private Long id;
+ private long id;
@Column(name="disconnected")
@Temporal(value=TemporalType.TIMESTAMP)
@@ -144,7 +145,8 @@ public class HostVO implements Host {
return storageNetmaskDeux;
}
- public Long getClusterId() {
+ @Override
+ public Long getClusterId() {
return clusterId;
}
@@ -331,7 +333,7 @@ public class HostVO implements Host {
protected HostVO() {
}
- public HostVO(Long id,
+ public HostVO(long id,
String name,
Type type,
String privateIpAddress,
@@ -364,7 +366,7 @@ public class HostVO implements Host {
this.fsType = fsType;
}
- public HostVO(Long id,
+ public HostVO(long id,
String name,
Type type,
String privateIpAddress,
@@ -486,6 +488,7 @@ public class HostVO implements Host {
this.managementServerId = managementServerId;
}
+ @Override
public long getLastPinged() {
return lastPinged;
}
@@ -495,10 +498,12 @@ public class HostVO implements Host {
return parent;
}
+ @Override
public long getTotalSize() {
return totalSize;
}
+ @Override
public String getCapabilities() {
return caps;
}
@@ -508,10 +513,12 @@ public class HostVO implements Host {
return created;
}
+ @Override
public Date getRemoved() {
return removed;
}
+ @Override
public String getVersion() {
return version;
}
@@ -520,7 +527,8 @@ public class HostVO implements Host {
this.type = type;
}
- public Long getId() {
+ @Override
+ public long getId() {
return id;
}
@@ -544,10 +552,12 @@ public class HostVO implements Host {
return podId;
}
+ @Override
public Long getManagementServerId() {
return managementServerId;
}
+ @Override
public Date getDisconnectedOn() {
return disconnectedOn;
}
@@ -566,6 +576,7 @@ public class HostVO implements Host {
this.guid = guid;
}
+ @Override
public Integer getCpus() {
return cpus;
}
@@ -600,7 +611,7 @@ public class HostVO implements Host {
@Override
public int hashCode() {
- return id != null ? id.hashCode() : -1;
+ return NumbersUtil.hash(id);
}
@Override
@@ -614,7 +625,7 @@ public class HostVO implements Host {
@Override
public String toString() {
- return new StringBuilder(type.toString()).append("-").append(Long.toString(id)).append("-").append(name).toString();
+ return new StringBuilder(type.toString()).append("-").append(id).append("-").append(name).toString();
}
public void setHypervisorType(HypervisorType hypervisorType) {
diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
index bff6a33059a..e418f53974f 100644
--- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
+++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
@@ -92,6 +92,7 @@ import com.cloud.agent.api.MigrateCommand;
import com.cloud.agent.api.ModifySshKeysCommand;
import com.cloud.agent.api.ModifyStoragePoolAnswer;
import com.cloud.agent.api.ModifyStoragePoolCommand;
+import com.cloud.agent.api.NetworkRulesSystemVmCommand;
import com.cloud.agent.api.PingCommand;
import com.cloud.agent.api.PingRoutingCommand;
import com.cloud.agent.api.PingRoutingWithNwGroupsCommand;
@@ -126,7 +127,6 @@ import com.cloud.agent.api.proxy.WatchConsoleProxyLoadCommand;
import com.cloud.agent.api.routing.DhcpEntryCommand;
import com.cloud.agent.api.routing.IPAssocCommand;
import com.cloud.agent.api.routing.IpAssocAnswer;
-import com.cloud.agent.api.routing.LoadBalancerCfgCommand;
import com.cloud.agent.api.routing.LoadBalancerConfigCommand;
import com.cloud.agent.api.routing.NetworkElementCommand;
import com.cloud.agent.api.routing.RemoteAccessVpnCfgCommand;
@@ -143,8 +143,6 @@ import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer;
import com.cloud.agent.api.storage.DestroyCommand;
import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer;
import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
-import com.cloud.agent.api.storage.ShareAnswer;
-import com.cloud.agent.api.storage.ShareCommand;
import com.cloud.agent.api.to.IpAddressTO;
import com.cloud.agent.api.to.NicTO;
import com.cloud.agent.api.to.PortForwardingRuleTO;
@@ -155,6 +153,7 @@ import com.cloud.dc.Vlan;
import com.cloud.exception.InternalErrorException;
import com.cloud.host.Host.Type;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.hypervisor.xen.resource.XenServerConnectionPool.XenServerConnection;
import com.cloud.network.HAProxyConfigurator;
import com.cloud.network.LoadBalancerConfigurator;
import com.cloud.network.Networks;
@@ -163,14 +162,16 @@ import com.cloud.network.Networks.IsolationType;
import com.cloud.network.Networks.TrafficType;
import com.cloud.network.ovs.OvsCreateGreTunnelAnswer;
import com.cloud.network.ovs.OvsCreateGreTunnelCommand;
+import com.cloud.network.ovs.OvsCreateTunnelAnswer;
+import com.cloud.network.ovs.OvsCreateTunnelCommand;
import com.cloud.network.ovs.OvsDeleteFlowCommand;
+import com.cloud.network.ovs.OvsDestroyTunnelCommand;
import com.cloud.network.ovs.OvsSetTagAndFlowAnswer;
import com.cloud.network.ovs.OvsSetTagAndFlowCommand;
import com.cloud.resource.ServerResource;
import com.cloud.storage.Storage;
import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.Storage.StoragePoolType;
-import com.cloud.storage.StoragePoolVO;
import com.cloud.storage.Volume;
import com.cloud.storage.Volume.VolumeType;
import com.cloud.storage.VolumeVO;
@@ -199,6 +200,7 @@ import com.xensource.xenapi.PIF;
import com.xensource.xenapi.Pool;
import com.xensource.xenapi.SR;
import com.xensource.xenapi.Session;
+import com.xensource.xenapi.Task;
import com.xensource.xenapi.Types;
import com.xensource.xenapi.Types.BadServerResponse;
import com.xensource.xenapi.Types.IpConfigurationMode;
@@ -284,12 +286,7 @@ public abstract class CitrixResourceBase implements ServerResource {
@Override
public void disconnected() {
- }
-
- protected VDI cloudVDIcopy(Connection conn, VDI vdi, SR sr) throws BadServerResponse, XenAPIException, XmlRpcException{
- return vdi.copy(conn, sr);
- }
-
+ }
protected Pair getVmByNameLabel(Connection conn, Host host, String nameLabel, boolean getRecord) throws XmlRpcException, XenAPIException {
Set vms = host.getResidentVMs(conn);
@@ -321,20 +318,19 @@ public abstract class CitrixResourceBase implements ServerResource {
return true;
}
-
+
protected boolean pingxenserver() {
- Connection conn = _connPool.slaveConnect(_host.ip, _username, _password);
- if ( conn == null ) {
- return false;
- } else {
- try {
- Session.localLogout(conn);
- } catch (Exception e) {
-
- }
- conn.dispose();
+ XenServerConnection conn = (XenServerConnection) getConnection();
+ try {
+ Host host = Host.getByUuid(conn, _host.uuid);
+ host.enable(conn);
+ return true;
+ } catch (Exception e) {
+ String msg = "Catch Exception " + e.getClass().getName() + " : Enable host(" + _host.uuid + ") in pool(" + conn.getPoolUuid() + ") failed due to "
+ + e.toString();
+ s_logger.warn(msg);
}
- return true;
+ return false;
}
protected String logX(XenAPIObject obj, String msg) {
@@ -349,8 +345,6 @@ public abstract class CitrixResourceBase implements ServerResource {
return execute((CreateCommand) cmd);
} else if (cmd instanceof SetPortForwardingRulesCommand) {
return execute((SetPortForwardingRulesCommand) cmd);
- } else if (cmd instanceof LoadBalancerCfgCommand) {
- return execute((LoadBalancerCfgCommand) cmd);
} else if (cmd instanceof LoadBalancerConfigCommand) {
return execute((LoadBalancerConfigCommand) cmd);
} else if (cmd instanceof IPAssocCommand) {
@@ -387,8 +381,6 @@ public abstract class CitrixResourceBase implements ServerResource {
return execute((MigrateCommand) cmd);
} else if (cmd instanceof DestroyCommand) {
return execute((DestroyCommand) cmd);
- } else if (cmd instanceof ShareCommand) {
- return execute((ShareCommand) cmd);
} else if (cmd instanceof ModifyStoragePoolCommand) {
return execute((ModifyStoragePoolCommand) cmd);
} else if (cmd instanceof DeleteStoragePoolCommand) {
@@ -449,6 +441,12 @@ public abstract class CitrixResourceBase implements ServerResource {
return execute((OvsDeleteFlowCommand)cmd);
} else if (cmd instanceof CleanupNetworkRulesCmd){
return execute((CleanupNetworkRulesCmd)cmd);
+ } else if (cmd instanceof NetworkRulesSystemVmCommand) {
+ return execute((NetworkRulesSystemVmCommand)cmd);
+ } else if (cmd instanceof OvsCreateTunnelCommand) {
+ return execute((OvsCreateTunnelCommand)cmd);
+ } else if (cmd instanceof OvsDestroyTunnelCommand) {
+ return execute((OvsDestroyTunnelCommand)cmd);
} else {
return Answer.createUnsupportedCommandAnswer(cmd);
}
@@ -517,10 +515,12 @@ public abstract class CitrixResourceBase implements ServerResource {
vifr.network = nw;
dom0vif = VIF.create(conn, vifr);
dom0vif.plug(conn);
+ dom0vif.unplug(conn);
} else {
s_logger.debug("already have a vif on dom0 for " + networkDesc);
if (!dom0vif.getCurrentlyAttached(conn)) {
dom0vif.plug(conn);
+ dom0vif.unplug(conn);
}
}
}
@@ -553,6 +553,29 @@ public abstract class CitrixResourceBase implements ServerResource {
return null;
}
+ private synchronized Network createTunnelNetwork(Connection conn, long account) {
+ try {
+ String nwName = "OVSTunnel" + account;
+ Network nw = null;
+ Network.Record rec = new Network.Record();
+ Set networks = Network.getByNameLabel(conn, nwName);
+
+ if (networks.size() == 0) {
+ rec.nameDescription = "tunnel network for account " + account;
+ rec.nameLabel = nwName;
+ nw = Network.create(conn, rec);
+ } else {
+ nw = networks.iterator().next();
+ }
+
+ enableXenServerNetwork(conn, nw, "OVSTunnel", "tunnel network for account " + account);
+ return nw;
+ } catch (Exception e) {
+ s_logger.warn("create tunnel network failed", e);
+ return null;
+ }
+ }
+
protected Network getNetwork(Connection conn, NicTO nic) throws XenAPIException, XmlRpcException {
Pair network = getNativeNetworkForTraffic(conn, nic.getType());
if (nic.getBroadcastUri() != null && nic.getBroadcastUri().toString().contains("untagged")) {
@@ -565,7 +588,13 @@ public abstract class CitrixResourceBase implements ServerResource {
} else if (nic.getBroadcastType() == BroadcastDomainType.Native || nic.getBroadcastType() == BroadcastDomainType.LinkLocal) {
return network.first();
} else if (nic.getBroadcastType() == BroadcastDomainType.Vswitch) {
- return setupvSwitchNetwork(conn);
+ URI broadcastUri = nic.getBroadcastUri();
+ if (broadcastUri.getHost().equalsIgnoreCase("vlan")) {
+ return setupvSwitchNetwork(conn);
+ } else {
+ long account = Long.parseLong(broadcastUri.getHost());
+ return createTunnelNetwork(conn, account);
+ }
}
throw new CloudRuntimeException("Unable to support this type of network broadcast domain: " + nic.getBroadcastUri());
@@ -745,7 +774,9 @@ public abstract class CitrixResourceBase implements ServerResource {
if (vmSpec.getBootloader() == BootloaderType.CD) {
vm.setPVBootloader(conn, "eliloader");
Map otherConfig = vm.getOtherConfig(conn);
- otherConfig.put( "install-repository", "cdrom");
+ if ( ! vm.getOtherConfig(conn).containsKey("install-repository") ) {
+ otherConfig.put( "install-repository", "cdrom");
+ }
vm.setOtherConfig(conn, otherConfig);
} else if (vmSpec.getBootloader() == BootloaderType.PyGrub ){
vm.setPVBootloader(conn, "pygrub");
@@ -930,16 +961,6 @@ public abstract class CitrixResourceBase implements ServerResource {
}
}
}
- if (vmSpec.getType() == VirtualMachine.Type.DomainRouter) {
- // Create network usage rules for domR
- NicTO[] nics = vmSpec.getNics();
- for (NicTO nic : nics) {
- if(nic.getType() == TrafficType.Control){
- networkUsage(conn, nic.getIp(), "create", null);
- break;
- }
- }
- }
state = State.Running;
return new StartAnswer(cmd);
@@ -1094,63 +1115,6 @@ public abstract class CitrixResourceBase implements ServerResource {
return new SetPortForwardingRulesAnswer(cmd, results);
}
- protected Answer execute(final LoadBalancerCfgCommand cmd) {
- Connection conn = getConnection();
- String routerIp = cmd.getRouterIp();
-
- if (routerIp == null) {
- return new Answer(cmd);
- }
-
- String tmpCfgFilePath = "/tmp/" + cmd.getRouterIp().replace('.', '_') + ".cfg";
- String tmpCfgFileContents = "";
- for (int i = 0; i < cmd.getConfig().length; i++) {
- tmpCfgFileContents += cmd.getConfig()[i];
- tmpCfgFileContents += "\n";
- }
-
- String result = callHostPlugin(conn, "vmops", "createFile", "filepath", tmpCfgFilePath, "filecontents", tmpCfgFileContents);
-
- if (result == null || result.isEmpty()) {
- return new Answer(cmd, false, "LoadBalancerCfgCommand failed to create HA proxy cfg file.");
- }
-
- String[] addRules = cmd.getAddFwRules();
- String[] removeRules = cmd.getRemoveFwRules();
-
- String args = "";
- args += "-i " + routerIp;
- args += " -f " + tmpCfgFilePath;
-
- StringBuilder sb = new StringBuilder();
- if (addRules.length > 0) {
- for (int i = 0; i < addRules.length; i++) {
- sb.append(addRules[i]).append(',');
- }
-
- args += " -a " + sb.toString();
- }
-
- sb = new StringBuilder();
- if (removeRules.length > 0) {
- for (int i = 0; i < removeRules.length; i++) {
- sb.append(removeRules[i]).append(',');
- }
-
- args += " -d " + sb.toString();
- }
-
- result = callHostPlugin(conn, "vmops", "setLoadBalancerRule", "args", args);
-
- if (result == null || result.isEmpty()) {
- return new Answer(cmd, false, "LoadBalancerCfgCommand failed");
- }
-
- callHostPlugin(conn, "vmops", "deleteFile", "filepath", tmpCfgFilePath);
-
- return new Answer(cmd);
- }
-
protected Answer execute(final LoadBalancerConfigCommand cmd) {
Connection conn = getConnection();
String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP);
@@ -1316,7 +1280,7 @@ public abstract class CitrixResourceBase implements ServerResource {
}
protected void assignPublicIpAddress(Connection conn, final String vmName, final String privateIpAddress, final String publicIpAddress, final boolean add, final boolean firstIP,
- final boolean sourceNat, final String vlanId, final String vlanGateway, final String vlanNetmask, final String vifMacAddress, String guestIp) throws InternalErrorException {
+ final boolean sourceNat, final String vlanId, final String vlanGateway, final String vlanNetmask, final String vifMacAddress, String guestIp, Integer networkRate) throws InternalErrorException {
try {
VM router = getVM(conn, vmName);
@@ -1355,7 +1319,7 @@ public abstract class CitrixResourceBase implements ServerResource {
nic.setBroadcastUri(BroadcastDomainType.Vlan.toUri(vlanId));
}
nic.setDeviceId(Integer.parseInt(vifDeviceNum));
- nic.setNetworkRateMbps(200);
+ nic.setNetworkRateMbps(networkRate);
correctVif = createVif(conn, vmName, router, nic);
correctVif.plug(conn);
@@ -1394,11 +1358,6 @@ public abstract class CitrixResourceBase implements ServerResource {
args += " -g ";
args += vlanGateway;
- if(guestIp!=null){
- args += " -G ";
- args += guestIp;
- }
-
String result = callHostPlugin(conn, "vmops", "ipassoc", "args", args);
if (result == null || result.isEmpty()) {
throw new InternalErrorException("Xen plugin \"ipassoc\" failed.");
@@ -1448,7 +1407,7 @@ public abstract class CitrixResourceBase implements ServerResource {
for (IpAddressTO ip : ips) {
assignPublicIpAddress(conn, routerName, routerIp, ip.getPublicIp(), ip.isAdd(), ip.isFirstIP(), ip.isSourceNat(), ip.getVlanId(),
- ip.getVlanGateway(), ip.getVlanNetmask(), ip.getVifMacAddress(), ip.getGuestIp());
+ ip.getVlanGateway(), ip.getVlanNetmask(), ip.getVifMacAddress(), ip.getGuestIp(), ip.getNetworkRate());
results[i++] = ip.getPublicIp() + " - success";
}
} catch (InternalErrorException e) {
@@ -2670,25 +2629,49 @@ public abstract class CitrixResourceBase implements ServerResource {
vm.setMemoryDynamicMax(conn, memsize);
vm.setMemoryStaticMax(conn, memsize);
}
-
- void shutdownVM(Connection conn, VM vm, String vmName) throws XmlRpcException {
- try {
- vm.cleanShutdown(conn);
- } catch (Types.XenAPIException e) {
- s_logger.debug("Unable to cleanShutdown VM(" + vmName + ") on host(" + _host.uuid +") due to " + e.toString() + ", try hard shutdown");
+
+ private void waitForTask(Connection c, Task task, long pollInterval, long timeout) throws XenAPIException, XmlRpcException {
+ long beginTime = System.currentTimeMillis();
+ while (task.getStatus(c) == Types.TaskStatusType.PENDING) {
try {
- vm.hardShutdown(conn);
- } catch (Exception e1) {
- String msg = "Unable to hardShutdown VM(" + vmName + ") on host(" + _host.uuid +") due to " + e.toString();
- s_logger.warn(msg, e1);
- throw new CloudRuntimeException(msg);
+ Thread.sleep(pollInterval);
+ } catch (InterruptedException e) {
+ }
+ if( System.currentTimeMillis() - beginTime > timeout){
+ String msg = "Async " + timeout/100 + " seconds timeout for task " + task.toString();
+ s_logger.warn(msg);
+ task.cancel(c);
+ throw new Types.BadAsyncResult(msg);
}
}
}
+ private void checkForSuccess(Connection c, Task task) throws XenAPIException, XmlRpcException {
+ if (task.getStatus(c) == Types.TaskStatusType.SUCCESS) {
+ return;
+ } else {
+ String msg = "Task failed! Task record:\n" + task.getRecord(c);
+ s_logger.warn(msg);
+ task.cancel(c);
+ throw new Types.BadAsyncResult(msg);
+ }
+ }
+
void rebootVM(Connection conn, VM vm, String vmName) throws XmlRpcException {
+ Task task = null;
try {
- vm.cleanReboot(conn);
+ task = vm.cleanRebootAsync(conn);
+ try {
+ //poll every 1 seconds , timeout after 10 minutes
+ waitForTask(conn, task, 1000, 10 * 60 * 1000);
+ checkForSuccess(conn, task);
+ } catch (Types.HandleInvalid e) {
+ if (vm.getPowerState(conn) == Types.VmPowerState.RUNNING) {
+ task = null;
+ return;
+ }
+ throw new CloudRuntimeException("Reboot VM catch HandleInvalid and VM is not in RUNNING state");
+ }
} catch (XenAPIException e) {
s_logger.debug("Unable to Clean Reboot VM(" + vmName + ") on host(" + _host.uuid +") due to " + e.toString() + ", try hard reboot");
try {
@@ -2698,26 +2681,196 @@ public abstract class CitrixResourceBase implements ServerResource {
s_logger.warn(msg, e1);
throw new CloudRuntimeException(msg);
}
+ }finally {
+ if( task != null) {
+ try {
+ task.destroy(conn);
+ } catch (Exception e1) {
+ s_logger.debug("unable to destroy task(" + task.toString() + ") on host(" + _host.uuid +") due to " + e1.toString());
+ }
+ }
+ }
+ }
+
+ void shutdownVM(Connection conn, VM vm, String vmName) throws XmlRpcException {
+ Task task = null;
+ try {
+ task = vm.cleanShutdownAsync(conn);
+ try {
+ //poll every 1 seconds , timeout after 10 minutes
+ waitForTask(conn, task, 1000, 10 * 60 * 1000);
+ checkForSuccess(conn, task);
+ } catch (Types.HandleInvalid e) {
+ if (vm.getPowerState(conn) == Types.VmPowerState.HALTED) {
+ task = null;
+ return;
+ }
+ throw new CloudRuntimeException("Shutdown VM catch HandleInvalid and VM is not in HALTED state");
+ }
+ } catch (XenAPIException e) {
+ s_logger.debug("Unable to cleanShutdown VM(" + vmName + ") on host(" + _host.uuid +") due to " + e.toString());
+ try {
+ vm.hardShutdown(conn);
+ return;
+ } catch (Exception e1) {
+ String msg = "Unable to hardShutdown VM(" + vmName + ") on host(" + _host.uuid +") due to " + e.toString();
+ s_logger.warn(msg, e1);
+ throw new CloudRuntimeException(msg);
+ }
+ }finally {
+ if( task != null) {
+ try {
+ task.destroy(conn);
+ } catch (Exception e1) {
+ s_logger.debug("unable to destroy task(" + task.toString() + ") on host(" + _host.uuid +") due to " + e1.toString());
+ }
+ }
}
}
void startVM(Connection conn, Host host, VM vm, String vmName) throws XmlRpcException {
+ Task task = null;
try {
- vm.startOn(conn, host, false, true);
- } catch (Exception e) {
+ task = vm.startOnAsync(conn, host, false, true);
+ try {
+ //poll every 1 seconds , timeout after 10 minutes
+ waitForTask(conn, task, 1000, 10 * 60 * 1000);
+ checkForSuccess(conn, task);
+ } catch (Types.HandleInvalid e) {
+ if (vm.getPowerState(conn) == Types.VmPowerState.RUNNING) {
+ task = null;
+ return;
+ }
+ throw new CloudRuntimeException("Shutdown VM catch HandleInvalid and VM is not in RUNNING state");
+ }
+ } catch (XenAPIException e) {
String msg = "Unable to start VM(" + vmName + ") on host(" + _host.uuid +") due to " + e.toString();
s_logger.warn(msg, e);
throw new CloudRuntimeException(msg);
+ }finally {
+ if( task != null) {
+ try {
+ task.destroy(conn);
+ } catch (Exception e1) {
+ s_logger.debug("unable to destroy task(" + task.toString() + ") on host(" + _host.uuid +") due to " + e1.toString());
+ }
+ }
}
}
-
+
+ protected VDI cloudVDIcopy(Connection conn, VDI vdi, SR sr) throws XenAPIException, XmlRpcException {
+ Task task = null;
+ try {
+ task = vdi.copyAsync(conn, sr);
+ // poll every 5 seconds , timeout after 2 hours
+ waitForTask(conn, task, 5 * 1000, 2 * 60 * 60 * 1000);
+ checkForSuccess(conn, task);
+ VDI dvdi = Types.toVDI(task, conn);
+ return dvdi;
+ } finally {
+ if (task != null) {
+ try {
+ task.destroy(conn);
+ } catch (Exception e1) {
+ s_logger.warn("unable to destroy task(" + task.toString() + ") on host(" + _host.uuid + ") due to "
+ + e1.toString());
+ }
+ }
+ }
+ }
+
+ protected String backupSnapshot(Connection conn, String primaryStorageSRUuid, Long dcId, Long accountId,
+ Long volumeId, String secondaryStorageMountPath, String snapshotUuid, String prevBackupUuid, Boolean isISCSI) {
+ String backupSnapshotUuid = null;
+
+ if (prevBackupUuid == null) {
+ prevBackupUuid = "";
+ }
+
+ // Each argument is put in a separate line for readability.
+ // Using more lines does not harm the environment.
+ String results = callHostPluginAsync(conn, "vmopsSnapshot", "backupSnapshot", 60 * 60 * 1000,
+ "primaryStorageSRUuid", primaryStorageSRUuid, "dcId", dcId.toString(), "accountId", accountId
+ .toString(), "volumeId", volumeId.toString(), "secondaryStorageMountPath",
+ secondaryStorageMountPath, "snapshotUuid", snapshotUuid, "prevBackupUuid", prevBackupUuid, "isISCSI",
+ isISCSI.toString());
+
+ if (results == null || results.isEmpty()) {
+ // errString is already logged.
+ return null;
+ }
+
+ String[] tmp = results.split("#");
+ String status = tmp[0];
+ backupSnapshotUuid = tmp[1];
+
+ // status == "1" if and only if backupSnapshotUuid != null
+ // So we don't rely on status value but return backupSnapshotUuid as an
+ // indicator of success.
+ String failureString = "Could not copy backupUuid: " + backupSnapshotUuid + " of volumeId: " + volumeId
+ + " from primary storage " + primaryStorageSRUuid + " to secondary storage "
+ + secondaryStorageMountPath;
+ if (status != null && status.equalsIgnoreCase("1") && backupSnapshotUuid != null) {
+ s_logger.debug("Successfully copied backupUuid: " + backupSnapshotUuid + " of volumeId: " + volumeId
+ + " to secondary storage");
+ } else {
+ s_logger.debug(failureString + ". Failed with status: " + status);
+ return null;
+ }
+ return backupSnapshotUuid;
+ }
+
+ protected String callHostPluginAsync(Connection conn, String plugin, String cmd, int timeout, String... params) {
+ Map args = new HashMap();
+ Task task = null;
+ try {
+ for (int i = 0; i < params.length; i += 2) {
+ args.put(params[i], params[i + 1]);
+ }
+ if (s_logger.isTraceEnabled()) {
+ s_logger.trace("callHostPlugin executing for command " + cmd + " with " + getArgsString(args));
+ }
+ Host host = Host.getByUuid(conn, _host.uuid);
+ task = host.callPluginAsync(conn, plugin, cmd, args);
+ // poll every 60 seconds
+ waitForTask(conn, task, 20 * 1000, timeout);
+ checkForSuccess(conn, task);
+ String result = task.getResult(conn);
+ if (s_logger.isTraceEnabled()) {
+ s_logger.trace("callHostPlugin Result: " + result);
+ }
+ return result.replace("", "").replace("", "").replace("\n", "");
+ } catch (Types.HandleInvalid e) {
+ s_logger.warn("callHostPlugin failed for cmd: " + cmd + " with args " + getArgsString(args)
+ + " due to HandleInvalid clazz:" + e.clazz + ", handle:" + e.handle);
+ } catch (XenAPIException e) {
+ s_logger.warn("callHostPlugin failed for cmd: " + cmd + " with args " + getArgsString(args) + " due to "
+ + e.toString(), e);
+ } catch (XmlRpcException e) {
+ s_logger.warn("callHostPlugin failed for cmd: " + cmd + " with args " + getArgsString(args) + " due to "
+ + e.getMessage(), e);
+ } finally {
+ if (task != null) {
+ try {
+ task.destroy(conn);
+ } catch (Exception e1) {
+ s_logger.warn("unable to destroy task(" + task.toString() + ") on host(" + _host.uuid + ") due to "
+ + e1.toString());
+ }
+ }
+ }
+ return null;
+ }
+
protected StopAnswer execute(final StopCommand cmd) {
Connection conn = getConnection();
String vmName = cmd.getVmName();
try {
Set vms = VM.getByNameLabel(conn, vmName);
// stop vm which is running on this host or is in halted state
- for (VM vm : vms) {
+ Iterator iter = vms.iterator();
+ while ( iter.hasNext() ) {
+ VM vm = iter.next();
VM.Record vmr = vm.getRecord(conn);
if (vmr.powerState != VmPowerState.RUNNING) {
continue;
@@ -2728,7 +2881,7 @@ public abstract class CitrixResourceBase implements ServerResource {
if (vmr.residentOn.getUuid(conn).equals(_host.uuid)) {
continue;
}
- vms.remove(vm);
+ iter.remove();
}
if (vms.size() == 0) {
@@ -3846,6 +3999,52 @@ public abstract class CitrixResourceBase implements ServerResource {
return Boolean.valueOf(callHostPlugin(conn, "vmops", "can_bridge_firewall", "host_uuid", _host.uuid));
}
+ private Answer execute(OvsDestroyTunnelCommand cmd) {
+ Connection conn = getConnection();
+ try {
+ Network nw = createTunnelNetwork(conn, cmd.getAccount());
+ if (nw == null) {
+ return new Answer(cmd, false, "No network found");
+ }
+
+ String bridge = nw.getBridge(conn);
+ String result = callHostPlugin(conn, "ovstunnel", "destroy_tunnel", "bridge", bridge, "in_port", cmd.getInPortName());
+ if (result.equalsIgnoreCase("SUCCESS")) {
+ return new Answer(cmd, true, result);
+ } else {
+ return new Answer(cmd, false, result);
+ }
+ } catch (Exception e) {
+ s_logger.warn("caught execption when destroy ovs tunnel", e);
+ return new Answer(cmd, false, e.getMessage());
+ }
+ }
+
+ private OvsCreateTunnelAnswer execute(OvsCreateTunnelCommand cmd) {
+ Connection conn = getConnection();
+ String bridge = "unknown";
+ try {
+ Network nw = createTunnelNetwork(conn, cmd.getAccount());
+ if (nw == null) {
+ return new OvsCreateTunnelAnswer(cmd, false, "Cannot create network", bridge);
+ }
+
+ bridge = nw.getBridge(conn);
+ String result = callHostPlugin(conn, "ovstunnel", "create_tunnel", "bridge", bridge, "remote_ip", cmd.getRemoteIp(), "key", cmd.getKey(), "from", cmd.getFrom().toString(), "to", cmd
+ .getTo().toString());
+
+ String[] res = result.split(":");
+ if (res.length == 2 && res[0].equalsIgnoreCase("SUCCESS")) {
+ return new OvsCreateTunnelAnswer(cmd, true, result, res[1], bridge);
+ } else {
+ return new OvsCreateTunnelAnswer(cmd, false, result, bridge);
+ }
+ } catch (Exception e) {
+ s_logger.warn("caught execption when creating ovs tunnel", e);
+ return new OvsCreateTunnelAnswer(cmd, false, e.getMessage(), bridge);
+ }
+ }
+
private Answer execute(OvsDeleteFlowCommand cmd) {
_isOvs = true;
@@ -3983,15 +4182,14 @@ public abstract class CitrixResourceBase implements ServerResource {
protected Answer execute(DeleteStoragePoolCommand cmd) {
Connection conn = getConnection();
- StoragePoolVO pool = cmd.getPool();
- StorageFilerTO poolTO = new StorageFilerTO(pool);
+ StorageFilerTO poolTO = cmd.getPool();
try {
SR sr = getStorageRepository(conn, poolTO);
removeSR(conn, sr);
Answer answer = new Answer(cmd, true, "success");
return answer;
} catch (Exception e) {
- String msg = "DeleteStoragePoolCommand XenAPIException:" + e.getMessage() + " host:" + _host.uuid + " pool: " + pool.getName() + pool.getHostAddress() + pool.getPath();
+ String msg = "DeleteStoragePoolCommand XenAPIException:" + e.getMessage() + " host:" + _host.uuid + " pool: " + poolTO.getHost() + poolTO.getPath();
s_logger.warn(msg, e);
return new Answer(cmd, false, msg);
}
@@ -4553,30 +4751,10 @@ public abstract class CitrixResourceBase implements ServerResource {
return new Answer(cmd, true, "Success");
}
- public ShareAnswer execute(final ShareCommand cmd) {
- Connection conn = getConnection();
- if (!cmd.isShare()) {
- SR sr = getISOSRbyVmName(conn, cmd.getVmName());
- try {
- if (sr != null) {
- Set vms = VM.getByNameLabel(conn, cmd.getVmName());
- if (vms.size() == 0) {
- removeSR(conn, sr);
- }
- }
- } catch (Exception e) {
- String msg = "SR.getNameLabel failed due to " + e.getMessage() + e.toString();
- s_logger.warn(msg);
- }
- }
- return new ShareAnswer(cmd, new HashMap());
- }
-
public CopyVolumeAnswer execute(final CopyVolumeCommand cmd) {
Connection conn = getConnection();
String volumeUUID = cmd.getVolumePath();
- StoragePoolVO pool = cmd.getPool();
- StorageFilerTO poolTO = new StorageFilerTO(pool);
+ StorageFilerTO poolTO = cmd.getPool();
String secondaryStorageURL = cmd.getSecondaryStorageURL();
URI uri = null;
@@ -5099,10 +5277,12 @@ public abstract class CitrixResourceBase implements ServerResource {
String secondaryStoragePoolURL = cmd.getSecondaryStoragePoolURL();
String snapshotUuid = cmd.getSnapshotUuid(); // not null: Precondition.
String prevBackupUuid = cmd.getPrevBackupUuid();
+ String prevSnapshotUuid = cmd.getPrevSnapshotUuid();
// By default assume failure
String details = null;
boolean success = false;
String snapshotBackupUuid = null;
+ boolean fullbackup = true;
try {
SR primaryStorageSR = getSRByNameLabelandHost(conn, primaryStorageNameLabel);
if (primaryStorageSR == null) {
@@ -5111,22 +5291,30 @@ public abstract class CitrixResourceBase implements ServerResource {
URI uri = new URI(secondaryStoragePoolURL);
String secondaryStorageMountPath = uri.getHost() + ":" + uri.getPath();
-
+ VDI snapshotVdi = getVDIbyUuid(conn, snapshotUuid);
- if (prevBackupUuid == null) {
+ if ( prevBackupUuid != null ) {
+ try {
+ VDI preSnapshotVdi = getVDIbyUuid(conn, prevSnapshotUuid);
+ if ( snapshotVdi.getParent(conn).getParent(conn) == preSnapshotVdi.getParent(conn) ) {
+ fullbackup = false;
+ }
+ } catch (Exception e) {
+ }
+ }
+
+ if (fullbackup) {
// the first snapshot is always a full snapshot
String folder = "snapshots/" + accountId + "/" + volumeId;
if( !createSecondaryStorageFolder(conn, secondaryStorageMountPath, folder)) {
details = " Filed to create folder " + folder + " in secondary storage";
s_logger.warn(details);
- return new BackupSnapshotAnswer(cmd, success, details, snapshotBackupUuid);
+ return new BackupSnapshotAnswer(cmd, false, details, null, false);
}
-
String snapshotMountpoint = secondaryStoragePoolURL + "/" + folder;
SR snapshotSr = null;
try {
snapshotSr = createNfsSRbyURI(conn, new URI(snapshotMountpoint), false);
- VDI snapshotVdi = getVDIbyUuid(conn, snapshotUuid);
VDI backedVdi = cloudVDIcopy(conn, snapshotVdi, snapshotSr);
snapshotBackupUuid = backedVdi.getUuid(conn);
success = true;
@@ -5136,21 +5324,16 @@ public abstract class CitrixResourceBase implements ServerResource {
}
}
} else {
- String primaryStorageSRUuid = primaryStorageSR.getUuid(conn);
- Boolean isISCSI = IsISCSI(primaryStorageSR.getType(conn));
- snapshotBackupUuid = backupSnapshot(conn, primaryStorageSRUuid, dcId, accountId, volumeId, secondaryStorageMountPath,
- snapshotUuid, prevBackupUuid, isISCSI);
- success = (snapshotBackupUuid != null);
+ String primaryStorageSRUuid = primaryStorageSR.getUuid(conn);
+ Boolean isISCSI = IsISCSI(primaryStorageSR.getType(conn));
+ snapshotBackupUuid = backupSnapshot(conn, primaryStorageSRUuid, dcId, accountId, volumeId, secondaryStorageMountPath, snapshotUuid, prevBackupUuid, isISCSI);
+ success = (snapshotBackupUuid != null);
}
-
if (success) {
details = "Successfully backedUp the snapshotUuid: " + snapshotUuid + " to secondary storage.";
-
String volumeUuid = cmd.getVolumePath();
destroySnapshotOnPrimaryStorageExceptThis(conn, volumeUuid, snapshotUuid);
-
}
-
} catch (XenAPIException e) {
details = "BackupSnapshot Failed due to " + e.toString();
s_logger.warn(details, e);
@@ -5159,7 +5342,7 @@ public abstract class CitrixResourceBase implements ServerResource {
s_logger.warn(details, e);
}
- return new BackupSnapshotAnswer(cmd, success, details, snapshotBackupUuid);
+ return new BackupSnapshotAnswer(cmd, success, details, snapshotBackupUuid, fullbackup);
}
protected CreateVolumeFromSnapshotAnswer execute(final CreateVolumeFromSnapshotCommand cmd) {
@@ -5254,7 +5437,7 @@ public abstract class CitrixResourceBase implements ServerResource {
}
}
}
- return new DeleteSnapshotBackupAnswer(cmd, success, details);
+ return new DeleteSnapshotBackupAnswer(cmd, true, details);
}
protected Answer execute(DeleteSnapshotsDirCommand cmd) {
@@ -5505,48 +5688,7 @@ public abstract class CitrixResourceBase implements ServerResource {
}
return success;
- }
-
- // Each argument is put in a separate line for readability.
- // Using more lines does not harm the environment.
- protected String backupSnapshot(Connection conn, String primaryStorageSRUuid, Long dcId, Long accountId, Long volumeId, String secondaryStorageMountPath,
- String snapshotUuid, String prevBackupUuid, Boolean isISCSI) {
- String backupSnapshotUuid = null;
-
- if (prevBackupUuid == null) {
- prevBackupUuid = "";
- }
-
- // Each argument is put in a separate line for readability.
- // Using more lines does not harm the environment.
- String results = callHostPluginWithTimeOut(conn, "vmopsSnapshot", "backupSnapshot", 110*60, "primaryStorageSRUuid", primaryStorageSRUuid, "dcId",
- dcId.toString(), "accountId", accountId.toString(), "volumeId", volumeId.toString(), "secondaryStorageMountPath",
- secondaryStorageMountPath, "snapshotUuid", snapshotUuid, "prevBackupUuid", prevBackupUuid, "isISCSI", isISCSI.toString());
-
- if (results == null || results.isEmpty()) {
- // errString is already logged.
- return null;
- }
-
- String[] tmp = results.split("#");
- String status = tmp[0];
- backupSnapshotUuid = tmp[1];
-
- // status == "1" if and only if backupSnapshotUuid != null
- // So we don't rely on status value but return backupSnapshotUuid as an
- // indicator of success.
- String failureString = "Could not copy backupUuid: " + backupSnapshotUuid + " of volumeId: " + volumeId + " from primary storage " + primaryStorageSRUuid
- + " to secondary storage " + secondaryStorageMountPath;
- if (status != null && status.equalsIgnoreCase("1") && backupSnapshotUuid != null) {
- s_logger.debug("Successfully copied backupUuid: " + backupSnapshotUuid + " of volumeId: " + volumeId + " to secondary storage");
- } else {
- s_logger.debug(failureString + ". Failed with status: " + status);
- return null;
- }
-
- return backupSnapshotUuid;
- }
-
+ }
protected String getVhdParent(Connection conn, String primaryStorageSRUuid, String snapshotUuid, Boolean isISCSI) {
String parentUuid = callHostPlugin(conn, "vmopsSnapshot", "getVhdParent", "primaryStorageSRUuid", primaryStorageSRUuid,
@@ -5745,4 +5887,17 @@ public abstract class CitrixResourceBase implements ServerResource {
protected String getGuestOsType(String stdType, boolean bootFromCD) {
return stdType;
}
+
+ private Answer execute(NetworkRulesSystemVmCommand cmd) {
+ boolean success = true;
+ Connection conn = getConnection();
+ if (cmd.getType() != VirtualMachine.Type.User) {
+ String result = callHostPlugin(conn, "vmops", "default_network_rules_systemvm", "vmName", cmd.getVmName());
+ if (result == null || result.isEmpty() || !Boolean.parseBoolean(result)) {
+ success = false;
+ }
+ }
+
+ return new Answer(cmd, success, "");
+ }
}
diff --git a/core/src/com/cloud/network/NetworkEnums.java b/core/src/com/cloud/network/NetworkEnums.java
deleted file mode 100644
index 100507d30f8..00000000000
--- a/core/src/com/cloud/network/NetworkEnums.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
- *
- * This software is licensed under the GNU General Public License v3 or later.
- *
- * It is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-package com.cloud.network;
-
-/**
- * @author chiradeep
- *
- */
-public class NetworkEnums {
- public enum RouterPrivateIpStrategy {
- None,
- DcGlobal, //global to data center
- HostLocal;
-
- public static String DummyPrivateIp = "169.254.1.1";
- }
-}
diff --git a/core/src/com/cloud/storage/VMTemplateHostVO.java b/core/src/com/cloud/storage/VMTemplateHostVO.java
index 77cbe8d8dd7..9b558c63a0e 100755
--- a/core/src/com/cloud/storage/VMTemplateHostVO.java
+++ b/core/src/com/cloud/storage/VMTemplateHostVO.java
@@ -18,19 +18,19 @@
package com.cloud.storage;
-import java.util.Date;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
import com.cloud.utils.db.GenericDaoBase;
/**
@@ -95,7 +95,8 @@ public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc {
@Column(name="destroyed")
boolean destroyed = false;
- public String getInstallPath() {
+ @Override
+ public String getInstallPath() {
return installPath;
}
@@ -107,47 +108,58 @@ public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc {
this.hostId = hostId;
}
- public long getTemplateId() {
+ @Override
+ public long getTemplateId() {
return templateId;
}
- public void setTemplateId(long templateId) {
+ @Override
+ public void setTemplateId(long templateId) {
this.templateId = templateId;
}
- public int getDownloadPercent() {
+ @Override
+ public int getDownloadPercent() {
return downloadPercent;
}
- public void setDownloadPercent(int downloadPercent) {
+ @Override
+ public void setDownloadPercent(int downloadPercent) {
this.downloadPercent = downloadPercent;
}
- public void setDownloadState(Status downloadState) {
+ @Override
+ public void setDownloadState(Status downloadState) {
this.downloadState = downloadState;
}
- public Long getId() {
+ @Override
+ public long getId() {
return id;
}
- public Date getCreated() {
+ @Override
+ public Date getCreated() {
return created;
}
- public Date getLastUpdated() {
+ @Override
+ public Date getLastUpdated() {
return lastUpdated;
}
- public void setLastUpdated(Date date) {
+ @Override
+ public void setLastUpdated(Date date) {
lastUpdated = date;
}
- public void setInstallPath(String installPath) {
+ @Override
+ public void setInstallPath(String installPath) {
this.installPath = installPath;
}
- public Status getDownloadState() {
+ @Override
+ public Status getDownloadState() {
return downloadState;
}
@@ -178,27 +190,33 @@ public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc {
}
- public void setLocalDownloadPath(String localPath) {
+ @Override
+ public void setLocalDownloadPath(String localPath) {
this.localDownloadPath = localPath;
}
- public String getLocalDownloadPath() {
+ @Override
+ public String getLocalDownloadPath() {
return localDownloadPath;
}
- public void setErrorString(String errorString) {
+ @Override
+ public void setErrorString(String errorString) {
this.errorString = errorString;
}
- public String getErrorString() {
+ @Override
+ public String getErrorString() {
return errorString;
}
- public void setJobId(String jobId) {
+ @Override
+ public void setJobId(String jobId) {
this.jobId = jobId;
}
- public String getJobId() {
+ @Override
+ public String getJobId() {
return jobId;
}
@@ -274,5 +292,10 @@ public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc {
public boolean isCopy() {
return isCopy;
}
+
+ @Override
+ public long getTemplateSize() {
+ return -1;
+ }
}
diff --git a/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java b/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java
index 3044e716286..cd4894624d9 100644
--- a/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java
+++ b/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java
@@ -18,19 +18,19 @@
package com.cloud.storage;
-import java.util.Date;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
import com.cloud.utils.db.GenericDaoBase;
/**
@@ -43,7 +43,7 @@ import com.cloud.utils.db.GenericDaoBase;
public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
- Long id;
+ long id;
@Column(name="pool_id")
private long poolId;
@@ -72,11 +72,13 @@ public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc{
@Column (name="marked_for_gc") boolean markedForGC;
- public String getInstallPath() {
+ @Override
+ public String getInstallPath() {
return installPath;
}
- public long getTemplateSize() {
+ @Override
+ public long getTemplateSize() {
return templateSize;
}
@@ -88,47 +90,58 @@ public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc{
this.poolId = poolId;
}
- public long getTemplateId() {
+ @Override
+ public long getTemplateId() {
return templateId;
}
- public void setTemplateId(long templateId) {
+ @Override
+ public void setTemplateId(long templateId) {
this.templateId = templateId;
}
- public int getDownloadPercent() {
+ @Override
+ public int getDownloadPercent() {
return downloadPercent;
}
- public void setDownloadPercent(int downloadPercent) {
+ @Override
+ public void setDownloadPercent(int downloadPercent) {
this.downloadPercent = downloadPercent;
}
- public void setDownloadState(Status downloadState) {
+ @Override
+ public void setDownloadState(Status downloadState) {
this.downloadState = downloadState;
}
- public Long getId() {
+ @Override
+ public long getId() {
return id;
}
- public Date getCreated() {
+ @Override
+ public Date getCreated() {
return created;
}
- public Date getLastUpdated() {
+ @Override
+ public Date getLastUpdated() {
return lastUpdated;
}
- public void setLastUpdated(Date date) {
+ @Override
+ public void setLastUpdated(Date date) {
lastUpdated = date;
}
- public void setInstallPath(String installPath) {
+ @Override
+ public void setInstallPath(String installPath) {
this.installPath = installPath;
}
- public Status getDownloadState() {
+ @Override
+ public Status getDownloadState() {
return downloadState;
}
@@ -161,27 +174,33 @@ public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc{
}
- public void setLocalDownloadPath(String localPath) {
+ @Override
+ public void setLocalDownloadPath(String localPath) {
this.localDownloadPath = localPath;
}
- public String getLocalDownloadPath() {
+ @Override
+ public String getLocalDownloadPath() {
return localDownloadPath;
}
- public void setErrorString(String errorString) {
+ @Override
+ public void setErrorString(String errorString) {
this.errorString = errorString;
}
- public String getErrorString() {
+ @Override
+ public String getErrorString() {
return errorString;
}
- public void setJobId(String jobId) {
+ @Override
+ public void setJobId(String jobId) {
this.jobId = jobId;
}
- public String getJobId() {
+ @Override
+ public String getJobId() {
return jobId;
}
diff --git a/core/src/com/cloud/storage/VolumeVO.java b/core/src/com/cloud/storage/VolumeVO.java
index ceebc5e036f..19204ff446d 100755
--- a/core/src/com/cloud/storage/VolumeVO.java
+++ b/core/src/com/cloud/storage/VolumeVO.java
@@ -84,9 +84,6 @@ public class VolumeVO implements Volume {
@Column(name="pod_id")
Long podId;
- @Column(name="destroyed")
- boolean destroyed = false;
-
@Column(name="created")
Date created;
@@ -104,10 +101,6 @@ public class VolumeVO implements Volume {
@Column(name="disk_offering_id")
long diskOfferingId;
- @Expose
- @Column(name="mirror_vol")
- Long mirrorVolume;
-
@Column(name="template_id")
Long templateId;
@@ -119,11 +112,6 @@ public class VolumeVO implements Volume {
@Enumerated(EnumType.STRING)
VolumeType volumeType = Volume.VolumeType.UNKNOWN;
- @Expose
- @Column(name="mirror_state")
- @Enumerated(EnumType.STRING)
- MirrorState mirrorState = Volume.MirrorState.NOT_MIRRORED;
-
@Expose
@Column(name="pool_type")
@Enumerated(EnumType.STRING)
@@ -185,8 +173,6 @@ public class VolumeVO implements Volume {
this.size = size;
this.status = AsyncInstanceCreateStatus.Creating;
this.templateId = null;
- this.mirrorState = MirrorState.NOT_MIRRORED;
- this.mirrorVolume = null;
this.storageResourceType = Storage.StorageResourceType.STORAGE_POOL;
this.poolType = null;
}
@@ -199,8 +185,6 @@ public class VolumeVO implements Volume {
this.accountId = accountId;
this.domainId = domainId;
this.size = size;
- this.mirrorVolume = null;
- this.mirrorState = MirrorState.NOT_MIRRORED;
this.diskOfferingId = diskOfferingId;
this.status = AsyncInstanceCreateStatus.Creating;
this.state = State.Allocated;
@@ -319,7 +303,8 @@ public class VolumeVO implements Volume {
return instanceId;
}
- public Long getDeviceId() {
+ @Override
+ public Long getDeviceId() {
return deviceId;
}
@@ -380,18 +365,11 @@ public class VolumeVO implements Volume {
volumeType = type;
}
- public boolean getDestroyed() {
- return destroyed;
- }
-
- public Date getCreated() {
+ @Override
+ public Date getCreated() {
return created;
}
- public void setDestroyed(boolean destroyed) {
- this.destroyed = destroyed;
- }
-
public Date getRemoved() {
return removed;
}
@@ -400,15 +378,8 @@ public class VolumeVO implements Volume {
this.removed = removed;
}
- public MirrorState getMirrorState() {
- return mirrorState;
- }
-
- public void setMirrorState(MirrorState mirrorState) {
- this.mirrorState = mirrorState;
- }
-
- public long getDiskOfferingId() {
+ @Override
+ public long getDiskOfferingId() {
return diskOfferingId;
}
@@ -433,14 +404,6 @@ public class VolumeVO implements Volume {
this.firstSnapshotBackupUuid = firstSnapshotBackupUuid;
}
- public Long getMirrorVolume() {
- return mirrorVolume;
- }
-
- public void setMirrorVolume(Long mirrorVolume) {
- this.mirrorVolume = mirrorVolume;
- }
-
@Override
public Storage.StorageResourceType getStorageResourceType() {
return storageResourceType;
@@ -459,6 +422,7 @@ public class VolumeVO implements Volume {
this.poolId = poolId;
}
+ @Override
public AsyncInstanceCreateStatus getStatus() {
return status;
}
diff --git a/core/src/com/cloud/storage/resource/StoragePoolResource.java b/core/src/com/cloud/storage/resource/StoragePoolResource.java
index 7178607b113..9979b787217 100644
--- a/core/src/com/cloud/storage/resource/StoragePoolResource.java
+++ b/core/src/com/cloud/storage/resource/StoragePoolResource.java
@@ -23,10 +23,8 @@ import com.cloud.agent.api.storage.CopyVolumeCommand;
import com.cloud.agent.api.storage.CreateAnswer;
import com.cloud.agent.api.storage.CreateCommand;
import com.cloud.agent.api.storage.DestroyCommand;
-import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer;
-import com.cloud.agent.api.storage.ShareAnswer;
-import com.cloud.agent.api.storage.ShareCommand;
+import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
public interface StoragePoolResource {
// FIXME: Should have a PrimaryStorageDownloadAnswer
@@ -35,8 +33,6 @@ public interface StoragePoolResource {
// FIXME: Should have an DestroyAnswer
Answer execute(DestroyCommand cmd);
- ShareAnswer execute(ShareCommand cmd);
-
CopyVolumeAnswer execute(CopyVolumeCommand cmd);
CreateAnswer execute(CreateCommand cmd);
diff --git a/core/src/com/cloud/vm/ConsoleProxyVO.java b/core/src/com/cloud/vm/ConsoleProxyVO.java
index e863cb2d233..148ab090590 100644
--- a/core/src/com/cloud/vm/ConsoleProxyVO.java
+++ b/core/src/com/cloud/vm/ConsoleProxyVO.java
@@ -41,24 +41,6 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType;
@DiscriminatorValue(value="ConsoleProxy")
public class ConsoleProxyVO extends VMInstanceVO implements ConsoleProxy {
- @Column(name="gateway", nullable=false)
- private String gateway;
-
- @Column(name="dns1")
- private String dns1;
-
- @Column(name="dns2")
- private String dns2;
-
- @Column(name="guest_mac_address")
- private String guestMacAddress;
-
- @Column(name="guest_ip_address")
- private String guestIpAddress;
-
- @Column(name="guest_netmask")
- private String guestNetmask;
-
@Column(name="public_ip_address", nullable=false)
private String publicIpAddress;
@@ -68,15 +50,6 @@ public class ConsoleProxyVO extends VMInstanceVO implements ConsoleProxy {
@Column(name="public_netmask", nullable=false)
private String publicNetmask;
- @Column(name="vlan_db_id")
- private Long vlanDbId;
-
- @Column(name="vlan_id")
- private String vlanId;
-
- @Column(name="domain", nullable=false)
- private String domain;
-
@Column(name="ram_size", updatable=false, nullable=false)
private int ramSize;
@@ -108,22 +81,6 @@ public class ConsoleProxyVO extends VMInstanceVO implements ConsoleProxy {
super();
}
- public void setGateway(String gateway) {
- this.gateway = gateway;
- }
-
- public void setDns1(String dns1) {
- this.dns1 = dns1;
- }
-
- public void setDns2(String dns2) {
- this.dns2 = dns2;
- }
-
- public void setDomain(String domain) {
- this.domain = domain;
- }
-
public void setPublicIpAddress(String publicIpAddress) {
this.publicIpAddress = publicIpAddress;
}
@@ -136,18 +93,6 @@ public class ConsoleProxyVO extends VMInstanceVO implements ConsoleProxy {
this.publicMacAddress = publicMacAddress;
}
- public void setGuestIpAddress(String guestIpAddress) {
- this.guestIpAddress = guestIpAddress;
- }
-
- public void setGuestNetmask(String guestNetmask) {
- this.guestNetmask = guestNetmask;
- }
-
- public void setGuestMacAddress(String guestMacAddress) {
- this.guestMacAddress = guestMacAddress;
- }
-
public void setRamSize(int ramSize) {
this.ramSize = ramSize;
}
@@ -164,21 +109,6 @@ public class ConsoleProxyVO extends VMInstanceVO implements ConsoleProxy {
this.sessionDetails = details;
}
- @Override
- public String getGateway() {
- return this.gateway;
- }
-
- @Override
- public String getDns1() {
- return this.dns1;
- }
-
- @Override
- public String getDns2() {
- return this.dns2;
- }
-
@Override
public String getPublicIpAddress() {
return this.publicIpAddress;
@@ -193,37 +123,7 @@ public class ConsoleProxyVO extends VMInstanceVO implements ConsoleProxy {
public String getPublicMacAddress() {
return this.publicMacAddress;
}
-
-
- public String getGuestIpAddress() {
- return this.guestIpAddress;
- }
-
-
- public String getGuestNetmask() {
- return this.guestNetmask;
- }
-
-
- public String getGuestMacAddress() {
- return this.guestMacAddress;
- }
- @Override
- public Long getVlanDbId() {
- return vlanDbId;
- }
-
- @Override
- public String getVlanId() {
- return vlanId;
- }
-
- @Override
- public String getDomain() {
- return this.domain;
- }
-
@Override
public int getRamSize() {
return this.ramSize;
diff --git a/core/src/com/cloud/vm/DomainRouterVO.java b/core/src/com/cloud/vm/DomainRouterVO.java
index 9137cb860ec..241410e11b4 100755
--- a/core/src/com/cloud/vm/DomainRouterVO.java
+++ b/core/src/com/cloud/vm/DomainRouterVO.java
@@ -28,7 +28,6 @@ import javax.persistence.Table;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.network.router.VirtualRouter;
-import com.cloud.utils.net.NetUtils;
/**
* VirtualMachineRouterVO implements all the fields stored for a domain router.
@@ -41,9 +40,6 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter {
@Column(name="ram_size", nullable=false)
private int ramSize;
- @Column(name="gateway")
- private String gateway;
-
@Column(name="public_ip_address")
private String publicIpAddress;
@@ -53,12 +49,6 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter {
@Column(name="public_netmask")
private String publicNetmask;
- @Column(name="vlan_db_id")
- private Long vlanDbId;
-
- @Column(name="vlan_id")
- private String vlanId;
-
@Column(name="guest_mac_address")
private String guestMacAddress;
@@ -68,24 +58,9 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter {
@Column(name="guest_netmask")
private String guestNetmask;
- @Column(name="dns1")
- private String dns1;
-
- @Column(name="dns2")
- private String dns2;
-
@Column(name="domain", nullable=false)
private String domain;
- @Column(name="vnet")
- private String vnet;
-
- @Column(name="dc_vlan")
- private String zoneVlan;
-
- @Column(name="guest_dc_mac_address")
- private String guestZoneMacAddress;
-
@Column(name="network_id")
long networkId;
@@ -109,10 +84,6 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter {
this.domain = networkDomain;
}
- public void setGateway(String gateway) {
- this.gateway = gateway;
- }
-
public void setPublicIpAddress(String publicIpAddress) {
this.publicIpAddress = publicIpAddress;
}
@@ -142,27 +113,10 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter {
this.guestIpAddress = routerIpAddress;
}
- public void setDns1(String dns1) {
- this.dns1 = dns1;
- }
-
- public void setDns2(String dns2) {
- this.dns2 = dns2;
- }
-
public void setDomain(String domain) {
this.domain = domain;
}
- public void setVnet(String vnet) {
- this.vnet = vnet;
- }
-
- @Override
- public String getVnet() {
- return vnet;
- }
-
@Override
public long getDataCenterId() {
return dataCenterId;
@@ -187,16 +141,6 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter {
super();
}
- @Override
- public String getDns1() {
- return dns1;
- }
-
- @Override
- public String getDns2() {
- return dns2;
- }
-
@Override
public String getDomain() {
return domain;
@@ -212,34 +156,16 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter {
this.ramSize = ramSize;
}
- @Override
- public String getGateway() {
- return gateway;
- }
-
@Override
public String getPublicIpAddress() {
return publicIpAddress;
}
- @Override
- public String getVlanId() {
- return vlanId;
- }
-
@Override
public String getGuestMacAddress() {
return guestMacAddress;
}
- public void setVlanDbId(Long vlanDbId) {
- this.vlanDbId = vlanDbId;
- }
-
- public Long getVlanDbId() {
- return vlanDbId;
- }
-
@Override
public Role getRole() {
return role;
@@ -249,33 +175,6 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter {
this.role = role;
}
- @Override
- public String[] getDhcpRange() {
- if (guestIpAddress != null && guestNetmask != null) {
- long cidrSize = NetUtils.getCidrSize(guestNetmask);
- return NetUtils.getIpRangeFromCidr(guestIpAddress, cidrSize);
- }
- return new String[2];
- }
-
- public void setZoneVlan(String zoneVlan) {
- this.zoneVlan = zoneVlan;
- }
-
- @Override
- public String getZoneVlan() {
- return zoneVlan;
- }
-
- public void setGuestZoneMacAddress(String guestZoneMacAddress) {
- this.guestZoneMacAddress = guestZoneMacAddress;
- }
-
- @Override
- public String getGuestZoneMacAddress() {
- return guestZoneMacAddress;
- }
-
public void setServiceOfferingId(long serviceOfferingId) {
this.serviceOfferingId = serviceOfferingId;
}
diff --git a/core/src/com/cloud/vm/SecondaryStorageVmVO.java b/core/src/com/cloud/vm/SecondaryStorageVmVO.java
index c4d2e6ecad5..fc66537a7b7 100644
--- a/core/src/com/cloud/vm/SecondaryStorageVmVO.java
+++ b/core/src/com/cloud/vm/SecondaryStorageVmVO.java
@@ -39,15 +39,6 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType;
@DiscriminatorValue(value="SecondaryStorageVm")
public class SecondaryStorageVmVO extends VMInstanceVO implements SecondaryStorageVm {
- @Column(name="gateway", nullable=false)
- private String gateway;
-
- @Column(name="dns1")
- private String dns1;
-
- @Column(name="dns2")
- private String dns2;
-
@Column(name="public_ip_address", nullable=false)
private String publicIpAddress;
@@ -57,24 +48,6 @@ public class SecondaryStorageVmVO extends VMInstanceVO implements SecondaryStora
@Column(name="public_netmask", nullable=false)
private String publicNetmask;
- @Column(name="guest_mac_address")
- private String guestMacAddress;
-
- @Column(name="guest_ip_address")
- private String guestIpAddress;
-
- @Column(name="guest_netmask")
- private String guestNetmask;
-
- @Column(name="vlan_db_id")
- private Long vlanDbId;
-
- @Column(name="vlan_id")
- private String vlanId;
-
- @Column(name="domain", nullable=false)
- private String domain;
-
@Column(name="guid", nullable=false)
private String guid;
@@ -100,22 +73,6 @@ public class SecondaryStorageVmVO extends VMInstanceVO implements SecondaryStora
super();
}
- public void setGateway(String gateway) {
- this.gateway = gateway;
- }
-
- public void setDns1(String dns1) {
- this.dns1 = dns1;
- }
-
- public void setDns2(String dns2) {
- this.dns2 = dns2;
- }
-
- public void setDomain(String domain) {
- this.domain = domain;
- }
-
public void setPublicIpAddress(String publicIpAddress) {
this.publicIpAddress = publicIpAddress;
}
@@ -128,18 +85,6 @@ public class SecondaryStorageVmVO extends VMInstanceVO implements SecondaryStora
this.publicMacAddress = publicMacAddress;
}
- public void setGuestIpAddress(String guestIpAddress) {
- this.guestIpAddress = guestIpAddress;
- }
-
- public void setGuestNetmask(String guestNetmask) {
- this.guestNetmask = guestNetmask;
- }
-
- public void setGuestMacAddress(String guestMacAddress) {
- this.guestMacAddress = guestMacAddress;
- }
-
public void setRamSize(int ramSize) {
this.ramSize = ramSize;
}
@@ -148,21 +93,6 @@ public class SecondaryStorageVmVO extends VMInstanceVO implements SecondaryStora
this.lastUpdateTime = time;
}
- @Override
- public String getGateway() {
- return this.gateway;
- }
-
- @Override
- public String getDns1() {
- return this.dns1;
- }
-
- @Override
- public String getDns2() {
- return this.dns2;
- }
-
@Override
public String getPublicIpAddress() {
return this.publicIpAddress;
@@ -178,36 +108,6 @@ public class SecondaryStorageVmVO extends VMInstanceVO implements SecondaryStora
return this.publicMacAddress;
}
-
- public String getGuestIpAddress() {
- return this.guestIpAddress;
- }
-
-
- public String getGuestNetmask() {
- return this.guestNetmask;
- }
-
-
- public String getGuestMacAddress() {
- return this.guestMacAddress;
- }
-
- @Override
- public Long getVlanDbId() {
- return vlanDbId;
- }
-
- @Override
- public String getVlanId() {
- return vlanId;
- }
-
- @Override
- public String getDomain() {
- return this.domain;
- }
-
@Override
public int getRamSize() {
return this.ramSize;
diff --git a/core/src/com/cloud/vm/SystemVm.java b/core/src/com/cloud/vm/SystemVm.java
index 7e1fd3387c2..21d5027246e 100644
--- a/core/src/com/cloud/vm/SystemVm.java
+++ b/core/src/com/cloud/vm/SystemVm.java
@@ -20,16 +20,9 @@ package com.cloud.vm;
import java.util.Date;
public interface SystemVm extends VirtualMachine {
- public String getGateway();
- public String getDns1();
- public String getDns2();
- public String getDomain();
public String getPublicIpAddress();
public String getPublicNetmask();
public String getPublicMacAddress();
- public Long getVlanDbId();
- public String getVlanId();
- public String getPrivateNetmask();
public int getRamSize();
public Date getLastUpdateTime();
}
diff --git a/core/src/com/cloud/vm/UserVmVO.java b/core/src/com/cloud/vm/UserVmVO.java
index eff39465915..2fa2be2947c 100755
--- a/core/src/com/cloud/vm/UserVmVO.java
+++ b/core/src/com/cloud/vm/UserVmVO.java
@@ -36,33 +36,9 @@ import com.cloud.uservm.UserVm;
@PrimaryKeyJoinColumn(name="id")
public class UserVmVO extends VMInstanceVO implements UserVm {
- @Column(name="domain_router_id", updatable=true, nullable=true)
- Long domainRouterId;
-
- @Column(name="vnet", length=10, updatable=true, nullable=true)
- String vnet;
-
- @Column(name="guest_ip_address")
- String guestIpAddress;
-
- @Column(name="guest_mac_address")
- String guestMacAddress;
-
- @Column(name="guest_netmask")
- String guestNetmask;
-
@Column(name="iso_id", nullable=true, length=17)
private Long isoId = null;
- @Column(name="external_ip_address")
- String externalIpAddress;
-
- @Column(name="external_mac_address")
- String externalMacAddress;
-
- @Column(name="external_vlan_db_id")
- private Long externalVlanDbId;
-
@Column(name="user_data", updatable=true, nullable=true, length=2048)
private String userData;
@@ -83,54 +59,11 @@ public class UserVmVO extends VMInstanceVO implements UserVm {
this.password = password;
}
- @Override
- public String getGuestIpAddress() {
- return guestIpAddress;
- }
-
- public void setGuestIpAddress(String guestIpAddress) {
- this.guestIpAddress = guestIpAddress;
- setPrivateIpAddress(guestIpAddress);
- }
-
- @Override
- public String getGuestMacAddress() {
- return guestMacAddress;
- }
-
- public void setGuestMacAddress(String guestMacAddress) {
- this.guestMacAddress = guestMacAddress;
- setPrivateMacAddress(guestMacAddress);
-
- }
-
- public String getGuestNetmask() {
- return guestNetmask;
- }
-
- public void setGuestNetmask(String guestNetmask) {
- this.guestNetmask = guestNetmask;
- setPrivateNetmask(guestNetmask);
- }
-
@Override
public Long getIsoId() {
return isoId;
}
- @Override
- public Long getDomainRouterId() {
- return domainRouterId;
- }
-
- public void setDomainRouterId(long domainRouterId) {
- this.domainRouterId = domainRouterId;
- }
-
- public void setVnet(String vnet) {
- this.vnet = vnet;
- }
-
@Override
public long getServiceOfferingId() {
return serviceOfferingId;
@@ -140,11 +73,6 @@ public class UserVmVO extends VMInstanceVO implements UserVm {
this.serviceOfferingId = serviceOfferingId;
}
- @Override
- public String getVnet() {
- return vnet;
- }
-
public UserVmVO(long id,
String instanceName,
String displayName,
@@ -167,34 +95,10 @@ public class UserVmVO extends VMInstanceVO implements UserVm {
super();
}
- public String getExternalIpAddress() {
- return externalIpAddress;
- }
-
public void setIsoId(Long id) {
this.isoId = id;
}
- public void setExternalIpAddress(String externalIpAddress) {
- this.externalIpAddress = externalIpAddress;
- }
-
- public String getExternalMacAddress() {
- return externalMacAddress;
- }
-
- public void setExternalMacAddress(String externalMacAddress) {
- this.externalMacAddress = externalMacAddress;
- }
-
- public void setExternalVlanDbId(Long vlanDbId) {
- this.externalVlanDbId = vlanDbId;
- }
-
- public Long getExternalVlanDbId() {
- return externalVlanDbId;
- }
-
@Override
public void setUserData(String userData) {
this.userData = userData;
diff --git a/core/src/com/cloud/vm/VMInstanceVO.java b/core/src/com/cloud/vm/VMInstanceVO.java
index da61416df3c..23cd9ef9707 100644
--- a/core/src/com/cloud/vm/VMInstanceVO.java
+++ b/core/src/com/cloud/vm/VMInstanceVO.java
@@ -99,9 +99,6 @@ public class VMInstanceVO implements VirtualMachine, FiniteStateObject
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/deps/.project b/deps/.project
index 2d10b0c4b06..901f15e089b 100644
--- a/deps/.project
+++ b/deps/.project
@@ -1,11 +1,17 @@
-
-
- deps
-
-
-
-
-
-
-
-
+
+
+ deps
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/patches/systemvm/debian/config/etc/init.d/cloud-early-config b/patches/systemvm/debian/config/etc/init.d/cloud-early-config
index 1c4fbd6cde1..03cb7837dee 100755
--- a/patches/systemvm/debian/config/etc/init.d/cloud-early-config
+++ b/patches/systemvm/debian/config/etc/init.d/cloud-early-config
@@ -85,6 +85,7 @@ patch() {
if [ "$shouldpatch" == "true" ]
then
log_it "Rebooting system since we patched init scripts"
+ sync
sleep 2
reboot
fi
@@ -157,8 +158,11 @@ setup_common() {
init_interfaces $1 $2 $3
setup_interface "0" $ETH0_IP $ETH0_MASK $GW
setup_interface "1" $ETH1_IP $ETH1_MASK $GW
- setup_interface "2" $ETH2_IP $ETH2_MASK $GW
-
+ if [ -n "$ETH2_IP" ]
+ then
+ setup_interface "2" $ETH2_IP $ETH2_MASK $GW
+ fi
+
echo $NAME > /etc/hostname
echo 'AVAHI_DAEMON_DETECT_LOCAL=0' > /etc/default/avahi-daemon
hostname $NAME
@@ -224,7 +228,13 @@ setup_apache2() {
setup_router() {
log_action_begin_msg "Setting up virtual router system vm"
- setup_common eth0 eth1 eth2
+ if [ -n "$ETH2_IP" ]
+ then
+ setup_common eth0 eth1 eth2
+ else
+ setup_common eth0 eth1
+ fi
+
setup_dnsmasq
setup_apache2 $ETH0_IP
diff --git a/scripts/vm/hypervisor/xenserver/ovstunnel b/scripts/vm/hypervisor/xenserver/ovstunnel
new file mode 100755
index 00000000000..22da51390c5
--- /dev/null
+++ b/scripts/vm/hypervisor/xenserver/ovstunnel
@@ -0,0 +1,262 @@
+#!/usr/bin/python
+#
+# A plugin for executing script needed by vmops cloud
+
+import os, sys, time
+import XenAPIPlugin
+sys.path.append("/opt/xensource/sm/")
+import util
+from util import CommandException
+import hostvmstats
+import socket
+import stat
+import base64
+import tempfile
+from os.path import exists as _exists
+from time import localtime as _localtime, asctime as _asctime
+
+vSwitchDBPidFile = "/var/run/openvswitch/ovsdb-server.pid"
+vSwitchDBDaemonName = "ovsdb-server"
+vSwitchPidFile = "/var/run/openvswitch/ovs-vswitchd.pid"
+vsctlPath = "/usr/bin/ovs-vsctl"
+ofctlPath = "/usr/bin/ovs-ofctl"
+vSwitchDaemonName = "ovs-vswitchd"
+
+logFile = "/var/log/ovstunnel.log"
+fLog = None
+
+def echo(fn):
+ def wrapped(*v, **k):
+ name = fn.__name__
+ util.SMlog("#### VMOPS enter %s ####" % name )
+ res = fn(*v, **k)
+ util.SMlog("#### VMOPS exit %s ####" % name )
+ return res
+ return wrapped
+
+def open_log ():
+ global fLog
+
+ try:
+ if fLog == None:
+ fLog = open (logFile, "a")
+ except IOError, e:
+ #print e
+ pass
+
+def pr (str):
+ global fLog
+
+ if fLog != None:
+ str = "[%s]:" % _asctime (_localtime()) + str + "\n"
+ fLog.write (str)
+
+def close_log ():
+ global fLog
+
+ if fLog != None:
+ fLog.close ()
+
+def is_process_run (pidFile, name):
+ try:
+ fpid = open (pidFile, "r")
+ pid = fpid.readline ()
+ fpid.close ()
+ except IOError, e:
+ return -1
+
+ pid = pid[:-1]
+ ps = os.popen ("ps -ae")
+ for l in ps:
+ if pid in l and name in l:
+ ps.close ()
+ return 0
+
+ ps.close ()
+ return -2
+
+def is_tool_exist (name):
+ if _exists (name):
+ return 0
+ return -1
+
+
+def check_switch ():
+ global result
+
+ ret = is_process_run (vSwitchDBPidFile, vSwitchDBDaemonName);
+ if ret < 0:
+ if ret == -1: return "NO_DB_PID_FILE"
+ if ret == -2: return "DB_NOT_RUN"
+
+ ret = is_process_run (vSwitchPidFile, vSwitchDaemonName)
+ if ret < 0:
+ if ret == -1: return "NO_SWITCH_PID_FILE"
+ if ret == -2: return "SWITCH_NOT_RUN"
+
+ if is_tool_exist (vsctlPath) < 0:
+ return "NO_VSCTL"
+
+ if is_tool_exist (ofctlPath) < 0:
+ return "NO_OFCTL"
+
+ return "SUCCESS"
+
+def do_cmd (cmds, lines=False):
+ cmd = ""
+ for i in cmds:
+ cmd += " "
+ cmd += i
+
+ pr("do command '%s'" % cmd)
+ f = os.popen (cmd)
+ if lines == True:
+ res = f.readlines ()
+ else:
+ res = f.readline ()
+ res = res[:-1]
+ f.close ()
+
+ if lines == False:
+ pr("command output '%s'" % res)
+ return res
+
+######################## GRE creation utils ##########################
+# UUID's format is 8-4-4-4-12
+def is_uuid (uuid):
+ list = uuid.split ("-")
+
+ if len (list) != 5:
+ return -1
+
+ if len (list[0]) != 8 or len (list[1]) != 4 \
+ or len (list[2]) != 4 or len (list[3]) != 4 \
+ or len (list[4]) != 12:
+ return -1
+
+ return 0
+
+def set_flood_flow(bridge, inport):
+ flow = "in_port=%s idle_timeout=0 hard_timeout=0 priority=10000 actions=flood" % inport
+ add_flow(bridge, flow)
+
+@echo
+def create_tunnel (session, args):
+ bridge = args.pop("bridge")
+ remoteIP = args.pop("remote_ip")
+ greKey = args.pop("key")
+ srcHost = args.pop("from")
+ dstHost = args.pop("to")
+
+ res = check_switch()
+ if res != "SUCCESS":
+ return res
+
+ name = "%s-%s-%s-%s" % (bridge, srcHost, dstHost, greKey)
+
+ wait = [vsctlPath, "--timeout=30 wait-until bridge %s -- get bridge %s name" % \
+ (bridge, bridge)]
+ res = do_cmd(wait)
+ if bridge not in res:
+ pr("WARNIING:Can't find bridge %s for creating tunnel!" % bridge)
+ result = "COMMAND_FAILED_NO_BRIDGE"
+ return result
+
+ createInterface = [vsctlPath, "create interface", "name=%s" % name, \
+ 'type=gre options:remote_ip=%s options:key=%s' % (remoteIP, greKey)]
+ ifaceUUID = do_cmd (createInterface)
+ if is_uuid (ifaceUUID) < 0:
+ pr("create interface failed, %s is not UUID" % ifaceUUID)
+ result = "COMMAND_FAILED_CREATE_INTERFACE_FAILED"
+ return result
+
+ createPort = [vsctlPath, "create port", "name=%s" % name, \
+ "interfaces=[%s]" % ifaceUUID]
+ portUUID = do_cmd (createPort)
+ if is_uuid (portUUID) < 0:
+ pr("create port failed, %s is not UUID" % portUUID)
+ result = "COMMAND_FAILED_CREATE_PORT_FAILED"
+ return result
+
+ addBridge = [vsctlPath, "add bridge %s" % bridge, "ports %s" % portUUID]
+ do_cmd (addBridge)
+
+ wait = [vsctlPath, "--timeout=30 wait-until port %s -- get port %s name" % \
+ (name, name)]
+ res = do_cmd(wait)
+ if name in res:
+ port = get_field_of_interface(name, "ofport");
+ if port == "[]":
+ return "COMMAND_FAILED_PORT_IS_[]"
+
+ noFlood = [ofctlPath, "mod-port %s %s noflood" % (bridge, \
+ port)]
+ do_cmd(noFlood)
+
+ set_flood_flow(bridge, port)
+ pr("create tunnel successful(bridge=%s, remote_ip=%s, key=%s, from=%s, to=%s" % \
+ (bridge, remoteIP, greKey, srcHost, dstHost))
+ result = "SUCCESS:%s" % name
+ else:
+ pr("create gre tunnel failed")
+ result = "COMMAND_FAILED_CREATE_TUNNEL_FAILED"
+
+ return result
+######################## End GRE creation utils ##########################
+
+def del_all_flows(bridge):
+ delFlow = [ofctlPath, "del-flows %s" % bridge]
+ do_cmd(delFlow)
+
+ normalFlow = "priority=0 idle_timeout=0 hard_timeout=0 actions=normal"
+ add_flow(bridge, normalFlow)
+
+def del_flows(bridge, ofport):
+ delFlow = [ofctlPath, 'del-flows %s "in_port=%s"' % (bridge, ofport)]
+ do_cmd(delFlow)
+
+def del_port(bridge, port):
+ delPort = [vsctlPath, "del-port %s %s" % (bridge, port)]
+ do_cmd(delPort)
+
+@echo
+def destroy_tunnel(session, args):
+ bridge = args.pop("bridge")
+ inPort = args.pop("in_port")
+
+ # delete all gre ports on bridge
+ if inPort == "[]":
+ listPorts = [vsctlPath, "list-ports %s" % bridge]
+ res = do_cmd(listPorts, True)
+ for p in res:
+ if bridge in p:
+ del_port(bridge, p)
+ del_all_flows(bridge)
+ else:
+ ofport = get_field_of_interface(inPort, "ofport")
+ del_flows(bridge, ofport)
+ del_port(bridge, inPort)
+
+ return "SUCCESS"
+
+def get_field_of_interface(nameOruuid, field):
+ listIface = [vsctlPath, "list interface", nameOruuid]
+ res = do_cmd(listIface, True)
+
+ for i in res:
+ if field in i:
+ (x, r) = i.split(":")
+ return r.lstrip().rstrip()
+ return None
+
+
+def add_flow(bridge, flow):
+ param = bridge + ' "%s"' % flow
+ addflow = ["ovs-ofctl add-flow", param]
+ do_cmd (addflow)
+
+if __name__ == "__main__":
+ open_log()
+ XenAPIPlugin.dispatch({"create_tunnel":create_tunnel, "destroy_tunnel":destroy_tunnel})
+ close_log()
+
diff --git a/scripts/vm/hypervisor/xenserver/xenserver56fp1/patch b/scripts/vm/hypervisor/xenserver/xenserver56fp1/patch
index 8042e30d103..9bc7f0a9d69 100644
--- a/scripts/vm/hypervisor/xenserver/xenserver56fp1/patch
+++ b/scripts/vm/hypervisor/xenserver/xenserver56fp1/patch
@@ -13,6 +13,7 @@ NFSSR.py=/opt/xensource/sm
nfs.py=/opt/xensource/sm
vmops=..,0755,/etc/xapi.d/plugins
ovsgre=..,0755,/etc/xapi.d/plugins
+ovstunnel=..,0755,/etc/xapi.d/plugins
vmopsSnapshot=..,0755,/etc/xapi.d/plugins
hostvmstats.py=..,0755,/opt/xensource/sm
systemvm.iso=../../../../../vms,0644,/opt/xensource/packages/iso
diff --git a/scripts/vm/network/security_group.py b/scripts/vm/network/security_group.py
index abd7da8c441..e8597a2c7e0 100755
--- a/scripts/vm/network/security_group.py
+++ b/scripts/vm/network/security_group.py
@@ -434,7 +434,6 @@ def add_network_rules(vm_name, vm_id, vm_ip, signature, seqno, vmMac, rules):
try:
vmName = vm_name
domId = getvmId(vmName)
- vm_name = '-'.join(vm_name.split('-')[:-1])
vmchain = vm_name
changes = check_rule_log_for_vm(vmName, vm_id, vm_ip, domId, signature, seqno)
@@ -447,14 +446,17 @@ def add_network_rules(vm_name, vm_id, vm_ip, signature, seqno, vmMac, rules):
logging.debug("Change detected in vmId or vmIp or domId, resetting default rules")
default_network_rules(vmName, vm_ip, vm_id, vmMac)
+ if rules == "" or rules == None:
+ return 'true'
+
lines = rules.split(';')
print lines
logging.debug(" programming network rules for IP: " + vm_ip + " vmname=" + vm_name)
#iptables('-F', vmchain)
- print lines
for line in lines:
+
tokens = line.split(':')
if len(tokens) != 4:
continue
@@ -473,16 +475,16 @@ def add_network_rules(vm_name, vm_id, vm_ip, signature, seqno, vmMac, rules):
if ips:
if protocol == 'all':
for ip in ips:
- iptables = "iptables -I " + vmchain + " -m state --state NEW -m iprange --src-range " + ip + " -j ACCEPT"
+ iptables = "iptables -I " + vmchain + " -m state --state NEW -s " + ip + " -j ACCEPT"
elif protocol != 'icmp':
for ip in ips:
- iptables = "iptables -I " + vmchain + " -p " + protocol + " -m " + protocol + " --dport " + range + " -m state --state NEW -m iprange --src-range " + ip + " -j ACCEPT"
+ iptables = "iptables -I " + vmchain + " -p " + protocol + " -m " + protocol + " --dport " + range + " -m state --state NEW -s " + ip + " -j ACCEPT"
else:
range = start + "/" + end
if start == "-1":
range = "any"
for ip in ips:
- iptables = "iptables -I " + vmchain + " -p icmp --icmp-type " + range + " -m iprange --src-range " + ip + " -j ACCEPT"
+ iptables = "iptables -I " + vmchain + " -p icmp --icmp-type " + range + " -s " + ip + " -j ACCEPT"
execute(iptables)
if allow_any and protocol != 'all':
@@ -497,7 +499,6 @@ def add_network_rules(vm_name, vm_id, vm_ip, signature, seqno, vmMac, rules):
iptables = "iptables -A " + vmchain + " -j DROP"
execute(iptables)
-
if write_rule_log_for_vm(vmName, vm_id, vm_ip, domId, signature, seqno) == False:
return 'false'
@@ -548,3 +549,5 @@ if __name__ == '__main__':
get_rule_logs_for_vms()
elif cmd == "add_network_rules":
add_network_rules(option.vmName, option.vmID, option.vmIP, option.sig, option.seq, option.vmMAC, option.rules)
+ elif cmd == "cleanup_rules":
+ cleanup_rules()
diff --git a/server/.classpath b/server/.classpath
index b18c9660ffe..52b60598f7d 100644
--- a/server/.classpath
+++ b/server/.classpath
@@ -1,25 +1,26 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java
index d6ef574a7e6..437e4c4bf76 100755
--- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java
+++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java
@@ -1445,12 +1445,14 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory,
String hostDesc = "name: " + host.getName() + " (id:"
+ host.getId() + "), availability zone: "
+ dcVO.getName() + ", pod: " + podVO.getName();
- _alertMgr.sendAlert(AlertManager.ALERT_TYPE_HOST,
- host.getDataCenterId(), host.getPodId(),
- "Host disconnected, " + hostDesc,
- "If the agent for host [" + hostDesc
- + "] is not restarted within " + _alertWait
- + " seconds, HA will begin on the VMs");
+ if((host.getType() != Host.Type.SecondaryStorage) && (host.getType() != Host.Type.ConsoleProxy)){
+ _alertMgr.sendAlert(AlertManager.ALERT_TYPE_HOST,
+ host.getDataCenterId(), host.getPodId(),
+ "Host disconnected, " + hostDesc,
+ "If the agent for host [" + hostDesc
+ + "] is not restarted within " + _alertWait
+ + " seconds, HA will begin on the VMs");
+ }
event = Event.AgentDisconnected;
}
} else {
diff --git a/server/src/com/cloud/agent/manager/allocator/impl/UserConcentratedAllocator.java b/server/src/com/cloud/agent/manager/allocator/impl/UserConcentratedAllocator.java
index a45e8891551..354e077a5e3 100755
--- a/server/src/com/cloud/agent/manager/allocator/impl/UserConcentratedAllocator.java
+++ b/server/src/com/cloud/agent/manager/allocator/impl/UserConcentratedAllocator.java
@@ -77,8 +77,8 @@ public class UserConcentratedAllocator implements PodAllocator {
@Inject VMInstanceDao _vmInstanceDao;
Random _rand = new Random(System.currentTimeMillis());
- private int _hoursToSkipStoppedVMs = 24;
- private int _hoursToSkipDestroyedVMs = 0;
+ private int _secondsToSkipStoppedVMs = 86400;
+ private int _secondsToSkipDestroyedVMs = 0;
private int _secStorageVmRamSize = 1024;
private int _proxyRamSize = 256;
@@ -206,14 +206,14 @@ public class UserConcentratedAllocator implements PodAllocator {
if(vm.getState() == State.Stopped || vm.getState() == State.Destroyed) {
// for Stopped/Destroyed VMs, we will skip counting it if it hasn't been used for a while
- int _hoursToSkipVMs = _hoursToSkipStoppedVMs;
+ int secondsToSkipVMs = _secondsToSkipStoppedVMs;
if (vm.getState() == State.Destroyed) {
- _hoursToSkipVMs = _hoursToSkipDestroyedVMs;
+ secondsToSkipVMs = _secondsToSkipDestroyedVMs;
}
long millisecondsSinceLastUpdate = DateUtil.currentGMTTime().getTime() - vm.getUpdateTime().getTime();
- if(millisecondsSinceLastUpdate > _hoursToSkipVMs*3600000L) {
+ if(millisecondsSinceLastUpdate > secondsToSkipVMs*1000L) {
if(s_logger.isDebugEnabled()) {
s_logger.debug("Skip counting " + vm.getState().toString() + " vm " + vm.getInstanceName() + " in capacity allocation as it has been " + vm.getState().toString().toLowerCase() + " for " + millisecondsSinceLastUpdate/60000 + " minutes");
}
@@ -320,10 +320,11 @@ public class UserConcentratedAllocator implements PodAllocator {
_name = name;
Map configs = _configDao.getConfiguration("management-server", params);
- String stoppedValue = configs.get("capacity.skipcounting.hours");
- String destroyedValue = configs.get("capacity.skipcounting.destroyed.hours");
- _hoursToSkipStoppedVMs = NumbersUtil.parseInt(stoppedValue, 24);
- _hoursToSkipDestroyedVMs = NumbersUtil.parseInt(destroyedValue, 0);
+ String stoppedValue = configs.get("vm.resource.release.interval");
+ // String destroyedValue = configs.get("capacity.skipcounting.destroyed.hours");
+ String destroyedValue = null;
+ _secondsToSkipStoppedVMs = NumbersUtil.parseInt(stoppedValue, 86400);
+ _secondsToSkipDestroyedVMs = NumbersUtil.parseInt(destroyedValue, 0);
// TODO this is not good, there should be one place to get these values
_secStorageVmRamSize = NumbersUtil.parseInt(configs.get("secstorage.vm.ram.size"), 256);
diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java
index b397cbd5adf..4e86b306e3f 100755
--- a/server/src/com/cloud/api/ApiDBUtils.java
+++ b/server/src/com/cloud/api/ApiDBUtils.java
@@ -7,6 +7,7 @@ import java.util.Map;
import com.cloud.agent.AgentManager;
import com.cloud.async.AsyncJobManager;
import com.cloud.async.AsyncJobVO;
+import com.cloud.configuration.ConfigurationService;
import com.cloud.configuration.ResourceCount.ResourceType;
import com.cloud.dc.AccountVlanMapVO;
import com.cloud.dc.ClusterVO;
@@ -79,6 +80,7 @@ import com.cloud.user.AccountManager;
import com.cloud.user.AccountVO;
import com.cloud.user.User;
import com.cloud.user.UserStatisticsVO;
+import com.cloud.user.UserVO;
import com.cloud.user.dao.AccountDao;
import com.cloud.user.dao.UserDao;
import com.cloud.user.dao.UserStatisticsDao;
@@ -137,6 +139,7 @@ public class ApiDBUtils {
private static DataCenterDao _zoneDao;
private static NetworkOfferingDao _networkOfferingDao;
private static NetworkDao _networkDao;
+ private static ConfigurationService _configMgr;
static {
_ms = (ManagementServer)ComponentLocator.getComponent(ManagementServer.Name);
@@ -150,6 +153,7 @@ public class ApiDBUtils {
_storageMgr = locator.getManager(StorageManager.class);
_userVmMgr = locator.getManager(UserVmManager.class);
_networkMgr = locator.getManager(NetworkManager.class);
+ _configMgr = locator.getManager(ConfigurationService.class);
_accountDao = locator.getDao(AccountDao.class);
_accountVlanMapDao = locator.getDao(AccountVlanMapDao.class);
@@ -187,7 +191,7 @@ public class ApiDBUtils {
/////////////////////////////////////////////////////////////
// ManagementServer methods //
/////////////////////////////////////////////////////////////
-
+
public static VMInstanceVO findVMInstanceById(long vmId) {
return _ms.findVMInstanceById(vmId);
}
@@ -427,6 +431,10 @@ public class ApiDBUtils {
public static VolumeVO findVolumeById(Long volumeId) {
return _volumeDao.findByIdIncludingRemoved(volumeId);
}
+
+ public static List listUsersByAccount(long accountId) {
+ return _userDao.listByAccount(accountId);
+ }
public static DataCenterVO findZoneById(Long zoneId) {
return _zoneDao.findById(zoneId);
@@ -521,4 +529,12 @@ public class ApiDBUtils {
}
}
+ public static Integer getNetworkRate(long networkOfferingId) {
+ return _configMgr.getNetworkRate(networkOfferingId);
+ }
+
+ public static Account getVlanAccount(long vlanId) {
+ return _configMgr.getVlanAccount(vlanId);
+ }
+
}
diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java
index bafe991e27a..34ad2d93639 100644
--- a/server/src/com/cloud/api/ApiDispatcher.java
+++ b/server/src/com/cloud/api/ApiDispatcher.java
@@ -64,19 +64,13 @@ public class ApiDispatcher {
public void dispatchCreateCmd(BaseAsyncCreateCmd cmd, Map params) {
- boolean created = false;
String errorMsg = "";
- long startId = 0;
-
- if(cmd.getCreateEventType() != null){
- startId = cmd.saveStartedEvent(cmd.getCreateEventType(), cmd.getCreateEventDescription(), 0L);
- }
-
setupParameters(cmd, params);
try {
+ UserContext ctx = UserContext.current();
+ ctx.setAccountId(cmd.getEntityOwnerId());
cmd.create();
- created = true;
} catch (Throwable t) {
if (t instanceof InvalidParameterValueException || t instanceof IllegalArgumentException) {
s_logger.info(t.getMessage());
@@ -121,27 +115,21 @@ public class ApiDispatcher {
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, BaseCmd.USER_ERROR_MESSAGE);
}
}
- } finally {
- if(cmd.getCreateEventType() != null){
- if (created){
- cmd.saveCompletedEvent(EventVO.LEVEL_INFO, cmd.getCreateEventType(), cmd.getCreateEventDescription()+" successfull. Id: "+cmd.getEntityId(), startId);
- } else {
- cmd.saveCompletedEvent(EventVO.LEVEL_ERROR, cmd.getCreateEventType(), cmd.getCreateEventDescription()+" failed. "+errorMsg, startId);
- }
- }
}
}
public void dispatch(BaseCmd cmd, Map params) {
- boolean success = false;
String errorMsg = "";
setupParameters(cmd, params);
try {
if(cmd instanceof BaseAsyncCmd){
- ((BaseAsyncCmd)cmd).saveStartedEvent();
+ UserContext ctx = UserContext.current();
+ BaseAsyncCmd asyncCmd = (BaseAsyncCmd)cmd;
+ ctx.setAccountId(asyncCmd.getEntityOwnerId());
+ String startEventId = params.get("ctxStartEventId");
+ ctx.setStartEventId(Long.valueOf(startEventId));
}
cmd.execute();
- success = true;
} catch (Throwable t) {
if (t instanceof InvalidParameterValueException || t instanceof IllegalArgumentException) {
s_logger.info(t.getMessage());
@@ -186,15 +174,6 @@ public class ApiDispatcher {
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, BaseCmd.USER_ERROR_MESSAGE);
}
}
- } finally {
- if(cmd instanceof BaseAsyncCmd){
- BaseAsyncCmd asyncCmd = (BaseAsyncCmd)cmd;
- if(success){
- asyncCmd.saveCompletedEvent(EventVO.LEVEL_INFO, asyncCmd.getEventDescription()+" completed successfully");
- } else {
- asyncCmd.saveCompletedEvent(EventVO.LEVEL_ERROR, asyncCmd.getEventDescription()+" failed. "+errorMsg);
- }
- }
}
}
diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java
index e3db40ed3a4..68c0e281fa4 100755
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@ -142,6 +142,7 @@ import com.cloud.user.User;
import com.cloud.user.UserAccount;
import com.cloud.user.UserContext;
import com.cloud.user.UserStatisticsVO;
+import com.cloud.user.UserVO;
import com.cloud.uservm.UserVm;
import com.cloud.utils.Pair;
import com.cloud.utils.net.NetUtils;
@@ -309,6 +310,30 @@ public class ApiResponseHelper implements ResponseGenerator {
accountResponse.setVmRunning(vmRunning);
accountResponse.setObjectName("account");
+ //adding all the users for an account as part of the response obj
+ List usersForAccount = ApiDBUtils.listUsersByAccount(account.getAccountId());
+ List userResponseList = new ArrayList();
+ for(UserVO user : usersForAccount) {
+ UserResponse userResponse = new UserResponse();
+ userResponse.setAccountName(account.getAccountName());
+ userResponse.setAccountType(account.getType());
+ userResponse.setApiKey(user.getApiKey());
+ userResponse.setCreated(user.getCreated());
+ userResponse.setDomainId(account.getDomainId());
+ userResponse.setDomainName(ApiDBUtils.findDomainById(account.getDomainId()).getName());
+ userResponse.setEmail(user.getEmail());
+ userResponse.setFirstname(user.getFirstname());
+ userResponse.setId(user.getId());
+ userResponse.setSecretKey(user.getSecretKey());
+ userResponse.setLastname(user.getLastname());
+ userResponse.setState(user.getState().toString());
+ userResponse.setTimezone(user.getTimezone());
+ userResponse.setUsername(user.getUsername());
+
+ userResponseList.add(userResponse);
+ }
+
+ accountResponse.setUsers(userResponseList);
return accountResponse;
}
@@ -568,20 +593,12 @@ public class ApiResponseHelper implements ResponseGenerator {
vlanResponse.setStartIp(range[0]);
vlanResponse.setEndIp(range[1]);
- Long networkId = vlan.getNetworkId();
- if (networkId != null) {
- vlanResponse.setNetworkId(vlan.getNetworkId());
- Network network = ApiDBUtils.findNetworkById(networkId);
- if (network != null) {
- Long accountId = network.getAccountId();
- //Set account information
- if (accountId != null) {
- Account account = ApiDBUtils.findAccountById(accountId);
- vlanResponse.setAccountName(account.getAccountName());
- vlanResponse.setDomainId(account.getDomainId());
- vlanResponse.setDomainName(ApiDBUtils.findDomainById(account.getDomainId()).getName());
- }
- }
+ vlanResponse.setNetworkId(vlan.getNetworkId());
+ Account owner = ApiDBUtils.getVlanAccount(vlan.getId());
+ if (owner != null) {
+ vlanResponse.setAccountName(owner.getAccountName());
+ vlanResponse.setDomainId(owner.getDomainId());
+ vlanResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName());
}
vlanResponse.setObjectName("vlan");
@@ -743,7 +760,12 @@ public class ApiResponseHelper implements ResponseGenerator {
VMInstanceVO vm = ApiDBUtils.findVMInstanceById(instanceId);
volResponse.setVirtualMachineId(vm.getId());
volResponse.setVirtualMachineName(vm.getName());
- volResponse.setVirtualMachineDisplayName(vm.getName());
+ if(vm.getType().equals(VirtualMachine.Type.User)) {
+ UserVm userVm = ApiDBUtils.findUserVmById(vm.getId());
+ volResponse.setVirtualMachineDisplayName(userVm.getDisplayName());
+ }else {
+ volResponse.setVirtualMachineDisplayName(vm.getName());
+ }
volResponse.setVirtualMachineState(vm.getState().toString());
}
@@ -802,7 +824,7 @@ public class ApiResponseHelper implements ResponseGenerator {
}
volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString());
volResponse.setAttached(volume.getAttached());
- volResponse.setDestroyed(volume.getDestroyed());
+ volResponse.setDestroyed(volume.getState() == Volume.State.Destroy);
VMTemplateVO template = ApiDBUtils.findTemplateById(volume.getTemplateId());
boolean isExtractable = template != null&& template.isExtractable()&& !(template.getTemplateType()== TemplateType.SYSTEM);
volResponse.setExtractable(isExtractable);
@@ -1166,7 +1188,6 @@ public class ApiResponseHelper implements ResponseGenerator {
vmResponse.setSystemVmType(vm.getType().toString().toLowerCase());
vmResponse.setZoneId(vm.getDataCenterId());
- vmResponse.setNetworkDomain(vm.getDomain());
vmResponse.setName(vm.getName());
vmResponse.setPodId(vm.getPodId());
vmResponse.setTemplateId(vm.getTemplateId());
@@ -1848,7 +1869,7 @@ public class ApiResponseHelper implements ResponseGenerator {
ListResponse response = new ListResponse();
List isoResponses = new ArrayList();
- for (Pair isoZonePair : isoZonePairSet) {
+ for (Pair isoZonePair : isoZonePairSet) {
VMTemplateVO iso = ApiDBUtils.findTemplateById(isoZonePair.first());
if ( (isBootable == null || !isBootable) && iso.getTemplateType() == TemplateType.PERHOST ) {
TemplateResponse isoResponse = new TemplateResponse();
@@ -1862,8 +1883,14 @@ public class ApiResponseHelper implements ResponseGenerator {
isoResponse.setFeatured(iso.isFeatured());
isoResponse.setCrossZones(iso.isCrossZones());
isoResponse.setPublic(iso.isPublicTemplate());
+ isoResponse.setCreated(iso.getCreated());
isoResponse.setPasswordEnabled(false);
- isoResponse.setDomainId(iso.getDomainId());
+ Account owner = ApiDBUtils.findAccountById(iso.getAccountId());
+ if (owner != null) {
+ isoResponse.setAccount(owner.getAccountName());
+ isoResponse.setDomainId(owner.getDomainId());
+ isoResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName());
+ }
isoResponse.setObjectName("iso");
isoResponses.add(isoResponse);
response.setResponses(isoResponses);
@@ -2187,6 +2214,7 @@ public class ApiResponseHelper implements ResponseGenerator {
response.setIsDefault(offering.isDefault());
response.setSpecifyVlan(offering.getSpecifyVlan());
response.setAvailability(offering.getAvailability().toString());
+ response.setNetworkRate(ApiDBUtils.getNetworkRate(offering.getId()));
response.setObjectName("networkoffering");
return response;
}
diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java
index 1251dd75bf2..924a8b0b019 100755
--- a/server/src/com/cloud/api/ApiServer.java
+++ b/server/src/com/cloud/api/ApiServer.java
@@ -370,6 +370,7 @@ public class ApiServer implements HttpRequestHandler {
Long objectId = null;
if (cmdObj instanceof BaseAsyncCreateCmd) {
BaseAsyncCreateCmd createCmd = (BaseAsyncCreateCmd)cmdObj;
+ ctx.setAccountId(createCmd.getEntityOwnerId());
_dispatcher.dispatchCreateCmd(createCmd, params);
objectId = createCmd.getEntityId();
params.put("id", objectId.toString());
@@ -386,13 +387,21 @@ public class ApiServer implements HttpRequestHandler {
params.put("ctxAccountId", String.valueOf(account.getId()));
}
+ long startEventId = ctx.getStartEventId();
+ asyncCmd.setStartEventId(startEventId);
+
// save the scheduled event
Long eventId = EventUtils.saveScheduledEvent((userId == null) ? User.UID_SYSTEM : userId, asyncCmd.getEntityOwnerId(),
- asyncCmd.getEventType(), asyncCmd.getEventDescription());
-
- if (eventId != null) {
- params.put("starteventid", eventId.toString());
+ asyncCmd.getEventType(), asyncCmd.getEventDescription(), startEventId);
+ if(startEventId == 0){
+ //There was no create event before, set current event id as start eventId
+ startEventId = eventId;
}
+
+ params.put("ctxStartEventId", String.valueOf(startEventId));
+
+ ctx.setAccountId(asyncCmd.getEntityOwnerId());
+
AsyncJobVO job = new AsyncJobVO();
job.setInstanceId((objectId == null) ? asyncCmd.getInstanceId() : objectId);
@@ -654,16 +663,6 @@ public class ApiServer implements HttpRequestHandler {
Account account = _ms.findAccountById(userAcct.getAccountId());
- String hypervisorType = _ms.getConfigurationValue("hypervisor.type");
- if (hypervisorType == null) {
- hypervisorType = "kvm";
- }
-
- String directAttachSecurityGroupsEnabled = _ms.getConfigurationValue("direct.attach.security.groups.enabled");
- if(directAttachSecurityGroupsEnabled == null) {
- directAttachSecurityGroupsEnabled = "false";
- }
-
// set the userId and account object for everyone
session.setAttribute("userid", userAcct.getId());
session.setAttribute("username", userAcct.getUsername());
@@ -673,8 +672,6 @@ public class ApiServer implements HttpRequestHandler {
session.setAttribute("account", account.getAccountName());
session.setAttribute("domainid", account.getDomainId());
session.setAttribute("type", Short.valueOf(account.getType()).toString());
- session.setAttribute("hypervisortype", hypervisorType);
- session.setAttribute("directattachsecuritygroupsenabled", directAttachSecurityGroupsEnabled);
if (timezone != null) {
session.setAttribute("timezone", timezone);
diff --git a/server/src/com/cloud/api/doc/Command.java b/server/src/com/cloud/api/doc/Command.java
index 6aa8ef92e07..9416919ac06 100644
--- a/server/src/com/cloud/api/doc/Command.java
+++ b/server/src/com/cloud/api/doc/Command.java
@@ -68,16 +68,18 @@ public class Command {
public Argument getReqArgByName(String name){
for (Argument a : this.getRequest()) {
- if (a.getName().equals(name))
- return a;
+ if (a.getName().equals(name)) {
+ return a;
+ }
}
return null;
}
public Argument getResArgByName(String name){
for (Argument a : this.getResponse()) {
- if (a.getName().equals(name))
- return a;
+ if (a.getName().equals(name)) {
+ return a;
+ }
}
return null;
}
diff --git a/server/src/com/cloud/async/executor/AssignToLoadBalancerExecutor.java b/server/src/com/cloud/async/executor/AssignToLoadBalancerExecutor.java
deleted file mode 100644
index d0cbc682cc6..00000000000
--- a/server/src/com/cloud/async/executor/AssignToLoadBalancerExecutor.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
- *
- * This software is licensed under the GNU General Public License v3 or later.
- *
- * It is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-package com.cloud.async.executor;
-
-import java.lang.reflect.Type;
-import java.util.Map;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.async.AsyncJobManager;
-import com.cloud.async.AsyncJobVO;
-import com.cloud.async.BaseAsyncJobExecutor;
-import com.cloud.serializer.GsonHelper;
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
-
-public class AssignToLoadBalancerExecutor extends BaseAsyncJobExecutor {
- public static final Logger s_logger = Logger.getLogger(AssignToLoadBalancerExecutor.class.getName());
-
- @Override
- public boolean execute() {
- /*
- if (getSyncSource() == null) {
- Gson gson = GsonHelper.getBuilder().create();
- AsyncJobManager asyncMgr = getAsyncJobMgr();
- AsyncJobVO job = getJob();
- Type mapType = new TypeToken