You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ah...@apache.org on 2013/01/09 14:26:47 UTC
[49/50] [abbrv] git commit: all built with the latest
all built with the latest
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/0bcb6460
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/0bcb6460
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/0bcb6460
Branch: refs/heads/javelin
Commit: 0bcb64605f7e8ebb86017dbc4b9d26ddc5dcf199
Parents: 14bd345 ff26a42
Author: Alex Huang <al...@citrix.com>
Authored: Wed Jan 9 05:02:39 2013 -0800
Committer: Alex Huang <al...@citrix.com>
Committed: Wed Jan 9 05:02:39 2013 -0800
----------------------------------------------------------------------
api/src/com/cloud/user/UserContext.java | 10 +-
api/src/com/cloud/user/UserContextInitializer.java | 40 +
client/tomcatconf/applicationContext.xml.in | 2 +
.../cloud/entity/api/VMEntityManagerImpl.java | 21 +
.../cloud/entity/api/VirtualMachineEntityImpl.java | 5 +-
.../platform/orchestration/CloudOrchestrator.java | 3 +-
.../manager/allocator/impl/RandomAllocator.java | 12 +-
.../hypervisor/vmware/VmwareServerDiscoverer.java | 7 -
.../vmware/manager/VmwareManagerImpl.java | 58 +-
.../cloud/server/auth/LDAPUserAuthenticator.java | 10 +-
.../cloud/server/auth/MD5UserAuthenticator.java | 5 +-
.../server/auth/PlainTextUserAuthenticator.java | 5 +-
.../com/cloud/agent/manager/AgentManagerImpl.java | 8 +-
.../agent/manager/ClusteredAgentManagerImpl.java | 4 +-
.../manager/allocator/impl/FirstFitAllocator.java | 4 -
.../manager/allocator/impl/TestingAllocator.java | 7 +-
server/src/com/cloud/alert/AlertManagerImpl.java | 10 +-
.../src/com/cloud/alert/ClusterAlertAdapter.java | 22 +-
.../com/cloud/alert/ConsoleProxyAlertAdapter.java | 24 +-
server/src/com/cloud/api/ApiServer.java | 10 +-
.../cloud/async/AsyncJobExecutorContextImpl.java | 114 +---
.../src/com/cloud/async/AsyncJobManagerImpl.java | 51 +-
.../src/com/cloud/async/SyncQueueManagerImpl.java | 19 +-
.../com/cloud/baremetal/BareMetalResourceBase.java | 2 -
.../cloud/baremetal/BareMetalVmManagerImpl.java | 13 +-
.../com/cloud/cluster/CheckPointManagerImpl.java | 7 +-
.../src/com/cloud/cluster/ClusterManagerImpl.java | 44 +-
.../cluster/ClusterServiceServletAdapter.java | 25 +-
.../com/cloud/cluster/DummyClusterManagerImpl.java | 1 -
.../AgentBasedConsoleProxyManager.java | 11 +-
.../consoleproxy/ConsoleProxyBalanceAllocator.java | 8 -
.../consoleproxy/ConsoleProxyManagerImpl.java | 10 +-
.../consoleproxy/StaticConsoleProxyManager.java | 6 +-
server/src/com/cloud/dao/EntityManagerImpl.java | 1 -
server/src/com/cloud/dc/dao/VlanDaoImpl.java | 14 +-
server/src/com/cloud/event/EventUtils.java | 19 +-
.../cloud/ha/HighAvailabilityManagerExtImpl.java | 13 +-
.../com/cloud/ha/HighAvailabilityManagerImpl.java | 14 +-
.../kvm/discoverer/KvmServerDiscoverer.java | 573 +++++++--------
server/src/com/cloud/maint/UpgradeManagerImpl.java | 17 +-
.../cloud/network/ExteralIpAddressAllocator.java | 2 -
.../cloud/network/dao/FirewallRulesDaoImpl.java | 3 +-
.../com/cloud/network/guru/ControlNetworkGuru.java | 6 +-
.../router/VirtualNetworkApplianceManagerImpl.java | 7 -
.../network/security/SecurityGroupManagerImpl.java | 6 +-
.../src/com/cloud/network/vpc/VpcManagerImpl.java | 4 +-
.../network/vpn/RemoteAccessVpnManagerImpl.java | 5 +-
.../cloud/network/vpn/Site2SiteVpnManagerImpl.java | 5 +-
server/src/com/cloud/resource/DiscovererBase.java | 3 +-
.../src/com/cloud/storage/StorageManagerImpl.java | 32 +-
.../GarbageCollectingStoragePoolAllocator.java | 15 +-
.../secondary/SecondaryStorageManagerImpl.java | 16 +-
.../storage/snapshot/SnapshotManagerImpl.java | 25 +-
.../storage/snapshot/SnapshotSchedulerImpl.java | 26 +-
.../com/cloud/template/TemplateManagerImpl.java | 2 -
server/src/com/cloud/user/AccountManagerImpl.java | 4 +-
server/src/com/cloud/vm/UserVmManagerImpl.java | 3 -
.../com/cloud/vm/VirtualMachineManagerImpl.java | 10 +-
server/src/com/cloud/vm/dao/UserVmDaoImpl.java | 1 -
.../src/com/cloud/usage/UsageAlertManagerImpl.java | 24 +-
usage/src/com/cloud/usage/UsageManagerImpl.java | 2 +-
.../cloud/utils/component/ComponentContext.java | 19 +-
.../cloud/utils/component/ComponentLocator.java | 1 -
63 files changed, 578 insertions(+), 872 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java
----------------------------------------------------------------------
diff --cc plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java
index dba92d0,8b7e8a9..23b7a85
--- a/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java
+++ b/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java
@@@ -21,6 -20,8 +21,7 @@@ import java.util.Hashtable
import java.util.Map;
import javax.ejb.Local;
+ import javax.inject.Inject;
-import javax.naming.AuthenticationException;
import javax.naming.ConfigurationException;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
@@@ -30,17 -31,17 +31,15 @@@ import javax.naming.directory.InitialDi
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
+import org.apache.cloudstack.api.ApiConstants.LDAPParams;
import org.apache.log4j.Logger;
+import org.bouncycastle.util.encoders.Base64;
import org.springframework.stereotype.Component;
-import com.cloud.api.ApiConstants.LDAPParams;
-import com.cloud.configuration.Config;
import com.cloud.configuration.dao.ConfigurationDao;
--import com.cloud.server.ManagementServer;
import com.cloud.user.UserAccount;
import com.cloud.user.dao.UserAccountDao;
--import com.cloud.utils.component.ComponentLocator;
-import com.cloud.utils.crypt.DBEncryptionUtil;
+import com.cloud.utils.exception.CloudRuntimeException;
@Component
@@@ -48,9 -49,9 +47,9 @@@
public class LDAPUserAuthenticator extends DefaultUserAuthenticator {
public static final Logger s_logger = Logger.getLogger(LDAPUserAuthenticator.class);
- private ConfigurationDao _configDao;
- private UserAccountDao _userAccountDao;
+ @Inject private ConfigurationDao _configDao;
+ @Inject private UserAccountDao _userAccountDao;
-
+
@Override
public boolean authenticate(String username, String password, Long domainId, Map<String, Object[]> requestParameters ) {
if (s_logger.isDebugEnabled()) {
@@@ -157,22 -157,6 +156,19 @@@
public boolean configure(String name, Map<String, Object> params)
throws ConfigurationException {
super.configure(name, params);
- ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);
- _configDao = locator.getDao(ConfigurationDao.class);
- _userAccountDao = locator.getDao(UserAccountDao.class);
return true;
}
+
+ @Override
+ public String encode(String password) {
+ // Password is not used, so set to a random string
+ try {
+ SecureRandom randomGen = SecureRandom.getInstance("SHA1PRNG");
+ byte bytes[] = new byte[20];
+ randomGen.nextBytes(bytes);
+ return Base64.encode(bytes).toString();
+ } catch (NoSuchAlgorithmException e) {
+ throw new CloudRuntimeException("Failed to generate random password",e);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/plugins/user-authenticators/md5/src/com/cloud/server/auth/MD5UserAuthenticator.java
----------------------------------------------------------------------
diff --cc plugins/user-authenticators/md5/src/com/cloud/server/auth/MD5UserAuthenticator.java
index ab89c92,64d3be6..9d217e6
--- a/plugins/user-authenticators/md5/src/com/cloud/server/auth/MD5UserAuthenticator.java
+++ b/plugins/user-authenticators/md5/src/com/cloud/server/auth/MD5UserAuthenticator.java
@@@ -65,29 -86,6 +66,27 @@@ public class MD5UserAuthenticator exten
public boolean configure(String name, Map<String, Object> params)
throws ConfigurationException {
super.configure(name, params);
- ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);
- _userAccountDao = locator.getDao(UserAccountDao.class);
return true;
}
+
+ @Override
+ public String encode(String password) {
+ MessageDigest md5 = null;
+ try {
+ md5 = MessageDigest.getInstance("MD5");
+ } catch (NoSuchAlgorithmException e) {
+ throw new CloudRuntimeException("Unable to hash password", e);
+ }
+
+ md5.reset();
+ BigInteger pwInt = new BigInteger(1, md5.digest(password.getBytes()));
+ String pwStr = pwInt.toString(16);
+ int padding = 32 - pwStr.length();
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < padding; i++) {
+ sb.append('0'); // make sure the MD5 password is 32 digits long
+ }
+ sb.append(pwStr);
+ return sb.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java
----------------------------------------------------------------------
diff --cc plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java
index bc18e9f,9368673..0bf650b
--- a/plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java
+++ b/plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java
@@@ -85,14 -86,6 +86,12 @@@ public class PlainTextUserAuthenticato
public boolean configure(String name, Map<String, Object> params)
throws ConfigurationException {
super.configure(name, params);
- ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);
- _userAccountDao = locator.getDao(UserAccountDao.class);
return true;
}
+
+ @Override
+ public String encode(String password) {
+ // Plaintext so no encoding at all
+ return password;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/agent/manager/AgentManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/alert/AlertManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/api/ApiServer.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/api/ApiServer.java
index 6faaa4a,1b42e97..c5cee13
--- a/server/src/com/cloud/api/ApiServer.java
+++ b/server/src/com/cloud/api/ApiServer.java
@@@ -119,7 -99,7 +119,6 @@@ import com.cloud.event.EventUtils
import com.cloud.exception.CloudAuthenticationException;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.exception.PermissionDeniedException;
--import com.cloud.server.ManagementServer;
import com.cloud.user.Account;
import com.cloud.user.AccountManager;
import com.cloud.user.DomainManager;
@@@ -127,10 -107,12 +126,10 @@@ import com.cloud.user.User
import com.cloud.user.UserAccount;
import com.cloud.user.UserContext;
import com.cloud.user.UserVO;
-import com.cloud.utils.IdentityProxy;
import com.cloud.utils.Pair;
-import com.cloud.utils.PropertiesUtil;
+import com.cloud.utils.StringUtils;
import com.cloud.utils.component.ComponentContext;
--import com.cloud.utils.component.ComponentLocator;
+ import com.cloud.utils.component.PluggableService;
import com.cloud.utils.concurrency.NamedThreadFactory;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.Transaction;
@@@ -141,22 -123,34 +140,25 @@@ public class ApiServer implements HttpR
private static final Logger s_logger = Logger.getLogger(ApiServer.class.getName());
private static final Logger s_accessLogger = Logger.getLogger("apiserver." + ApiServer.class.getName());
- public static final short ADMIN_COMMAND = 1;
- public static final short DOMAIN_ADMIN_COMMAND = 4;
- public static final short RESOURCE_DOMAIN_ADMIN_COMMAND = 2;
- public static final short USER_COMMAND = 8;
public static boolean encodeApiResponse = false;
public static String jsonContentType = "text/javascript";
- private Properties _apiCommands = null;
private ApiDispatcher _dispatcher;
- @Inject private AccountManager _accountMgr;
- @Inject private DomainManager _domainMgr;
- @Inject private AsyncJobManager _asyncMgr;
+
+ @Inject private final AccountManager _accountMgr = null;
+ @Inject private final DomainManager _domainMgr = null;
+ @Inject private final AsyncJobManager _asyncMgr = null;
@Inject private ConfigurationDao _configDao;
- private Account _systemAccount;
- private User _systemUser;
-
+ @Inject protected List<APIAccessChecker> _apiAccessCheckers;
+
+ @Inject List<PluggableService> _pluggableServices;
+ @Inject IdentityDao _identityDao;
+
+ private Account _systemAccount = null;
+ private User _systemUser = null;
private static int _workerCount = 0;
-
private static ApiServer s_instance = null;
- private static List<String> s_userCommands = null;
- private static List<String> s_resellerCommands = null; // AKA domain-admin
- private static List<String> s_adminCommands = null;
- private static List<String> s_resourceDomainAdminCommands = null;
- private static List<String> s_allCommands = null;
- private static List<String> s_pluggableServiceCommands = null;
private static final DateFormat _dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
+ private final Map<String, Class<?>> _apiNameCmdClassMap = new HashMap<String, Class<?>>();
private static ExecutorService _executor = new ThreadPoolExecutor(10, 150, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), new NamedThreadFactory("ApiServer"));
@@@ -681,12 -768,10 +683,10 @@@
}
return false;
}
-
+
public Long fetchDomainId(String domainUUID){
- ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);
- IdentityDao identityDao = locator.getDao(IdentityDao.class);
try{
- Long domainId = identityDao.getIdentityId("domain", domainUUID);
+ Long domainId = _identityDao.getIdentityId("domain", domainUUID);
return domainId;
}catch(InvalidParameterValueException ex){
return null;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/async/AsyncJobManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/async/AsyncJobManagerImpl.java
index e4016f7,885122c..25b7e60
--- a/server/src/com/cloud/async/AsyncJobManagerImpl.java
+++ b/server/src/com/cloud/async/AsyncJobManagerImpl.java
@@@ -32,9 -32,9 +32,10 @@@ import java.util.concurrent.ScheduledEx
import java.util.concurrent.TimeUnit;
import javax.ejb.Local;
+ import javax.inject.Inject;
import javax.naming.ConfigurationException;
+import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd;
import org.apache.log4j.Logger;
import org.apache.log4j.NDC;
import org.springframework.stereotype.Component;
@@@ -87,15 -88,15 +88,16 @@@ public class AsyncJobManagerImpl implem
private String _name;
- private AsyncJobExecutorContext _context;
- private SyncQueueManager _queueMgr;
- private ClusterManager _clusterMgr;
- private AccountManager _accountMgr;
- private AccountDao _accountDao;
- private AsyncJobDao _jobDao;
+ @Inject private AsyncJobExecutorContext _context;
+ @Inject private SyncQueueManager _queueMgr;
+ @Inject private ClusterManager _clusterMgr;
+ @Inject private AccountManager _accountMgr;
+ @Inject private AccountDao _accountDao;
+ @Inject private AsyncJobDao _jobDao;
+ @Inject private ConfigurationDao _configDao;
private long _jobExpireSeconds = 86400; // 1 day
- private long _jobCancelThresholdSeconds = 3600; // 1 hour
+ private long _jobCancelThresholdSeconds = 3600; // 1 hour (for cancelling the jobs blocking other jobs)
+
private ApiDispatcher _dispatcher;
private final ScheduledExecutorService _heartbeatScheduler =
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/async/SyncQueueManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/async/SyncQueueManagerImpl.java
index 94fcf0b,200fa2c..5246e46
--- a/server/src/com/cloud/async/SyncQueueManagerImpl.java
+++ b/server/src/com/cloud/async/SyncQueueManagerImpl.java
@@@ -241,22 -235,13 +242,8 @@@ public class SyncQueueManagerImpl imple
}
@Override
- public void resetQueueProcess(long msid) {
- _syncQueueDao.resetQueueProcessing(msid);
- }
-
- @Override
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
_name = name;
- ComponentLocator locator = ComponentLocator.getCurrentLocator();
-
- _syncQueueDao = locator.getDao(SyncQueueDao.class);
- if (_syncQueueDao == null) {
- throw new ConfigurationException("Unable to get "
- + SyncQueueDao.class.getName());
- }
-
- _syncQueueItemDao = locator.getDao(SyncQueueItemDao.class);
- if (_syncQueueItemDao == null) {
- throw new ConfigurationException("Unable to get "
- + SyncQueueDao.class.getName());
- }
-
return true;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/baremetal/BareMetalResourceBase.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java
index c419f5a,f6b6a8e..1ce9b33
--- a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java
+++ b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java
@@@ -27,14 -27,7 +27,12 @@@ import javax.ejb.Local
import javax.inject.Inject;
import javax.naming.ConfigurationException;
+import org.apache.cloudstack.api.command.user.template.CreateTemplateCmd;
+import org.apache.cloudstack.api.command.user.vm.DeployVMCmd;
+import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd;
+import org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd;
+import org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd;
import org.apache.log4j.Logger;
- import org.springframework.context.annotation.Primary;
- import org.springframework.stereotype.Component;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.StopAnswer;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/cluster/ClusterManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/dao/EntityManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java
index 6fead23,9ebb84f..599222a
--- a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java
+++ b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java
@@@ -53,7 -53,7 +53,6 @@@ import com.cloud.host.Status
import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
--import com.cloud.hypervisor.kvm.discoverer.KvmDummyResourceBase;
import com.cloud.network.NetworkManager;
import com.cloud.network.PhysicalNetworkSetupInfo;
import com.cloud.resource.Discoverer;
@@@ -62,323 -62,316 +61,321 @@@ import com.cloud.resource.ResourceManag
import com.cloud.resource.ResourceStateAdapter;
import com.cloud.resource.ServerResource;
import com.cloud.resource.UnableDeleteHostException;
--import com.cloud.utils.component.ComponentLocator;
--import com.cloud.utils.script.Script;
import com.cloud.utils.ssh.SSHCmdHelper;
@Component
@Local(value=Discoverer.class)
public class KvmServerDiscoverer extends DiscovererBase implements Discoverer,
-- Listener, ResourceStateAdapter {
-- private static final Logger s_logger = Logger.getLogger(KvmServerDiscoverer.class);
- private ConfigurationDao _configDao;
- private String _hostIp;
- private int _waitTime = 5; /*wait for 5 minutes*/
- private String _kvmPrivateNic;
- private String _kvmPublicNic;
- private String _kvmGuestNic;
- @Inject HostDao _hostDao = null;
- @Inject ClusterDao _clusterDao;
- @Inject ResourceManager _resourceMgr;
- @Inject AgentManager _agentMgr;
- @Inject NetworkManager _networkMgr;
-
- @Override
- public boolean processAnswers(long agentId, long seq, Answer[] answers) {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public boolean processCommands(long agentId, long seq, Command[] commands) {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public AgentControlAnswer processControlCommand(long agentId,
- AgentControlCommand cmd) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public void processConnect(HostVO host, StartupCommand cmd, boolean forRebalance) {
- }
-
- @Override
- public boolean processDisconnect(long agentId, Status state) {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public boolean isRecurring() {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public int getTimeout() {
- // TODO Auto-generated method stub
- return 0;
- }
-
- @Override
- public boolean processTimeout(long agentId, long seq) {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public Map<? extends ServerResource, Map<String, String>> find(long dcId,
- Long podId, Long clusterId, URI uri, String username,
- String password, List<String> hostTags) throws DiscoveryException {
-
- private String _setupAgentPath;
- private ConfigurationDao _configDao;
- private String _hostIp;
- private int _waitTime = 5; /*wait for 5 minutes*/
- private String _kvmPrivateNic;
- private String _kvmPublicNic;
- private String _kvmGuestNic;
- @Inject HostDao _hostDao = null;
- @Inject ClusterDao _clusterDao;
- @Inject ResourceManager _resourceMgr;
- @Inject AgentManager _agentMgr;
- @Inject NetworkManager _networkMgr;
-
- @Override
- public boolean processAnswers(long agentId, long seq, Answer[] answers) {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public boolean processCommands(long agentId, long seq, Command[] commands) {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public AgentControlAnswer processControlCommand(long agentId,
- AgentControlCommand cmd) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public void processConnect(HostVO host, StartupCommand cmd, boolean forRebalance) {
- }
-
- @Override
- public boolean processDisconnect(long agentId, Status state) {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public boolean isRecurring() {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public int getTimeout() {
- // TODO Auto-generated method stub
- return 0;
- }
-
- @Override
- public boolean processTimeout(long agentId, long seq) {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public Map<? extends ServerResource, Map<String, String>> find(long dcId,
- Long podId, Long clusterId, URI uri, String username,
- String password, List<String> hostTags) throws DiscoveryException {
-
++Listener, ResourceStateAdapter {
++ private static final Logger s_logger = Logger.getLogger(KvmServerDiscoverer.class);
++ private String _hostIp;
++ private final int _waitTime = 5; /*wait for 5 minutes*/
++ private String _kvmPrivateNic;
++ private String _kvmPublicNic;
++ private String _kvmGuestNic;
++ @Inject HostDao _hostDao = null;
++ @Inject ClusterDao _clusterDao;
++ @Inject ResourceManager _resourceMgr;
++ @Inject AgentManager _agentMgr;
++ @Inject NetworkManager _networkMgr;
++ @Inject ConfigurationDao _configDao;
++
++ @Override
++ public boolean processAnswers(long agentId, long seq, Answer[] answers) {
++ // TODO Auto-generated method stub
++ return false;
++ }
++
++ @Override
++ public boolean processCommands(long agentId, long seq, Command[] commands) {
++ // TODO Auto-generated method stub
++ return false;
++ }
++
++ @Override
++ public AgentControlAnswer processControlCommand(long agentId,
++ AgentControlCommand cmd) {
++ // TODO Auto-generated method stub
++ return null;
++ }
++
++ @Override
++ public void processConnect(HostVO host, StartupCommand cmd, boolean forRebalance) {
++ }
++
++ @Override
++ public boolean processDisconnect(long agentId, Status state) {
++ // TODO Auto-generated method stub
++ return false;
++ }
++
++ @Override
++ public boolean isRecurring() {
++ // TODO Auto-generated method stub
++ return false;
++ }
++
++ @Override
++ public int getTimeout() {
++ // TODO Auto-generated method stub
++ return 0;
++ }
++
++ @Override
++ public boolean processTimeout(long agentId, long seq) {
++ // TODO Auto-generated method stub
++ return false;
++ }
++
++ @Override
++ public Map<? extends ServerResource, Map<String, String>> find(long dcId,
++ Long podId, Long clusterId, URI uri, String username,
++ String password, List<String> hostTags) throws DiscoveryException {
++
ClusterVO cluster = _clusterDao.findById(clusterId);
if(cluster == null || cluster.getHypervisorType() != HypervisorType.KVM) {
-- if(s_logger.isInfoEnabled())
-- s_logger.info("invalid cluster id or cluster is not for KVM hypervisors");
-- return null;
++ if(s_logger.isInfoEnabled())
++ s_logger.info("invalid cluster id or cluster is not for KVM hypervisors");
++ return null;
}
--
-- Map<KvmDummyResourceBase, Map<String, String>> resources = new HashMap<KvmDummyResourceBase, Map<String, String>>();
-- Map<String, String> details = new HashMap<String, String>();
-- if (!uri.getScheme().equals("http")) {
++
++ Map<KvmDummyResourceBase, Map<String, String>> resources = new HashMap<KvmDummyResourceBase, Map<String, String>>();
++ Map<String, String> details = new HashMap<String, String>();
++ if (!uri.getScheme().equals("http")) {
String msg = "urlString is not http so we're not taking care of the discovery for this: " + uri;
s_logger.debug(msg);
return null;
-- }
-- com.trilead.ssh2.Connection sshConnection = null;
-- String agentIp = null;
-- try {
--
-- String hostname = uri.getHost();
-- InetAddress ia = InetAddress.getByName(hostname);
-- agentIp = ia.getHostAddress();
-- String guid = UUID.nameUUIDFromBytes(agentIp.getBytes()).toString();
-- String guidWithTail = guid + "-LibvirtComputingResource";/*tail added by agent.java*/
-- if (_resourceMgr.findHostByGuid(guidWithTail) != null) {
-- s_logger.debug("Skipping " + agentIp + " because " + guidWithTail + " is already in the database.");
-- return null;
-- }
--
-- sshConnection = new com.trilead.ssh2.Connection(agentIp, 22);
--
-- sshConnection.connect(null, 60000, 60000);
-- if (!sshConnection.authenticateWithPassword(username, password)) {
-- s_logger.debug("Failed to authenticate");
-- throw new DiscoveredWithErrorException("Authentication error");
-- }
--
-- if (!SSHCmdHelper.sshExecuteCmd(sshConnection, "lsmod|grep kvm", 3)) {
-- s_logger.debug("It's not a KVM enabled machine");
-- return null;
-- }
--
-- List <PhysicalNetworkSetupInfo> netInfos = _networkMgr.getPhysicalNetworkInfo(dcId, HypervisorType.KVM);
- String kvmPrivateNic = null;
- String kvmPublicNic = null;
- String kvmGuestNic = null;
-
- for (PhysicalNetworkSetupInfo info : netInfos) {
- if (info.getPrivateNetworkName() != null) {
- kvmPrivateNic = info.getPrivateNetworkName();
- }
- if (info.getPublicNetworkName() != null) {
- kvmPublicNic = info.getPublicNetworkName();
- }
- if (info.getGuestNetworkName() != null) {
- kvmGuestNic = info.getGuestNetworkName();
- }
- }
-
- if (kvmPrivateNic == null && kvmPublicNic == null && kvmGuestNic == null) {
- kvmPrivateNic = _kvmPrivateNic;
- kvmPublicNic = _kvmPublicNic;
- kvmGuestNic = _kvmGuestNic;
- }
-
- if (kvmPublicNic == null) {
- kvmPublicNic = (kvmGuestNic != null) ? kvmGuestNic : kvmPrivateNic;
- }
-
- if (kvmPrivateNic == null) {
- kvmPrivateNic = (kvmPublicNic != null) ? kvmPublicNic : kvmGuestNic;
- }
-
- if (kvmGuestNic == null) {
- kvmGuestNic = (kvmPublicNic != null) ? kvmPublicNic : kvmPrivateNic;
- }
-
- String kvmPrivateNic = _kvmPrivateNic;
- String kvmPublicNic = _kvmPublicNic;
- String kvmGuestNic = _kvmGuestNic;
-
- for (PhysicalNetworkSetupInfo info : netInfos) {
- if (info.getPrivateNetworkName() != null) {
- kvmPrivateNic = info.getPrivateNetworkName();
- }
- if (info.getPublicNetworkName() != null) {
- kvmPublicNic = info.getPublicNetworkName();
- }
- if (info.getGuestNetworkName() != null) {
- kvmGuestNic = info.getGuestNetworkName();
- }
- }
-
- String parameters = " -m " + _hostIp + " -z " + dcId + " -p " + podId + " -c " + clusterId + " -g " + guid + " -a";
-
- if (kvmPublicNic != null) {
- parameters += " --pubNic=" + kvmPublicNic;
- }
-
- if (kvmPrivateNic != null) {
- parameters += " --prvNic=" + kvmPrivateNic;
- }
-
- if (kvmGuestNic != null) {
- parameters += " --guestNic=" + kvmGuestNic;
- }
-
- SSHCmdHelper.sshExecuteCmd(sshConnection, "cloud-setup-agent " + parameters, 3);
-
- KvmDummyResourceBase kvmResource = new KvmDummyResourceBase();
- Map<String, Object> params = new HashMap<String, Object>();
-
- params.put("zone", Long.toString(dcId));
- params.put("pod", Long.toString(podId));
- params.put("cluster", Long.toString(clusterId));
- params.put("guid", guid);
- params.put("agentIp", agentIp);
- kvmResource.configure("kvm agent", params);
- resources.put(kvmResource, details);
-
- HostVO connectedHost = waitForHostConnect(dcId, podId, clusterId, guidWithTail);
- if (connectedHost == null)
- return null;
-
- details.put("guid", guidWithTail);
-
- // place a place holder guid derived from cluster ID
- if (cluster.getGuid() == null) {
- cluster.setGuid(UUID.nameUUIDFromBytes(String.valueOf(clusterId).getBytes()).toString());
- _clusterDao.update(clusterId, cluster);
- }
-
- //save user name and password
- _hostDao.loadDetails(connectedHost);
- Map<String, String> hostDetails = connectedHost.getDetails();
- hostDetails.put("password", password);
- hostDetails.put("username", username);
- _hostDao.saveDetails(connectedHost);
- return resources;
- } catch (DiscoveredWithErrorException e){
- throw e;
- }catch (Exception e) {
- String msg = " can't setup agent, due to " + e.toString() + " - " + e.getMessage();
- s_logger.warn(msg);
- } finally {
- if (sshConnection != null)
- sshConnection.close();
- }
-
- return null;
- }
-
- private HostVO waitForHostConnect(long dcId, long podId, long clusterId, String guid) {
- for (int i = 0; i < _waitTime *2; i++) {
- List<HostVO> hosts = _resourceMgr.listAllUpAndEnabledHosts(Host.Type.Routing, clusterId, podId, dcId);
- for (HostVO host : hosts) {
- if (host.getGuid().equalsIgnoreCase(guid)) {
- return host;
- }
- }
- try {
- Thread.sleep(30000);
- } catch (InterruptedException e) {
- s_logger.debug("Failed to sleep: " + e.toString());
- }
- }
- s_logger.debug("Timeout, to wait for the host connecting to mgt svr, assuming it is failed");
- List<HostVO> hosts = _resourceMgr.findHostByGuid(dcId, guid);
- if (hosts.size() == 1) {
- return hosts.get(0);
- } else {
- return null;
- }
- }
-
- @Override
++ }
++ com.trilead.ssh2.Connection sshConnection = null;
++ String agentIp = null;
++ try {
++
++ String hostname = uri.getHost();
++ InetAddress ia = InetAddress.getByName(hostname);
++ agentIp = ia.getHostAddress();
++ String guid = UUID.nameUUIDFromBytes(agentIp.getBytes()).toString();
++ String guidWithTail = guid + "-LibvirtComputingResource";/*tail added by agent.java*/
++ if (_resourceMgr.findHostByGuid(guidWithTail) != null) {
++ s_logger.debug("Skipping " + agentIp + " because " + guidWithTail + " is already in the database.");
++ return null;
++ }
++
++ sshConnection = new com.trilead.ssh2.Connection(agentIp, 22);
++
++ sshConnection.connect(null, 60000, 60000);
++ if (!sshConnection.authenticateWithPassword(username, password)) {
++ s_logger.debug("Failed to authenticate");
++ throw new DiscoveredWithErrorException("Authentication error");
++ }
++
++ if (!SSHCmdHelper.sshExecuteCmd(sshConnection, "lsmod|grep kvm", 3)) {
++ s_logger.debug("It's not a KVM enabled machine");
++ return null;
++ }
++
++ List <PhysicalNetworkSetupInfo> netInfos = _networkMgr.getPhysicalNetworkInfo(dcId, HypervisorType.KVM);
++ String kvmPrivateNic = null;
++ String kvmPublicNic = null;
++ String kvmGuestNic = null;
++
++ for (PhysicalNetworkSetupInfo info : netInfos) {
++ if (info.getPrivateNetworkName() != null) {
++ kvmPrivateNic = info.getPrivateNetworkName();
++ }
++ if (info.getPublicNetworkName() != null) {
++ kvmPublicNic = info.getPublicNetworkName();
++ }
++ if (info.getGuestNetworkName() != null) {
++ kvmGuestNic = info.getGuestNetworkName();
++ }
++ }
++
++ if (kvmPrivateNic == null && kvmPublicNic == null && kvmGuestNic == null) {
++ kvmPrivateNic = _kvmPrivateNic;
++ kvmPublicNic = _kvmPublicNic;
++ kvmGuestNic = _kvmGuestNic;
++ }
++
++ if (kvmPublicNic == null) {
++ kvmPublicNic = (kvmGuestNic != null) ? kvmGuestNic : kvmPrivateNic;
++ }
++
++ if (kvmPrivateNic == null) {
++ kvmPrivateNic = (kvmPublicNic != null) ? kvmPublicNic : kvmGuestNic;
++ }
++
++ if (kvmGuestNic == null) {
++ kvmGuestNic = (kvmPublicNic != null) ? kvmPublicNic : kvmPrivateNic;
++ }
++
+ String parameters = " -m " + _hostIp + " -z " + dcId + " -p " + podId + " -c " + clusterId + " -g " + guid + " -a";
+
+ parameters += " --pubNic=" + kvmPublicNic;
+ parameters += " --prvNic=" + kvmPrivateNic;
+ parameters += " --guestNic=" + kvmGuestNic;
+
- SSHCmdHelper.sshExecuteCmd(sshConnection, "cloud-setup-agent " + parameters, 3);
-
- KvmDummyResourceBase kvmResource = new KvmDummyResourceBase();
- Map<String, Object> params = new HashMap<String, Object>();
-
- params.put("zone", Long.toString(dcId));
- params.put("pod", Long.toString(podId));
- params.put("cluster", Long.toString(clusterId));
- params.put("guid", guid);
- params.put("agentIp", agentIp);
- kvmResource.configure("kvm agent", params);
- resources.put(kvmResource, details);
-
- HostVO connectedHost = waitForHostConnect(dcId, podId, clusterId, guidWithTail);
- if (connectedHost == null)
- return null;
-
- details.put("guid", guidWithTail);
-
- // place a place holder guid derived from cluster ID
- if (cluster.getGuid() == null) {
- cluster.setGuid(UUID.nameUUIDFromBytes(String.valueOf(clusterId).getBytes()).toString());
- _clusterDao.update(clusterId, cluster);
- }
-
- //save user name and password
- _hostDao.loadDetails(connectedHost);
- Map<String, String> hostDetails = connectedHost.getDetails();
- hostDetails.put("password", password);
- hostDetails.put("username", username);
- _hostDao.saveDetails(connectedHost);
- return resources;
- } catch (DiscoveredWithErrorException e){
- throw e;
- }catch (Exception e) {
- String msg = " can't setup agent, due to " + e.toString() + " - " + e.getMessage();
- s_logger.warn(msg);
- } finally {
- if (sshConnection != null)
- sshConnection.close();
- }
-
- return null;
- }
-
- private HostVO waitForHostConnect(long dcId, long podId, long clusterId, String guid) {
- for (int i = 0; i < _waitTime *2; i++) {
- List<HostVO> hosts = _resourceMgr.listAllUpAndEnabledHosts(Host.Type.Routing, clusterId, podId, dcId);
- for (HostVO host : hosts) {
- if (host.getGuid().equalsIgnoreCase(guid)) {
- return host;
- }
- }
- try {
- Thread.sleep(30000);
- } catch (InterruptedException e) {
- s_logger.debug("Failed to sleep: " + e.toString());
- }
- }
- s_logger.debug("Timeout, to wait for the host connecting to mgt svr, assuming it is failed");
- List<HostVO> hosts = _resourceMgr.findHostByGuid(dcId, guid);
- if (hosts.size() == 1) {
- return hosts.get(0);
- } else {
- return null;
- }
- }
-
- @Override
++ SSHCmdHelper.sshExecuteCmd(sshConnection, "cloud-setup-agent " + parameters, 3);
++
++ KvmDummyResourceBase kvmResource = new KvmDummyResourceBase();
++ Map<String, Object> params = new HashMap<String, Object>();
++
++ params.put("zone", Long.toString(dcId));
++ params.put("pod", Long.toString(podId));
++ params.put("cluster", Long.toString(clusterId));
++ params.put("guid", guid);
++ params.put("agentIp", agentIp);
++ kvmResource.configure("kvm agent", params);
++ resources.put(kvmResource, details);
++
++ HostVO connectedHost = waitForHostConnect(dcId, podId, clusterId, guidWithTail);
++ if (connectedHost == null)
++ return null;
++
++ details.put("guid", guidWithTail);
++
++ // place a place holder guid derived from cluster ID
++ if (cluster.getGuid() == null) {
++ cluster.setGuid(UUID.nameUUIDFromBytes(String.valueOf(clusterId).getBytes()).toString());
++ _clusterDao.update(clusterId, cluster);
++ }
++
++ //save user name and password
++ _hostDao.loadDetails(connectedHost);
++ Map<String, String> hostDetails = connectedHost.getDetails();
++ hostDetails.put("password", password);
++ hostDetails.put("username", username);
++ _hostDao.saveDetails(connectedHost);
++ return resources;
++ } catch (DiscoveredWithErrorException e){
++ throw e;
++ }catch (Exception e) {
++ String msg = " can't setup agent, due to " + e.toString() + " - " + e.getMessage();
++ s_logger.warn(msg);
++ } finally {
++ if (sshConnection != null)
++ sshConnection.close();
++ }
++
++ return null;
++ }
++
++ private HostVO waitForHostConnect(long dcId, long podId, long clusterId, String guid) {
++ for (int i = 0; i < _waitTime *2; i++) {
++ List<HostVO> hosts = _resourceMgr.listAllUpAndEnabledHosts(Host.Type.Routing, clusterId, podId, dcId);
++ for (HostVO host : hosts) {
++ if (host.getGuid().equalsIgnoreCase(guid)) {
++ return host;
++ }
++ }
++ try {
++ Thread.sleep(30000);
++ } catch (InterruptedException e) {
++ s_logger.debug("Failed to sleep: " + e.toString());
++ }
++ }
++ s_logger.debug("Timeout, to wait for the host connecting to mgt svr, assuming it is failed");
++ List<HostVO> hosts = _resourceMgr.findHostByGuid(dcId, guid);
++ if (hosts.size() == 1) {
++ return hosts.get(0);
++ } else {
++ return null;
++ }
++ }
++
++ @Override
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
- ComponentLocator locator = ComponentLocator.getCurrentLocator();
- _configDao = locator.getDao(ConfigurationDao.class);
- _kvmPrivateNic = _configDao.getValue(Config.KvmPrivateNetwork.key());
- if (_kvmPrivateNic == null) {
- _kvmPrivateNic = "cloudbr0";
- }
-
- _kvmPublicNic = _configDao.getValue(Config.KvmPublicNetwork.key());
- if (_kvmPublicNic == null) {
- _kvmPublicNic = _kvmPrivateNic;
- }
-
- _kvmGuestNic = _configDao.getValue(Config.KvmGuestNetwork.key());
- if (_kvmGuestNic == null) {
- _kvmGuestNic = _kvmPrivateNic;
- }
-
- _hostIp = _configDao.getValue("host");
- if (_hostIp == null) {
- throw new ConfigurationException("Can't get host IP");
- }
- _resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
- return true;
- }
-
- protected String getPatchPath() {
- _setupAgentPath = Script.findScript(getPatchPath(), "setup_agent.sh");
- _kvmPrivateNic = _configDao.getValue(Config.KvmPrivateNetwork.key());
- if (_kvmPrivateNic == null) {
- _kvmPrivateNic = "cloudbr0";
- }
-
- _kvmPublicNic = _configDao.getValue(Config.KvmPublicNetwork.key());
- if (_kvmPublicNic == null) {
- _kvmPublicNic = _kvmPrivateNic;
- }
-
- _kvmGuestNic = _configDao.getValue(Config.KvmGuestNetwork.key());
- if (_kvmGuestNic == null) {
- _kvmGuestNic = _kvmPrivateNic;
- }
-
- if (_setupAgentPath == null) {
- throw new ConfigurationException("Can't find setup_agent.sh");
- }
- _hostIp = _configDao.getValue("host");
- if (_hostIp == null) {
- throw new ConfigurationException("Can't get host IP");
- }
- _resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
- return true;
- }
-
- protected String getPatchPath() {
++// _setupAgentPath = Script.findScript(getPatchPath(), "setup_agent.sh");
++ _kvmPrivateNic = _configDao.getValue(Config.KvmPrivateNetwork.key());
++ if (_kvmPrivateNic == null) {
++ _kvmPrivateNic = "cloudbr0";
++ }
++
++ _kvmPublicNic = _configDao.getValue(Config.KvmPublicNetwork.key());
++ if (_kvmPublicNic == null) {
++ _kvmPublicNic = _kvmPrivateNic;
++ }
++
++ _kvmGuestNic = _configDao.getValue(Config.KvmGuestNetwork.key());
++ if (_kvmGuestNic == null) {
++ _kvmGuestNic = _kvmPrivateNic;
++ }
++
++ _hostIp = _configDao.getValue("host");
++ if (_hostIp == null) {
++ throw new ConfigurationException("Can't get host IP");
++ }
++ _resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
++ return true;
++ }
++
++ protected String getPatchPath() {
return "scripts/vm/hypervisor/kvm/";
}
-- @Override
-- public void postDiscovery(List<HostVO> hosts, long msId)
-- throws DiscoveryException {
-- // TODO Auto-generated method stub
-- }
--
-- public Hypervisor.HypervisorType getHypervisorType() {
-- return Hypervisor.HypervisorType.KVM;
-- }
--
@Override
-- public boolean matchHypervisor(String hypervisor) {
-- // for backwards compatibility, if not supplied, always let to try it
-- if(hypervisor == null)
-- return true;
--
-- return Hypervisor.HypervisorType.KVM.toString().equalsIgnoreCase(hypervisor);
++ public void postDiscovery(List<HostVO> hosts, long msId)
++ throws DiscoveryException {
++ // TODO Auto-generated method stub
+ }
+
- @Override
++ @Override
++ public Hypervisor.HypervisorType getHypervisorType() {
++ return Hypervisor.HypervisorType.KVM;
++ }
++
++ @Override
++ public boolean matchHypervisor(String hypervisor) {
++ // for backwards compatibility, if not supplied, always let to try it
++ if(hypervisor == null)
++ return true;
++
++ return Hypervisor.HypervisorType.KVM.toString().equalsIgnoreCase(hypervisor);
+ }
+
- @Override
++ @Override
public HostVO createHostVOForConnectedAgent(HostVO host, StartupCommand[] cmd) {
-- StartupCommand firstCmd = cmd[0];
-- if (!(firstCmd instanceof StartupRoutingCommand)) {
-- return null;
-- }
--
-- StartupRoutingCommand ssCmd = ((StartupRoutingCommand) firstCmd);
-- if (ssCmd.getHypervisorType() != HypervisorType.KVM) {
-- return null;
-- }
--
-- /* KVM requires host are the same in cluster */
-- ClusterVO clusterVO = _clusterDao.findById(host.getClusterId());
-- List<HostVO> hostsInCluster = _resourceMgr.listAllHostsInCluster(clusterVO.getId());
-- if (!hostsInCluster.isEmpty()) {
-- HostVO oneHost = hostsInCluster.get(0);
-- _hostDao.loadDetails(oneHost);
-- String hostOsInCluster = oneHost.getDetail("Host.OS");
-- String hostOs = ssCmd.getHostDetails().get("Host.OS");
-- if (!hostOsInCluster.equalsIgnoreCase(hostOs)) {
-- throw new IllegalArgumentException("Can't add host: " + firstCmd.getPrivateIpAddress() + " with hostOS: " + hostOs + " into a cluster,"
-- + "in which there are " + hostOsInCluster + " hosts added");
-- }
-- }
--
-- _hostDao.loadDetails(host);
--
-- return _resourceMgr.fillRoutingHostVO(host, ssCmd, HypervisorType.KVM, host.getDetails(), null);
++ StartupCommand firstCmd = cmd[0];
++ if (!(firstCmd instanceof StartupRoutingCommand)) {
++ return null;
++ }
++
++ StartupRoutingCommand ssCmd = ((StartupRoutingCommand) firstCmd);
++ if (ssCmd.getHypervisorType() != HypervisorType.KVM) {
++ return null;
++ }
++
++ /* KVM requires host are the same in cluster */
++ ClusterVO clusterVO = _clusterDao.findById(host.getClusterId());
++ List<HostVO> hostsInCluster = _resourceMgr.listAllHostsInCluster(clusterVO.getId());
++ if (!hostsInCluster.isEmpty()) {
++ HostVO oneHost = hostsInCluster.get(0);
++ _hostDao.loadDetails(oneHost);
++ String hostOsInCluster = oneHost.getDetail("Host.OS");
++ String hostOs = ssCmd.getHostDetails().get("Host.OS");
++ if (!hostOsInCluster.equalsIgnoreCase(hostOs)) {
++ throw new IllegalArgumentException("Can't add host: " + firstCmd.getPrivateIpAddress() + " with hostOS: " + hostOs + " into a cluster,"
++ + "in which there are " + hostOsInCluster + " hosts added");
++ }
++ }
++
++ _hostDao.loadDetails(host);
++
++ return _resourceMgr.fillRoutingHostVO(host, ssCmd, HypervisorType.KVM, host.getDetails(), null);
}
-- @Override
++ @Override
public HostVO createHostVOForDirectConnectAgent(HostVO host, StartupCommand[] startup, ServerResource resource, Map<String, String> details,
List<String> hostTags) {
-- // TODO Auto-generated method stub
-- return null;
++ // TODO Auto-generated method stub
++ return null;
}
-- @Override
++ @Override
public DeleteHostAnswer deleteHost(HostVO host, boolean isForced, boolean isForceDeleteStorage) throws UnableDeleteHostException {
if (host.getType() != Host.Type.Routing || host.getHypervisorType() != HypervisorType.KVM) {
return null;
}
--
++
_resourceMgr.deleteRoutingHost(host, isForced, isForceDeleteStorage);
try {
ShutdownCommand cmd = new ShutdownCommand(ShutdownCommand.DeleteHost, null);
@@@ -388,15 -381,15 +385,15 @@@
} catch (OperationTimedoutException e) {
s_logger.warn("Sending ShutdownCommand failed: ", e);
}
--
++
return new DeleteHostAnswer(true);
}
--
++
@Override
public boolean stop() {
-- _resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
++ _resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
return super.stop();
}
--
--
++
++
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/maint/UpgradeManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/network/vpc/VpcManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/storage/StorageManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/template/TemplateManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0bcb6460/server/src/com/cloud/user/AccountManagerImpl.java
----------------------------------------------------------------------