From 453aeb02f016e82a82b0a06fd80f0ef39aee2634 Mon Sep 17 00:00:00 2001 From: davidjumani Date: Wed, 9 Feb 2022 09:34:00 +0530 Subject: [PATCH] Add ID search capability to sshkeypairs (#5963) --- .../cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java | 5 +++++ .../apache/cloudstack/api/response/SSHKeyPairResponse.java | 6 +++++- .../main/java/com/cloud/server/ManagementServerImpl.java | 5 +++++ ui/src/components/view/InfoCard.vue | 2 +- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java index 1a77a660dcd..560974937ef 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java @@ -40,6 +40,8 @@ public class ListSSHKeyPairsCmd extends BaseListProjectAndAccountResourcesCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = SSHKeyPairResponse.class, description = "the ID of the ssh keypair") + private Long id; @Parameter(name = ApiConstants.NAME, type = CommandType.STRING, description = "A key pair name to look for") private String name; @@ -50,6 +52,9 @@ public class ListSSHKeyPairsCmd extends BaseListProjectAndAccountResourcesCmd { ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// + public Long getId() { + return id; + } public String getName() { return name; 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 5a4d69b76cc..7bd423910be 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 @@ -21,8 +21,12 @@ import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; -import org.apache.cloudstack.api.BaseResponseWithAnnotations; +import com.cloud.user.SSHKeyPair; +import org.apache.cloudstack.api.BaseResponseWithAnnotations; +import org.apache.cloudstack.api.EntityReference; + +@EntityReference(value = SSHKeyPair.class) public class SSHKeyPairResponse extends BaseResponseWithAnnotations { @SerializedName(ApiConstants.ID) diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java b/server/src/main/java/com/cloud/server/ManagementServerImpl.java index 581a6da6a1e..565efa7545e 100644 --- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java +++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java @@ -4150,6 +4150,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe @Override public Pair, Integer> listSSHKeyPairs(final ListSSHKeyPairsCmd cmd) { + final Long id = cmd.getId(); final String name = cmd.getName(); final String fingerPrint = cmd.getFingerprint(); final String keyword = cmd.getKeyword(); @@ -4169,6 +4170,10 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe final SearchCriteria sc = sb.create(); _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + if (id != null) { + sc.addAnd("id", SearchCriteria.Op.EQ, id); + } + if (name != null) { sc.addAnd("name", SearchCriteria.Op.EQ, name); } diff --git a/ui/src/components/view/InfoCard.vue b/ui/src/components/view/InfoCard.vue index 6347c4c3a89..6b61dad2c13 100644 --- a/ui/src/components/view/InfoCard.vue +++ b/ui/src/components/view/InfoCard.vue @@ -605,7 +605,7 @@
+ :to="{ path: '/' + item.name + '?' + item.param + '=' + (item.value ? resource[item.value] : item.param === 'account' ? resource.name + '&domainid=' + resource.domainid : item.param === 'keypair' ? resource.name : resource.id) }"> {{ $t('label.view') + ' ' + $t(item.title) }}