Moti Asayag has uploaded a new change for review.

Change subject: restapi: Support katello errata for vms
......................................................................

restapi: Support katello errata for vms

The katello errata will be reported for vms, registered to katello
server and the guest agent report the appropriate FQDN which identifies
the vm on the katello server as a content host:

  GET /api/vms/{vm:id}/katelloerrata
  GET /api/vms/{vm:id}/katelloerrata/{katelloerrata:id}

There are no other actions supported for host errata via the api.

Feature-page: http://www.ovirt.org/Home/Features/KatelloIntegration
Change-Id: I8cec37546280393725b64506fdd0d6e37c1af410
Bug-Url: https://bugzilla.redhat.com/1157377
Signed-off-by: Moti Asayag <[email protected]>
---
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmResource.java
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/externalhostproviders/BackendVmKatelloErrataResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/externalhostproviders/BackendVmKatelloErratumResource.java
6 files changed, 141 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/21/40721/1

diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmResource.java
index 32787b5..897f8a5 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmResource.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmResource.java
@@ -28,6 +28,7 @@
 import org.ovirt.engine.api.model.CdRom;
 import org.ovirt.engine.api.model.CdRoms;
 import org.ovirt.engine.api.model.VM;
+import 
org.ovirt.engine.api.resource.externalhostproviders.KatelloErrataResource;
 
 @Produces({ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML})
 public interface VmResource extends UpdatableResource<VM>, 
AsynchronouslyCreatedResource, MeasurableResource {
@@ -171,4 +172,6 @@
     @Path("sessions")
     public VmSessionsResource getVmSessionsResource();
 
+    @Path("katelloerrata")
+    public KatelloErrataResource getKatelloErrataResource();
 }
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
index fb81ccc..62ee137 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
@@ -5547,6 +5547,7 @@
           <xs:element name="summary" type="xs:string" minOccurs="0" 
maxOccurs="1"/>
           <xs:element ref="packages" minOccurs="0" maxOccurs="1"/>
           <xs:element ref="host" minOccurs="0" maxOccurs="1"/>
+          <xs:element ref="vm" minOccurs="0" maxOccurs="1"/>
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
index 5e72981..98c3bcc 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
@@ -818,6 +818,13 @@
       signatures:
       - mandatoryArguments: {action.maintenance_enabled: 'xs:boolean'}
         description: enable or disable maintenance mode for this virtual 
machine
+- name: /vms/{vm:id}/katelloerrata|rel=get
+  description: get the list of errata available for the vm
+  request:
+    urlparams:
+      max: {context: matrix, type: 'xs:int', value: 'max results', required: 
false}
+- name: /vms/{vm:id}/katelloerrata/{katelloerratum:id}|rel=get
+  description: get the details of the specific erratum available for the vm
 - name: /disks|rel=get
   description: get a list of disks in the system
   request:
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 0f53f82..08b648a 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
@@ -5,9 +5,11 @@
 
 import java.util.List;
 import java.util.Set;
+
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
+
 import org.ovirt.engine.api.common.util.DetailHelper;
 import org.ovirt.engine.api.common.util.QueryHelper;
 import org.ovirt.engine.api.model.Action;
@@ -38,7 +40,9 @@
 import org.ovirt.engine.api.resource.VmResource;
 import org.ovirt.engine.api.resource.VmSessionsResource;
 import org.ovirt.engine.api.resource.WatchdogsResource;
+import 
org.ovirt.engine.api.resource.externalhostproviders.KatelloErrataResource;
 import org.ovirt.engine.api.restapi.logging.Messages;
+import 
org.ovirt.engine.api.restapi.resource.externalhostproviders.BackendHostKatelloErrataResource;
 import org.ovirt.engine.api.restapi.types.RngDeviceMapper;
 import org.ovirt.engine.api.restapi.types.VmMapper;
 import org.ovirt.engine.api.restapi.util.DisplayHelper;
@@ -647,4 +651,9 @@
     public VmNumaNodesResource getVirtualNumaNodesResource() {
         return inject(new BackendVmNumaNodesResource(guid));
     }
