Moti Asayag has uploaded a new change for review.

Change subject: engine: Retrieve errata from satellite/katello
......................................................................

engine: Retrieve errata from satellite/katello

oVirt engine will provide errata for hosts which are
registered to katello/satellite service via the foreman
provider.

If a host is registered more than once to the katello
service, only its latest registration will be used to
report the available errata.

Feature page:
http://www.ovirt.org/index.php?title=Home/Features/UpgradeManager

Change-Id: I0d2b79d731dcd605aa567e544d09b56090174756
Bug-Url: https://bugzilla.redhat.com/1157377
Signed-off-by: Moti Asayag <masa...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxy.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ContentHost.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ContentHostsWrapper.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ErrataWrapper.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ExternalErratum.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostProviderProxy.java
6 files changed, 226 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/34/37434/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxy.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxy.java
index c76db66..093028b 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxy.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxy.java
@@ -3,10 +3,12 @@
 import java.util.List;
 
 import org.ovirt.engine.core.bll.provider.ProviderProxy;
+import org.ovirt.engine.core.common.businessentities.Erratum;
 import org.ovirt.engine.core.common.businessentities.ExternalComputeResource;
 import org.ovirt.engine.core.common.businessentities.ExternalDiscoveredHost;
 import org.ovirt.engine.core.common.businessentities.ExternalHostGroup;
 import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.businessentities.VdsStatic;
 
 public interface HostProviderProxy extends ProviderProxy {
 
@@ -15,6 +17,7 @@
     List<ExternalDiscoveredHost> getDiscoveredHosts();
     List<ExternalHostGroup> getHostGroups();
     List<ExternalComputeResource> getComputeResources();
+    List<Erratum> getErrataForHost(VdsStatic host);
 
     void provisionHost(VDS vds,
                        ExternalHostGroup hg,
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ContentHost.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ContentHost.java
new file mode 100644
index 0000000..8743478
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ContentHost.java
@@ -0,0 +1,26 @@
+package org.ovirt.engine.core.bll.host.provider.foreman;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class ContentHost implements Serializable {
+    private static final long serialVersionUID = -6496042131555889764L;
+    private String id;
+    private Date created;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public Date getCreated() {
+        return created;
+    }
+
+    public void setCreated(Date created) {
+        this.created = created;
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ContentHostsWrapper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ContentHostsWrapper.java
new file mode 100644
index 0000000..38d8a6a
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ContentHostsWrapper.java
@@ -0,0 +1,16 @@
+package org.ovirt.engine.core.bll.host.provider.foreman;
+
+import org.codehaus.jackson.annotate.JsonProperty;
+
+public class ContentHostsWrapper {
+    @JsonProperty("results")
+    private ContentHost[] results;
+
+    public ContentHost[] getResults() {
+        return results;
+    }
+
+    public void setResults(ContentHost[] hosts) {
+        this.results = hosts;
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ErrataWrapper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ErrataWrapper.java
new file mode 100644
index 0000000..f7e0ddc
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ErrataWrapper.java
@@ -0,0 +1,16 @@
+package org.ovirt.engine.core.bll.host.provider.foreman;
+
+import org.codehaus.jackson.annotate.JsonProperty;
+
+public class ErrataWrapper {
+    @JsonProperty("results")
+    private ExternalErratum[] results;
+
+    public ExternalErratum[] getResults() {
+        return results;
+    }
+
+    public void setResults(ExternalErratum[] errata) {
+        this.results = errata;
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ExternalErratum.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ExternalErratum.java
new file mode 100644
index 0000000..8b047f9
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ExternalErratum.java
@@ -0,0 +1,90 @@
+package org.ovirt.engine.core.bll.host.provider.foreman;
+
+import java.util.Date;
+
+import org.codehaus.jackson.annotate.JsonProperty;
+
+public class ExternalErratum {
+    @JsonProperty("errata_id")
+    private String id;
+    private String title;
+    private Date issued;
+    private String severity;
+    private String description;
+    private String solution;
+    private String summary;
+    private String type;
+    private String packages[];
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public Date getIssued() {
+        return issued;
+    }
+
+    public void setIssued(Date issued) {
+        this.issued = issued;
+    }
+
+    public String getSeverity() {
+        return severity;
+    }
+
+    public void setSeverity(String severity) {
+        this.severity = severity;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getSolution() {
+        return solution;
+    }
+
+    public void setSolution(String solution) {
+        this.solution = solution;
+    }
+
+    public String getSummary() {
+        return summary;
+    }
+
+    public void setSummary(String summary) {
+        this.summary = summary;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String[] getPackages() {
+        return packages;
+    }
+
+    public void setPackages(String[] packages) {
+        this.packages = packages;
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostProviderProxy.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostProviderProxy.java
index 97b0572..c038cd7 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostProviderProxy.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostProviderProxy.java
@@ -6,6 +6,7 @@
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.commons.lang.StringUtils;
@@ -13,12 +14,16 @@
 import org.codehaus.jackson.map.ObjectMapper;
 import org.ovirt.engine.core.bll.host.provider.HostProviderProxy;
 import org.ovirt.engine.core.bll.provider.BaseProviderProxy;
+import org.ovirt.engine.core.common.businessentities.Erratum;
+import org.ovirt.engine.core.common.businessentities.Erratum.ErrataSeverity;
+import org.ovirt.engine.core.common.businessentities.Erratum.ErrataType;
 import org.ovirt.engine.core.common.businessentities.ExternalComputeResource;
 import org.ovirt.engine.core.common.businessentities.ExternalDiscoveredHost;
 import org.ovirt.engine.core.common.businessentities.ExternalHostGroup;
 import org.ovirt.engine.core.common.businessentities.ExternalOperatingSystem;
 import org.ovirt.engine.core.common.businessentities.Provider;
 import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.businessentities.VdsStatic;
 import org.ovirt.engine.core.common.errors.VdcBLLException;
 import org.ovirt.engine.core.common.errors.VdcBllErrors;
 import org.ovirt.engine.core.uutils.crypto.CryptMD5;
@@ -45,6 +50,10 @@
 
     private static final String OPERATION_SYSTEM_ENTRY_POINT = API_ENTRY_POINT 
+ "/operatingsystems";
     private static final String OPERATION_SYSTEM_QUERY = 
OPERATION_SYSTEM_ENTRY_POINT + "?" + JSON_FORMAT;
+
+    private static final String KATELLO_API_ENTRY_POINT = "/katello/api/v2";
+    private static final String CONTENT_HOSTS_ENTRY_POINT = 
KATELLO_API_ENTRY_POINT + "/systems";
+    private static final String CONTENT_HOST_ERRATA_ENTRY_POINT = 
CONTENT_HOSTS_ENTRY_POINT + "/%1$s/errata";
 
     public ForemanHostProviderProxy(Provider<?> hostProvider) {
         super(hostProvider);
@@ -301,5 +310,71 @@
     public void onRemoval() {
     }
 
+    public ContentHost findContentHost(VdsStatic host) {
+        final String hostNameFact = "facts.network.hostname:" + 
host.getHostName();
+        List<ContentHost> contentHosts =
+                runContentHostListMethod(CONTENT_HOSTS_ENTRY_POINT + 
String.format(SEARCH_QUERY_FORMAT, hostNameFact));
 
+        if (contentHosts.isEmpty()) {
+            return null;
+        }
+
+        ContentHost latestRegisteredHost = contentHosts.get(0);
+        for (int i = 1; i < contentHosts.size(); i++) {
+            ContentHost candidateHost = contentHosts.get(i);
+            if 
(candidateHost.getCreated().after(latestRegisteredHost.getCreated())) {
+                latestRegisteredHost = candidateHost;
+            }
+        }
+
+        return latestRegisteredHost;
+    }
+
+    private List<ContentHost> runContentHostListMethod(String relativeUrl) {
+        try {
+            ContentHostsWrapper wrapper =
+                    objectMapper.readValue(runHttpGetMethod(relativeUrl), 
ContentHostsWrapper.class);
+            return Arrays.asList(wrapper.getResults());
+        } catch (IOException e) {
+            return null;
+        }
+    }
+
+    private List<Erratum> runErrataListMethod(String relativeUrl) {
+        try {
+            ErrataWrapper wrapper = 
objectMapper.readValue(runHttpGetMethod(relativeUrl), ErrataWrapper.class);
+            return mapErrata(Arrays.asList(wrapper.getResults()));
+        } catch (IOException e) {
+            return null;
+        }
+    }
+
+    private List<Erratum> mapErrata(List<ExternalErratum> externalErrata) {
+        ArrayList<Erratum> errata = new 
ArrayList<Erratum>(externalErrata.size());
+        for (ExternalErratum externalErratum : externalErrata) {
+            Erratum erratum = new Erratum();
+            erratum.setId(externalErratum.getId());
+            erratum.setIssued(externalErratum.getIssued());
+            erratum.setTitle(externalErratum.getTitle());
+            erratum.setSummary(externalErratum.getSummary());
+            erratum.setSolution(externalErratum.getSolution());
+            erratum.setDescription(externalErratum.getDescription());
+            
erratum.setSeverity(ErrataSeverity.byDescription(externalErratum.getSeverity()));
+            
erratum.setType(ErrataType.byDescription(externalErratum.getType()));
+            erratum.setPackages(Arrays.asList(externalErratum.getPackages()));
+            errata.add(erratum);
+        }
+
+        return errata;
+    }
+
+    @Override
+    public List<Erratum> getErrataForHost(VdsStatic host) {
+        ContentHost contentHost = findContentHost(host);
+        if (contentHost == null) {
+            return Collections.emptyList();
+        }
+
+        return 
runErrataListMethod(String.format(CONTENT_HOST_ERRATA_ENTRY_POINT, 
contentHost.getId()));
+    }
 }


-- 
To view, visit http://gerrit.ovirt.org/37434
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0d2b79d731dcd605aa567e544d09b56090174756
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Moti Asayag <masa...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to