Skip to content

Commit 78de298

Browse files
sureshanapartiLocharla, Sandeep
authored andcommitted
Fix duplicate dummy templates, and update guest os for dummy template (#12780)
* Fix duplicate dummy template 'kvm-default-vm-import-dummy-template' entries * Update guest os id of dummy template to 99 (Other Linux (64-bit)) from existing id: 1 (CentOS 4.5 (32-bit)) * update migration path to remove duplicate dummy templates
1 parent 2227aa6 commit 78de298

4 files changed

Lines changed: 57 additions & 2 deletions

File tree

api/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626

2727
public interface UnmanagedVMsManager extends VmImportService, UnmanageVMService, PluggableService, Configurable {
2828

29+
String VM_IMPORT_DEFAULT_TEMPLATE_NAME = "system-default-vm-import-dummy-template.iso";
30+
String KVM_VM_IMPORT_DEFAULT_TEMPLATE_NAME = "kvm-default-vm-import-dummy-template";
2931
ConfigKey<Boolean> UnmanageVMPreserveNic = new ConfigKey<>("Advanced", Boolean.class, "unmanage.vm.preserve.nics", "false",
3032
"If set to true, do not remove VM nics (and its MAC addresses) when unmanaging a VM, leaving them allocated but not reserved. " +
3133
"If set to false, nics are removed and MAC addresses can be reassigned", true, ConfigKey.Scope.Zone);

engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade42200to42210.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@
1616
// under the License.
1717
package com.cloud.upgrade.dao;
1818

19+
import org.apache.cloudstack.vm.UnmanagedVMsManager;
20+
21+
import java.sql.Connection;
22+
import java.sql.PreparedStatement;
23+
import java.sql.ResultSet;
24+
import java.util.ArrayList;
25+
import java.util.List;
26+
1927
public class Upgrade42200to42210 extends DbUpgradeAbstractImpl implements DbUpgrade, DbUpgradeSystemVmTemplate {
2028

2129
@Override
@@ -27,4 +35,47 @@ public String[] getUpgradableVersionRange() {
2735
public String getUpgradedVersion() {
2836
return "4.22.1.0";
2937
}
38+
39+
@Override
40+
public void performDataMigration(Connection conn) {
41+
removeDuplicateKVMImportTemplates(conn);
42+
}
43+
44+
private void removeDuplicateKVMImportTemplates(Connection conn) {
45+
List<Long> templateIds = new ArrayList<>();
46+
try (PreparedStatement selectStmt = conn.prepareStatement(String.format("SELECT id FROM cloud.vm_template WHERE name='%s' ORDER BY id ASC", UnmanagedVMsManager.KVM_VM_IMPORT_DEFAULT_TEMPLATE_NAME))) {
47+
ResultSet rs = selectStmt.executeQuery();
48+
while (rs.next()) {
49+
templateIds.add(rs.getLong(1));
50+
}
51+
52+
if (templateIds.size() <= 1) {
53+
return;
54+
}
55+
56+
logger.info("Removing duplicate template " + UnmanagedVMsManager.KVM_VM_IMPORT_DEFAULT_TEMPLATE_NAME + " entries");
57+
Long firstTemplateId = templateIds.get(0);
58+
59+
String updateTemplateSql = "UPDATE cloud.vm_instance SET vm_template_id = ? WHERE vm_template_id = ?";
60+
String deleteTemplateSql = "DELETE FROM cloud.vm_template WHERE id = ?";
61+
62+
try (PreparedStatement updateTemplateStmt = conn.prepareStatement(updateTemplateSql);
63+
PreparedStatement deleteTemplateStmt = conn.prepareStatement(deleteTemplateSql)) {
64+
for (int i = 1; i < templateIds.size(); i++) {
65+
Long duplicateTemplateId = templateIds.get(i);
66+
67+
// Update VM references
68+
updateTemplateStmt.setLong(1, firstTemplateId);
69+
updateTemplateStmt.setLong(2, duplicateTemplateId);
70+
updateTemplateStmt.executeUpdate();
71+
72+
// Delete duplicate dummy template
73+
deleteTemplateStmt.setLong(1, duplicateTemplateId);
74+
deleteTemplateStmt.executeUpdate();
75+
}
76+
}
77+
} catch (Exception e) {
78+
logger.warn("Failed to remove duplicate template " + UnmanagedVMsManager.KVM_VM_IMPORT_DEFAULT_TEMPLATE_NAME + " entries", e);
79+
}
80+
}
3081
}

engine/schema/src/main/resources/META-INF/db/schema-42200to42210.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,5 @@ UPDATE `cloud`.`alert` SET type = 34 WHERE name = 'ALERT.VR.PRIVATE.IFACE.MTU';
3333

3434
-- Update configuration 'kvm.ssh.to.agent' description and is_dynamic fields
3535
UPDATE `cloud`.`configuration` SET description = 'True if the management server will restart the agent service via SSH into the KVM hosts after or during maintenance operations', is_dynamic = 1 WHERE name = 'kvm.ssh.to.agent';
36+
37+
UPDATE `cloud`.`vm_template` SET guest_os_id = 99 WHERE name = 'kvm-default-vm-import-dummy-template';

engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategy.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,8 @@
148148
import java.util.stream.Collectors;
149149
import org.apache.commons.collections.CollectionUtils;
150150

151-
import static org.apache.cloudstack.vm.UnmanagedVMsManagerImpl.KVM_VM_IMPORT_DEFAULT_TEMPLATE_NAME;
152-
import static org.apache.cloudstack.vm.UnmanagedVMsManagerImpl.VM_IMPORT_DEFAULT_TEMPLATE_NAME;
151+
import static org.apache.cloudstack.vm.UnmanagedVMsManager.KVM_VM_IMPORT_DEFAULT_TEMPLATE_NAME;
152+
import static org.apache.cloudstack.vm.UnmanagedVMsManager.VM_IMPORT_DEFAULT_TEMPLATE_NAME;
153153

154154
public class StorageSystemDataMotionStrategy implements DataMotionStrategy {
155155
protected Logger logger = LogManager.getLogger(getClass());

0 commit comments

Comments
 (0)