_configServer.getConfigValue(Config.RouterTemplate***.key(),
VMTemplateVO template =
_templateDao.findRoutingTemplate(hType, templateName);
On 6/7/13 8:55 AM, "Marcus Sorensen" <[email protected]> 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 <[email protected]> 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 <[email protected]>:
>>> 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 [[email protected]]
>>> Sent: Wednesday, June 05, 2013 3:56 PM
>>> To: [email protected]
>>> 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 <[email protected]>
>>>
>>>> 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:[email protected]]
>>>> > Sent: Wednesday, 5 June 2013 3:26 PM
>>>> > To: [email protected]
>>>> > 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 <[email protected]>
>>>> >
>>>> > > 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 <[email protected]>
>>>> > > Authored: Mon Jun 3 12:33:58 2013 0530
>>>> > > Committer: Kishan Kavala <[email protected]>
>>>> > > 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) {
>>>> > > }
>>>> > > }
>>>> > >
>>>> > >
>>>>
>>>