_configServer.getConfigValue(Config.RouterTemplate***.key(), VMTemplateVO template = _templateDao.findRoutingTemplate(hType, templateName);
On 6/7/13 8:55 AM, "Marcus Sorensen" <shadow...@gmail.com> wrote: >I'm not sure if this fits in the discussion, I was asking Wei how >cloudstack chooses the system vm template during normal operation. I >get how the upgrades work, but I don't get how cloudstack chooses the >system template to use when actually deploying: > >I'm looking at it from a different perspective, not a CS >upgrade, but say we have to roll a new systemvm template for an >existing CS version. Say we rolled 4.2, with a new template, and then >two months later we realize that the template is missing dnsmasq or >something, and we have to have everyone install a new template. Do we >actually have to overwrite the existing template in-place on secondary >storage, then on each primary storage while the system vms are down? >Or can we register a new template, and the new template gets installed >on primary storage as system vms are rebooted. > > I saw that the upgrade scripts had that 'select max' statement, but >that just fetches the id for installing the template to secondary >storage. When I deploy a router, how does cloudstack select the >template for that? > >On Fri, Jun 7, 2013 at 12:15 AM, Wei ZHOU <ustcweiz...@gmail.com> wrote: >> In my point view, we ask users register new template in the upgrade >> instruction in release notes. If they do not register, it is their >> fault. If they do but upgrade fails, it is our fault. >> >> I admit that it is a good way to change each upgrade process and >> remove old templates when we use new template. It is not large work. >> >> -Wei >> >> 2013/6/6, Kishan Kavala <kishan.kav...@citrix.com>: >>> In the mentioned example, when new template for 4.3 is introduced, we >>>should >>> remove template upgrade code in Upgrade41to42. This will make upgrade >>> succeed even when systemvm-kvm-4.2 is not in database. >>> On the other hand, if we allow 'systemvm-kvm-%', upgrade to 4.3 will >>>succeed >>> even though the required systemvm-kvm-4.3 is not in database. >>> >>> So, every time a new system vm template is added, template upgrade from >>> previous version should be removed. >>> >>> ________________________________________ >>> From: Wei ZHOU [ustcweiz...@gmail.com] >>> Sent: Wednesday, June 05, 2013 3:56 PM >>> To: dev@cloudstack.apache.org >>> Subject: Re: git commit: updated refs/heads/master to 9fe7846 >>> >>> Kishan, >>> >>> I know. >>> >>> If we upgrade from 4.1 to 4.3 ( assume the systemvm template is >>> systemvm-kvm-4.3). We need to add systemvm-kvm-4.3 instead of >>> systemvm-kvm-4.2. Maybe systemvm-kvm-4.2 is not in database. >>> The upgrade includes Upgrade41to42 and Upgrade42to43. It will fail in >>>the >>> Upgrade41to42. >>> >>> -Wei >>> >>> >>> 2013/6/5 Kishan Kavala <kishan.kav...@citrix.com> >>> >>>> Wei, >>>> If we use other templates, system Vms may not work. Only 4.2 >>>>templates >>>> should be used when upgrading to 4.2. >>>> >>>> > -----Original Message----- >>>> > From: Wei ZHOU [mailto:ustcweiz...@gmail.com] >>>> > Sent: Wednesday, 5 June 2013 3:26 PM >>>> > To: dev@cloudstack.apache.org >>>> > Subject: Re: git commit: updated refs/heads/master to 9fe7846 >>>> > >>>> > Kishan, >>>> > >>>> > What do you think about change some codes to "name like 'systemvm- >>>> > xenserver-%' " ? >>>> > If we use other templates, the upgrade maybe fail. >>>> > >>>> > -Wei >>>> > >>>> > >>>> > 2013/6/5 <kis...@apache.org> >>>> > >>>> > > Updated Branches: >>>> > > refs/heads/master 91b15711b -> 9fe7846d7 >>>> > > >>>> > > >>>> > > CLOUDSTACK-2728: 41-42 DB upgrade: add step to upgrade system >>>> > > templates >>>> > > >>>> > > >>>> > > Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo >>>> > > Commit: >>>> > > http://git-wip-us.apache.org/repos/asf/cloudstack/commit/9fe7846d >>>> > > Tree: >>>>http://git-wip-us.apache.org/repos/asf/cloudstack/tree/9fe7846d >>>> > > Diff: >>>>http://git-wip-us.apache.org/repos/asf/cloudstack/diff/9fe7846d >>>> > > >>>> > > Branch: refs/heads/master >>>> > > Commit: 9fe7846d72e401720e1dcbce52d021e2646429f1 >>>> > > Parents: 91b1571 >>>> > > Author: Harikrishna Patnala <harikrishna.patn...@citrix.com> >>>> > > Authored: Mon Jun 3 12:33:58 2013 0530 >>>> > > Committer: Kishan Kavala <kis...@cloud.com> >>>> > > Committed: Wed Jun 5 15:14:04 2013 0530 >>>> > > >>>> > > >>>>---------------------------------------------------------------------- >>>> > > .../src/com/cloud/upgrade/dao/Upgrade410to420.java | 209 >>>> > > - >>>> > > 1 files changed, 204 insertions( ), 5 deletions(-) >>>> > > >>>>---------------------------------------------------------------------- >>>> > > >>>> > > >>>> > > >>>> > > >>>>http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9fe7846d/engine >>>> > > /schema/src/com/cloud/upgrade/dao/Upgrade410to420.java >>>> > > >>>>---------------------------------------------------------------------- >>>> > > diff --git >>>> > > a/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java >>>> > > b/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java >>>> > > index 1584973..955ea56 100644 >>>> > > --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java >>>> > > b/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java >>>> > > @@ -112,16 112,215 @@ public class Upgrade410to420 implements >>>> > DbUpgrade { >>>> > > } >>>> > > >>>> > > private void updateSystemVmTemplates(Connection conn) { >>>> > > - PreparedStatement sql = null; >>>> > > >>>> > > PreparedStatement pstmt = null; >>>> > > ResultSet rs = null; >>>> > > boolean xenserver = false; >>>> > > boolean kvm = false; >>>> > > boolean VMware = false; >>>> > > boolean Hyperv = false; >>>> > > boolean LXC = false; >>>> > > s_logger.debug("Updating System Vm template IDs"); >>>> > > try{ >>>> > > //Get all hypervisors in use >>>> > > try { >>>> > > pstmt = conn.prepareStatement("select >>>> > > distinct(hypervisor_type) from `cloud`.`cluster` where removed is >>>> > > null"); >>>> > > rs = pstmt.executeQuery(); >>>> > > while(rs.next()){ >>>> > > if("XenServer".equals(rs.getString(1))){ >>>> > > xenserver = true; >>>> > > } else if("KVM".equals(rs.getString(1))){ >>>> > > kvm = true; >>>> > > } else if("VMware".equals(rs.getString(1))){ >>>> > > VMware = true; >>>> > > } else if("Hyperv".equals(rs.getString(1))) { >>>> > > Hyperv = true; >>>> > > } else if("LXC".equals(rs.getString(1))) { >>>> > > LXC = true; >>>> > > } >>>> > > } >>>> > > } catch (SQLException e) { >>>> > > throw new CloudRuntimeException("Error while >>>>listing >>>> > > hypervisors in use", e); >>>> > > } >>>> > > >>>> > > s_logger.debug("Updating XenSever System Vms"); >>>> > > //XenServer >>>> > > try { >>>> > > //Get 4.2.0 xenserer system Vm template Id >>>> > > pstmt = conn.prepareStatement("select id from >>>> > > `cloud`.`vm_template` where name like 'systemvm-xenserver-4.2' and >>>> > > removed is null order by id desc limit 1"); >>>> > > rs = pstmt.executeQuery(); >>>> > > if(rs.next()){ >>>> > > long templateId = rs.getLong(1); >>>> > > rs.close(); >>>> > > pstmt.close(); >>>> > > // change template type to SYSTEM >>>> > > pstmt = conn.prepareStatement("update >>>> > > `cloud`.`vm_template` set type='SYSTEM' where id = ?"); >>>> > > pstmt.setLong(1, templateId); >>>> > > pstmt.executeUpdate(); >>>> > > pstmt.close(); >>>> > > // update templete ID of system Vms >>>> > > pstmt = conn.prepareStatement("update >>>> > > `cloud`.`vm_instance` set vm_template_id = ? where type <> 'User' >>>>and >>>> > > hypervisor_type = 'XenServer'"); >>>> > > pstmt.setLong(1, templateId); >>>> > > pstmt.executeUpdate(); >>>> > > pstmt.close(); >>>> > > } else { >>>> > > if (xenserver){ >>>> > > throw new CloudRuntimeException("4.2.0 >>>> > > XenServer >>>> > > SystemVm template not found. Cannot upgrade system Vms"); >>>> > > } else { >>>> > > s_logger.warn("4.2.0 XenServer SystemVm >>>> > > template >>>> > > not found. XenServer hypervisor is not used, so not failing >>>>upgrade"); >>>> > > } >>>> > > } >>>> > > } catch (SQLException e) { >>>> > > throw new CloudRuntimeException("Error while >>>>updating >>>> > > XenServer systemVm template", e); >>>> > > } >>>> > > >>>> > > //KVM >>>> > > s_logger.debug("Updating KVM System Vms"); >>>> > > try { >>>> > > //Get 4.2.0 KVM system Vm template Id >>>> > > pstmt = conn.prepareStatement("select id from >>>> > > `cloud`.`vm_template` where name = 'systemvm-kvm-4.2' and removed >>>>is >>>> > > null order by id desc limit 1"); >>>> > > rs = pstmt.executeQuery(); >>>> > > if(rs.next()){ >>>> > > long templateId = rs.getLong(1); >>>> > > rs.close(); >>>> > > pstmt.close(); >>>> > > // change template type to SYSTEM >>>> > > pstmt = conn.prepareStatement("update >>>> > > `cloud`.`vm_template` set type='SYSTEM' where id = ?"); >>>> > > pstmt.setLong(1, templateId); >>>> > > pstmt.executeUpdate(); >>>> > > pstmt.close(); >>>> > > // update templete ID of system Vms >>>> > > pstmt = conn.prepareStatement("update >>>> > > `cloud`.`vm_instance` set vm_template_id = ? where type <> 'User' >>>>and >>>> > > hypervisor_type = 'KVM'"); >>>> > > pstmt.setLong(1, templateId); >>>> > > pstmt.executeUpdate(); >>>> > > pstmt.close(); >>>> > > } else { >>>> > > if (kvm){ >>>> > > throw new CloudRuntimeException("4.2.0 >>>>KVM >>>> > > SystemVm template not found. Cannot upgrade system Vms"); >>>> > > } else { >>>> > > s_logger.warn("4.2.0 KVM SystemVm >>>>template >>>> > > not >>>> > > found. KVM hypervisor is not used, so not failing upgrade"); >>>> > > } >>>> > > } >>>> > > } catch (SQLException e) { >>>> > > throw new CloudRuntimeException("Error while >>>>updating >>>> > > KVM >>>> > > systemVm template", e); >>>> > > } >>>> > > >>>> > > //VMware >>>> > > s_logger.debug("Updating VMware System Vms"); >>>> > > try { >>>> > > //Get 4.2.0 VMware system Vm template Id >>>> > > pstmt = conn.prepareStatement("select id from >>>> > > `cloud`.`vm_template` where name = 'systemvm-vmware-4.2' and >>>> > removed >>>> > > is null order by id desc limit 1"); >>>> > > rs = pstmt.executeQuery(); >>>> > > if(rs.next()){ >>>> > > long templateId = rs.getLong(1); >>>> > > rs.close(); >>>> > > pstmt.close(); >>>> > > // change template type to SYSTEM >>>> > > pstmt = conn.prepareStatement("update >>>> > > `cloud`.`vm_template` set type='SYSTEM' where id = ?"); >>>> > > pstmt.setLong(1, templateId); >>>> > > pstmt.executeUpdate(); >>>> > > pstmt.close(); >>>> > > // update templete ID of system Vms >>>> > > pstmt = conn.prepareStatement("update >>>> > > `cloud`.`vm_instance` set vm_template_id = ? where type <> 'User' >>>>and >>>> > > hypervisor_type = 'VMware'"); >>>> > > pstmt.setLong(1, templateId); >>>> > > pstmt.executeUpdate(); >>>> > > pstmt.close(); >>>> > > } else { >>>> > > if (VMware){ >>>> > > throw new CloudRuntimeException("4.2.0 >>>>VMware >>>> > > SystemVm template not found. Cannot upgrade system Vms"); >>>> > > } else { >>>> > > s_logger.warn("4.2.0 VMware SystemVm >>>>template >>>> > > not >>>> > > found. VMware hypervisor is not used, so not failing upgrade"); >>>> > > } >>>> > > } >>>> > > } catch (SQLException e) { >>>> > > throw new CloudRuntimeException("Error while >>>>updating >>>> > > VMware systemVm template", e); >>>> > > } >>>> > > >>>> > > //Hyperv >>>> > > s_logger.debug("Updating Hyperv System Vms"); >>>> > > try { >>>> > > //Get 4.2.0 Hyperv system Vm template Id >>>> > > pstmt = conn.prepareStatement("select id from >>>> > > `cloud`.`vm_template` where name = 'systemvm-hyperv-4.2' and >>>>removed >>>> > > is null order by id desc limit 1"); >>>> > > rs = pstmt.executeQuery(); >>>> > > if(rs.next()){ >>>> > > long templateId = rs.getLong(1); >>>> > > rs.close(); >>>> > > pstmt.close(); >>>> > > // change template type to SYSTEM >>>> > > pstmt = conn.prepareStatement("update >>>> > > `cloud`.`vm_template` set type='SYSTEM' where id = ?"); >>>> > > pstmt.setLong(1, templateId); >>>> > > pstmt.executeUpdate(); >>>> > > pstmt.close(); >>>> > > // update templete ID of system Vms >>>> > > pstmt = conn.prepareStatement("update >>>> > > `cloud`.`vm_instance` set vm_template_id = ? where type <> 'User' >>>>and >>>> > > hypervisor_type = 'Hyperv'"); >>>> > > pstmt.setLong(1, templateId); >>>> > > pstmt.executeUpdate(); >>>> > > pstmt.close(); >>>> > > } else { >>>> > > if (Hyperv){ >>>> > > throw new CloudRuntimeException("4.2.0 >>>>HyperV >>>> > > SystemVm template not found. Cannot upgrade system Vms"); >>>> > > } else { >>>> > > s_logger.warn("4.2.0 Hyperv SystemVm >>>>template >>>> > > not >>>> > > found. Hyperv hypervisor is not used, so not failing upgrade"); >>>> > > } >>>> > > } >>>> > > } catch (SQLException e) { >>>> > > throw new CloudRuntimeException("Error while >>>>updating >>>> > > Hyperv systemVm template", e); >>>> > > } >>>> > > >>>> > > //LXC >>>> > > s_logger.debug("Updating LXC System Vms"); >>>> > > try { >>>> > > //Get 4.2.0 LXC system Vm template Id >>>> > > pstmt = conn.prepareStatement("select id from >>>> > > `cloud`.`vm_template` where name = 'systemvm-lxc-4.2' and removed >>>>is >>>> > > null order by id desc limit 1"); >>>> > > rs = pstmt.executeQuery(); >>>> > > if(rs.next()){ >>>> > > long templateId = rs.getLong(1); >>>> > > rs.close(); >>>> > > pstmt.close(); >>>> > > // change template type to SYSTEM >>>> > > pstmt = conn.prepareStatement("update >>>> > > `cloud`.`vm_template` set type='SYSTEM' where id = ?"); >>>> > > pstmt.setLong(1, templateId); >>>> > > pstmt.executeUpdate(); >>>> > > pstmt.close(); >>>> > > // update templete ID of system Vms >>>> > > pstmt = conn.prepareStatement("update >>>> > > `cloud`.`vm_instance` set vm_template_id = ? where type <> 'User' >>>>and >>>> > > hypervisor_type = 'LXC'"); >>>> > > pstmt.setLong(1, templateId); >>>> > > pstmt.executeUpdate(); >>>> > > pstmt.close(); >>>> > > } else { >>>> > > if (LXC){ >>>> > > throw new CloudRuntimeException("4.2.0 >>>>LXC >>>> > > SystemVm template not found. Cannot upgrade system Vms"); >>>> > > } else { >>>> > > s_logger.warn("4.2.0 LXC SystemVm >>>>template >>>> > > not >>>> > > found. LXC hypervisor is not used, so not failing upgrade"); >>>> > > } >>>> > > } >>>> > > } catch (SQLException e) { >>>> > > throw new CloudRuntimeException("Error while >>>>updating >>>> > > LXC >>>> > > systemVm template", e); >>>> > > } >>>> > > s_logger.debug("Updating System Vm Template IDs >>>> Complete"); >>>> > > } >>>> > > finally { >>>> > > try { >>>> > > if (rs != null) { >>>> > > rs.close(); >>>> > > } >>>> > > >>>> > > if (pstmt != null) { >>>> > > pstmt.close(); >>>> > > } >>>> > > } catch (SQLException e) { >>>> > > } >>>> > > } >>>> > > pstmt = null; >>>> > > try { >>>> > > - sql = conn.prepareStatement("update vm_template set >>>> > > image_data_store_id = 1 where type = 'SYSTEM' or type = >>>>'BUILTIN'"); >>>> > > - sql.executeUpdate(); >>>> > > pstmt = conn.prepareStatement("update vm_template set >>>> > > image_data_store_id = 1 where type = 'SYSTEM' or type = >>>>'BUILTIN'"); >>>> > > pstmt.executeUpdate(); >>>> > > } catch (SQLException e) { >>>> > > throw new CloudRuntimeException("Failed to upgrade vm >>>> > > template data store uuid: " e.toString()); >>>> > > } finally { >>>> > > - if (sql != null) { >>>> > > if (pstmt != null) { >>>> > > try { >>>> > > - sql.close(); >>>> > > pstmt.close(); >>>> > > } catch (SQLException e) { >>>> > > } >>>> > > } >>>> > > >>>> > > >>>> >>>