/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.computesystemcontroller.impl; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Component; import com.emc.aix.model.AixVersion; import com.emc.hpux.model.HpuxVersion; import com.emc.storageos.coordinator.client.service.CoordinatorClient; import com.emc.storageos.util.VersionChecker; import com.iwave.ext.linux.model.LinuxVersion; import com.iwave.ext.vmware.EsxVersion; import com.iwave.ext.vmware.VcenterVersion; import com.iwave.ext.windows.model.wmi.WindowsVersion; @Component public class ComputeSystemDiscoveryVersionValidator { private static final String WINDOWS_MIN_PROP = "compute_windows_version"; private static final String REDHAT_MIN_PROP = "compute_redhat_linux_version"; private static final String SUSE_MIN_PROP = "compute_suse_linux_version"; private static final String VCENTER_MIN_PROP = "compute_vmware_vcenter_version"; private static final String AIX_MIN_PROP = "compute_aix_version"; private static final String AIXVIO_MIN_PROP = "compute_aixvio_version"; private static final String VMWARE_ESX_MIN_PROP = "compute_vmware_esx_version"; private static final String HPUX_MIN_PROP = "compute_hpux_version"; private CoordinatorClient coordinatorClient; private WindowsVersion windowsVersion; private LinuxVersion redhatVersion; private LinuxVersion suseVersion; private VcenterVersion vcenterVersion; private AixVersion aixVersion; private AixVersion aixVioVersion; private EsxVersion esxVersion; private HpuxVersion hpuxVersion; public boolean isValidVersionNumber(String versionNumber) { boolean result = false; if (!StringUtils.isEmpty(versionNumber)) { String testVersionNumber = versionNumber.trim(); if (testVersionNumber.endsWith(".")) { return false; } String[] parts = testVersionNumber.split("\\."); for (String part : parts) { if (StringUtils.isEmpty(part) || !StringUtils.isNumeric(part)) { return false; } } return true; } return result; } private String getSysProperty(String property) { String result = null; Map<String, String> properties = coordinatorClient.getPropertyInfo().getAllProperties(); for (String key : properties.keySet()) { if (key != null && key.equals(property)) { return properties.get(key); } } return result; } public WindowsVersion getWindowsMinimumVersion(boolean forceLookup) { if (forceLookup || windowsVersion == null) { String versionProp = this.getSysProperty(WINDOWS_MIN_PROP); if (isValidVersionNumber(versionProp)) { windowsVersion = new WindowsVersion(versionProp, ""); } else { windowsVersion = null; throw new IllegalStateException(String.format("System property for Windows Version Number(%s) is invalid - value is '%s'", WINDOWS_MIN_PROP, versionProp)); } } return windowsVersion; } public HpuxVersion getHpuxMinimumVersion(boolean forceLookup) { if (forceLookup || hpuxVersion == null) { String versionProp = this.getSysProperty(HPUX_MIN_PROP); if (isValidVersionNumber(versionProp)) { hpuxVersion = new HpuxVersion(versionProp); } else { hpuxVersion = null; throw new IllegalStateException(String.format("System property for HPUX Version Number(%s) is invalid - value is '%s'", HPUX_MIN_PROP, versionProp)); } } return hpuxVersion; } public AixVersion getAixMinimumVersion(boolean forceLookup) { if (forceLookup || aixVersion == null) { String versionProp = this.getSysProperty(AIX_MIN_PROP); if (isValidVersionNumber(versionProp)) { aixVersion = new AixVersion(versionProp); } else { aixVersion = null; throw new IllegalStateException(String.format("System property for AIX Version Number(%s) is invalid - value is '%s'", AIX_MIN_PROP, versionProp)); } } return aixVersion; } public AixVersion getAixVioMinimumVersion(boolean forceLookup) { if (forceLookup || aixVioVersion == null) { String versionProp = this.getSysProperty(AIXVIO_MIN_PROP); if (isValidVersionNumber(versionProp)) { aixVioVersion = new AixVersion(versionProp); } else { aixVioVersion = null; throw new IllegalStateException(String.format("System property for AIX VIO Version Number(%s) is invalid - value is '%s'", AIXVIO_MIN_PROP, versionProp)); } } return aixVioVersion; } public LinuxVersion getRedhatLinuxMinimumVersion(boolean forceLookup) { if (forceLookup || redhatVersion == null) { String versionProp = this.getSysProperty(REDHAT_MIN_PROP); if (isValidVersionNumber(versionProp)) { redhatVersion = new LinuxVersion(LinuxVersion.LinuxDistribution.REDHAT, versionProp); } else { redhatVersion = null; throw new IllegalStateException(String.format( "System property for Redhat Linux Version Number(%s) is invalid - value is '%s'", REDHAT_MIN_PROP, versionProp)); } } return redhatVersion; } public LinuxVersion getSuSELinuxMinimumVersion(boolean forceLookup) { if (forceLookup || suseVersion == null) { String versionProp = this.getSysProperty(SUSE_MIN_PROP); if (isValidVersionNumber(versionProp)) { suseVersion = new LinuxVersion(LinuxVersion.LinuxDistribution.SUSE, versionProp); } else { suseVersion = null; throw new IllegalStateException(String.format( "System property for SuSE Enterprise Linux Version Number(%s) is invalid - value is '%s'", SUSE_MIN_PROP, versionProp)); } } return suseVersion; } public VcenterVersion getVcenterMinimumVersion(boolean forceLookup) { if (forceLookup || vcenterVersion == null) { String versionProp = this.getSysProperty(VCENTER_MIN_PROP); if (isValidVersionNumber(versionProp)) { vcenterVersion = new VcenterVersion(versionProp); } else { vcenterVersion = null; throw new IllegalStateException(String.format( "System property for VMware vCenter Version Number(%s) is invalid - value is '%s'", VCENTER_MIN_PROP, versionProp)); } } return vcenterVersion; } public EsxVersion getEsxMinimumVersion(boolean forceLookup) { if (forceLookup || esxVersion == null) { String versionProp = this.getSysProperty(VMWARE_ESX_MIN_PROP); if (isValidVersionNumber(versionProp)) { esxVersion = new EsxVersion(versionProp); } else { esxVersion = null; throw new IllegalStateException(String.format( "System property for VMware ESX Version Number(%s) is invalid - value is '%s'", VMWARE_ESX_MIN_PROP, versionProp)); } } return esxVersion; } public ComputeSystemDiscoveryVersionValidator() { super(); } public boolean isValidHpuxVersion(HpuxVersion version) { return (VersionChecker.verifyVersionDetails( getHpuxMinimumVersion(true).getVersion(), version.getVersion()) >= 0) ? true : false; } public boolean isValidAixVersion(AixVersion version) { return (VersionChecker.verifyVersionDetails( getAixMinimumVersion(true).getVersion(), version.getVersion()) >= 0) ? true : false; } public boolean isValidAixVioVersion(AixVersion version) { return (VersionChecker.verifyVersionDetails( getAixVioMinimumVersion(true).getVersion(), version.getVersion()) >= 0) ? true : false; } public boolean isValidVcenterVersion(VcenterVersion version) { return (VersionChecker.verifyVersionDetails( getVcenterMinimumVersion(true).getVersion(), version.getVersion()) >= 0) ? true : false; } public boolean isValidWindowsVersion(WindowsVersion version) { return (VersionChecker.verifyVersionDetails( getWindowsMinimumVersion(true).getVersion(), version.getVersion()) >= 0) ? true : false; } public boolean isValidLinuxVersion(LinuxVersion version) { if (LinuxVersion.LinuxDistribution.REDHAT.equals(version.getDistribution())) { return (VersionChecker.verifyVersionDetails( getRedhatLinuxMinimumVersion(true).getVersion(), version.getVersion()) >= 0) ? true : false; } else if (LinuxVersion.LinuxDistribution.SUSE.equals(version.getDistribution())) { return (VersionChecker.verifyVersionDetails( getSuSELinuxMinimumVersion(true).getVersion(), version.getVersion()) >= 0) ? true : false; } else { return false; } } public void setCoordinatorClient(CoordinatorClient client) { this.coordinatorClient = client; } public boolean isValidEsxVersion(EsxVersion version) { return (VersionChecker.verifyVersionDetails( getEsxMinimumVersion(true).getVersion(), version.getVersion()) >= 0) ? true : false; } }