diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java index 0e5d598505f..50ff97ac676 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java @@ -85,6 +85,7 @@ public class AssignVMCmd extends BaseCmd { "In case no security groups are provided the Instance is part of the default security group.") private List securityGroupIdList; + // Internal flag to allow assignment without adding a network private boolean skipNetwork = false; ///////////////////////////////////////////////////// diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/DeployVMCmdByAdmin.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/DeployVMCmdByAdmin.java index 5760bd25a36..fb9501ff660 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/DeployVMCmdByAdmin.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/DeployVMCmdByAdmin.java @@ -41,6 +41,12 @@ public class DeployVMCmdByAdmin extends DeployVMCmd implements AdminCmd { @Parameter(name = ApiConstants.CLUSTER_ID, type = CommandType.UUID, entityType = ClusterResponse.class, description = "Destination Cluster ID to deploy the Instance to - parameter available for root admin only", since = "4.13") private Long clusterId; + @Parameter(name = ApiConstants.BLANK_INSTANCE, + type = CommandType.BOOLEAN, + description = "Whether to create a blank instance without storage and network", + since = "4.23.0") + private Boolean blankInstance; + public Long getPodId() { return podId; } @@ -49,6 +55,11 @@ public class DeployVMCmdByAdmin extends DeployVMCmd implements AdminCmd { return clusterId; } + @Override + public boolean isBlankInstance() { + return Boolean.TRUE.equals(blankInstance); + } + ///////////////////////////////////////////////////// ////////////////// Setters ////////////////////////// ///////////////////////////////////////////////////// @@ -56,4 +67,8 @@ public class DeployVMCmdByAdmin extends DeployVMCmd implements AdminCmd { public void setClusterId(Long clusterId) { this.clusterId = clusterId; } + + public void setBlankInstance(boolean blankInstance) { + this.blankInstance = blankInstance; + } } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java index 2fdb12f3b1f..0611fe51a9a 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java @@ -66,10 +66,6 @@ public class DeployVMCmd extends BaseDeployVMCmd { @Parameter(name = ApiConstants.SNAPSHOT_ID, type = CommandType.UUID, entityType = SnapshotResponse.class, since = "4.21") private Long snapshotId; - @Parameter(name = "blank", type = CommandType.BOOLEAN, since = "4.23.0") - private Boolean blankInstance; - - ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -95,7 +91,7 @@ public class DeployVMCmd extends BaseDeployVMCmd { } public boolean isBlankInstance() { - return Boolean.TRUE.equals(blankInstance); + return false; } @@ -191,10 +187,6 @@ public class DeployVMCmd extends BaseDeployVMCmd { this.snapshotId = snapshotId; } - public void setBlankInstance(boolean blankInstance) { - this.blankInstance = blankInstance; - } - @Override public void execute() { UserVm result; diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java index edd0f716d31..ec7a626fa15 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java @@ -115,7 +115,7 @@ public class CreateVolumeCmd extends BaseAsyncCreateCustomIdCmd implements UserC entityType = StoragePoolResponse.class, description = "Storage pool ID to create the volume in. Cannot be used with the snapshotid parameter.", authorized = {RoleType.Admin}, - since = "4.23.0") + since = "4.22.1") private Long storageId; ///////////////////////////////////////////////////// diff --git a/api/src/test/java/org/apache/cloudstack/api/command/admin/vm/DeployVMCmdByAdminTest.java b/api/src/test/java/org/apache/cloudstack/api/command/admin/vm/DeployVMCmdByAdminTest.java new file mode 100644 index 00000000000..b02cbaf6ec3 --- /dev/null +++ b/api/src/test/java/org/apache/cloudstack/api/command/admin/vm/DeployVMCmdByAdminTest.java @@ -0,0 +1,58 @@ +package org.apache.cloudstack.api.command.admin.vm; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.test.util.ReflectionTestUtils; + +@RunWith(MockitoJUnitRunner.class) +public class DeployVMCmdByAdminTest { + + @InjectMocks + private DeployVMCmdByAdmin cmd; + + @Test + public void testIsBlankInstance_default() { + assertFalse(cmd.isBlankInstance()); + } + + @Test + public void testIsBlankInstance_true() { + ReflectionTestUtils.setField(cmd, "blankInstance", true); + assertTrue(cmd.isBlankInstance()); + } + + @Test + public void testIsBlankInstance_false() { + ReflectionTestUtils.setField(cmd, "blankInstance", false); + assertFalse(cmd.isBlankInstance()); + } + + @Test + public void testSetBlankInstance_default() { + Object obj = ReflectionTestUtils.getField(cmd, "blankInstance"); + assertNull(obj); + } + + @Test + public void testSetBlankInstance_true() { + cmd.setBlankInstance(true); + Object obj = ReflectionTestUtils.getField(cmd, "blankInstance"); + assertNotNull(obj); + assertTrue((boolean)obj); + } + + @Test + public void testSetBlankInstance_false() { + cmd.setBlankInstance(false); + Object obj = ReflectionTestUtils.getField(cmd, "blankInstance"); + assertNotNull(obj); + assertFalse((boolean)obj); + } +} diff --git a/api/src/test/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmdTest.java index e08e0cba61c..09d396e4023 100644 --- a/api/src/test/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmdTest.java +++ b/api/src/test/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmdTest.java @@ -623,11 +623,5 @@ public class DeployVMCmdTest { @Test public void testIsBlankInstance() { assertFalse(cmd.isBlankInstance()); - - cmd.setBlankInstance(true); - assertTrue(cmd.isBlankInstance()); - - cmd.setBlankInstance(false); - assertFalse(cmd.isBlankInstance()); } } diff --git a/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java b/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java index 2f9fe9c71f9..92af441d06b 100644 --- a/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java +++ b/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java @@ -479,7 +479,7 @@ public class ProjectManagerImpl extends ManagerBase implements ProjectManager, C return _projectAccountDao.persist(projectAccountVO); } - public ProjectAccount assignUserToProject(Project project, long userId, long accountId, Role userRole, Long projectRoleId) { + public ProjectAccount assignUserToProject(Project project, long userId, long accountId, Role userRole, Long projectRoleId) { return assignAccountToProject(project, accountId, userRole, userId, projectRoleId); } diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 324ea88a17a..2909262849c 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -426,7 +426,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir private static final long GiB_TO_BYTES = 1024 * 1024 * 1024; - private static final String KVM_VM_DUMMY_TEMPLATE_NAME = "kvm-vm-dummy-template"; + private static final String KVM_BLANK_VM_TEMPLATE_NAME = "kvm-blank-vm-template"; @Inject @@ -10115,7 +10115,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir } protected boolean isBlankInstanceDefaultTemplate(VirtualMachineTemplate template) { - return KVM_VM_DUMMY_TEMPLATE_NAME.equals(template.getUniqueName()); + return KVM_BLANK_VM_TEMPLATE_NAME.equals(template.getUniqueName()); } @Override @@ -10128,18 +10128,17 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir } VMTemplateVO getBlankInstanceTemplate() { - VMTemplateVO template = _templateDao.findByName(KVM_VM_DUMMY_TEMPLATE_NAME); + VMTemplateVO template = _templateDao.findByName(KVM_BLANK_VM_TEMPLATE_NAME); if (template != null) { return template; } template = VMTemplateVO.createSystemIso(_templateDao.getNextInSequence(Long.class, "id"), - KVM_VM_DUMMY_TEMPLATE_NAME, KVM_VM_DUMMY_TEMPLATE_NAME, true, + KVM_BLANK_VM_TEMPLATE_NAME, KVM_BLANK_VM_TEMPLATE_NAME, true, "", true, 64, Account.ACCOUNT_ID_SYSTEM, "", - "Dummy Template for KVM VM", false, 1); + "Blank Template for KVM VM", false, 1); template.setState(VirtualMachineTemplate.State.Active); template.setFormat(ImageFormat.QCOW2); template = _templateDao.persist(template); -// _templateDao.remove(template.getId()); return template; } } diff --git a/tools/apidoc/gen_toc.py b/tools/apidoc/gen_toc.py index 9c521caf1f4..ead8f0620ba 100644 --- a/tools/apidoc/gen_toc.py +++ b/tools/apidoc/gen_toc.py @@ -225,11 +225,6 @@ known_categories = { 'Restore' : 'Backup and Recovery', 'startBackup' : 'Backup and Recovery', 'finalizeBackup' : 'Backup and Recovery', - 'createImageTransfer' : 'Backup and Recovery', - 'finalizeImageTransfer' : 'Backup and Recovery', - 'listImageTransfers' : 'Backup and Recovery', - 'listVmCheckpoints' : 'Backup and Recovery', - 'deleteVmCheckpoint' : 'Backup and Recovery', 'ImageTransfer' : 'Backup and Recovery', 'VmCheckpoint' : 'Backup and Recovery', 'UnmanagedInstance': 'Virtual Machine', diff --git a/ui/src/components/view/SettingsTab.vue b/ui/src/components/view/SettingsTab.vue index 476c20b5c06..0bb8a1569cc 100644 --- a/ui/src/components/view/SettingsTab.vue +++ b/ui/src/components/view/SettingsTab.vue @@ -87,7 +87,6 @@ export default { } }, created () { - console.log('---------------', this.$route.meta.name) switch (this.$route.meta.name) { case 'account': this.scopeKey = 'accountid'