package org.ovirt.engine.core.bll.hostdeploy;
import java.io.File;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Pattern;
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.ConfigValues;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OVirtNodeInfo {
public static class Entry {
public Pattern isoPattern;
public File path;
public String minimumVersion;
public Pattern osPattern;
}
private static final Logger log = LoggerFactory.getLogger(OVirtNodeInfo.class);
private static final String delimiter = ":";
private static volatile OVirtNodeInfo instance;
private List<Entry> info;
public static OVirtNodeInfo getInstance() {
if (instance == null) {
synchronized(OVirtNodeInfo.class) {
if (instance == null) {
instance = new OVirtNodeInfo();
}
}
}
return instance;
}
public static void clearInstance() {
synchronized(OVirtNodeInfo.class) {
instance = null;
}
}
private OVirtNodeInfo() {
final String[] path = Config.resolveOVirtISOsRepositoryPath().split(delimiter);
final String[] minimumVersion = Config.<String> getValue(ConfigValues.OvirtInitialSupportedIsoVersion).split(delimiter);
// Node prefix is part of regex to list ISOs (OvirtIsoPrefix)
// Regex: (ovirt-node)-(.*)\.iso (used to list ISOs)
// Prefix Found: ovirt-node
final String[] regexISO = Config.<String> getValue(ConfigValues.OvirtIsoPrefix).split(delimiter);
// Node OS
final String[] regexNode = Config.<String> getValue(ConfigValues.OvirtNodeOS).split(delimiter);
info = new LinkedList<>();
log.debug("NodeInfo: regexISO length {} minimum length {} path length {} regexNode {}",
regexISO.length, minimumVersion.length, path.length, regexNode.length);
if (regexISO.length != minimumVersion.length ||
regexISO.length != path.length ||
regexISO.length != regexNode.length) {
throw new IllegalArgumentException("Illegal NodeInfo - length");
}
for (int i=0; i < regexISO.length; i++) {
log.debug("NodeInfo: regexISO '{}' path '{}', minimumVersion '{}' regexNode '{}'",
regexISO[i], path[i], minimumVersion[i], regexNode[i]);
Entry entry = new Entry();
entry.isoPattern = Pattern.compile(regexISO[i]);
entry.osPattern = Pattern.compile(regexNode[i], Pattern.CASE_INSENSITIVE);
entry.path = new File(path[i]);
entry.minimumVersion = minimumVersion[i];
info.add(entry);
}
}
public List<Entry> get() {
return info;
}
}