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) {
>>>>> > >                  }
>>>>> > >              }
>>>>> > >
>>>>> > >
>>>>>
>>>>
>

Reply via email to