+
+    @Override
+    public KatelloErrataResource getKatelloErrataResource() {
+        return inject(new BackendHostKatelloErrataResource(id));
+    }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/externalhostproviders/BackendVmKatelloErrataResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/externalhostproviders/BackendVmKatelloErrataResource.java
new file mode 100644
index 0000000..6e91ee2
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/externalhostproviders/BackendVmKatelloErrataResource.java
@@ -0,0 +1,65 @@
+package org.ovirt.engine.api.restapi.resource.externalhostproviders;
+
+import java.util.List;
+
+import javax.ws.rs.core.Response;
+
+import org.apache.commons.lang.NotImplementedException;
+import org.ovirt.engine.api.model.KatelloErrata;
+import org.ovirt.engine.api.model.KatelloErratum;
+import org.ovirt.engine.api.model.VM;
+import 
org.ovirt.engine.api.resource.externalhostproviders.KatelloErrataResource;
+import 
org.ovirt.engine.api.resource.externalhostproviders.KatelloErratumResource;
+import org.ovirt.engine.api.restapi.resource.AbstractBackendCollectionResource;
+import org.ovirt.engine.api.restapi.resource.SingleEntityResource;
+import org.ovirt.engine.core.common.businessentities.Erratum;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+
+public class BackendVmKatelloErrataResource extends 
AbstractBackendCollectionResource<KatelloErratum, Erratum> implements 
KatelloErrataResource {
+
+    private String vmId;
+
+    public BackendVmKatelloErrataResource(String vmId) {
+        super(KatelloErratum.class, Erratum.class);
+        this.vmId = vmId;
+    }
+
+    @Override
+    public KatelloErrata list() {
+        return mapCollection(getBackendCollection(VdcQueryType.GetErrataForVm, 
new IdQueryParameters(asGuid(vmId))));
+    }
+
+    private KatelloErrata mapCollection(List<Erratum> entities) {
+        KatelloErrata collection = new KatelloErrata();
+        for (org.ovirt.engine.core.common.businessentities.Erratum entity : 
entities) {
+            collection.getKatelloErrata().add(addLinks(populate(map(entity), 
entity), VM.class));
+        }
+
+        return collection;
+    }
+
+    @SingleEntityResource
+    @Override
+    public KatelloErratumResource getKatelloErratumSubResource(String id) {
+        return inject(new BackendVmKatelloErratumResource(id, vmId));
+    }
+
+    @Override
+    protected Response performRemove(String id) {
+        throw new NotImplementedException();
+    }
+
+    @Override
+    protected KatelloErratum doPopulate(KatelloErratum model, Erratum entity) {
+        return model;
+    }
+
+    @Override
+    protected KatelloErratum addParents(KatelloErratum erratum) {
+        VM vm = new VM();
+        vm.setId(vmId);
+        erratum.setVm(vm);
+        return super.addParents(erratum);
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/externalhostproviders/BackendVmKatelloErratumResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/externalhostproviders/BackendVmKatelloErratumResource.java
new file mode 100644
index 0000000..55821b4
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/externalhostproviders/BackendVmKatelloErratumResource.java
@@ -0,0 +1,56 @@
+package org.ovirt.engine.api.restapi.resource.externalhostproviders;
+
+import static org.ovirt.engine.api.restapi.utils.HexUtils.hex2string;
+
+import org.ovirt.engine.api.model.BaseResource;
+import org.ovirt.engine.api.model.KatelloErratum;
+import org.ovirt.engine.api.model.VM;
+import 
org.ovirt.engine.api.resource.externalhostproviders.KatelloErratumResource;
+import org.ovirt.engine.api.restapi.resource.AbstractBackendSubResource;
+import org.ovirt.engine.core.common.businessentities.Erratum;
+import org.ovirt.engine.core.common.queries.HostErratumQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.compat.Guid;
+
+public class BackendVmKatelloErratumResource extends 
AbstractBackendSubResource<KatelloErratum, Erratum> implements 
KatelloErratumResource {
+
+    private String vmId;
+
+    public BackendVmKatelloErratumResource(String id, String vmId) {
+        super(id, KatelloErratum.class, Erratum.class);
+        this.vmId = vmId;
+    }
+
+    @Override
+    public KatelloErratum get() {
+        return performGet(VdcQueryType.GetErratumByIdForVm,
+                new HostErratumQueryParameters(asGuid(vmId), hex2string(id)),
+                VM.class);
+    }
+
+    @Override
+    protected KatelloErratum doPopulate(KatelloErratum model, Erratum entity) {
+        return model;
+    }
+
+    @Override
+    protected KatelloErratum addParents(KatelloErratum erratum) {
+        VM vm = new VM();
+        vm.setId(vmId);
+        erratum.setVm(vm);
+        return super.addParents(erratum);
+    }
+
+    @Override
+    protected KatelloErratum addLinks(KatelloErratum model,
+            Class<? extends BaseResource> suggestedParent,
+            String... subCollectionMembersToExclude) {
+        return super.addLinks(model, VM.class);
+    }
+
+    @Override
+    protected Guid asGuidOr404(String id) {
+        // The identifier isn't a UUID.
+        return null;
+    }
+}


-- 
To view, visit https://gerrit.ovirt.org/40721
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8cec37546280393725b64506fdd0d6e37c1af410
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Moti Asayag <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to