Ok. That gives me a place to start digging to figure out how to do this. I'll update the thread when I find out, just for future reference.
On Fri, Jun 7, 2013 at 12:06 PM, Chiradeep Vittal <chiradeep.vit...@citrix.com> wrote: > _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) { >>>>> > > } >>>>> > > } >>>>> > > >>>>> > > >>>>> >>>> >