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 3.0 API
*/
public class KatelloV30Provider extends KatelloProvider implements ContentHostProvider {
private static final Logger log = LoggerFactory.getLogger(KatelloV30Provider.class);
private static final String KATELLO_API_ENTRY_POINT = "/api/v2";
private static final String CONTENT_HOSTS_ENTRY_POINT = KATELLO_API_ENTRY_POINT + "/hosts";
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 KatelloV30Provider(ForemanHostProviderProxy provider) {
super(provider);
}
@Override
protected String getContentHostId(String hostName) {
ContentHostV30 contentHost = findContentHost(hostName);
return contentHost == null ? null : String.valueOf(findContentHost(hostName).getId());
}
@Override
protected String getContentHostErrataEntryPoint() {
return CONTENT_HOST_ERRATA_ENTRY_POINT;
}
@Override
protected String getContentHostErratumEntryPoint() {
return CONTENT_HOST_ERRATUM_ENTRY_POINT;
}
@Override
public boolean isContentHostExist(String hostName) {
return findContentHost(hostName) != null;
}
private ContentHostV30 findContentHost(String hostName) {
final String hostNameFact = "facts.network::hostname=" + hostName;
final List<ContentHostV30> contentHosts =
runContentHostListMethod(CONTENT_HOSTS_ENTRY_POINT
+ String.format(ForemanHostProviderProxy.SEARCH_QUERY_FORMAT, hostNameFact));
if (contentHosts.isEmpty()) {
return null;
}
return contentHosts.get(0);
}
private List<ContentHostV30> runContentHostListMethod(String relativeUrl) {
try {
ContentHostsV30Wrapper wrapper =
objectMapper.readValue(provider.runHttpGetMethod(relativeUrl), ContentHostsV30Wrapper.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();
}
}
}