use of org.ovirt.engine.api.resource.VmResource in project ovirt-engine by oVirt.
the class V3VmDisksServer method list.
@GET
public V3Disks list() {
SystemResource systemResource = BackendApiResource.getInstance();
// In version 4 of the API the collection of disks of a virtual machine has been replaced by the collection of
// disk attachments, so we need to fetch the disk attachments:
VmsResource vmsResource = systemResource.getVmsResource();
VmResource vmResource = vmsResource.getVmResource(vmId);
DiskAttachmentsResource attachmentsResource = vmResource.getDiskAttachmentsResource();
DiskAttachments attachments = attachmentsResource.list();
// For each disk, we need now to fetch it from the top level disks collection, and add the information from
// the corresponding attachment:
DisksResource disksResource = systemResource.getDisksResource();
V3Disks disks = new V3Disks();
for (DiskAttachment attachment : attachments.getDiskAttachments()) {
DiskResource diskResource = disksResource.getDiskResource(attachment.getDisk().getId());
Disk v4Disk = diskResource.get();
V3Disk v3Disk = adaptOut(v4Disk);
V3VmHelper.addDiskAttachmentDetails(attachment, v3Disk);
V3VmHelper.fixDiskLinks(vmId, v3Disk);
disks.getDisks().add(v3Disk);
}
return disks;
}
use of org.ovirt.engine.api.resource.VmResource in project ovirt-engine by oVirt.
the class V3NICHelper method setVnicProfile.
/**
* Finds the VNIC profile that correspond to the given V3 NIC and assigns it to the given V4 NIC.
*
* @param vmId the identifier of the virtual machine that the NIC is going to be added to
* @param v3Nic the V3 NIC where the information will be extracted from
* @param v4Nic the V4 NIC that will be populated
*/
public static void setVnicProfile(String vmId, V3NIC v3Nic, Nic v4Nic) {
// Do nothing if the profile is already set:
if (v4Nic.isSetVnicProfile()) {
return;
}
// In version 4 of the API the "network" and "port_mirroring" properties of the NIC have been completely
// removed, and instead of using them it is required to specify a VNIC profile. This means that if the user
// isn't explicitly indicating the VNIC profile we need to find one that is compatible with the given network
// and port mirroring configuration. The only VNIC profiles to consider are the ones corresponding to the
// networks of the cluster where the VM resides, so we need to retrieve the VM, then the cluster, and then the
// identifiers of the networks:
SystemResource systemService = BackendApiResource.getInstance();
VmsResource vmsService = systemService.getVmsResource();
VmResource vmService = vmsService.getVmResource(vmId);
Vm vm = vmService.get();
ClustersResource clustersService = systemService.getClustersResource();
ClusterResource clusterService = clustersService.getClusterResource(vm.getCluster().getId());
ClusterNetworksResource networksService = clusterService.getNetworksResource();
Set<String> validNetworkIds = networksService.list().getNetworks().stream().map(Network::getId).collect(toSet());
// Find a VNIC profile that is in the set of valid networks and that is compatible with the NIC:
VnicProfilesResource profilesService = systemService.getVnicProfilesResource();
profilesService.list().getVnicProfiles().stream().filter(profile -> validNetworkIds.contains(profile.getNetwork().getId())).filter(profile -> isProfileCompatible(profile, v3Nic)).sorted(comparing(VnicProfile::getName)).map(VnicProfile::getId).findFirst().ifPresent(id -> {
VnicProfile v4Profile = new VnicProfile();
v4Profile.setId(id);
v4Nic.setVnicProfile(v4Profile);
});
}
use of org.ovirt.engine.api.resource.VmResource in project ovirt-engine by oVirt.
the class V3VmHelper method addDiskAttachmentDetails.
/**
* In version 4 of the API the interface, some attributes have been moved from the disk to the disk attachment, as
* they are specific of the relationship between a particular VM and the disk. But in version 3 of the API we need
* to continue supporting them. To do so we need to find the disk attachment and copy these attributes to the disk.
*/
public static void addDiskAttachmentDetails(String vmId, V3Disk disk) {
if (vmId != null) {
SystemResource systemResource = BackendApiResource.getInstance();
VmsResource vmsResource = systemResource.getVmsResource();
VmResource vmResource = vmsResource.getVmResource(vmId);
DiskAttachmentsResource attachmentsResource = vmResource.getDiskAttachmentsResource();
String diskId = disk.getId();
if (diskId != null) {
DiskAttachmentResource attachmentResource = attachmentsResource.getAttachmentResource(diskId);
try {
DiskAttachment attachment = attachmentResource.get();
addDiskAttachmentDetails(attachment, disk);
} catch (WebApplicationException exception) {
// If an application exception is generated while retrieving the details of the disk attachment
// it is safe to ignore it, as it may be that the user just doesn't have permission to see
// attachment, but she may still have permissions to see the other details of the disk.
}
}
}
}
use of org.ovirt.engine.api.resource.VmResource in project ovirt-engine by oVirt.
the class V3DiskSnapshotOutAdapter method adapt.
@Override
public V3DiskSnapshot adapt(DiskSnapshot from) {
V3DiskSnapshot to = new V3DiskSnapshot();
if (from.isSetLinks()) {
to.getLinks().addAll(adaptOut(from.getLinks()));
}
if (from.isSetActions()) {
to.setActions(adaptOut(from.getActions()));
}
if (from.isSetActualSize()) {
to.setActualSize(from.getActualSize());
}
if (from.isSetAlias()) {
to.setAlias(from.getAlias());
}
if (from.isSetComment()) {
to.setComment(from.getComment());
}
if (from.isSetDescription()) {
to.setDescription(from.getDescription());
}
if (from.isSetDisk()) {
to.setDisk(adaptOut(from.getDisk()));
}
if (from.isSetDiskProfile()) {
to.setDiskProfile(adaptOut(from.getDiskProfile()));
}
if (from.isSetFormat()) {
to.setFormat(from.getFormat().value());
}
if (from.isSetId()) {
to.setId(from.getId());
}
if (from.isSetHref()) {
to.setHref(from.getHref());
}
if (from.isSetImageId()) {
to.setImageId(from.getImageId());
}
if (from.isSetInstanceType()) {
to.setInstanceType(adaptOut(from.getInstanceType()));
}
if (from.isSetLogicalName()) {
to.setLogicalName(from.getLogicalName());
}
if (from.isSetLunStorage()) {
to.setLunStorage(adaptOut(from.getLunStorage()));
}
if (from.isSetName()) {
to.setName(from.getName());
}
if (from.isSetOpenstackVolumeType()) {
to.setOpenstackVolumeType(adaptOut(from.getOpenstackVolumeType()));
}
if (from.isSetPropagateErrors()) {
to.setPropagateErrors(from.isPropagateErrors());
}
if (from.isSetProvisionedSize()) {
to.setProvisionedSize(from.getProvisionedSize());
}
if (from.isSetQuota()) {
to.setQuota(adaptOut(from.getQuota()));
}
if (from.isSetReadOnly()) {
to.setReadOnly(from.isReadOnly());
}
if (from.isSetSgio()) {
to.setSgio(from.getSgio().value());
}
if (from.isSetShareable()) {
to.setShareable(from.isShareable());
}
if (from.isSetSnapshot()) {
to.setSnapshot(adaptOut(from.getSnapshot()));
}
if (from.isSetSparse()) {
to.setSparse(from.isSparse());
}
if (from.isSetStatistics()) {
to.setStatistics(new V3Statistics());
to.getStatistics().getStatistics().addAll(adaptOut(from.getStatistics().getStatistics()));
}
if (from.isSetStatus()) {
V3Status status = new V3Status();
status.setState(from.getStatus().value());
to.setStatus(status);
}
if (from.isSetStorageDomain()) {
to.setStorageDomain(adaptOut(from.getStorageDomain()));
}
if (from.isSetStorageDomains()) {
to.setStorageDomains(new V3StorageDomains());
to.getStorageDomains().getStorageDomains().addAll(adaptOut(from.getStorageDomains().getStorageDomains()));
}
if (from.isSetStorageType()) {
to.setStorageType(from.getStorageType().value());
}
if (from.isSetTemplate()) {
to.setTemplate(adaptOut(from.getTemplate()));
}
if (from.isSetUsesScsiReservation()) {
to.setUsesScsiReservation(from.isUsesScsiReservation());
}
if (from.isSetVm()) {
to.setVm(adaptOut(from.getVm()));
}
if (from.isSetVms()) {
to.setVms(new V3VMs());
to.getVms().getVMs().addAll(adaptOut(from.getVms().getVms()));
}
if (from.isSetWipeAfterDelete()) {
to.setWipeAfterDelete(from.isWipeAfterDelete());
}
// continue supporting it. To do so we need to find the disk attachment and copy this attribute to the disk.
if (to.isSetId() && to.isSetVm() && to.getVm().isSetId()) {
String diskId = to.getId();
String vmId = to.getVm().getId();
VmsResource vmsResource = BackendApiResource.getInstance().getVmsResource();
VmResource vmResource = vmsResource.getVmResource(vmId);
DiskAttachmentsResource attachmentsResource = vmResource.getDiskAttachmentsResource();
DiskAttachmentResource attachmentResource = attachmentsResource.getAttachmentResource(diskId);
DiskAttachment attachment = attachmentResource.get();
if (attachment.isSetActive()) {
to.setActive(attachment.isActive());
}
}
return to;
}
use of org.ovirt.engine.api.resource.VmResource in project ovirt-engine by oVirt.
the class V3VmHelper method addGuestIp.
/**
* If the V4 virtual machine has IP addresses reported, then add them to the V3 {@code guest_info} element.
*/
public static void addGuestIp(V3VM vm) {
String vmId = vm.getId();
if (vmId != null) {
SystemResource systemResource = BackendApiResource.getInstance();
VmsResource vmsResource = systemResource.getVmsResource();
VmResource vmResource = vmsResource.getVmResource(vmId);
VmNicsResource nicsResource = vmResource.getNicsResource();
try {
Nics fromNics = nicsResource.list();
List<Ip> fromIps = new ArrayList<>();
for (Nic fromNic : fromNics.getNics()) {
ReportedDevices fromDevices = fromNic.getReportedDevices();
if (fromDevices != null) {
for (ReportedDevice fromDevice : fromDevices.getReportedDevices()) {
Ips deviceIps = fromDevice.getIps();
if (deviceIps != null) {
fromIps.addAll(deviceIps.getIps());
}
}
}
}
if (!fromIps.isEmpty()) {
V3GuestInfo guestInfo = vm.getGuestInfo();
if (guestInfo == null) {
guestInfo = new V3GuestInfo();
vm.setGuestInfo(guestInfo);
}
V3IPs ips = guestInfo.getIps();
if (ips == null) {
ips = new V3IPs();
guestInfo.setIps(ips);
}
ips.getIPs().addAll(adaptOut(fromIps));
}
} catch (WebApplicationException exception) {
// If an application exception is generated while retrieving the details of the NICs is safe to ignore
// it, as it may be that the user just doesn't have permission to see the NICs, but she may still have
// permissions to see the other details of the virtual machine.
}
}
}
Aggregations