Douglas Schilling Landgraf has uploaded a new change for review.

Change subject: oVirt Node Upgrade: Support N configurations
......................................................................

oVirt Node Upgrade: Support N configurations

To have multiple configurations supported for node upgrade and same code
for upstream/downstream, this patch will include the delimiter ":" to the below
elements in vdc_options and the changes required in Engine source.

- OvirtInitialSupportedIsoVersion
- OvirtIsoPrefix
- oVirtISOsRepositoryPath

Change-Id: Ibfb9dc5d0dc8780b519107acbe0ae866831f782c
Signed-off-by: Douglas Schilling Landgraf <[email protected]>
---
M backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetoVirtISOsQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InstallVdsCommand.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OVirtNodeInfo.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OVirtNodeUpgrade.java
5 files changed, 204 insertions(+), 106 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/56/14756/1

diff --git a/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql 
b/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql
index 14779e6..ee711fa 100644
--- a/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql
+++ b/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql
@@ -340,9 +340,9 @@
 select fn_db_add_config_value('OriginType','OVIRT','general');
 select fn_db_add_config_value('OvfVirtualSystemType','ENGINE','general');
 --Handling The ovirt-node installation files path
-select 
fn_db_add_config_value('OvirtInitialSupportedIsoVersion','2.5.5','general');
-select fn_db_add_config_value('OvirtIsoPrefix','ovirt-node','general');
-select 
fn_db_add_config_value('oVirtISOsRepositoryPath','/usr/share/ovirt-node-iso','general');
+select 
fn_db_add_config_value('OvirtInitialSupportedIsoVersion','5.8:2.5.5','general');
+select fn_db_add_config_value('OvirtIsoPrefix','rhev:ovirt-node','general');
+select 
fn_db_add_config_value('oVirtISOsRepositoryPath','/usr/share/rhev-hypervisor:/usr/share/ovirt-node-iso','general');
 select 
fn_db_add_config_value('oVirtUpgradeScriptName','/usr/share/vdsm-reg/vdsm-upgrade','general');
 select 
fn_db_add_config_value('oVirtUploadPath','/data/updates/ovirt-node-image.iso','general');
 select fn_db_add_config_value('OvfUpdateIntervalInMinutes','60','general');
@@ -472,10 +472,7 @@
 select fn_db_add_config_value('VDSAttemptsToResetCount','2','general');
 select fn_db_add_config_value('VdsCertificateValidityInYears','5','general');
 select fn_db_add_config_value('vdsConnectionTimeout','180','general');
-select 
fn_db_add_config_value('VdsFenceOptionMapping','alom:secure=secure,port=ipport;apc:secure=secure,port=ipport,slot=port;bladecenter:secure=secure,port=ipport,slot=port;drac5:secure=secure,port=ipport;eps:slot=port;ilo:secure=ssl,port=ipport;ipmilan:;rsa:secure=secure,port=ipport;rsb:;wti:secure=secure,port=ipport,slot=port','3.0');
-select 
fn_db_add_config_value('VdsFenceOptionMapping','alom:secure=secure,port=ipport;apc:secure=secure,port=ipport,slot=port;bladecenter:secure=secure,port=ipport,slot=port;drac5:secure=secure,port=ipport;eps:slot=port;ilo:secure=ssl,port=ipport;ipmilan:;rsa:secure=secure,port=ipport;rsb:;wti:secure=secure,port=ipport,slot=port','3.1');
-select 
fn_db_add_config_value('VdsFenceOptionMapping','apc:secure=secure,port=ipport,slot=port;apc_snmp:secure=secure,port=ipport,slot=port;bladecenter:secure=secure,port=ipport,slot=port;cisco_ucs:secure=ssl,slot=port;drac5:secure=secure,slot=port;eps:slot=port;ilo:secure=ssl,port=ipport;ipmilan:;ilo2:secure=ssl,port=ipport;ipmilan:;ilo3:;ilo4:;rsa:secure=secure,port=ipport;rsb:;wti:secure=secure,port=ipport,slot=port','3.2');
-select 
fn_db_add_config_value('VdsFenceOptionMapping','apc:secure=secure,port=ipport,slot=port;apc_snmp:secure=secure,port=ipport,slot=port;bladecenter:secure=secure,port=ipport,slot=port;cisco_ucs:secure=ssl,slot=port;drac5:secure=secure,slot=port;eps:slot=port;ilo:secure=ssl,port=ipport;ipmilan:;ilo2:secure=ssl,port=ipport;ipmilan:;ilo3:;ilo4:;rsa:secure=secure,port=ipport;rsb:;wti:secure=secure,port=ipport,slot=port','3.3');
+select 
fn_db_add_config_value('VdsFenceOptionMapping','apc:secure=secure,port=ipport,slot=port;apc_snmp:secure=secure,port=ipport,slot=port;bladecenter:secure=secure,port=ipport,slot=port;cisco_ucs:secure=ssl,slot=port;drac5:secure=secure,slot=port;eps:slot=port;ilo:secure=ssl,port=ipport;ipmilan:;ilo2:secure=ssl,port=ipport;ipmilan:;ilo3:;ilo4:;rsa:secure=secure,port=ipport;rsb:;wti:secure=secure,port=ipport,slot=port','general');
 select fn_db_add_config_value('VdsFenceOptions','','general');
 select 
