Shahar Havivi has uploaded a new change for review. Change subject: API: Vm Init - new Feature ......................................................................
API: Vm Init - new Feature Summry: This Feature will allow persistent of Windows Sysprep and Cloud-Init data to the Database. By persisting the data Admin can create a template with VM-Init data that which will enable initialize VMs with relevant Data. Feature page: http://www.ovirt.org/Features/vm-init-persistent Change-Id: Ibb5a8fb62df940eabae35c91157920d9b651aa3e Signed-off-by: Shahar Havivi <[email protected]> --- M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/HostNicMapper.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java M backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java M backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java 6 files changed, 27 insertions(+), 86 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/94/22794/1 diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java index a159936..0ae8af1 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java @@ -42,7 +42,6 @@ import org.ovirt.engine.api.restapi.types.VmMapper; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.ChangeVMClusterParameters; -import org.ovirt.engine.core.common.action.CloudInitParameters; import org.ovirt.engine.core.common.action.MigrateVmParameters; import org.ovirt.engine.core.common.action.MigrateVmToServerParameters; import org.ovirt.engine.core.common.action.MoveVmParameters; @@ -60,6 +59,7 @@ import org.ovirt.engine.core.common.businessentities.InitializationType; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSGroup; +import org.ovirt.engine.core.common.businessentities.VmInit; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.queries.GetPermissionsForObjectParameters; @@ -253,8 +253,8 @@ } } params.setInitializationType(InitializationType.CloudInit); - ((RunVmOnceParams) params).setCloudInitParameters( - getMapper(CloudInit.class, CloudInitParameters.class) + ((RunVmOnceParams) params).setVmInit( + getMapper(CloudInit.class, VmInit.class) .map(cloudInit, null)); } } else { diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/HostNicMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/HostNicMapper.java index bc837b5..64bcf74 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/HostNicMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/HostNicMapper.java @@ -75,7 +75,7 @@ } } if(model.isSetBootProtocol()){ - NetworkBootProtocol networkBootProtocol = map(BootProtocol.fromValue(model.getBootProtocol()), null); + NetworkBootProtocol networkBootProtocol = map(BootProtocol.fromValue(model.getBootProtocol()), NetworkBootProtocol.NONE); if(networkBootProtocol != null){ entity.setBootProtocol(networkBootProtocol); } diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java index 0a3c8d5..20e8ba2 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java @@ -8,7 +8,6 @@ import org.ovirt.engine.api.model.CpuTopology; import org.ovirt.engine.api.model.Display; import org.ovirt.engine.api.model.DisplayType; -import org.ovirt.engine.api.model.Domain; import org.ovirt.engine.api.model.HighAvailability; import org.ovirt.engine.api.model.OperatingSystem; import org.ovirt.engine.api.model.Template; @@ -136,9 +135,6 @@ entity.setVncKeyboardLayout(layout); } } - if (model.isSetDomain() && model.getDomain().isSetName()) { - entity.setDomain(model.getDomain().getName()); - } if (model.isSetTimezone()) { String timezone = model.getTimezone(); if (timezone.isEmpty()) { @@ -251,9 +247,6 @@ staticVm.setVncKeyboardLayout(layout); } } - if (model.isSetDomain() && model.getDomain().isSetName()) { - staticVm.setDomain(model.getDomain().getName()); - } if (model.isSetTimezone()) { staticVm.setTimeZone(model.getTimezone()); } @@ -328,11 +321,6 @@ } if (entity.getCreationDate() != null) { model.setCreationTime(DateMapper.map(entity.getCreationDate(), null)); - } - if (entity.getDomain()!=null && !entity.getDomain().isEmpty()) { - Domain domain = new Domain(); - domain.setName(entity.getDomain()); - model.setDomain(domain); } if (entity.getUsbPolicy()!=null) { Usb usb = new Usb(); diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java index ccd5f5b..9228e38 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java @@ -3,7 +3,6 @@ import static org.ovirt.engine.core.compat.Guid.createGuidFromString; import java.util.ArrayList; -import java.util.HashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -26,7 +25,6 @@ import org.ovirt.engine.api.model.CustomProperty; import org.ovirt.engine.api.model.Display; import org.ovirt.engine.api.model.DisplayType; -import org.ovirt.engine.api.model.Domain; import org.ovirt.engine.api.model.File; import org.ovirt.engine.api.model.Files; import org.ovirt.engine.api.model.GuestInfo; @@ -39,7 +37,6 @@ import org.ovirt.engine.api.model.OperatingSystem; import org.ovirt.engine.api.model.OsType; import org.ovirt.engine.api.model.Payload; -import org.ovirt.engine.api.model.PayloadEncoding; import org.ovirt.engine.api.model.Quota; import org.ovirt.engine.api.model.Template; import org.ovirt.engine.api.model.Usb; @@ -55,8 +52,6 @@ import org.ovirt.engine.api.restapi.utils.CustomPropertiesParser; import org.ovirt.engine.api.restapi.utils.GuidUtils; import org.ovirt.engine.api.restapi.utils.UsbMapperUtils; -import org.ovirt.engine.core.common.action.CloudInitParameters; -import org.ovirt.engine.core.common.action.CloudInitParameters.Attachment; import org.ovirt.engine.core.common.action.RunVmOnceParams; import org.ovirt.engine.core.common.businessentities.BootSequence; import org.ovirt.engine.core.common.businessentities.MigrationSupport; @@ -64,11 +59,12 @@ import org.ovirt.engine.core.common.businessentities.UsbPolicy; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.VMStatus; +import org.ovirt.engine.core.common.businessentities.VmInit; +import org.ovirt.engine.core.common.businessentities.VmInitNetwork; import org.ovirt.engine.core.common.businessentities.VmPayload; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.network.NetworkBootProtocol; -import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface; import org.ovirt.engine.core.common.osinfo.OsRepository; import org.ovirt.engine.core.common.utils.SimpleDependecyInjector; import org.ovirt.engine.core.common.utils.VmDeviceType; @@ -87,7 +83,6 @@ VmStatic staticVm = template != null ? template : new VmStatic(); staticVm.setId(Guid.Empty); staticVm.setVmtGuid(entity.getId()); - staticVm.setDomain(entity.getDomain()); staticVm.setVdsGroupId(entity.getVdsGroupId()); staticVm.setMemSizeMb(entity.getMemSizeMb()); staticVm.setOsId(entity.getOsId()); @@ -243,7 +238,6 @@ staticVm.setDedicatedVmForVds(createGuidFromString(vm.getPlacementPolicy().getHost().getId())); } if (vm.isSetDomain() && vm.getDomain().isSetName()) { - staticVm.setDomain(vm.getDomain().getName()); } if (vm.isSetMemoryPolicy() && vm.getMemoryPolicy().isSetGuaranteed()) { Long memGuaranteed = vm.getMemoryPolicy().getGuaranteed() / BYTES_PER_MB; @@ -449,11 +443,6 @@ VmAffinity vmAffinity = map(entity.getMigrationSupport(), null); if(vmAffinity !=null){ model.getPlacementPolicy().setAffinity(vmAffinity.value()); - } - if (entity.getVmDomain()!=null && !entity.getVmDomain().isEmpty()) { - Domain domain = new Domain(); - domain.setName(entity.getVmDomain()); - model.setDomain(domain); } MemoryPolicy policy = new MemoryPolicy(); policy.setGuaranteed((long)entity.getMinAllocatedMem() * (long)BYTES_PER_MB); @@ -916,27 +905,9 @@ return entity; } - @Mapping(from = Attachment.AttachmentType.class, to = PayloadEncoding.class) - public static PayloadEncoding map(Attachment.AttachmentType attachmentType, PayloadEncoding template) { - switch (attachmentType) { - case BASE64: return PayloadEncoding.BASE64; - case PLAINTEXT: return PayloadEncoding.PLAINTEXT; - default: return null; - } - } - - @Mapping(from = PayloadEncoding.class, to = Attachment.AttachmentType.class) - public static Attachment.AttachmentType map(PayloadEncoding attachmentType, Attachment.AttachmentType template) { - switch (attachmentType) { - case BASE64: return Attachment.AttachmentType.BASE64; - case PLAINTEXT: return Attachment.AttachmentType.PLAINTEXT; - default: return null; - } - } - - @Mapping(from = CloudInit.class, to = CloudInitParameters.class) - public static CloudInitParameters map(CloudInit model, CloudInitParameters template) { - CloudInitParameters entity = template != null ? template : new CloudInitParameters(); + @Mapping(from = CloudInit.class, to = VmInit.class) + public static VmInit map(CloudInit model, VmInit template) { + VmInit entity = template != null ? template : new VmInit(); if (model.isSetHost() && model.getHost().isSetAddress()) { entity.setHostname(model.getHost().getAddress()); @@ -961,60 +932,56 @@ if (model.isSetNetworkConfiguration()) { if (model.getNetworkConfiguration().isSetNics()) { - Map<String, VdsNetworkInterface> interfaces = new HashMap<>(); + List<VmInitNetwork> interfaces = new ArrayList<VmInitNetwork>(); for (NIC iface : model.getNetworkConfiguration().getNics().getNics()) { - VdsNetworkInterface vdsNetworkInterface = new VdsNetworkInterface(); + VmInitNetwork vmInitInterface = new VmInitNetwork(); + interfaces.add(vmInitInterface); if (iface.isSetBootProtocol()) { - NetworkBootProtocol protocol = HostNicMapper.map(BootProtocol.fromValue(iface.getBootProtocol()), null); - vdsNetworkInterface.setBootProtocol(protocol); + NetworkBootProtocol protocol = HostNicMapper.map + (BootProtocol.fromValue(iface.getBootProtocol()), vmInitInterface.getBootProtocol()); + vmInitInterface.setBootProtocol(protocol); if (protocol != NetworkBootProtocol.DHCP && iface.isSetNetwork() && iface.getNetwork().isSetIp()) { if (iface.getNetwork().getIp().isSetAddress()) { - vdsNetworkInterface.setAddress(iface.getNetwork().getIp().getAddress()); + vmInitInterface.setIp(iface.getNetwork().getIp().getAddress()); } if (iface.getNetwork().getIp().isSetNetmask()) { - vdsNetworkInterface.setSubnet(iface.getNetwork().getIp().getNetmask()); + vmInitInterface.setNetmask(iface.getNetwork().getIp().getNetmask()); } if (iface.getNetwork().getIp().isSetGateway()) { - vdsNetworkInterface.setGateway(iface.getNetwork().getIp().getGateway()); + vmInitInterface.setGateway(iface.getNetwork().getIp().getGateway()); } } - } - - interfaces.put(iface.getName(), vdsNetworkInterface); - - if (iface.isSetOnBoot() && iface.isOnBoot()) { - if (entity.getStartOnBoot() == null) { - entity.setStartOnBoot(new ArrayList<String>()); + if (iface.isSetOnBoot() && iface.isOnBoot()) { + vmInitInterface.setStartOnBoot(true); } - entity.getStartOnBoot().add(iface.getName()); } } - entity.setInterfaces(interfaces); + entity.setNetworks(interfaces); } if (model.getNetworkConfiguration().isSetDns()) { if (model.getNetworkConfiguration().getDns().isSetServers() && model.getNetworkConfiguration().getDns().getServers().isSetHosts() && !model.getNetworkConfiguration().getDns().getServers().getHosts().isEmpty()) { - List<String> dnsServers = new ArrayList<>(); + StringBuilder dnsServers = new StringBuilder(); for (Host host : model.getNetworkConfiguration().getDns().getServers().getHosts()) { if (host.isSetAddress()) { - dnsServers.add(host.getAddress()); + dnsServers.append(host.getAddress()); } } - entity.setDnsServers(dnsServers); + entity.setDnsServers(dnsServers.toString()); } if (model.getNetworkConfiguration().getDns().isSetSearchDomains() && model.getNetworkConfiguration().getDns().getSearchDomains().isSetHosts() && !model.getNetworkConfiguration().getDns().getSearchDomains().getHosts().isEmpty()) { - List<String> searchDomains = new ArrayList<>(); + StringBuilder searchDomains = new StringBuilder(); for (Host host : model.getNetworkConfiguration().getDns().getSearchDomains().getHosts()) { if (host.isSetAddress()) { - searchDomains.add(host.getAddress()); + searchDomains.append(host.getAddress()); } } - entity.setDnsSearch(searchDomains); + entity.setDnsSearch(searchDomains.toString()); } } } @@ -1029,18 +996,6 @@ if ("root".equals(user.getUserName())) { entity.setRootPassword(user.getPassword()); } - } - } - - if (model.isSetFiles() - && model.getFiles().isSetFiles() - && !model.getFiles().getFiles().isEmpty()) { - entity.setAttachments(new HashMap<String, Attachment>()); - for (File file : model.getFiles().getFiles()) { - Attachment attachment = new Attachment(); - attachment.setAttachmentType(map(PayloadEncoding.fromValue(file.getType()), null)); - attachment.setContent(file.getContent()); - entity.getAttachments().put(file.getName(), attachment); } } diff --git a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java index d206616..9aac4ef 100644 --- a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java +++ b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java @@ -74,7 +74,6 @@ assertEquals(model.getDisplay().isSingleQxlPci(), transform.getDisplay().isSingleQxlPci()); assertEquals(model.getDisplay().isAllowOverride(), transform.getDisplay().isAllowOverride()); assertEquals(model.getDisplay().getKeyboardLayout(), transform.getDisplay().getKeyboardLayout()); - assertEquals(model.getDomain().getName(), transform.getDomain().getName()); assertEquals(model.getTimezone(), transform.getTimezone()); assertEquals(model.getDisplay().isSmartcardEnabled(), transform.getDisplay().isSmartcardEnabled()); assertEquals(model.isDeleteProtected(), transform.isDeleteProtected()); diff --git a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java index 25bbb38..7a4f5f6 100644 --- a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java +++ b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java @@ -129,7 +129,6 @@ assertEquals(model.getDisplay().isAllowOverride(), transform.getDisplay().isAllowOverride()); assertEquals(model.getPlacementPolicy().getHost().getId(), transform.getPlacementPolicy().getHost().getId()); assertTrue(Math.abs(model.getMemoryPolicy().getGuaranteed() - transform.getMemoryPolicy().getGuaranteed()) <= (1024 * 1024)); - assertEquals(model.getDomain().getName(), transform.getDomain().getName()); assertEquals(model.getTimezone(), transform.getTimezone()); assertEquals(model.getDisplay().isSmartcardEnabled(), transform.getDisplay().isSmartcardEnabled()); assertEquals(model.getDisplay().getKeyboardLayout(), transform.getDisplay().getKeyboardLayout()); -- To view, visit http://gerrit.ovirt.org/22794 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ibb5a8fb62df940eabae35c91157920d9b651aa3e Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Shahar Havivi <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
