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
----------------------------------------------------------------------