This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack.git

commit 6c346df5a3cdde11ed8ef7acac90ca604be8053c
Merge: 4aa7a96 8a9ae6f
Author: Rohit Yadav <rohit.ya...@shapeblue.com>
AuthorDate: Wed Jan 20 19:05:01 2021 +0530

    Merge remote-tracking branch 'origin/4.15'
    
    Fix db upgrade path conflict, add 4.15.1.0->4.16.0.0 for master, bump
    systemvmtemplate version to 4.16.
    
    Signed-off-by: Rohit Yadav <rohit.ya...@shapeblue.com>

 .../com/cloud/upgrade/DatabaseUpgradeChecker.java  |   5 +
 .../com/cloud/upgrade/dao/Upgrade41400to41500.java | 173 --------------
 .../com/cloud/upgrade/dao/Upgrade41500to41510.java |  71 ++++++
 .../com/cloud/upgrade/dao/Upgrade41510to41600.java | 248 +++++++++++++++++++++
 .../META-INF/db/schema-41500to41510-cleanup.sql    |  21 ++
 .../resources/META-INF/db/schema-41500to41510.sql  |  21 ++
 .../META-INF/db/schema-41510to41600-cleanup.sql    |  21 ++
 .../resources/META-INF/db/schema-41510to41600.sql  |  21 ++
 .../scripts/configure_systemvm_services.sh         |   2 +-
 tools/appliance/systemvmtemplate/template.json     |   4 +-
 .../hypervisor/vmware/mo/HypervisorHostHelper.java |   4 +
 11 files changed, 415 insertions(+), 176 deletions(-)

diff --cc 
engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java
index 7db4e4c,ba18565..a73317e
--- a/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java
+++ b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java
@@@ -69,6 -69,7 +69,8 @@@ import com.cloud.upgrade.dao.Upgrade412
  import com.cloud.upgrade.dao.Upgrade41300to41310;
  import com.cloud.upgrade.dao.Upgrade41310to41400;
  import com.cloud.upgrade.dao.Upgrade41400to41500;
+ import com.cloud.upgrade.dao.Upgrade41500to41510;
++import com.cloud.upgrade.dao.Upgrade41510to41600;
  import com.cloud.upgrade.dao.Upgrade420to421;
  import com.cloud.upgrade.dao.Upgrade421to430;
  import com.cloud.upgrade.dao.Upgrade430to440;
@@@ -193,6 -194,8 +195,9 @@@ public class DatabaseUpgradeChecker imp
                  .next("4.13.0.0", new Upgrade41300to41310())
                  .next("4.13.1.0", new Upgrade41310to41400())
                  .next("4.14.0.0", new Upgrade41400to41500())
+                 .next("4.14.1.0", new Upgrade41400to41500())
+                 .next("4.15.0.0", new Upgrade41500to41510())
++                .next("4.15.1.0", new Upgrade41510to41600())
                  .build();
      }
  
diff --cc 
engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41400to41500.java
index e3fe602,e3fe602..ba969ae
--- a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41400to41500.java
+++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41400to41500.java
@@@ -23,16 -23,16 +23,12 @@@ import java.sql.PreparedStatement
  import java.sql.ResultSet;
  import java.sql.SQLException;
  import java.util.ArrayList;
--import java.util.HashMap;
--import java.util.HashSet;
  import java.util.LinkedHashMap;
  import java.util.List;
  import java.util.Map;
--import java.util.Set;
  
  import org.apache.log4j.Logger;
  
