From 37b2a4826d7ba776c58225438aa682d42c2bfc3c Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Thu, 19 Jan 2023 13:09:19 +0100 Subject: [PATCH 1/3] api/server: add project id/name in ssh keypair response (#7100) --- .../api/response/SSHKeyPairResponse.java | 16 ++++++++++++++++ .../java/com/cloud/api/ApiResponseHelper.java | 8 +++++++- ui/src/config/section/compute.js | 12 +++++++++--- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/response/SSHKeyPairResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/SSHKeyPairResponse.java index 7bd423910be..65e5c5b7413 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/SSHKeyPairResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/SSHKeyPairResponse.java @@ -46,6 +46,14 @@ public class SSHKeyPairResponse extends BaseResponseWithAnnotations { @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the keypair owner") private String domain; + @SerializedName(ApiConstants.PROJECT_ID) + @Param(description = "the project id of the keypair owner") + private String projectId; + + @SerializedName(ApiConstants.PROJECT) + @Param(description = "the project name of the keypair owner") + private String projectName; + @SerializedName("fingerprint") @Param(description = "Fingerprint of the public key") private String fingerprint; @@ -106,4 +114,12 @@ public class SSHKeyPairResponse extends BaseResponseWithAnnotations { public void setId(String id) { this.id = id; } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } } diff --git a/server/src/main/java/com/cloud/api/ApiResponseHelper.java b/server/src/main/java/com/cloud/api/ApiResponseHelper.java index 4b1963a1ae0..ce1de79b1ff 100644 --- a/server/src/main/java/com/cloud/api/ApiResponseHelper.java +++ b/server/src/main/java/com/cloud/api/ApiResponseHelper.java @@ -4556,7 +4556,13 @@ public class ApiResponseHelper implements ResponseGenerator { sshkeyPair.getFingerprint(), sshkeyPair.getPrivateKey()); } Account account = ApiDBUtils.findAccountById(sshkeyPair.getAccountId()); - response.setAccountName(account.getAccountName()); + if (account.getType() == Account.Type.PROJECT) { + Project project = ApiDBUtils.findProjectByProjectAccountIdIncludingRemoved(account.getAccountId()); + response.setProjectId(project.getUuid()); + response.setProjectName(project.getName()); + } else { + response.setAccountName(account.getAccountName()); + } Domain domain = ApiDBUtils.findDomainById(sshkeyPair.getDomainId()); response.setDomainId(domain.getUuid()); response.setDomainName(domain.getName()); diff --git a/ui/src/config/section/compute.js b/ui/src/config/section/compute.js index 5249185651d..e733d980f38 100644 --- a/ui/src/config/section/compute.js +++ b/ui/src/config/section/compute.js @@ -576,7 +576,7 @@ export default { return fields }, resourceType: 'SSHKeyPair', - details: ['id', 'name', 'fingerprint', 'account', 'domain'], + details: ['id', 'name', 'fingerprint', 'account', 'domain', 'project'], related: [{ name: 'vm', title: 'label.instances', @@ -608,11 +608,14 @@ export default { label: 'label.remove.ssh.key.pair', message: 'message.please.confirm.remove.ssh.key.pair', dataView: true, - args: ['name', 'account', 'domainid'], + args: ['name', 'account', 'domainid', 'projectid'], mapping: { name: { value: (record, params) => { return record.name } }, + projectid: { + value: (record, params) => { return record.projectid } + }, account: { value: (record, params) => { return record.account } }, @@ -626,7 +629,10 @@ export default { return selection.map(x => { const data = record.filter(y => { return y.id === x }) return { - name: data[0].name, account: data[0].account, domainid: data[0].domainid + name: data[0].name, + account: data[0].account, + domainid: data[0].domainid, + projectid: data[0].projectid } }) } From 9366c4ea01ac1ed9990f0b5cb47e1ba97cbd90c3 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Fri, 20 Jan 2023 10:34:34 +0100 Subject: [PATCH 2/3] CKS: remove details when delete a cks cluster (#7104) --- .../cluster/actionworkers/KubernetesClusterDestroyWorker.java | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterDestroyWorker.java b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterDestroyWorker.java index 47acf31f10f..ba29164eae9 100644 --- a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterDestroyWorker.java +++ b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterDestroyWorker.java @@ -267,6 +267,7 @@ public class KubernetesClusterDestroyWorker extends KubernetesClusterResourceMod } stateTransitTo(kubernetesCluster.getId(), KubernetesCluster.Event.OperationSucceeded); annotationDao.removeByEntityType(AnnotationService.EntityType.KUBERNETES_CLUSTER.name(), kubernetesCluster.getUuid()); + kubernetesClusterDetailsDao.removeDetails(kubernetesCluster.getId()); boolean deleted = kubernetesClusterDao.remove(kubernetesCluster.getId()); if (!deleted) { logMessage(Level.WARN, String.format("Failed to delete Kubernetes cluster : %s", kubernetesCluster.getName()), null); From 536a387326f3e6ae341b40b180d8ef221d20ceb9 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Fri, 20 Jan 2023 16:11:55 +0100 Subject: [PATCH 3/3] api: fix new password is applied on host when update host password with update_passwd_on_host=false (#7092) --- .../command/admin/host/UpdateHostPasswordCmd.java | 3 ++- .../command/test/UpdateHostPasswordCmdTest.java | 14 +++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java index 5a884cf72ab..8f191bd4321 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.commons.lang3.BooleanUtils; import org.apache.log4j.Logger; import com.cloud.user.Account; @@ -67,7 +68,7 @@ public class UpdateHostPasswordCmd extends BaseCmd { } public Boolean getUpdatePasswdOnHost() { - return updatePasswdOnHost == null ? false : true; + return BooleanUtils.isTrue(updatePasswdOnHost); } public String getPassword() { diff --git a/api/src/test/java/org/apache/cloudstack/api/command/test/UpdateHostPasswordCmdTest.java b/api/src/test/java/org/apache/cloudstack/api/command/test/UpdateHostPasswordCmdTest.java index 12f9da3a40d..9b130b060bc 100644 --- a/api/src/test/java/org/apache/cloudstack/api/command/test/UpdateHostPasswordCmdTest.java +++ b/api/src/test/java/org/apache/cloudstack/api/command/test/UpdateHostPasswordCmdTest.java @@ -27,6 +27,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; +import org.springframework.test.util.ReflectionTestUtils; import com.cloud.exception.InvalidParameterValueException; import com.cloud.resource.ResourceService; @@ -94,4 +95,15 @@ public class UpdateHostPasswordCmdTest extends TestCase { assertFalse("The attribute updatePasswdOnHost should be false, but it isn't.", updateHostPasswordCmd.getUpdatePasswdOnHost()); verify(managementServer, times(1)).updateHostPassword(updateHostPasswordCmd); } -} \ No newline at end of file + + @Test + public void testGetUpdatePasswdOnHostValues() { + assertFalse(updateHostPasswordCmd.getUpdatePasswdOnHost()); + + ReflectionTestUtils.setField(updateHostPasswordCmd, "updatePasswdOnHost", false); + assertFalse(updateHostPasswordCmd.getUpdatePasswdOnHost()); + + ReflectionTestUtils.setField(updateHostPasswordCmd, "updatePasswdOnHost", true); + assertTrue(updateHostPasswordCmd.getUpdatePasswdOnHost()); + } +}