fn_db_add_config_value('VdsFenceOptionTypes','secure=bool,port=int,slot=int','general');
 select 
fn_db_add_config_value('VdsFenceType','alom,apc,bladecenter,drac5,eps,ilo,ilo3,ipmilan,rsa,rsb,wti,cisco_ucs','3.0');
@@ -602,9 +599,9 @@
 select fn_db_update_config_value('MigrationSupportForNativeUsb','false','3.1');
 select fn_db_update_config_value('MigrationSupportForNativeUsb','true','3.2');
 select fn_db_update_config_value('MinimalETLVersion','3.2.0','general');
-select 
fn_db_update_config_value('OvirtInitialSupportedIsoVersion','2.5.5','general');
-select fn_db_update_config_value('OvirtIsoPrefix','ovirt-node','general');
-select 
fn_db_update_config_value('oVirtISOsRepositoryPath','/usr/share/ovirt-node-iso','general');
+select 
fn_db_update_config_value('OvirtInitialSupportedIsoVersion','5.8:2.5.5','general');
+select fn_db_update_config_value('OvirtIsoPrefix','rhev:ovirt-node','general');
+select 
fn_db_update_config_value('oVirtISOsRepositoryPath','/usr/share/rhev-hypervisor:/usr/share/ovirt-node-iso','general');
 select fn_db_update_config_value('PostgresPagingSyntax','OFFSET (%1$s -1) 
LIMIT %2$s','general');
 select fn_db_update_config_value('PostgresSearchTemplate','SELECT * FROM 
(%2$s) %1$s) as T1 %3$s','general');
 select 
fn_db_update_config_value('RhevhLocalFSPath','/data/images/rhev','general');
@@ -617,10 +614,7 @@
 select fn_db_update_config_value('SupportedVDSMVersions','4.9,4.10','general');
 select fn_db_update_config_value('VdcVersion','3.3.0.0','general');
 select fn_db_update_config_value('ProductRPMVersion','3.3.0.0','general');
-select 
fn_db_update_config_value('VdsFenceOptionMapping','alom:secure=secure,port=ipport;apc:secure=secure,port=ipport,slot=port;bladecenter:secure=secure,port=ipport,slot=port;drac5:secure=secure,port=ipport;eps:slot=port;ilo:secure=ssl,port=ipport;ipmilan:;rsa:secure=secure,port=ipport;rsb:;wti:secure=secure,port=ipport,slot=port','3.0');
-select 
fn_db_update_config_value('VdsFenceOptionMapping','alom:secure=secure,port=ipport;apc:secure=secure,port=ipport,slot=port;bladecenter:secure=secure,port=ipport,slot=port;drac5:secure=secure,port=ipport;eps:slot=port;ilo:secure=ssl,port=ipport;ipmilan:;rsa:secure=secure,port=ipport;rsb:;wti:secure=secure,port=ipport,slot=port','3.1');
-select 
fn_db_update_config_value('VdsFenceOptionMapping','apc:secure=secure,port=ipport,slot=port;apc_snmp:secure=secure,port=ipport,slot=port;bladecenter:secure=secure,port=ipport,slot=port;cisco_ucs:secure=ssl,slot=port;drac5:secure=secure,slot=port;eps:slot=port;ilo:secure=ssl,port=ipport;ipmilan:;ilo2:secure=ssl,port=ipport;ipmilan:;ilo3:;ilo4:;rsa:secure=secure,port=ipport;rsb:;wti:secure=secure,port=ipport,slot=port','3.2');
-select 
fn_db_update_config_value('VdsFenceOptionMapping','apc:secure=secure,port=ipport,slot=port;apc_snmp:secure=secure,port=ipport,slot=port;bladecenter:secure=secure,port=ipport,slot=port;cisco_ucs:secure=ssl,slot=port;drac5:secure=secure,slot=port;eps:slot=port;ilo:secure=ssl,port=ipport;ipmilan:;ilo2:secure=ssl,port=ipport;ipmilan:;ilo3:;ilo4:;rsa:secure=secure,port=ipport;rsb:;wti:secure=secure,port=ipport,slot=port','3.3');
+select 
fn_db_update_config_value('VdsFenceOptionMapping','apc:secure=secure,port=ipport,slot=port;apc_snmp:secure=secure,port=ipport,slot=port;bladecenter:secure=secure,port=ipport,slot=port;cisco_ucs:secure=ssl,slot=port;drac5:secure=secure,slot=port;eps:slot=port;ilo:secure=ssl,port=ipport;ipmilan:;ilo2:secure=ssl,port=ipport;ipmilan:;ilo3:;ilo4:;rsa:secure=secure,port=ipport;rsb:;wti:secure=secure,port=ipport,slot=port','general');
 select 
fn_db_update_config_value('VdsFenceType','alom,apc,bladecenter,drac5,eps,ilo,ilo3,ipmilan,rsa,rsb,wti,cisco_ucs','3.0');
 select 
fn_db_update_config_value('VdsFenceType','alom,apc,bladecenter,drac5,eps,ilo,ilo3,ipmilan,rsa,rsb,wti,cisco_ucs','3.1');
 select 
fn_db_update_config_value('VdsFenceType','apc,apc_snmp,bladecenter,cisco_ucs,drac5,eps,ilo,ilo2,ilo3,ilo4,ipmilan,rsa,rsb,wti','3.2');
@@ -689,7 +683,6 @@
 select fn_db_delete_config_value('LogVdsRegistration','general');
 select fn_db_delete_config_value('LogXmlRpcData','general');
 select fn_db_delete_config_value('NetConsolePort','general');
-select fn_db_delete_config_value('VdsFenceOptionMapping','general');
 -- removing power client
 select fn_db_delete_config_value('PowerClientAllowUsingAsIRS','general');
 select fn_db_delete_config_value('PowerClientGUI','general');
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetoVirtISOsQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetoVirtISOsQuery.java
index cf6cdbd..4ed53ae 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetoVirtISOsQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetoVirtISOsQuery.java
@@ -15,8 +15,6 @@
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSType;
-import org.ovirt.engine.core.common.config.Config;
-import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.queries.VdsIdParametersBase;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.RpmVersion;
@@ -41,78 +39,91 @@
     @Override
     protected void executeQueryCommand() {
 
+        OVirtNodeInfo Info = new OVirtNodeInfo();
         RpmVersion vdsOsVersion = getOvirtOsVersion();
 
         List<RpmVersion> availableISOsList = new ArrayList<RpmVersion>();
-        File directory = new File(Config.resolveOVirtISOsRepositoryPath());
+        List<String> reposUpgrade = new ArrayList<String>();
 
-        if (directory.isDirectory()) {
-            List<String> listOfIsoFiles = getListOfIsoFiles(directory);
-            if (!listOfIsoFiles.isEmpty()) {
+        String tempRepo[] = Info.getISOsPath().split(Info.getInfoDelimiter());
+        for(int i=0; i < tempRepo.length; i++)
+            reposUpgrade.add(tempRepo[i]);
 
-                File[] ovirtVersionFiles = filterOvirtFiles(directory, 
isoVersionPattern);
+        for (String repo: reposUpgrade) {
+            File directory = new File(repo);
 
-                for (File versionFile : ovirtVersionFiles) {
-                    try {
-                        IsoData isoData = new IsoData();
-                        isoData.setVersion(readIsoVersion(versionFile));
-                        String isoVersionText = isoData.getVersion();
-                        
isoData.setVdsmCompitibilityVersion(readVdsmCompatibiltyVersion((
-                                
versionFile.getAbsolutePath().replace(OVIRT_ISO_VERSION_PREFIX,
-                                        
OVIRT_ISO_VDSM_COMPATIBILITY_PREFIX))));
+            log.infoFormat("ISO Path: {0}", repo);
+            if (directory.isDirectory()) {
+                List<String> listOfIsoFiles = getListOfIsoFiles(directory, 
Info);
+                log.infoFormat("List of ISOs: {0}", listOfIsoFiles);
 
-                        if (StringUtils.isBlank(isoVersionText)) {
-                            log.debugFormat("Iso version file {0} is empty.", 
versionFile.getAbsolutePath());
-                            continue;
-                        }
+                if (!listOfIsoFiles.isEmpty()) {
+                    File[] ovirtVersionFiles = filterOvirtFiles(directory, 
isoVersionPattern);
 
-                        String[] versionParts = isoVersionText.split(",");
-                        if (versionParts.length < 2) {
-                            log.debugFormat("Iso version file {0} contains 
invalid content. Excpected: <major-version>,<release> format.",
-                                    versionFile.getAbsolutePath());
-                            continue;
-                        }
+                    for (File versionFile : ovirtVersionFiles) {
+                        try {
+                            IsoData isoData = new IsoData();
+                            isoData.setVersion(readIsoVersion(versionFile));
+                            String isoVersionText = isoData.getVersion();
+                            
isoData.setVdsmCompitibilityVersion(readVdsmCompatibiltyVersion((
+                                    
versionFile.getAbsolutePath().replace(OVIRT_ISO_VERSION_PREFIX,
+                                            
OVIRT_ISO_VDSM_COMPATIBILITY_PREFIX))));
 
-                        String majorVersionStr = versionParts[0];
-                        String releaseStr = versionParts[1];
-                        String isoFileName = 
getIsoFileNameByVersion(listOfIsoFiles, majorVersionStr, releaseStr);
-                        if (isoFileName == null) {
-                            log.debugFormat("Iso version file {0} has no 
matching iso file searched by version parts: {1} and {2}.",
-                                    versionFile.getAbsolutePath(),
-                                    majorVersionStr,
-                                    releaseStr);
-                            continue;
-                        }
+                            if (StringUtils.isBlank(isoVersionText)) {
+                                log.infoFormat("Iso version file {0} is 
empty.", versionFile.getAbsolutePath());
+                                continue;
+                            }
 
-                        RpmVersion isoVersion = 
parseIsoFileVersion(isoFileName, majorVersionStr);
-                        boolean shouldAdd = false;
+                            String[] versionParts = isoVersionText.split(",");
+                            if (versionParts.length < 2) {
+                                log.infoFormat("Iso version file {0} contains 
invalid content. Excpected: <major-version>,<release> format.",
+                                        versionFile.getAbsolutePath());
+                                continue;
+                            }
 
-                        if (isoVersion != null && 
isIsoVersionSupported(isoVersion)) {
-                            if (isoData.getVdsmCompatibilityVersion() != null) 
{
-                                shouldAdd = 
isIsoCompatibleForUpgradeByClusterVersion(isoData);
-                            } else if (vdsOsVersion != null) {
-                                if 
(VdsHandler.isIsoVersionCompatibleForUpgrade(vdsOsVersion, isoVersion)) {
+                            String majorVersionStr = versionParts[0];
+                            String releaseStr = versionParts[1];
+                            String isoFileName = 
getIsoFileNameByVersion(listOfIsoFiles, majorVersionStr, releaseStr);
+
+                            if (isoFileName == null) {
+                                log.infoFormat("Iso version file {0} has no 
matching iso file searched by version parts: {1} and {2}.",
+                                        versionFile.getAbsolutePath(),
+                                        majorVersionStr,
+                                        releaseStr);
+                                continue;
+                            }
+
+                            RpmVersion isoVersion = 
parseIsoFileVersion(isoFileName, majorVersionStr, Info);
+                            boolean shouldAdd = false;
+
+                            if (isoVersion != null && 
isIsoVersionSupported(isoVersion, Info)) {
+                                if (isoData.getVdsmCompatibilityVersion() != 
null) {
+                                    shouldAdd = 
isIsoCompatibleForUpgradeByClusterVersion(isoData);
+                                } else if (vdsOsVersion != null) {
+                                    if 
(VdsHandler.isIsoVersionCompatibleForUpgrade(vdsOsVersion, isoVersion)) {
+                                        shouldAdd = true;
+                                    }
+                                } else {
                                     shouldAdd = true;
                                 }
-                            } else {
-                                shouldAdd = true;
                             }
+
+                            if (shouldAdd) {
+                                availableISOsList.add(isoVersion);
+                            }
+                        } catch (RuntimeException e) {
+                            log.errorFormat("Failed to parse ovirt iso version 
{0} with error {1}",
+                                    versionFile.getAbsolutePath(),
+                                    ExceptionUtils.getMessage(e));
                         }
 
-                        if (shouldAdd) {
-                            availableISOsList.add(isoVersion);
-                        }
-                    } catch (RuntimeException e) {
-                        log.errorFormat("Failed to parse ovirt iso version {0} 
with error {1}",
-                                versionFile.getAbsolutePath(),
-                                ExceptionUtils.getMessage(e));
                     }
-
                 }
+            } else {
+                log.errorFormat("ovirt ISOs directory not found. Search in: 
{0}", directory.getPath());
             }
-        } else {
-            log.errorFormat("ovirt ISOs directory not found. Search in: {0}", 
directory.getPath());
         }
+        log.infoFormat("availableISOsList {0}", availableISOsList);
         Collections.sort(availableISOsList);
         getQueryReturnValue().setReturnValue(availableISOsList);
     }
@@ -142,11 +153,20 @@
         return vdsOsVersion;
     }
 
-    private RpmVersion parseIsoFileVersion(String isoFileName, String 
majorVersionStr) {
+    private RpmVersion parseIsoFileVersion(String isoFileName, String 
majorVersionStr, OVirtNodeInfo Info) {
         RpmVersion isoVersion = null;
         try {
             String rpmLike = isoFileName.replaceFirst(majorVersionStr + "-", 
majorVersionStr + ".");
-            isoVersion = new RpmVersion(rpmLike, getOvirtIsoPrefix(), true);
+            String ignorePrefix = null;
+            String tempPrefix[] = 
Info.getPrefixNode().split(Info.getInfoDelimiter());
+
+            for(int i=0; i < tempPrefix.length; i++) {
+                if (rpmLike.toLowerCase().contains(tempPrefix[i])) {
+                    ignorePrefix = tempPrefix[i];
+                }
+            }
+
+            isoVersion = new RpmVersion(rpmLike, ignorePrefix, true);
             isoVersion.setRpmName(isoFileName);
         } catch (RuntimeException e) {
             log.errorFormat("Failed to extract RpmVersion for iso file {0} 
with major version {1} due to {2}",
@@ -167,9 +187,9 @@
         return null;
     }
 
-    private static List<String> getListOfIsoFiles(File directory) {
+    private List<String> getListOfIsoFiles(File directory, OVirtNodeInfo Info) 
{
         List<String> isoFileList = new ArrayList<String>();
-        File[] filterOvirtFiles = filterOvirtFiles(directory, getIsoPattern());
+        File[] filterOvirtFiles = filterOvirtFiles(directory, 
getIsoPattern(Info));
         for (File file : filterOvirtFiles) {
             isoFileList.add(file.getName());
         }
@@ -244,9 +264,18 @@
         });
     }
 
-    private static boolean isIsoVersionSupported(Version isoVersion) {
-        Version supported = new Version(Config.<String> 
GetValue(ConfigValues.OvirtInitialSupportedIsoVersion));
-        return isoVersion.compareTo(supported) >= 0;
+    private boolean isIsoVersionSupported(Version isoVersion, OVirtNodeInfo 
Info) {
+        String supportedVersions[] = 
Info.getMinimumVersion().split(Info.getInfoDelimiter());
+        boolean result = false;
+
+        for(int i=0; i < supportedVersions.length; i++) {
+            Version supported = new Version(supportedVersions[i]);
+            if (isoVersion.compareTo(supported) > 0) {
+                result = true;
+                break;
+            }
+        }
+        return result;
     }
 
     public VDS getVdsByVdsId(Guid vdsId) {
@@ -258,18 +287,13 @@
         return vds;
     }
 
-    /** @return The prefix for oVirt ISO files, from the configuration */
-    private static String getOvirtIsoPrefix() {
-        return Config.<String> GetValue(ConfigValues.OvirtIsoPrefix);
-    }
-
     /**
      * Returns the pattern for ISO files.
      * Since the prefix from the configuration may change (reloadable 
configuration), it is checked each time.
      * A cached version of pattern is saved, though, to avoid the overhead of 
re-compiling it.
      */
-    private static Pattern getIsoPattern() {
-        String expectedPattern = getOvirtIsoPrefix() + "-.*.iso";
+    private Pattern getIsoPattern(OVirtNodeInfo Info) {
+        String expectedPattern = "^(" + 
Info.getPrefixNode().replace(Info.getInfoDelimiter(), "|") + ")" + ".*.iso";
         if (isoPattern == null || 
!expectedPattern.equals(isoPattern.toString())) {
             isoPattern = Pattern.compile(expectedPattern);
         }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InstallVdsCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InstallVdsCommand.java
index b50a699..cf0d25d 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InstallVdsCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InstallVdsCommand.java
@@ -2,14 +2,15 @@
 
 import java.io.File;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.action.InstallVdsParameters;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
 import org.ovirt.engine.core.common.businessentities.VDSType;
-import org.ovirt.engine.core.common.config.Config;
-import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.RpmVersion;
 import org.ovirt.engine.core.dal.VdcBllMessages;
@@ -22,6 +23,9 @@
     private static Log log = LogFactory.getLog(InstallVdsCommand.class);
     private static final String GENERIC_ERROR = "Please refer to engine.log 
and log files under /var/log/ovirt-engine/host-deploy/ on the engine for 
further details.";
     protected String _failureMessage = null;
+    protected String _isoFullPath = null;
+    protected String _uploadPath = null;
+    protected String _upgradeScriptName = null;
 
     public InstallVdsCommand(T parameters) {
         super(parameters);
@@ -30,6 +34,13 @@
     @Override
     protected boolean canDoAction() {
         boolean retValue=true;
+
+        OVirtNodeInfo Info = new OVirtNodeInfo();
+
+        _uploadPath = Info.getUploadPath();
+        _upgradeScriptName = Info.getUpgradeScriptName();
+
+
         if (getVdsId() == null || getVdsId().equals(Guid.Empty)) {
             addCanDoActionMessage(VdcBllMessages.VDS_INVALID_SERVER_ID);
             retValue = false;
@@ -43,12 +54,12 @@
                 
addCanDoActionMessage(VdcBllMessages.VDS_CANNOT_INSTALL_STATUS_ILLEGAL);
                 retValue = false;
             }
-            if (!isIsoFileValid(isoFile)) {
+            if (!isIsoFileValid(isoFile, Info)) {
                 
addCanDoActionMessage(VdcBllMessages.VDS_CANNOT_INSTALL_MISSING_IMAGE_FILE);
                 retValue = false;
             } else {
                 RpmVersion ovirtHostOsVersion = 
VdsHandler.getOvirtHostOsVersion(getVds());
-                if (ovirtHostOsVersion != null && 
!isIsoVersionCompatible(ovirtHostOsVersion, isoFile)) {
+                if (ovirtHostOsVersion != null && 
!isIsoVersionCompatible(ovirtHostOsVersion, isoFile, Info)) {
                     
addCanDoActionMessage(VdcBllMessages.VDS_CANNOT_UPGRADE_BETWEEN_MAJOR_VERSION);
                     addCanDoActionMessage(String.format("$IsoVersion %1$s", 
ovirtHostOsVersion.getMajor()));
                     retValue = false;
@@ -58,9 +69,31 @@
         return retValue;
     }
 
-    private boolean isIsoFileValid(String isoFile) {
-        return StringUtils.isNotBlank(isoFile)
-                && new File(Config.resolveOVirtISOsRepositoryPath() + 
File.separator + isoFile).exists();
+    private boolean isIsoFileValid(String isoFile, OVirtNodeInfo Info) {
+        boolean result = false;
+        String pathRepo = null;
+
+        List<String> reposUpgrade = new ArrayList<String>();
+
+        String tempRepo[] = Info.getISOsPath().split(Info.getInfoDelimiter());
+        for(int i=0; i < tempRepo.length; i++)
+            reposUpgrade.add(tempRepo[i]);
+
+        if (StringUtils.isNotBlank(isoFile)) {
+            for (String repo: reposUpgrade) {
+                pathRepo = repo + "/" + isoFile;
+                File path = new File(pathRepo);
+                log.infoFormat("isIsoFileValid - Validating ISO path: {0}", 
pathRepo);
+                if (path.exists()) {
+                    _isoFullPath = pathRepo;
+                    result = true;
+                    log.infoFormat("isIsoFileValid: ISO found: {0}", pathRepo);
+                    break;
+                }
+            }
+        }
+        log.infoFormat("isIsoFileValid: result {0}", result);
+        return result;
     }
 
     @Override
@@ -88,7 +121,9 @@
                 T parameters = getParameters();
                 upgrade = new OVirtNodeUpgrade(
                     getVds(),
-                    parameters.getoVirtIsoFile()
+                    _isoFullPath,
+                    _uploadPath,
+                    _upgradeScriptName
                 );
                 upgrade.setCorrelationId(getCorrelationId());
                 log.infoFormat(
@@ -205,12 +240,12 @@
      *            the ISO file for upgrade
      * @return true if ISO is compatible with oVirt node OS version or if 
failed to resolve Host or RHEV-H version
      */
-    public boolean isIsoVersionCompatible(RpmVersion ovirtOsVersion, String 
isoFile) {
+    public boolean isIsoVersionCompatible(RpmVersion ovirtOsVersion, String 
isoFile, OVirtNodeInfo Info) {
         boolean retValue = true;
         if (ovirtOsVersion != null) {
             try {
                 RpmVersion isoVersion =
-                        new RpmVersion(isoFile, Config.<String> 
GetValue(ConfigValues.OvirtIsoPrefix), true);
+                        new RpmVersion(isoFile, Info.getPrefixNode(), true);
 
                 if 
(!VdsHandler.isIsoVersionCompatibleForUpgrade(ovirtOsVersion, isoVersion)) {
                     retValue = false;
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OVirtNodeInfo.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OVirtNodeInfo.java
new file mode 100644
index 0000000..3ae117a
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OVirtNodeInfo.java
@@ -0,0 +1,46 @@
+package org.ovirt.engine.core.bll;
+
+import org.ovirt.engine.core.common.config.Config;
+import org.ovirt.engine.core.common.config.ConfigValues;
+
+public class OVirtNodeInfo {
+    private String prefixNode;
+    private String minimumVersion;
+    private String ISOsPath;
+    private String infoDelimiter;
+    private String uploadPath;
+    private String upgradeScriptName;
+
+    public OVirtNodeInfo() {
+        this.prefixNode = Config.<String> 
GetValue(ConfigValues.OvirtIsoPrefix);
+        this.minimumVersion = Config.<String> 
GetValue(ConfigValues.OvirtInitialSupportedIsoVersion);
+        this.ISOsPath = Config.resolveOVirtISOsRepositoryPath();
+        this.uploadPath = Config.<String> 
GetValue(ConfigValues.oVirtUploadPath);
+        this.upgradeScriptName = Config.<String> 
GetValue(ConfigValues.oVirtUpgradeScriptName);
+        this.infoDelimiter = ":";
+    }
+
+    public String getUploadPath() {
+        return this.uploadPath;
+    }
+
+    public String getUpgradeScriptName() {
+        return this.upgradeScriptName;
+    }
+
+    public String getInfoDelimiter() {
+        return this.infoDelimiter;
+    }
+
+    public String getPrefixNode() {
+        return this.prefixNode;
+    }
+
+    public String getISOsPath() {
+        return this.ISOsPath;
+    }
+
+    public String getMinimumVersion() {
+        return this.minimumVersion;
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OVirtNodeUpgrade.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OVirtNodeUpgrade.java
index 68edfbd..13f66f2 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OVirtNodeUpgrade.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OVirtNodeUpgrade.java
@@ -11,8 +11,6 @@
 
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
-import org.ovirt.engine.core.common.config.Config;
-import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
@@ -40,6 +38,9 @@
 
     private VDS _vds;
     private String _iso;
+    private String _uploadPath;
+    private String _upgradeScriptName;
+
 
     private Exception _failException = null;
 
@@ -94,9 +95,12 @@
      * @param vds vds to install.
      * @param iso image to send.
      */
-    public OVirtNodeUpgrade(VDS vds, String iso) {
+    public OVirtNodeUpgrade(VDS vds, String iso, String uploadPath, String 
upgradeScriptName) {
         _vds = vds;
-        _iso = Config.resolveOVirtISOsRepositoryPath() + File.separator + iso;
+        _iso = iso;
+        _uploadPath = uploadPath;
+        _upgradeScriptName = upgradeScriptName;
+
 
         _messages = new InstallerMessages(_vds);
         _dialog = new EngineSSHDialog();
@@ -155,14 +159,12 @@
             );
             _dialog.authenticate();
 
-            String dest = Config.<String> 
GetValue(ConfigValues.oVirtUploadPath);
-
             _messages.post(
                 InstallerMessages.Severity.INFO,
                 String.format(
                     "Sending file %1$s to %2$s",
                     _iso,
-                    dest
+                    _uploadPath
                 )
             );
 
@@ -188,7 +190,7 @@
                 },
                 String.format(
                     "mkdir -p '%1$s'",
-                    new File(dest).getParent()
+                    new File(_uploadPath).getParent()
                 ),
                 null
             );
@@ -198,22 +200,20 @@
             }
             _dialog.sendFile(
                 _iso,
-                dest
+                _uploadPath
             );
-
-            String command = Config.<String> 
GetValue(ConfigValues.oVirtUpgradeScriptName);
 
             _messages.post(
                 InstallerMessages.Severity.INFO,
                 String.format(
                     "Executing %1$s",
-                    command
+                    _upgradeScriptName
                 )
             );
 
             _dialog.executeCommand(
                 this,
-                command,
+                _upgradeScriptName,
                 null
             );
 


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibfb9dc5d0dc8780b519107acbe0ae866831f782c
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Douglas Schilling Landgraf <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to