mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
fix kvm
This commit is contained in:
parent
0b9e0c0f3a
commit
492127c035
@ -67,6 +67,12 @@
|
|||||||
<artifactId>cloud-plugin-hypervisor-vmware</artifactId>
|
<artifactId>cloud-plugin-hypervisor-vmware</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.cloudstack</groupId>
|
||||||
|
<artifactId>cloud-plugin-hypervisor-kvm</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.cloudstack</groupId>
|
<groupId>org.apache.cloudstack</groupId>
|
||||||
|
|||||||
@ -24,6 +24,7 @@ import org.testng.annotations.BeforeMethod;
|
|||||||
import org.testng.annotations.Parameters;
|
import org.testng.annotations.Parameters;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||||
import com.cloud.utils.db.DB;
|
import com.cloud.utils.db.DB;
|
||||||
import com.cloud.utils.db.Transaction;
|
import com.cloud.utils.db.Transaction;
|
||||||
|
|
||||||
@ -38,6 +39,7 @@ public class CloudStackTestNGBase extends AbstractTestNGSpringContextTests {
|
|||||||
private String secondaryStorage;
|
private String secondaryStorage;
|
||||||
private String imageInstallPath;
|
private String imageInstallPath;
|
||||||
private String scriptPath;
|
private String scriptPath;
|
||||||
|
private HypervisorType hypervisor;
|
||||||
private Transaction txn;
|
private Transaction txn;
|
||||||
|
|
||||||
private String s3AccessKey;
|
private String s3AccessKey;
|
||||||
@ -72,11 +74,14 @@ public class CloudStackTestNGBase extends AbstractTestNGSpringContextTests {
|
|||||||
|
|
||||||
@Parameters({"devcloud-host-uuid", "devcloud-host-gateway", "devcloud-host-cidr",
|
@Parameters({"devcloud-host-uuid", "devcloud-host-gateway", "devcloud-host-cidr",
|
||||||
"devcloud-host-ip", "template-url", "devcloud-local-storage-uuid",
|
"devcloud-host-ip", "template-url", "devcloud-local-storage-uuid",
|
||||||
"primary-storage-want-to-add", "devcloud-secondary-storage", "s3-accesskey", "s3-secretkey", "s3-endpoint", "s3-template-bucket", "s3-usehttps", "image-install-path", "primary-storage-uuid-want-to-add", "script-path"})
|
"primary-storage-want-to-add", "devcloud-secondary-storage", "s3-accesskey", "s3-secretkey", "s3-endpoint",
|
||||||
|
"s3-template-bucket", "s3-usehttps", "image-install-path", "primary-storage-uuid-want-to-add", "script-path",
|
||||||
|
"hypervisor"})
|
||||||
protected void setup(String hostuuid, String gateway, String cidr,
|
protected void setup(String hostuuid, String gateway, String cidr,
|
||||||
String hostIp, String templateUrl, String localStorageUuid,
|
String hostIp, String templateUrl, String localStorageUuid,
|
||||||
String primaryStorage, String secondaryStorage, String s3_accessKey, String s3_secretKey, String s3_endpoint, String s3_template_bucket,
|
String primaryStorage, String secondaryStorage, String s3_accessKey, String s3_secretKey, String s3_endpoint, String s3_template_bucket,
|
||||||
String s3_usehttps, String imageInstallPath, String primaryStorageUuid, String scriptPath) {
|
String s3_usehttps, String imageInstallPath, String primaryStorageUuid, String scriptPath,
|
||||||
|
String hypervisor) {
|
||||||
this.hostGuid = hostuuid;
|
this.hostGuid = hostuuid;
|
||||||
this.hostGateway = gateway;
|
this.hostGateway = gateway;
|
||||||
this.hostCidr = cidr;
|
this.hostCidr = cidr;
|
||||||
@ -86,6 +91,7 @@ public class CloudStackTestNGBase extends AbstractTestNGSpringContextTests {
|
|||||||
this.primaryStorageUrl = primaryStorage;
|
this.primaryStorageUrl = primaryStorage;
|
||||||
this.primaryStorageUuid = primaryStorageUuid;
|
this.primaryStorageUuid = primaryStorageUuid;
|
||||||
this.imageInstallPath = imageInstallPath;
|
this.imageInstallPath = imageInstallPath;
|
||||||
|
this.hypervisor = HypervisorType.getType(hypervisor);
|
||||||
this.setSecondaryStorage(secondaryStorage);
|
this.setSecondaryStorage(secondaryStorage);
|
||||||
// set S3 parameters
|
// set S3 parameters
|
||||||
this.s3AccessKey = s3_accessKey;
|
this.s3AccessKey = s3_accessKey;
|
||||||
@ -180,5 +186,13 @@ public class CloudStackTestNGBase extends AbstractTestNGSpringContextTests {
|
|||||||
this.scriptPath = scriptPath;
|
this.scriptPath = scriptPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public HypervisorType getHypervisor() {
|
||||||
|
return hypervisor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHypervisor(HypervisorType hypervisor) {
|
||||||
|
this.hypervisor = hypervisor;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -50,6 +50,7 @@ import com.cloud.host.HostVO;
|
|||||||
import com.cloud.host.Status.Event;
|
import com.cloud.host.Status.Event;
|
||||||
import com.cloud.host.dao.HostDao;
|
import com.cloud.host.dao.HostDao;
|
||||||
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||||
|
import com.cloud.hypervisor.kvm.resource.LibvirtComputingResource;
|
||||||
import com.cloud.hypervisor.vmware.VmwareServerDiscoverer;
|
import com.cloud.hypervisor.vmware.VmwareServerDiscoverer;
|
||||||
import com.cloud.hypervisor.xen.resource.XcpOssResource;
|
import com.cloud.hypervisor.xen.resource.XcpOssResource;
|
||||||
import com.cloud.resource.ServerResource;
|
import com.cloud.resource.ServerResource;
|
||||||
@ -122,6 +123,16 @@ public class DirectAgentManagerSimpleImpl extends ManagerBase implements AgentMa
|
|||||||
} catch (ConfigurationException e) {
|
} catch (ConfigurationException e) {
|
||||||
logger.debug("Failed to load resource:" + e.toString());
|
logger.debug("Failed to load resource:" + e.toString());
|
||||||
}
|
}
|
||||||
|
} else if (host.getHypervisorType() == HypervisorType.KVM) {
|
||||||
|
resource = new LibvirtComputingResource();
|
||||||
|
try {
|
||||||
|
params.put("public.network.device", "cloudbr0");
|
||||||
|
params.put("private.network.device", "cloudbr0");
|
||||||
|
resource.configure(host.getName(), params);
|
||||||
|
} catch (ConfigurationException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
} else if (host.getHypervisorType() == HypervisorType.VMware) {
|
} else if (host.getHypervisorType() == HypervisorType.VMware) {
|
||||||
ClusterVO cluster = clusterDao.findById(host.getClusterId());
|
ClusterVO cluster = clusterDao.findById(host.getClusterId());
|
||||||
String url = clusterDetailsDao.findDetail(cluster.getId(), "url").getValue();
|
String url = clusterDetailsDao.findDetail(cluster.getId(), "url").getValue();
|
||||||
|
|||||||
@ -179,7 +179,7 @@ public class SnapshotTest extends CloudStackTestNGBase {
|
|||||||
podId = pod.getId();
|
podId = pod.getId();
|
||||||
//create xen cluster
|
//create xen cluster
|
||||||
ClusterVO cluster = new ClusterVO(dc.getId(), pod.getId(), "devcloud cluster");
|
ClusterVO cluster = new ClusterVO(dc.getId(), pod.getId(), "devcloud cluster");
|
||||||
cluster.setHypervisorType(HypervisorType.XenServer.toString());
|
cluster.setHypervisorType(this.getHypervisor().toString());
|
||||||
cluster.setClusterType(ClusterType.CloudManaged);
|
cluster.setClusterType(ClusterType.CloudManaged);
|
||||||
cluster.setManagedState(ManagedState.Managed);
|
cluster.setManagedState(ManagedState.Managed);
|
||||||
cluster = clusterDao.persist(cluster);
|
cluster = clusterDao.persist(cluster);
|
||||||
@ -197,7 +197,7 @@ public class SnapshotTest extends CloudStackTestNGBase {
|
|||||||
host.setPodId(podId);
|
host.setPodId(podId);
|
||||||
host.setLastPinged(0);
|
host.setLastPinged(0);
|
||||||
host.setResourceState(ResourceState.Enabled);
|
host.setResourceState(ResourceState.Enabled);
|
||||||
host.setHypervisorType(HypervisorType.XenServer);
|
host.setHypervisorType(this.getHypervisor());
|
||||||
host.setClusterId(cluster.getId());
|
host.setClusterId(cluster.getId());
|
||||||
|
|
||||||
host = hostDao.persist(host);
|
host = hostDao.persist(host);
|
||||||
|
|||||||
@ -171,7 +171,7 @@ public class VolumeTest extends CloudStackTestNGBase {
|
|||||||
podId = pod.getId();
|
podId = pod.getId();
|
||||||
//create xen cluster
|
//create xen cluster
|
||||||
ClusterVO cluster = new ClusterVO(dc.getId(), pod.getId(), "devcloud cluster");
|
ClusterVO cluster = new ClusterVO(dc.getId(), pod.getId(), "devcloud cluster");
|
||||||
cluster.setHypervisorType(HypervisorType.XenServer.toString());
|
cluster.setHypervisorType(this.getHypervisor().toString());
|
||||||
cluster.setClusterType(ClusterType.CloudManaged);
|
cluster.setClusterType(ClusterType.CloudManaged);
|
||||||
cluster.setManagedState(ManagedState.Managed);
|
cluster.setManagedState(ManagedState.Managed);
|
||||||
cluster = clusterDao.persist(cluster);
|
cluster = clusterDao.persist(cluster);
|
||||||
@ -189,7 +189,7 @@ public class VolumeTest extends CloudStackTestNGBase {
|
|||||||
host.setPodId(podId);
|
host.setPodId(podId);
|
||||||
host.setLastPinged(0);
|
host.setLastPinged(0);
|
||||||
host.setResourceState(ResourceState.Enabled);
|
host.setResourceState(ResourceState.Enabled);
|
||||||
host.setHypervisorType(HypervisorType.XenServer);
|
host.setHypervisorType(this.getHypervisor());
|
||||||
host.setClusterId(cluster.getId());
|
host.setClusterId(cluster.getId());
|
||||||
|
|
||||||
host = hostDao.persist(host);
|
host = hostDao.persist(host);
|
||||||
@ -320,7 +320,7 @@ public class VolumeTest extends CloudStackTestNGBase {
|
|||||||
return volume;
|
return volume;
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testCopyBaseImage() {
|
public void testCopyBaseImage() {
|
||||||
DataStore primaryStore = createPrimaryDataStore();
|
DataStore primaryStore = createPrimaryDataStore();
|
||||||
primaryStoreId = primaryStore.getId();
|
primaryStoreId = primaryStore.getId();
|
||||||
|
|||||||
@ -209,10 +209,6 @@ public class XenserverSnapshotStrategy extends SnapshotStrategyBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canHandle(Snapshot snapshot) {
|
public boolean canHandle(Snapshot snapshot) {
|
||||||
if (snapshot.getHypervisorType() == HypervisorType.XenServer) {
|
return true;
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -461,7 +461,7 @@ ServerResource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected String getDefaultDomrScriptsDir() {
|
protected String getDefaultDomrScriptsDir() {
|
||||||
return "scripts/network/domr/kvm";
|
return "scripts/network/domr";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getNetworkDirectSourceMode() {
|
protected String getNetworkDirectSourceMode() {
|
||||||
@ -682,7 +682,7 @@ ServerResource {
|
|||||||
|
|
||||||
_localStorageUUID = (String) params.get("local.storage.uuid");
|
_localStorageUUID = (String) params.get("local.storage.uuid");
|
||||||
if (_localStorageUUID == null) {
|
if (_localStorageUUID == null) {
|
||||||
throw new ConfigurationException("local.storage.uuid is not set! Please set this to a valid UUID");
|
_localStorageUUID = UUID.nameUUIDFromBytes(_localStoragePath.getBytes()).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
value = (String) params.get("scripts.timeout");
|
value = (String) params.get("scripts.timeout");
|
||||||
|
|||||||
@ -142,7 +142,7 @@ public class KVMStorageProcessor implements StorageProcessor {
|
|||||||
DataTO destData = cmd.getDestTO();
|
DataTO destData = cmd.getDestTO();
|
||||||
TemplateObjectTO template = (TemplateObjectTO)srcData;
|
TemplateObjectTO template = (TemplateObjectTO)srcData;
|
||||||
DataStoreTO imageStore = template.getDataStore();
|
DataStoreTO imageStore = template.getDataStore();
|
||||||
VolumeObjectTO volume = (VolumeObjectTO)destData;
|
TemplateObjectTO volume = (TemplateObjectTO)destData;
|
||||||
PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)volume.getDataStore();
|
PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)volume.getDataStore();
|
||||||
|
|
||||||
if (!(imageStore instanceof NfsTO)) {
|
if (!(imageStore instanceof NfsTO)) {
|
||||||
@ -195,10 +195,10 @@ public class KVMStorageProcessor implements StorageProcessor {
|
|||||||
KVMPhysicalDisk primaryVol = storagePoolMgr.copyPhysicalDisk(
|
KVMPhysicalDisk primaryVol = storagePoolMgr.copyPhysicalDisk(
|
||||||
tmplVol, UUID.randomUUID().toString(), primaryPool);
|
tmplVol, UUID.randomUUID().toString(), primaryPool);
|
||||||
|
|
||||||
VolumeObjectTO newVol = new VolumeObjectTO();
|
TemplateObjectTO newTemplate = new TemplateObjectTO();
|
||||||
newVol.setPath(primaryVol.getName());
|
newTemplate.setPath(primaryVol.getName());
|
||||||
newVol.setSize(primaryVol.getSize());
|
newTemplate.setFormat(ImageFormat.QCOW2);
|
||||||
return new CopyCmdAnswer(newVol);
|
return new CopyCmdAnswer(newTemplate);
|
||||||
} catch (CloudRuntimeException e) {
|
} catch (CloudRuntimeException e) {
|
||||||
return new CopyCmdAnswer(e.toString());
|
return new CopyCmdAnswer(e.toString());
|
||||||
} finally {
|
} finally {
|
||||||
@ -273,14 +273,7 @@ public class KVMStorageProcessor implements StorageProcessor {
|
|||||||
primaryPool = storagePoolMgr.getStoragePool(primaryStore.getPoolType(),
|
primaryPool = storagePoolMgr.getStoragePool(primaryStore.getPoolType(),
|
||||||
primaryStore.getUuid());
|
primaryStore.getUuid());
|
||||||
|
|
||||||
String templatePath = null;
|
String templatePath = template.getPath();
|
||||||
if (imageStore instanceof NfsTO) {
|
|
||||||
NfsTO nfsImageStore = (NfsTO)imageStore;
|
|
||||||
templatePath = nfsImageStore.getUrl();
|
|
||||||
} else {
|
|
||||||
s_logger.debug("Failed to create volume: ");
|
|
||||||
return new CopyCmdAnswer("Unsupported protocol");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(primaryPool.getType() == StoragePoolType.CLVM) {
|
if(primaryPool.getType() == StoragePoolType.CLVM) {
|
||||||
vol = templateToPrimaryDownload(templatePath, primaryPool);
|
vol = templateToPrimaryDownload(templatePath, primaryPool);
|
||||||
@ -321,9 +314,9 @@ public class KVMStorageProcessor implements StorageProcessor {
|
|||||||
DataTO srcData = cmd.getSrcTO();
|
DataTO srcData = cmd.getSrcTO();
|
||||||
DataTO destData = cmd.getDestTO();
|
DataTO destData = cmd.getDestTO();
|
||||||
int wait = cmd.getWait();
|
int wait = cmd.getWait();
|
||||||
TemplateObjectTO template = (TemplateObjectTO)srcData;
|
TemplateObjectTO template = (TemplateObjectTO)destData;
|
||||||
DataStoreTO imageStore = template.getDataStore();
|
DataStoreTO imageStore = template.getDataStore();
|
||||||
VolumeObjectTO volume = (VolumeObjectTO)destData;
|
VolumeObjectTO volume = (VolumeObjectTO)srcData;
|
||||||
PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)volume.getDataStore();
|
PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)volume.getDataStore();
|
||||||
|
|
||||||
if (!(imageStore instanceof NfsTO)) {
|
if (!(imageStore instanceof NfsTO)) {
|
||||||
@ -425,7 +418,7 @@ public class KVMStorageProcessor implements StorageProcessor {
|
|||||||
loc.save();
|
loc.save();
|
||||||
|
|
||||||
TemplateObjectTO newTemplate = new TemplateObjectTO();
|
TemplateObjectTO newTemplate = new TemplateObjectTO();
|
||||||
newTemplate.setPath(templateFolder + templateName + ".qcow2");
|
newTemplate.setPath(templateFolder + File.separator + templateName + ".qcow2");
|
||||||
return new CopyCmdAnswer(newTemplate);
|
return new CopyCmdAnswer(newTemplate);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
s_logger.debug("Failed to create template from volume: " + e.toString());
|
s_logger.debug("Failed to create template from volume: " + e.toString());
|
||||||
@ -783,8 +776,9 @@ public class KVMStorageProcessor implements StorageProcessor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Answer createSnapshot(CreateObjectCommand cmd) {
|
public Answer createSnapshot(CreateObjectCommand cmd) {
|
||||||
VolumeObjectTO volume = (VolumeObjectTO)cmd.getData();
|
SnapshotObjectTO snapshotTO = (SnapshotObjectTO)cmd.getData();
|
||||||
PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)volume.getDataStore();
|
PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)snapshotTO.getDataStore();
|
||||||
|
VolumeObjectTO volume = snapshotTO.getVolume();
|
||||||
String snapshotName = UUID.randomUUID().toString();
|
String snapshotName = UUID.randomUUID().toString();
|
||||||
String vmName = volume.getVmName();
|
String vmName = volume.getVmName();
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -48,7 +48,7 @@ is_lv() {
|
|||||||
# And a logical volume
|
# And a logical volume
|
||||||
lvm lvs "${1}" > /dev/null 2>&1 && return 0
|
lvm lvs "${1}" > /dev/null 2>&1 && return 0
|
||||||
fi
|
fi
|
||||||
return 1
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
get_vg() {
|
get_vg() {
|
||||||
|
|||||||
@ -450,7 +450,15 @@ public class Script implements Callable<String> {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
file = new File(System.getProperty("paths.script") + File.separator + path + File.separator + script);
|
search = System.getProperty("paths.script");
|
||||||
|
|
||||||
|
search += File.separatorChar + path + File.separator;
|
||||||
|
do {
|
||||||
|
search = search.substring(0, search.lastIndexOf(File.separator));
|
||||||
|
file = new File(search + File.separator + script);
|
||||||
|
s_logger.debug("Looking for " + script + " in " + file.getAbsolutePath());
|
||||||
|
} while (!file.exists() && search.lastIndexOf(File.separator) != -1);
|
||||||
|
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
return file.getAbsolutePath();
|
return file.getAbsolutePath();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user