mirror of https://github.com/apache/cloudstack.git
188 lines
7.0 KiB
Java
188 lines
7.0 KiB
Java
// Copyright 2012 Citrix Systems, Inc. Licensed under the
|
|
// Apache License, Version 2.0 (the "License"); you may not use this
|
|
// file except in compliance with the License. Citrix Systems, Inc.
|
|
// reserves all rights not expressly granted by the License.
|
|
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
// Automatically generated by addcopyright.py at 04/03/2012
|
|
package com.cloud.resource;
|
|
|
|
import java.lang.reflect.Constructor;
|
|
import java.lang.reflect.InvocationTargetException;
|
|
import java.net.URL;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
import javax.naming.ConfigurationException;
|
|
|
|
import org.apache.log4j.Logger;
|
|
|
|
import com.cloud.configuration.Config;
|
|
import com.cloud.configuration.dao.ConfigurationDao;
|
|
import com.cloud.dc.ClusterVO;
|
|
import com.cloud.dc.dao.ClusterDao;
|
|
import com.cloud.host.HostVO;
|
|
import com.cloud.host.dao.HostDao;
|
|
import com.cloud.network.NetworkManager;
|
|
import com.cloud.utils.component.ComponentLocator;
|
|
import com.cloud.utils.component.Inject;
|
|
import com.cloud.utils.net.UrlUtil;
|
|
|
|
public abstract class DiscovererBase implements Discoverer {
|
|
protected String _name;
|
|
protected Map<String, String> _params;
|
|
private static final Logger s_logger = Logger.getLogger(DiscovererBase.class);
|
|
@Inject protected ClusterDao _clusterDao;
|
|
@Inject protected ConfigurationDao _configDao;
|
|
@Inject protected NetworkManager _networkMgr;
|
|
@Inject protected HostDao _hostDao;
|
|
|
|
@Override
|
|
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
|
|
ConfigurationDao dao = ComponentLocator.getCurrentLocator().getDao(ConfigurationDao.class);
|
|
_params = dao.getConfiguration(params);
|
|
_name = name;
|
|
|
|
return true;
|
|
}
|
|
|
|
protected Map<String, String> resolveInputParameters(URL url) {
|
|
Map<String, String> params = UrlUtil.parseQueryParameters(url);
|
|
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public void putParam(Map<String, String> params) {
|
|
if (_params == null) {
|
|
_params = new HashMap<String, String>();
|
|
}
|
|
_params.putAll(params);
|
|
}
|
|
|
|
@Override
|
|
public String getName() {
|
|
return _name;
|
|
}
|
|
|
|
@Override
|
|
public boolean start() {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean stop() {
|
|
return true;
|
|
}
|
|
|
|
protected ServerResource getResource(String resourceName){
|
|
ServerResource resource = null;
|
|
try {
|
|
Class<?> clazz = Class.forName(resourceName);
|
|
Constructor constructor = clazz.getConstructor();
|
|
resource = (ServerResource) constructor.newInstance();
|
|
} catch (ClassNotFoundException e) {
|
|
s_logger.warn("Unable to find class " + resourceName, e);
|
|
} catch (InstantiationException e) {
|
|
s_logger.warn("Unablet to instantiate class " + resourceName, e);
|
|
} catch (IllegalAccessException e) {
|
|
s_logger.warn("Illegal access " + resourceName, e);
|
|
} catch (SecurityException e) {
|
|
s_logger.warn("Security error on " + resourceName, e);
|
|
} catch (NoSuchMethodException e) {
|
|
s_logger.warn("NoSuchMethodException error on " + resourceName, e);
|
|
} catch (IllegalArgumentException e) {
|
|
s_logger.warn("IllegalArgumentException error on " + resourceName, e);
|
|
} catch (InvocationTargetException e) {
|
|
s_logger.warn("InvocationTargetException error on " + resourceName, e);
|
|
}
|
|
|
|
return resource;
|
|
}
|
|
|
|
protected HashMap<String, Object> buildConfigParams(HostVO host){
|
|
HashMap<String, Object> params = new HashMap<String, Object>(host.getDetails().size() + 5);
|
|
params.putAll(host.getDetails());
|
|
|
|
params.put("guid", host.getGuid());
|
|
params.put("zone", Long.toString(host.getDataCenterId()));
|
|
if (host.getPodId() != null) {
|
|
params.put("pod", Long.toString(host.getPodId()));
|
|
}
|
|
if (host.getClusterId() != null) {
|
|
params.put("cluster", Long.toString(host.getClusterId()));
|
|
String guid = null;
|
|
ClusterVO cluster = _clusterDao.findById(host.getClusterId());
|
|
if (cluster.getGuid() == null) {
|
|
guid = host.getDetail("pool");
|
|
} else {
|
|
guid = cluster.getGuid();
|
|
}
|
|
if (guid != null && !guid.isEmpty()) {
|
|
params.put("pool", guid);
|
|
}
|
|
}
|
|
|
|
params.put("ipaddress", host.getPrivateIpAddress());
|
|
params.put("secondary.storage.vm", "false");
|
|
params.put("max.template.iso.size", _configDao.getValue(Config.MaxTemplateAndIsoSize.toString()));
|
|
params.put("migratewait", _configDao.getValue(Config.MigrateWait.toString()));
|
|
return params;
|
|
|
|
}
|
|
|
|
@Override
|
|
public ServerResource reloadResource(HostVO host) {
|
|
String resourceName = host.getResource();
|
|
ServerResource resource = getResource(resourceName);
|
|
|
|
if(resource != null){
|
|
_hostDao.loadDetails(host);
|
|
updateNetworkLabels(host);
|
|
|
|
HashMap<String, Object> params = buildConfigParams(host);
|
|
try {
|
|
resource.configure(host.getName(), params);
|
|
} catch (ConfigurationException e) {
|
|
s_logger.warn("Unable to configure resource due to " + e.getMessage());
|
|
return null;
|
|
}
|
|
if (!resource.start()) {
|
|
s_logger.warn("Unable to start the resource");
|
|
return null;
|
|
}
|
|
}
|
|
return resource;
|
|
}
|
|
|
|
private void updateNetworkLabels(HostVO host){
|
|
//check if networkLabels need to be updated in details
|
|
//we send only private and storage network label to the resource.
|
|
String privateNetworkLabel = _networkMgr.getDefaultManagementTrafficLabel(host.getDataCenterId(), host.getHypervisorType());
|
|
String storageNetworkLabel = _networkMgr.getDefaultStorageTrafficLabel(host.getDataCenterId(), host.getHypervisorType());
|
|
|
|
String privateDevice = host.getDetail("private.network.device");
|
|
String storageDevice = host.getDetail("storage.network.device1");
|
|
|
|
boolean update = false;
|
|
|
|
if(privateNetworkLabel != null && !privateNetworkLabel.equalsIgnoreCase(privateDevice)){
|
|
host.setDetail("private.network.device", privateNetworkLabel);
|
|
update = true;
|
|
}
|
|
if(storageNetworkLabel != null && !storageNetworkLabel.equalsIgnoreCase(storageDevice)){
|
|
host.setDetail("storage.network.device1", storageNetworkLabel);
|
|
update = true;
|
|
}
|
|
if(update){
|
|
_hostDao.saveDetails(host);
|
|
}
|
|
}
|
|
|
|
}
|