Pearl1594 commented on a change in pull request #4329:
URL: https://github.com/apache/cloudstack/pull/4329#discussion_r710896066
##########
File path:
engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java
##########
@@ -92,173 +92,20 @@ private void generateUuidForExistingSshKeyPairs(Connection
conn) {
}
}
+ private void initSystemVmTemplateRegistration() {
+ systemVmTemplateRegistration = new SystemVmTemplateRegistration();
+ }
+
@Override
@SuppressWarnings("serial")
public void updateSystemVmTemplates(final Connection conn) {
LOG.debug("Updating System Vm template IDs");
- final Set<Hypervisor.HypervisorType> hypervisorsListInUse = new
HashSet<Hypervisor.HypervisorType>();
- try (PreparedStatement pstmt = conn.prepareStatement("select
distinct(hypervisor_type) from `cloud`.`cluster` where removed is null");
ResultSet rs = pstmt.executeQuery()) {
- while (rs.next()) {
- switch (Hypervisor.HypervisorType.getType(rs.getString(1))) {
- case XenServer:
-
hypervisorsListInUse.add(Hypervisor.HypervisorType.XenServer);
- break;
- case KVM:
-
hypervisorsListInUse.add(Hypervisor.HypervisorType.KVM);
- break;
- case VMware:
-
hypervisorsListInUse.add(Hypervisor.HypervisorType.VMware);
- break;
- case Hyperv:
-
hypervisorsListInUse.add(Hypervisor.HypervisorType.Hyperv);
- break;
- case LXC:
-
hypervisorsListInUse.add(Hypervisor.HypervisorType.LXC);
- break;
- case Ovm3:
-
hypervisorsListInUse.add(Hypervisor.HypervisorType.Ovm3);
- break;
- default:
- break;
- }
- }
- } catch (final SQLException e) {
- LOG.error("updateSystemVmTemplates: Exception caught while getting
hypervisor types from clusters: " + e.getMessage());
- throw new CloudRuntimeException("updateSystemVmTemplates:Exception
while getting hypervisor types from clusters", e);
- }
-
- final Map<Hypervisor.HypervisorType, String> NewTemplateNameList = new
HashMap<Hypervisor.HypervisorType, String>() {
- {
- put(Hypervisor.HypervisorType.KVM, "systemvm-kvm-4.16.0");
- put(Hypervisor.HypervisorType.VMware,
"systemvm-vmware-4.16.0");
- put(Hypervisor.HypervisorType.XenServer,
"systemvm-xenserver-4.16.0");
- put(Hypervisor.HypervisorType.Hyperv,
"systemvm-hyperv-4.16.0");
- put(Hypervisor.HypervisorType.LXC, "systemvm-lxc-4.16.0");
- put(Hypervisor.HypervisorType.Ovm3, "systemvm-ovm3-4.16.0");
- }
- };
-
- final Map<Hypervisor.HypervisorType, String>
routerTemplateConfigurationNames = new HashMap<Hypervisor.HypervisorType,
String>() {
- {
- put(Hypervisor.HypervisorType.KVM, "router.template.kvm");
- put(Hypervisor.HypervisorType.VMware,
"router.template.vmware");
- put(Hypervisor.HypervisorType.XenServer,
"router.template.xenserver");
- put(Hypervisor.HypervisorType.Hyperv,
"router.template.hyperv");
- put(Hypervisor.HypervisorType.LXC, "router.template.lxc");
- put(Hypervisor.HypervisorType.Ovm3, "router.template.ovm3");
- }
- };
-
- final Map<Hypervisor.HypervisorType, String> newTemplateUrl = new
HashMap<Hypervisor.HypervisorType, String>() {
- {
- put(Hypervisor.HypervisorType.KVM,
"https://download.cloudstack.org/systemvm/4.16/systemvmtemplate-4.16.0-kvm.qcow2.bz2");
- put(Hypervisor.HypervisorType.VMware,
"https://download.cloudstack.org/systemvm/4.16/systemvmtemplate-4.16.0-vmware.ova");
- put(Hypervisor.HypervisorType.XenServer,
"https://download.cloudstack.org/systemvm/4.16/systemvmtemplate-4.16.0-xen.vhd.bz2");
- put(Hypervisor.HypervisorType.Hyperv,
"https://download.cloudstack.org/systemvm/4.16/systemvmtemplate-4.16.0-hyperv.vhd.zip");
- put(Hypervisor.HypervisorType.LXC,
"https://download.cloudstack.org/systemvm/4.16/systemvmtemplate-4.16.0-kvm.qcow2.bz2");
- put(Hypervisor.HypervisorType.Ovm3,
"https://download.cloudstack.org/systemvm/4.16/systemvmtemplate-4.16.0-ovm.raw.bz2");
- }
- };
-
- final Map<Hypervisor.HypervisorType, String> newTemplateChecksum = new
HashMap<Hypervisor.HypervisorType, String>() {
- {
- put(Hypervisor.HypervisorType.KVM,
"81b3e48bb934784a13555a43c5ef5ffb");
- put(Hypervisor.HypervisorType.XenServer,
"1b178a5dbdbe090555515340144c6017");
- put(Hypervisor.HypervisorType.VMware,
"e6a88e518c57d6f36c096c4204c3417f");
- put(Hypervisor.HypervisorType.Hyperv,
"5c94da45337cf3e1910dcbe084d4b9ad");
- put(Hypervisor.HypervisorType.LXC,
"81b3e48bb934784a13555a43c5ef5ffb");
- put(Hypervisor.HypervisorType.Ovm3,
"875c5c65455fc06c4a012394410db375");
- }
- };
-
- for (final Map.Entry<Hypervisor.HypervisorType, String>
hypervisorAndTemplateName : NewTemplateNameList.entrySet()) {
- LOG.debug("Updating " + hypervisorAndTemplateName.getKey() + "
System Vms");
- try (PreparedStatement pstmt = conn.prepareStatement("select id
from `cloud`.`vm_template` where name = ? and removed is null order by id desc
limit 1")) {
- // Get systemvm template id for corresponding hypervisor
- long templateId = -1;
- pstmt.setString(1, hypervisorAndTemplateName.getValue());
- try (ResultSet rs = pstmt.executeQuery()) {
- if (rs.next()) {
- templateId = rs.getLong(1);
- }
- } catch (final SQLException e) {
- LOG.error("updateSystemVmTemplates: Exception caught while
getting ids of templates: " + e.getMessage());
- throw new CloudRuntimeException("updateSystemVmTemplates:
Exception caught while getting ids of templates", e);
- }
-
- // change template type to SYSTEM
- if (templateId != -1) {
- try (PreparedStatement templ_type_pstmt =
conn.prepareStatement("update `cloud`.`vm_template` set type='SYSTEM' where id
= ?");) {
- templ_type_pstmt.setLong(1, templateId);
- templ_type_pstmt.executeUpdate();
- } catch (final SQLException e) {
- LOG.error("updateSystemVmTemplates:Exception while
updating template with id " + templateId + " to be marked as 'system': " +
e.getMessage());
- throw new
CloudRuntimeException("updateSystemVmTemplates:Exception while updating
template with id " + templateId + " to be marked as 'system'", e);
- }
- // update template ID of system Vms
- try (PreparedStatement update_templ_id_pstmt = conn
- .prepareStatement("update `cloud`.`vm_instance`
set vm_template_id = ? where type <> 'User' and hypervisor_type = ? and removed
is NULL");) {
- update_templ_id_pstmt.setLong(1, templateId);
- update_templ_id_pstmt.setString(2,
hypervisorAndTemplateName.getKey().toString());
- update_templ_id_pstmt.executeUpdate();
- } catch (final Exception e) {
- LOG.error("updateSystemVmTemplates:Exception while
setting template for " + hypervisorAndTemplateName.getKey().toString() + " to "
+ templateId
- + ": " + e.getMessage());
- throw new
CloudRuntimeException("updateSystemVmTemplates:Exception while setting template
for " + hypervisorAndTemplateName.getKey().toString() + " to "
- + templateId, e);
- }
-
- // Change value of global configuration parameter
- // router.template.* for the corresponding hypervisor
- try (PreparedStatement update_pstmt =
conn.prepareStatement("UPDATE `cloud`.`configuration` SET value = ? WHERE name
= ?");) {
- update_pstmt.setString(1,
hypervisorAndTemplateName.getValue());
- update_pstmt.setString(2,
routerTemplateConfigurationNames.get(hypervisorAndTemplateName.getKey()));
- update_pstmt.executeUpdate();
- } catch (final SQLException e) {
- LOG.error("updateSystemVmTemplates:Exception while
setting " +
routerTemplateConfigurationNames.get(hypervisorAndTemplateName.getKey()) + " to
"
- + hypervisorAndTemplateName.getValue() + ": "
+ e.getMessage());
- throw new
CloudRuntimeException("updateSystemVmTemplates:Exception while setting "
- +
routerTemplateConfigurationNames.get(hypervisorAndTemplateName.getKey()) + " to
" + hypervisorAndTemplateName.getValue(), e);
- }
-
- // Change value of global configuration parameter
- // minreq.sysvmtemplate.version for the ACS version
- try (PreparedStatement update_pstmt =
conn.prepareStatement("UPDATE `cloud`.`configuration` SET value = ? WHERE name
= ?");) {
- update_pstmt.setString(1, "4.16.0");
- update_pstmt.setString(2,
"minreq.sysvmtemplate.version");
- update_pstmt.executeUpdate();
- } catch (final SQLException e) {
- LOG.error("updateSystemVmTemplates:Exception while
setting 'minreq.sysvmtemplate.version' to 4.16.0: " + e.getMessage());
- throw new
CloudRuntimeException("updateSystemVmTemplates:Exception while setting
'minreq.sysvmtemplate.version' to 4.16.0", e);
- }
- } else {
- if
(hypervisorsListInUse.contains(hypervisorAndTemplateName.getKey())) {
- throw new CloudRuntimeException(getUpgradedVersion() +
hypervisorAndTemplateName.getKey() + " SystemVm template not found. Cannot
upgrade system Vms");
- } else {
- LOG.warn(getUpgradedVersion() +
hypervisorAndTemplateName.getKey() + " SystemVm template not found. " +
hypervisorAndTemplateName.getKey()
- + " hypervisor is not used, so not failing
upgrade");
- // Update the latest template URLs for corresponding
- // hypervisor
- try (PreparedStatement update_templ_url_pstmt = conn
- .prepareStatement("UPDATE
`cloud`.`vm_template` SET url = ? , checksum = ? WHERE hypervisor_type = ? AND
type = 'SYSTEM' AND removed is null order by id desc limit 1");) {
- update_templ_url_pstmt.setString(1,
newTemplateUrl.get(hypervisorAndTemplateName.getKey()));
- update_templ_url_pstmt.setString(2,
newTemplateChecksum.get(hypervisorAndTemplateName.getKey()));
- update_templ_url_pstmt.setString(3,
hypervisorAndTemplateName.getKey().toString());
- update_templ_url_pstmt.executeUpdate();
- } catch (final SQLException e) {
- LOG.error("updateSystemVmTemplates:Exception while
updating 'url' and 'checksum' for hypervisor type "
- +
hypervisorAndTemplateName.getKey().toString() + ": " + e.getMessage());
- throw new
CloudRuntimeException("updateSystemVmTemplates:Exception while updating 'url'
and 'checksum' for hypervisor type "
- +
hypervisorAndTemplateName.getKey().toString(), e);
- }
- }
- }
- } catch (final SQLException e) {
- LOG.error("updateSystemVmTemplates:Exception while getting ids
of templates: " + e.getMessage());
- throw new
CloudRuntimeException("updateSystemVmTemplates:Exception while getting ids of
templates", e);
- }
+ initSystemVmTemplateRegistration();
+ try {
+ systemVmTemplateRegistration.updateSystemVmTemplates(conn);
+ } catch (Exception e) {
+ throw new CloudRuntimeException("Failed to find / register
SystemVM template(s)");
Review comment:
At this point I haven't changed the structuring. Could probably be done
as part of Phase2
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]