Github user DaanHoogland commented on a diff in the pull request:
https://github.com/apache/cloudstack/pull/1050#discussion_r44282316
--- Diff: engine/schema/src/com/cloud/upgrade/dao/Upgrade452to460.java ---
@@ -165,4 +171,173 @@ private void addIndexForVMInstance(Connection conn) {
return new File[] { new File(script) };
}
+ @SuppressWarnings("serial")
+ private void updateSystemVmTemplates(final Connection conn) {
+ s_logger.debug("Updating System Vm template IDs");
+ // Get all hypervisors in use
+ 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: // no action on cases Any, BareMetal, None, Ovm,
+ // Parralels, Simulator and VirtualBox:
+ break;
+ }
+ }
+ } catch (final SQLException e) {
+ s_logger.error("updateSystemVmTemplates:Exception 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.XenServer,
"systemvm-xenserver-4.6");
+ put(Hypervisor.HypervisorType.VMware,
"systemvm-vmware-4.6");
+ put(Hypervisor.HypervisorType.KVM, "systemvm-kvm-4.6");
+ put(Hypervisor.HypervisorType.LXC, "systemvm-lxc-4.6");
+ put(Hypervisor.HypervisorType.Hyperv,
"systemvm-hyperv-4.6");
+ put(Hypervisor.HypervisorType.Ovm3, "systemvm-ovm3-4.6");
+ }
+ };
+
+ final Map<Hypervisor.HypervisorType, String>
routerTemplateConfigurationNames = new HashMap<Hypervisor.HypervisorType,
String>() {
+ {
+ put(Hypervisor.HypervisorType.XenServer,
"router.template.xenserver");
+ put(Hypervisor.HypervisorType.VMware,
"router.template.vmware");
+ put(Hypervisor.HypervisorType.KVM, "router.template.kvm");
+ put(Hypervisor.HypervisorType.LXC, "router.template.lxc");
+ put(Hypervisor.HypervisorType.Hyperv,
"router.template.hyperv");
+ put(Hypervisor.HypervisorType.Ovm3,
"router.template.ovm3");
+ }
+ };
+
+ final Map<Hypervisor.HypervisorType, String> newTemplateUrl = new
HashMap<Hypervisor.HypervisorType, String>() {
+ {
+ put(Hypervisor.HypervisorType.XenServer,
"http://cloudstack.apt-get.eu/systemvm/4.6/systemvm64template-4.6.0-xen.vhd.bz2");
+ put(Hypervisor.HypervisorType.VMware,
"http://cloudstack.apt-get.eu/systemvm/4.6/systemvm64template-4.6.0-vmware.ova");
+ put(Hypervisor.HypervisorType.KVM,
"http://cloudstack.apt-get.eu/systemvm/4.6/systemvm64template-4.6.0-kvm.qcow2.bz2");
+ put(Hypervisor.HypervisorType.LXC,
"http://cloudstack.apt-get.eu/systemvm/4.6/systemvm64template-4.6.0-kvm.qcow2.bz2");
+ put(Hypervisor.HypervisorType.Hyperv,
"http://cloudstack.apt-get.eu/systemvm/4.6/systemvm64template-4.6.0-hyperv.vhd.zip");
+ put(Hypervisor.HypervisorType.Ovm3,
"http://cloudstack.apt-get.eu/systemvm/4.6/systemvm64template-4.6.0-ovm.raw.bz2");
+ }
+ };
+
+ final Map<Hypervisor.HypervisorType, String> newTemplateChecksum =
new HashMap<Hypervisor.HypervisorType, String>() {
+ {
+ put(Hypervisor.HypervisorType.XenServer,
"8886f554a499ec5405b6f203d9d36460");
+ put(Hypervisor.HypervisorType.VMware,
"4b415224fe00b258f66cad9fce9f73fc");
+ put(Hypervisor.HypervisorType.KVM,
"c059b0d051e0cd6fbe9d5d4fc40c7e5d");
+ put(Hypervisor.HypervisorType.LXC,
"c059b0d051e0cd6fbe9d5d4fc40c7e5d");
+ put(Hypervisor.HypervisorType.Hyperv,
"53e24bddfa56ea3139ed37af4b519013");
+ put(Hypervisor.HypervisorType.Ovm3,
"c8577d27b2daafb2d9a4ed307ce2f00f");
+ }
+ };
+
+ for (final Map.Entry<Hypervisor.HypervisorType, String>
hypervisorAndTemplateName : NewTemplateNameList.entrySet()) {
+ s_logger.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 4.6.0 system Vm 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) {
+ s_logger.error("updateSystemVmTemplates:Exception
while getting ids of templates: " + e.getMessage());
+ throw new
CloudRuntimeException("updateSystemVmTemplates:Exception 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) {
+ s_logger.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 = ?");) {
+ 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) {
+ s_logger.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) {
+ s_logger.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
= ?");) {
--- End diff --
I know this is c&p and not important but .... a prepared statement should
go as prepared...
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---