package org.ovirt.engine.core.bll.host.provider.foreman;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.ovirt.engine.core.bll.host.provider.ContentHostProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* The class supports the Katello 2.1 API
*/
public class KatelloV21Provider extends KatelloProvider implements ContentHostProvider {
private static final Logger log = LoggerFactory.getLogger(KatelloV21Provider.class);
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";
private static final String CONTENT_HOST_ERRATUM_ENTRY_POINT = CONTENT_HOSTS_ENTRY_POINT + "/%1$s/errata/%2$s";
public KatelloV21Provider(ForemanHostProviderProxy provider) {
super(provider);
}
@Override
protected String getContentHostId(String hostName) {
ContentHost contentHost = findContentHost(hostName);
return contentHost == null ? null : contentHost.getUuid();
}
@Override
protected String getContentHostErrataEntryPoint() {
return CONTENT_HOST_ERRATA_ENTRY_POINT;
}
@Override
protected String getContentHostErratumEntryPoint() {
return CONTENT_HOST_ERRATUM_ENTRY_POINT;
}
public boolean isContentHostExist(String hostName) {
return findContentHost(hostName) != null;
}
private ContentHost findContentHost(String hostName) {
final String hostNameFact = "facts.network.hostname:" + hostName;
final List<ContentHost> contentHosts =
runContentHostListMethod(CONTENT_HOSTS_ENTRY_POINT
+ String.format(ForemanHostProviderProxy.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(provider.runHttpGetMethod(relativeUrl), ContentHostsWrapper.class);
return Arrays.asList(wrapper.getResults());
} catch (IOException e) {
log.error("Failed to parse list of hosts retrieved from provider '{}' with error '{}'",
provider.getProvider().getName(),
e.getMessage());
log.debug("Exception: ", e);
return Collections.emptyList();
}
}
}