mirror of https://github.com/apache/cloudstack.git
New upgrade schema path and workaround for system VM template auto registration
This commit is contained in:
parent
462e0511f4
commit
bdab51424a
|
|
@ -75,8 +75,8 @@
|
|||
<source>
|
||||
def projectVersion = project.version
|
||||
String[] versionParts = projectVersion.tokenize('.')
|
||||
pom.properties['cs.version'] = versionParts[0] + "." + versionParts[1]
|
||||
pom.properties['patch.version'] = versionParts[2]
|
||||
pom.properties['cs.version'] = "4.16"
|
||||
pom.properties['patch.version'] = "0"
|
||||
</source>
|
||||
</configuration>
|
||||
</execution>
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ import java.util.Date;
|
|||
import javax.inject.Inject;
|
||||
|
||||
import com.cloud.upgrade.dao.Upgrade41510to41520;
|
||||
import com.cloud.upgrade.dao.Upgrade41600to41610;
|
||||
import org.apache.cloudstack.utils.CloudStackVersion;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
|
|
@ -201,6 +202,7 @@ public class DatabaseUpgradeChecker implements SystemIntegrityChecker {
|
|||
.next("4.15.0.0", new Upgrade41500to41510())
|
||||
.next("4.15.1.0", new Upgrade41510to41520())
|
||||
.next("4.15.2.0", new Upgrade41520to41600())
|
||||
.next("4.16.0.0", new Upgrade41600to41610())
|
||||
.build();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ import org.apache.cloudstack.storage.datastore.db.ImageStoreVO;
|
|||
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.ini4j.Ini;
|
||||
|
||||
|
|
@ -120,6 +121,8 @@ public class SystemVmTemplateRegistration {
|
|||
@Inject
|
||||
ConfigurationDao configurationDao;
|
||||
|
||||
private String systemVmTemplateVersion;
|
||||
|
||||
public SystemVmTemplateRegistration() {
|
||||
dataCenterDao = new DataCenterDaoImpl();
|
||||
vmTemplateDao = new VMTemplateDaoImpl();
|
||||
|
|
@ -131,6 +134,21 @@ public class SystemVmTemplateRegistration {
|
|||
configurationDao = new ConfigurationDaoImpl();
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience constructor method to use when there is no system VM template change for a new version.
|
||||
*/
|
||||
public SystemVmTemplateRegistration(String systemVmTemplateVersion) {
|
||||
this();
|
||||
this.systemVmTemplateVersion = systemVmTemplateVersion;
|
||||
}
|
||||
|
||||
public String getSystemVmTemplateVersion() {
|
||||
if (StringUtils.isEmpty(systemVmTemplateVersion)) {
|
||||
return String.format("%s.%s", CS_MAJOR_VERSION, CS_TINY_VERSION);
|
||||
}
|
||||
return systemVmTemplateVersion;
|
||||
}
|
||||
|
||||
private static class SystemVMTemplateDetails {
|
||||
Long id;
|
||||
String uuid;
|
||||
|
|
@ -658,7 +676,7 @@ public class SystemVmTemplateRegistration {
|
|||
hypervisorImageFormat.get(hypervisor), hypervisorGuestOsMap.get(hypervisor), storeUrlAndId.second(), null, filePath, true);
|
||||
Map<String, String> configParams = new HashMap<>();
|
||||
configParams.put(RouterTemplateConfigurationNames.get(hypervisorAndTemplateName.first()), hypervisorAndTemplateName.second());
|
||||
configParams.put("minreq.sysvmtemplate.version", CS_MAJOR_VERSION + "." + CS_TINY_VERSION);
|
||||
configParams.put("minreq.sysvmtemplate.version", getSystemVmTemplateVersion());
|
||||
updateConfigurationParams(configParams);
|
||||
updateSystemVMEntries(templateId, hypervisorAndTemplateName.first());
|
||||
} catch (Exception e) {
|
||||
|
|
@ -809,7 +827,7 @@ public class SystemVmTemplateRegistration {
|
|||
// Change value of global configuration parameter router.template.* for the corresponding hypervisor and minreq.sysvmtemplate.version for the ACS version
|
||||
Map<String, String> configParams = new HashMap<>();
|
||||
configParams.put(RouterTemplateConfigurationNames.get(hypervisorAndTemplateName.getKey()), hypervisorAndTemplateName.getValue());
|
||||
configParams.put("minreq.sysvmtemplate.version", CS_MAJOR_VERSION + "." + CS_TINY_VERSION);
|
||||
configParams.put("minreq.sysvmtemplate.version", getSystemVmTemplateVersion());
|
||||
updateConfigurationParams(configParams);
|
||||
}
|
||||
|
||||
|
|
@ -854,11 +872,11 @@ public class SystemVmTemplateRegistration {
|
|||
registerTemplates(hypervisorsListInUse);
|
||||
break;
|
||||
} catch (final Exception e) {
|
||||
throw new CloudRuntimeException(String.format("%s.%s %s SystemVm template not found. Cannot upgrade system Vms", CS_MAJOR_VERSION, CS_TINY_VERSION, hypervisorAndTemplateName.getKey()));
|
||||
throw new CloudRuntimeException(String.format("%s %s SystemVm template not found. Cannot upgrade system Vms", getSystemVmTemplateVersion(), hypervisorAndTemplateName.getKey()));
|
||||
}
|
||||
} else {
|
||||
LOGGER.warn(String.format("%s.%s %s SystemVm template not found. Cannot upgrade system Vms hypervisor is not used, so not failing upgrade",
|
||||
CS_MAJOR_VERSION, CS_TINY_VERSION, hypervisorAndTemplateName.getKey()));
|
||||
LOGGER.warn(String.format("%s %s SystemVm template not found. Cannot upgrade system Vms hypervisor is not used, so not failing upgrade",
|
||||
getSystemVmTemplateVersion(), hypervisorAndTemplateName.getKey()));
|
||||
// Update the latest template URLs for corresponding hypervisor
|
||||
VMTemplateVO templateVO = vmTemplateDao.findLatestTemplateByTypeAndHypervisor(hypervisorAndTemplateName.getKey(), Storage.TemplateType.SYSTEM);
|
||||
if (templateVO != null) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,87 @@
|
|||
// Licensed to the Apache Software Foundation (ASF) under one
|
||||
// or more contributor license agreements. See the NOTICE file
|
||||
// distributed with this work for additional information
|
||||
// regarding copyright ownership. The ASF licenses this file
|
||||
// to you under the Apache License, Version 2.0 (the
|
||||
// "License"); you may not use this file except in compliance
|
||||
// with the License. You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing,
|
||||
// software distributed under the License is distributed on an
|
||||
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
// KIND, either express or implied. See the License for the
|
||||
// specific language governing permissions and limitations
|
||||
// under the License.
|
||||
|
||||
package com.cloud.upgrade.dao;
|
||||
|
||||
import com.cloud.upgrade.SystemVmTemplateRegistration;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.sql.Connection;
|
||||
|
||||
public class Upgrade41600to41610 implements DbUpgrade, DbUpgradeSystemVmTemplate {
|
||||
|
||||
final static Logger LOG = Logger.getLogger(Upgrade41600to41610.class);
|
||||
private SystemVmTemplateRegistration systemVmTemplateRegistration;
|
||||
|
||||
@Override
|
||||
public String[] getUpgradableVersionRange() {
|
||||
return new String[] {"4.16.0.0", "4.16.1.0"};
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUpgradedVersion() {
|
||||
return "4.16.1.0";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsRollingUpgrade() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputStream[] getPrepareScripts() {
|
||||
final String scriptFile = "META-INF/db/schema-41600to41610.sql";
|
||||
final InputStream script = Thread.currentThread().getContextClassLoader().getResourceAsStream(scriptFile);
|
||||
if (script == null) {
|
||||
throw new CloudRuntimeException("Unable to find " + scriptFile);
|
||||
}
|
||||
|
||||
return new InputStream[] {script};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void performDataMigration(Connection conn) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputStream[] getCleanupScripts() {
|
||||
final String scriptFile = "META-INF/db/schema-41600to41610-cleanup.sql";
|
||||
final InputStream script = Thread.currentThread().getContextClassLoader().getResourceAsStream(scriptFile);
|
||||
if (script == null) {
|
||||
throw new CloudRuntimeException("Unable to find " + scriptFile);
|
||||
}
|
||||
|
||||
return new InputStream[] {script};
|
||||
}
|
||||
|
||||
private void initSystemVmTemplateRegistration() {
|
||||
systemVmTemplateRegistration = new SystemVmTemplateRegistration("4.16.0");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateSystemVmTemplates(Connection conn) {
|
||||
LOG.debug("Updating System Vm template IDs");
|
||||
initSystemVmTemplateRegistration();
|
||||
try {
|
||||
systemVmTemplateRegistration.updateSystemVmTemplates(conn);
|
||||
} catch (Exception e) {
|
||||
throw new CloudRuntimeException("Failed to find / register SystemVM template(s)");
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue