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