[
https://issues.apache.org/jira/browse/CLOUDSTACK-9046?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14996627#comment-14996627
]
ASF GitHub Bot commented on CLOUDSTACK-9046:
--------------------------------------------
Github user DaanHoogland commented on a diff in the pull request:
https://github.com/apache/cloudstack/pull/1050#discussion_r44281597
--- 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 = ?");) {
--- End diff --
can go outside as well
> Fix upgrade path from 4.4 and 4.5 to 4.6
> ----------------------------------------
>
> Key: CLOUDSTACK-9046
> URL: https://issues.apache.org/jira/browse/CLOUDSTACK-9046
> Project: CloudStack
> Issue Type: Bug
> Security Level: Public(Anyone can view this level - this is the
> default.)
> Components: Upgrade
> Affects Versions: 4.6.0
> Reporter: Wilder Rodrigues
> Assignee: Wilder Rodrigues
> Priority: Blocker
> Fix For: 4.6.0
>
>
> When upgrading to 4.6 from 4.5 or earlier, the systemvm template that is
> registered upfront is not marked as SYSTEM and set as the template for the
> existing systemvms. Therefore, new systemvms work fine but existing ones
> don't.
> RCA is missing code in the upgrade path, as is present when upgrading from
> 4.4 to 4.5 for example.
> The code in the Upgrade442to450.java is not generic, as the name suggests,
> and simply configures the whole SystemVM and all the existing Domain VMs to
> use the SystemVM-4.5.0 that was registered. It means that after the upgrade
> all the routers were marked okay, but they were using the old stuff, from
> 4.5.0. The attempt to deploy a new VM was also failing with the following
> error (on the host):
> 2015-11-07 18:17:31,135 DEBUG [kvm.resource.LibvirtComputingResource]
> (agentRequest-Handler-4:null) Exit value is 1
> 2015-11-07 18:17:31,135 DEBUG [kvm.resource.LibvirtComputingResource]
> (agentRequest-Handler-4:null) Traceback (most recent call last): File
> "/opt/cloud/bin/update_con
> fig.py", line 20, in <module> from merge import QueueFile File
> "/opt/cloud/bin/merge.py", line 23, in <module> import cs_ip File
> "/opt/cloud/bin/cs_ip.py", lin
> e 19, in <module> from netaddr import *ImportError: No module named netaddr
> Why that? Because the KVM host has the new systemvm.iso, which contains all
> the new python stuff, but the systemvm template, which installs the Guest OS
> (Debian) is old and does not contain the modules we now need.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)