--import com.cloud.hypervisor.Hypervisor;
  import com.cloud.utils.exception.CloudRuntimeException;
  
  public class Upgrade41400to41500 implements DbUpgrade {
@@@ -67,178 -67,178 +63,9 @@@
  
      @Override
      public void performDataMigration(Connection conn) {
--        updateSystemVmTemplates(conn);
          addRolePermissionsForNewReadOnlyAndSupportRoles(conn);
      }
  
--    @SuppressWarnings("serial")
--    private void updateSystemVmTemplates(final Connection conn) {
--        LOG.debug("Updating System Vm template IDs");
--        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:
--                        break;
--                }
--            }
--        } catch (final SQLException e) {
--            LOG.error("updateSystemVmTemplates: Exception caught 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.KVM, "systemvm-kvm-4.15.0");
--                put(Hypervisor.HypervisorType.VMware, 
"systemvm-vmware-4.15.0");
--                put(Hypervisor.HypervisorType.XenServer, 
"systemvm-xenserver-4.15.0");
--                put(Hypervisor.HypervisorType.Hyperv, 
"systemvm-hyperv-4.15.0");
--                put(Hypervisor.HypervisorType.LXC, "systemvm-lxc-4.15.0");
--                put(Hypervisor.HypervisorType.Ovm3, "systemvm-ovm3-4.15.0");
--            }
--        };
--
--        final Map<Hypervisor.HypervisorType, String> 
routerTemplateConfigurationNames = new HashMap<Hypervisor.HypervisorType, 
String>() {
--            {
--                put(Hypervisor.HypervisorType.KVM, "router.template.kvm");
--                put(Hypervisor.HypervisorType.VMware, 
"router.template.vmware");
--                put(Hypervisor.HypervisorType.XenServer, 
"router.template.xenserver");
--                put(Hypervisor.HypervisorType.Hyperv, 
"router.template.hyperv");
--                put(Hypervisor.HypervisorType.LXC, "router.template.lxc");
--                put(Hypervisor.HypervisorType.Ovm3, "router.template.ovm3");
--            }
--        };
--
--        final Map<Hypervisor.HypervisorType, String> newTemplateUrl = new 
HashMap<Hypervisor.HypervisorType, String>() {
--            {
--                put(Hypervisor.HypervisorType.KVM, 
"https://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.0-kvm.qcow2.bz2";);
--                put(Hypervisor.HypervisorType.VMware, 
"https://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.0-vmware.ova";);
--                put(Hypervisor.HypervisorType.XenServer, 
"https://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.0-xen.vhd.bz2";);
--                put(Hypervisor.HypervisorType.Hyperv, 
"https://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.0-hyperv.vhd.zip";);
--                put(Hypervisor.HypervisorType.LXC, 
"https://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.0-kvm.qcow2.bz2";);
--                put(Hypervisor.HypervisorType.Ovm3, 
"https://download.cloudstack.org/systemvm/4.15/systemvmtemplate-4.15.0-ovm.raw.bz2";);
--            }
--        };
--
--        final Map<Hypervisor.HypervisorType, String> newTemplateChecksum = 
new HashMap<Hypervisor.HypervisorType, String>() {
--            {
--                put(Hypervisor.HypervisorType.KVM, 
"81b3e48bb934784a13555a43c5ef5ffb");
--                put(Hypervisor.HypervisorType.XenServer, 
"1b178a5dbdbe090555515340144c6017");
--                put(Hypervisor.HypervisorType.VMware, 
"e6a88e518c57d6f36c096c4204c3417f");
--                put(Hypervisor.HypervisorType.Hyperv, 
"5c94da45337cf3e1910dcbe084d4b9ad");
--                put(Hypervisor.HypervisorType.LXC, 
"81b3e48bb934784a13555a43c5ef5ffb");
--                put(Hypervisor.HypervisorType.Ovm3, 
"875c5c65455fc06c4a012394410db375");
--            }
--        };
--
--        for (final Map.Entry<Hypervisor.HypervisorType, String> 
hypervisorAndTemplateName : NewTemplateNameList.entrySet()) {
--            LOG.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 systemvm 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) {
--                    LOG.error("updateSystemVmTemplates: Exception caught 
while getting ids of templates: " + e.getMessage());
--                    throw new CloudRuntimeException("updateSystemVmTemplates: 
Exception caught 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) {
--                        LOG.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 = ? and removed 
is NULL");) {
--                        update_templ_id_pstmt.setLong(1, templateId);
--                        update_templ_id_pstmt.setString(2, 
hypervisorAndTemplateName.getKey().toString());
--                        update_templ_id_pstmt.executeUpdate();
--                    } catch (final Exception e) {
--                        LOG.error("updateSystemVmTemplates:Exception while 
setting template for " + hypervisorAndTemplateName.getKey().toString() + " to " 
+ templateId
--                                + ": " + e.getMessage());
--                        throw new 
CloudRuntimeException("updateSystemVmTemplates:Exception while setting template 
for " + hypervisorAndTemplateName.getKey().toString() + " to "
--                                + templateId, e);
--                    }
--
--                    // Change value of global configuration parameter
--                    // router.template.* for the corresponding hypervisor
--                    try (PreparedStatement update_pstmt = 
conn.prepareStatement("UPDATE `cloud`.`configuration` SET value = ? WHERE name 
= ?");) {
--                        update_pstmt.setString(1, 
hypervisorAndTemplateName.getValue());
--                        update_pstmt.setString(2, 
routerTemplateConfigurationNames.get(hypervisorAndTemplateName.getKey()));
--                        update_pstmt.executeUpdate();
--                    } catch (final SQLException e) {
--                        LOG.error("updateSystemVmTemplates:Exception while 
setting " + 
routerTemplateConfigurationNames.get(hypervisorAndTemplateName.getKey()) + " to 
"
--                                + hypervisorAndTemplateName.getValue() + ": " 
+ e.getMessage());
--                        throw new 
CloudRuntimeException("updateSystemVmTemplates:Exception while setting "
--                                + 
routerTemplateConfigurationNames.get(hypervisorAndTemplateName.getKey()) + " to 
" + hypervisorAndTemplateName.getValue(), e);
--                    }
--
--                    // Change value of global configuration parameter
--                    // minreq.sysvmtemplate.version for the ACS version
--                    try (PreparedStatement update_pstmt = 
conn.prepareStatement("UPDATE `cloud`.`configuration` SET value = ? WHERE name 
= ?");) {
--                        update_pstmt.setString(1, "4.15.0");
--                        update_pstmt.setString(2, 
"minreq.sysvmtemplate.version");
--                        update_pstmt.executeUpdate();
--                    } catch (final SQLException e) {
--                        LOG.error("updateSystemVmTemplates:Exception while 
setting 'minreq.sysvmtemplate.version' to 4.15.0: " + e.getMessage());
--                        throw new 
CloudRuntimeException("updateSystemVmTemplates:Exception while setting 
'minreq.sysvmtemplate.version' to 4.15.0", e);
--                    }
--                } else {
--                    if 
(hypervisorsListInUse.contains(hypervisorAndTemplateName.getKey())) {
--                        throw new CloudRuntimeException(getUpgradedVersion() 
+ hypervisorAndTemplateName.getKey() + " SystemVm template not found. Cannot 
upgrade system Vms");
--                    } else {
--                        LOG.warn(getUpgradedVersion() + 
hypervisorAndTemplateName.getKey() + " SystemVm template not found. " + 
hypervisorAndTemplateName.getKey()
--                                + " hypervisor is not used, so not failing 
upgrade");
--                        // Update the latest template URLs for corresponding
--                        // hypervisor
--                        try (PreparedStatement update_templ_url_pstmt = conn
--                                .prepareStatement("UPDATE 
`cloud`.`vm_template` SET url = ? , checksum = ? WHERE hypervisor_type = ? AND 
type = 'SYSTEM' AND removed is null order by id desc limit 1");) {
--                            update_templ_url_pstmt.setString(1, 
newTemplateUrl.get(hypervisorAndTemplateName.getKey()));
--                            update_templ_url_pstmt.setString(2, 
newTemplateChecksum.get(hypervisorAndTemplateName.getKey()));
--                            update_templ_url_pstmt.setString(3, 
hypervisorAndTemplateName.getKey().toString());
--                            update_templ_url_pstmt.executeUpdate();
--                        } catch (final SQLException e) {
--                            LOG.error("updateSystemVmTemplates:Exception 
while updating 'url' and 'checksum' for hypervisor type "
--                                    + 
hypervisorAndTemplateName.getKey().toString() + ": " + e.getMessage());
--                            throw new 
CloudRuntimeException("updateSystemVmTemplates:Exception while updating 'url' 
and 'checksum' for hypervisor type "
--                                    + 
hypervisorAndTemplateName.getKey().toString(), e);
--                        }
--                    }
--                }
--            } catch (final SQLException e) {
--                LOG.error("updateSystemVmTemplates:Exception while getting 
ids of templates: " + e.getMessage());
--                throw new 
CloudRuntimeException("updateSystemVmTemplates:Exception while getting ids of 
templates", e);
--            }
--        }
--        LOG.debug("Updating System Vm Template IDs Complete");
--    }
--
      private void addRolePermissionsForNewReadOnlyAndSupportRoles(final 
Connection conn) {
          addRolePermissionsForReadOnlyAdmin(conn);
          addRolePermissionsForReadOnlyUser(conn);
diff --cc 
engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41510to41600.java
index 0000000,0000000..231d1e9
new file mode 100644
--- /dev/null
+++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41510to41600.java
@@@ -1,0 -1,0 +1,248 @@@
++// Licensed to the Apache Software Foundation (ASF) under one
++// or more contributor license agreements.  See the NOTICE file
++// distributed with this work for additional information
++// regarding copyright ownership.  The ASF licenses this file
++// to you under the Apache License, Version 2.0 (the
++// "License"); you may not use this file except in compliance
++// with the License.  You may obtain a copy of the License at
++//
++//   http://www.apache.org/licenses/LICENSE-2.0
++//
++// Unless required by applicable law or agreed to in writing,
++// software distributed under the License is distributed on an
++// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
++// KIND, either express or implied.  See the License for the
++// specific language governing permissions and limitations
++// under the License.
++
++package com.cloud.upgrade.dao;
++
++import java.io.InputStream;
++import java.sql.Connection;
++import java.sql.PreparedStatement;
++import java.sql.ResultSet;
++import java.sql.SQLException;
++import java.util.HashMap;
++import java.util.HashSet;
++import java.util.Map;
++import java.util.Set;
++
++import org.apache.log4j.Logger;
++
++import com.cloud.hypervisor.Hypervisor;
++import com.cloud.utils.exception.CloudRuntimeException;
++
++public class Upgrade41510to41600 implements DbUpgrade {
++
++    final static Logger LOG = Logger.getLogger(Upgrade41510to41600.class);
++
++    @Override
++    public String[] getUpgradableVersionRange() {
++        return new String[] {"4.15.1.0", "4.16.0.0"};
++    }
++
++    @Override
++    public String getUpgradedVersion() {
++        return "4.16.0.0";
++    }
++
++    @Override
++    public boolean supportsRollingUpgrade() {
++        return false;
++    }
++
++    @Override
++    public InputStream[] getPrepareScripts() {
++        final String scriptFile = "META-INF/db/schema-41510to41600.sql";
++        final InputStream script = 
Thread.currentThread().getContextClassLoader().getResourceAsStream(scriptFile);
++        if (script == null) {
++            throw new CloudRuntimeException("Unable to find " + scriptFile);
++        }
++
++        return new InputStream[] {script};
++    }
++
++    @Override
++    public void performDataMigration(Connection conn) {
++        updateSystemVmTemplates(conn);
++    }
++
++    @SuppressWarnings("serial")
++    private void updateSystemVmTemplates(final Connection conn) {
++        LOG.debug("Updating System Vm template IDs");
++        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:
++                        break;
++                }
++            }
++        } catch (final SQLException e) {
++            LOG.error("updateSystemVmTemplates: Exception caught 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.KVM, "systemvm-kvm-4.16.0");
++                put(Hypervisor.HypervisorType.VMware, 
"systemvm-vmware-4.16.0");
++                put(Hypervisor.HypervisorType.XenServer, 
"systemvm-xenserver-4.16.0");
++                put(Hypervisor.HypervisorType.Hyperv, 
"systemvm-hyperv-4.16.0");
++                put(Hypervisor.HypervisorType.LXC, "systemvm-lxc-4.16.0");
++                put(Hypervisor.HypervisorType.Ovm3, "systemvm-ovm3-4.16.0");
++            }
++        };
++
++        final Map<Hypervisor.HypervisorType, String> 
routerTemplateConfigurationNames = new HashMap<Hypervisor.HypervisorType, 
String>() {
++            {
++                put(Hypervisor.HypervisorType.KVM, "router.template.kvm");
++                put(Hypervisor.HypervisorType.VMware, 
"router.template.vmware");
++                put(Hypervisor.HypervisorType.XenServer, 
"router.template.xenserver");
++                put(Hypervisor.HypervisorType.Hyperv, 
"router.template.hyperv");
++                put(Hypervisor.HypervisorType.LXC, "router.template.lxc");
++                put(Hypervisor.HypervisorType.Ovm3, "router.template.ovm3");
++            }
++        };
++
++        final Map<Hypervisor.HypervisorType, String> newTemplateUrl = new 
HashMap<Hypervisor.HypervisorType, String>() {
++            {
++                put(Hypervisor.HypervisorType.KVM, 
"https://download.cloudstack.org/systemvm/4.16/systemvmtemplate-4.16.0-kvm.qcow2.bz2";);
++                put(Hypervisor.HypervisorType.VMware, 
"https://download.cloudstack.org/systemvm/4.16/systemvmtemplate-4.16.0-vmware.ova";);
++                put(Hypervisor.HypervisorType.XenServer, 
"https://download.cloudstack.org/systemvm/4.16/systemvmtemplate-4.16.0-xen.vhd.bz2";);
++                put(Hypervisor.HypervisorType.Hyperv, 
"https://download.cloudstack.org/systemvm/4.16/systemvmtemplate-4.16.0-hyperv.vhd.zip";);
++                put(Hypervisor.HypervisorType.LXC, 
"https://download.cloudstack.org/systemvm/4.16/systemvmtemplate-4.16.0-kvm.qcow2.bz2";);
++                put(Hypervisor.HypervisorType.Ovm3, 
"https://download.cloudstack.org/systemvm/4.16/systemvmtemplate-4.16.0-ovm.raw.bz2";);
++            }
++        };
++
++        final Map<Hypervisor.HypervisorType, String> newTemplateChecksum = 
new HashMap<Hypervisor.HypervisorType, String>() {
++            {
++                put(Hypervisor.HypervisorType.KVM, 
"81b3e48bb934784a13555a43c5ef5ffb");
++                put(Hypervisor.HypervisorType.XenServer, 
"1b178a5dbdbe090555515340144c6017");
++                put(Hypervisor.HypervisorType.VMware, 
"e6a88e518c57d6f36c096c4204c3417f");
++                put(Hypervisor.HypervisorType.Hyperv, 
"5c94da45337cf3e1910dcbe084d4b9ad");
++                put(Hypervisor.HypervisorType.LXC, 
"81b3e48bb934784a13555a43c5ef5ffb");
++                put(Hypervisor.HypervisorType.Ovm3, 
"875c5c65455fc06c4a012394410db375");
++            }
++        };
++
++        for (final Map.Entry<Hypervisor.HypervisorType, String> 
hypervisorAndTemplateName : NewTemplateNameList.entrySet()) {
++            LOG.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 systemvm 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) {
++                    LOG.error("updateSystemVmTemplates: Exception caught 
while getting ids of templates: " + e.getMessage());
++                    throw new CloudRuntimeException("updateSystemVmTemplates: 
Exception caught 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) {
++                        LOG.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 = ? and removed 
is NULL");) {
++                        update_templ_id_pstmt.setLong(1, templateId);
++                        update_templ_id_pstmt.setString(2, 
hypervisorAndTemplateName.getKey().toString());
++                        update_templ_id_pstmt.executeUpdate();
++                    } catch (final Exception e) {
++                        LOG.error("updateSystemVmTemplates:Exception while 
setting template for " + hypervisorAndTemplateName.getKey().toString() + " to " 
+ templateId
++                                + ": " + e.getMessage());
++                        throw new 
CloudRuntimeException("updateSystemVmTemplates:Exception while setting template 
for " + hypervisorAndTemplateName.getKey().toString() + " to "
++                                + templateId, e);
++                    }
++
++                    // Change value of global configuration parameter
++                    // router.template.* for the corresponding hypervisor
++                    try (PreparedStatement update_pstmt = 
conn.prepareStatement("UPDATE `cloud`.`configuration` SET value = ? WHERE name 
= ?");) {
++                        update_pstmt.setString(1, 
hypervisorAndTemplateName.getValue());
++                        update_pstmt.setString(2, 
routerTemplateConfigurationNames.get(hypervisorAndTemplateName.getKey()));
++                        update_pstmt.executeUpdate();
++                    } catch (final SQLException e) {
++                        LOG.error("updateSystemVmTemplates:Exception while 
setting " + 
routerTemplateConfigurationNames.get(hypervisorAndTemplateName.getKey()) + " to 
"
++                                + hypervisorAndTemplateName.getValue() + ": " 
+ e.getMessage());
++                        throw new 
CloudRuntimeException("updateSystemVmTemplates:Exception while setting "
++                                + 
routerTemplateConfigurationNames.get(hypervisorAndTemplateName.getKey()) + " to 
" + hypervisorAndTemplateName.getValue(), e);
++                    }
++
++                    // Change value of global configuration parameter
++                    // minreq.sysvmtemplate.version for the ACS version
++                    try (PreparedStatement update_pstmt = 
conn.prepareStatement("UPDATE `cloud`.`configuration` SET value = ? WHERE name 
= ?");) {
++                        update_pstmt.setString(1, "4.16.0");
++                        update_pstmt.setString(2, 
"minreq.sysvmtemplate.version");
++                        update_pstmt.executeUpdate();
++                    } catch (final SQLException e) {
++                        LOG.error("updateSystemVmTemplates:Exception while 
setting 'minreq.sysvmtemplate.version' to 4.16.0: " + e.getMessage());
++                        throw new 
CloudRuntimeException("updateSystemVmTemplates:Exception while setting 
'minreq.sysvmtemplate.version' to 4.16.0", e);
++                    }
++                } else {
++                    if 
(hypervisorsListInUse.contains(hypervisorAndTemplateName.getKey())) {
++                        throw new CloudRuntimeException(getUpgradedVersion() 
+ hypervisorAndTemplateName.getKey() + " SystemVm template not found. Cannot 
upgrade system Vms");
++                    } else {
++                        LOG.warn(getUpgradedVersion() + 
hypervisorAndTemplateName.getKey() + " SystemVm template not found. " + 
hypervisorAndTemplateName.getKey()
++                                + " hypervisor is not used, so not failing 
upgrade");
++                        // Update the latest template URLs for corresponding
++                        // hypervisor
++                        try (PreparedStatement update_templ_url_pstmt = conn
++                                .prepareStatement("UPDATE 
`cloud`.`vm_template` SET url = ? , checksum = ? WHERE hypervisor_type = ? AND 
type = 'SYSTEM' AND removed is null order by id desc limit 1");) {
++                            update_templ_url_pstmt.setString(1, 
newTemplateUrl.get(hypervisorAndTemplateName.getKey()));
++                            update_templ_url_pstmt.setString(2, 
newTemplateChecksum.get(hypervisorAndTemplateName.getKey()));
++                            update_templ_url_pstmt.setString(3, 
hypervisorAndTemplateName.getKey().toString());
++                            update_templ_url_pstmt.executeUpdate();
++                        } catch (final SQLException e) {
++                            LOG.error("updateSystemVmTemplates:Exception 
while updating 'url' and 'checksum' for hypervisor type "
++                                    + 
hypervisorAndTemplateName.getKey().toString() + ": " + e.getMessage());
++                            throw new 
CloudRuntimeException("updateSystemVmTemplates:Exception while updating 'url' 
and 'checksum' for hypervisor type "
++                                    + 
hypervisorAndTemplateName.getKey().toString(), e);
++                        }
++                    }
++                }
++            } catch (final SQLException e) {
++                LOG.error("updateSystemVmTemplates:Exception while getting 
ids of templates: " + e.getMessage());
++                throw new 
CloudRuntimeException("updateSystemVmTemplates:Exception while getting ids of 
templates", e);
++            }
++        }
++        LOG.debug("Updating System Vm Template IDs Complete");
++    }
++
++    @Override
++    public InputStream[] getCleanupScripts() {
++        final String scriptFile = 
"META-INF/db/schema-41510to41600-cleanup.sql";
++        final InputStream script = 
Thread.currentThread().getContextClassLoader().getResourceAsStream(scriptFile);
++        if (script == null) {
++            throw new CloudRuntimeException("Unable to find " + scriptFile);
++        }
++
++        return new InputStream[] {script};
++    }
++}
diff --cc 
engine/schema/src/main/resources/META-INF/db/schema-41510to41600-cleanup.sql
index 0000000,0000000..bbba515
new file mode 100644
--- /dev/null
+++ 
b/engine/schema/src/main/resources/META-INF/db/schema-41510to41600-cleanup.sql
@@@ -1,0 -1,0 +1,21 @@@
++-- Licensed to the Apache Software Foundation (ASF) under one
++-- or more contributor license agreements.  See the NOTICE file
++-- distributed with this work for additional information
++-- regarding copyright ownership.  The ASF licenses this file
++-- to you under the Apache License, Version 2.0 (the
++-- "License"); you may not use this file except in compliance
++-- with the License.  You may obtain a copy of the License at
++--
++--   http://www.apache.org/licenses/LICENSE-2.0
++--
++-- Unless required by applicable law or agreed to in writing,
++-- software distributed under the License is distributed on an
++-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
++-- KIND, either express or implied.  See the License for the
++-- specific language governing permissions and limitations
++-- under the License.
++
++--;
++-- Schema upgrade cleanup from 4.15.1.0 to 4.16.0.0
++--;
++
diff --cc engine/schema/src/main/resources/META-INF/db/schema-41510to41600.sql
index 0000000,0000000..0588c6d
new file mode 100644
--- /dev/null
+++ b/engine/schema/src/main/resources/META-INF/db/schema-41510to41600.sql
@@@ -1,0 -1,0 +1,21 @@@
++-- Licensed to the Apache Software Foundation (ASF) under one
++-- or more contributor license agreements.  See the NOTICE file
++-- distributed with this work for additional information
++-- regarding copyright ownership.  The ASF licenses this file
++-- to you under the Apache License, Version 2.0 (the
++-- "License"); you may not use this file except in compliance
++-- with the License.  You may obtain a copy of the License at
++--
++--   http://www.apache.org/licenses/LICENSE-2.0
++--
++-- Unless required by applicable law or agreed to in writing,
++-- software distributed under the License is distributed on an
++-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
++-- KIND, either express or implied.  See the License for the
++-- specific language governing permissions and limitations
++-- under the License.
++
++--;
++-- Schema upgrade from 4.15.1.0 to 4.16.0.0
++--;
++
diff --cc 
tools/appliance/systemvmtemplate/scripts/configure_systemvm_services.sh
index 4e8605d,4e8605d..5160857
--- a/tools/appliance/systemvmtemplate/scripts/configure_systemvm_services.sh
+++ b/tools/appliance/systemvmtemplate/scripts/configure_systemvm_services.sh
@@@ -19,7 -19,7 +19,7 @@@
  set -e
  set -x
  
--CLOUDSTACK_RELEASE=4.15.0
++CLOUDSTACK_RELEASE=4.16.0
  
  function configure_apache2() {
     # Enable ssl, rewrite and auth
diff --cc tools/appliance/systemvmtemplate/template.json
index e87effc,e87effc..3de676b
--- a/tools/appliance/systemvmtemplate/template.json
+++ b/tools/appliance/systemvmtemplate/template.json
@@@ -36,8 -36,8 +36,8 @@@
        "disk_size": 2500,
        "disk_interface": "virtio",
        "net_device": "virtio-net",
--      "iso_url": 
"https://download.cloudstack.org/systemvm/debian/debian-10.5.0-amd64-netinst.iso";,
--      "iso_checksum": 
"0a6aee1d9aafc1ed095105c052f9fdd65ed00ea9274188c9cd0072c8e6838ab40e246d45a1e6956d74ef1b04a1fc042151762f25412e9ff0cbf49418eef7992e",
++      "iso_url": 
"https://download.cloudstack.org/systemvm/debian/debian-10.7.0-amd64-netinst.iso";,
++      "iso_checksum": 
"cb6795ca61326e9fa58099898e53dc6c708f4b1473687fab5679f824adc78bbe1d543f3b4aed9e56613e7b150e27d6be317efc499e25a92efefed1ed623a90a6",
        "iso_checksum_type": "sha512",
        "output_directory": "../dist",
        "http_directory": "http",

Reply via email to