Skip to content

Commit 19e9984

Browse files
committed
CLOUDSTACK-7882: SSH Keypair Creation/Selection in UI
Thanks Ilia Shakitko for the porting and testing.
1 parent ff15320 commit 19e9984

19 files changed

Lines changed: 567 additions & 13 deletions

File tree

api/src/org/apache/cloudstack/api/ResponseGenerator.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
import org.apache.cloudstack.api.response.ResourceCountResponse;
8585
import org.apache.cloudstack.api.response.ResourceLimitResponse;
8686
import org.apache.cloudstack.api.response.ResourceTagResponse;
87+
import org.apache.cloudstack.api.response.SSHKeyPairResponse;
8788
import org.apache.cloudstack.api.response.SecurityGroupResponse;
8889
import org.apache.cloudstack.api.response.ServiceOfferingResponse;
8990
import org.apache.cloudstack.api.response.ServiceResponse;
@@ -186,6 +187,7 @@
186187
import com.cloud.storage.snapshot.SnapshotSchedule;
187188
import com.cloud.template.VirtualMachineTemplate;
188189
import com.cloud.user.Account;
190+
import com.cloud.user.SSHKeyPair;
189191
import com.cloud.user.User;
190192
import com.cloud.user.UserAccount;
191193
import com.cloud.uservm.UserVm;
@@ -446,4 +448,5 @@ public interface ResponseGenerator {
446448

447449
ListResponse<UpgradeRouterTemplateResponse> createUpgradeRouterTemplateResponse(List<Long> jobIds);
448450

451+
SSHKeyPairResponse createSSHKeyPairResponse(SSHKeyPair sshkeyPair, boolean privatekey);
449452
}

api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public long getEntityOwnerId() {
9191
@Override
9292
public void execute() {
9393
SSHKeyPair r = _mgr.createSSHKeyPair(this);
94-
CreateSSHKeyPairResponse response = new CreateSSHKeyPairResponse(r.getName(), r.getFingerprint(), r.getPrivateKey());
94+
CreateSSHKeyPairResponse response = (CreateSSHKeyPairResponse) _responseGenerator.createSSHKeyPairResponse(r, true);
9595
response.setResponseName(getCommandName());
9696
response.setObjectName("keypair");
9797
setResponseObject(response);

api/src/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public void execute() {
6868
Pair<List<? extends SSHKeyPair>, Integer> resultList = _mgr.listSSHKeyPairs(this);
6969
List<SSHKeyPairResponse> responses = new ArrayList<SSHKeyPairResponse>();
7070
for (SSHKeyPair result : resultList.first()) {
71-
SSHKeyPairResponse r = new SSHKeyPairResponse(result.getName(), result.getFingerprint());
71+
SSHKeyPairResponse r = _responseGenerator.createSSHKeyPairResponse(result, false);
7272
r.setObjectName("sshkeypair");
7373
responses.add(r);
7474
}

api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public long getEntityOwnerId() {
9999
@Override
100100
public void execute() {
101101
SSHKeyPair result = _mgr.registerSSHKeyPair(this);
102-
SSHKeyPairResponse response = new SSHKeyPairResponse(result.getName(), result.getFingerprint());
102+
SSHKeyPairResponse response = _responseGenerator.createSSHKeyPairResponse(result, false);
103103
response.setResponseName(getCommandName());
104104
response.setObjectName("keypair");
105105
setResponseObject(response);

api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd {
120120
@Parameter(name = ApiConstants.AFFINITY_GROUP_ID, type = CommandType.UUID, entityType = AffinityGroupResponse.class, description = "list vms by affinity group")
121121
private Long affinityGroupId;
122122

123+
@Parameter(name = ApiConstants.SSH_KEYPAIR, type = CommandType.STRING, description = "list vms by ssh keypair name")
124+
private String keypair;
125+
123126
@Parameter(name = ApiConstants.SERVICE_OFFERING_ID, type = CommandType.UUID, entityType = ServiceOfferingResponse.class, description = "list by the service offering", since = "4.4")
124127
private Long serviceOffId;
125128

@@ -184,6 +187,10 @@ public Long getAffinityGroupId() {
184187
return affinityGroupId;
185188
}
186189

190+
public String getKeyPairName() {
191+
return keypair;
192+
}
193+
187194
public EnumSet<VMDetails> getDetails() throws InvalidParameterValueException {
188195
EnumSet<VMDetails> dv;
189196
if (viewDetails == null || viewDetails.size() <= 0) {

api/src/org/apache/cloudstack/api/response/SSHKeyPairResponse.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,15 @@ public class SSHKeyPairResponse extends BaseResponse {
2929
@Param(description = "Name of the keypair")
3030
private String name;
3131

32+
@SerializedName(ApiConstants.ACCOUNT) @Param(description="the owner of the keypair")
33+
private String accountName;
34+
35+
@SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id of the keypair owner")
36+
private String domainId;
37+
38+
@SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the keypair owner")
39+
private String domain;
40+
3241
@SerializedName("fingerprint")
3342
@Param(description = "Fingerprint of the public key")
3443
private String fingerprint;
@@ -57,4 +66,15 @@ public void setFingerprint(String fingerprint) {
5766
this.fingerprint = fingerprint;
5867
}
5968

69+
public void setAccountName(String accountName) {
70+
this.accountName = accountName;
71+
}
72+
73+
public void setDomainId(String domainId) {
74+
this.domainId = domainId;
75+
}
76+
77+
public void setDomainName(String domain) {
78+
this.domain = domain;
79+
}
6080
}

client/WEB-INF/classes/resources/messages.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -827,6 +827,7 @@ label.menu.templates=Templates
827827
label.menu.virtual.appliances=Virtual Appliances
828828
label.menu.virtual.resources=Virtual Resources
829829
label.menu.volumes=Volumes
830+
label.menu.sshkeypair=SSH KeyPair
830831
label.migrate.instance.to.host=Migrate instance to another host
831832
label.migrate.instance.to.ps=Migrate instance to another primary storage
832833
label.migrate.instance.to=Migrate instance to

server/src/com/cloud/api/ApiResponseHelper.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
import org.apache.cloudstack.api.response.ControlledViewEntityResponse;
5959
import org.apache.cloudstack.api.response.CounterResponse;
6060
import org.apache.cloudstack.api.response.CreateCmdResponse;
61+
import org.apache.cloudstack.api.response.CreateSSHKeyPairResponse;
6162
import org.apache.cloudstack.api.response.DiskOfferingResponse;
6263
import org.apache.cloudstack.api.response.DomainResponse;
6364
import org.apache.cloudstack.api.response.DomainRouterResponse;
@@ -105,6 +106,7 @@
105106
import org.apache.cloudstack.api.response.ResourceCountResponse;
106107
import org.apache.cloudstack.api.response.ResourceLimitResponse;
107108
import org.apache.cloudstack.api.response.ResourceTagResponse;
109+
import org.apache.cloudstack.api.response.SSHKeyPairResponse;
108110
import org.apache.cloudstack.api.response.SecurityGroupResponse;
109111
import org.apache.cloudstack.api.response.SecurityGroupRuleResponse;
110112
import org.apache.cloudstack.api.response.ServiceOfferingResponse;
@@ -291,6 +293,7 @@
291293
import com.cloud.template.VirtualMachineTemplate;
292294
import com.cloud.user.Account;
293295
import com.cloud.user.AccountManager;
296+
import com.cloud.user.SSHKeyPair;
294297
import com.cloud.user.User;
295298
import com.cloud.user.UserAccount;
296299
import com.cloud.uservm.UserVm;
@@ -3654,4 +3657,17 @@ public ListResponse<UpgradeRouterTemplateResponse> createUpgradeRouterTemplateRe
36543657
return response;
36553658
}
36563659

3660+
@Override
3661+
public SSHKeyPairResponse createSSHKeyPairResponse(SSHKeyPair sshkeyPair, boolean privatekey) {
3662+
SSHKeyPairResponse response = new SSHKeyPairResponse(sshkeyPair.getName(), sshkeyPair.getFingerprint());
3663+
if (privatekey) {
3664+
response = new CreateSSHKeyPairResponse(sshkeyPair.getName(), sshkeyPair.getFingerprint(), sshkeyPair.getPrivateKey());
3665+
}
3666+
Account account = ApiDBUtils.findAccountById(sshkeyPair.getAccountId());
3667+
response.setAccountName(account.getAccountName());
3668+
Domain domain = ApiDBUtils.findDomainById(sshkeyPair.getDomainId());
3669+
response.setDomainId(domain.getUuid());
3670+
response.setDomainName(domain.getName());
3671+
return response;
3672+
}
36573673
}

server/src/com/cloud/api/query/QueryManagerImpl.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -835,6 +835,7 @@ private Pair<List<UserVmJoinVO>, Integer> searchForUserVMsInternal(ListVMsCmd cm
835835
Object isoId = cmd.getIsoId();
836836
Object vpcId = cmd.getVpcId();
837837
Object affinityGroupId = cmd.getAffinityGroupId();
838+
Object keyPairName = cmd.getKeyPairName();
838839
Object serviceOffId = cmd.getServiceOfferingId();
839840
Object pod = null;
840841
Object hostId = null;
@@ -886,6 +887,10 @@ private Pair<List<UserVmJoinVO>, Integer> searchForUserVMsInternal(ListVMsCmd cm
886887
sb.and("affinityGroupId", sb.entity().getAffinityGroupId(), SearchCriteria.Op.EQ);
887888
}
888889

890+
if (keyPairName != null) {
891+
sb.and("keyPairName", sb.entity().getKeypairName(), SearchCriteria.Op.EQ);
892+
}
893+
889894
if (!isRootAdmin) {
890895
sb.and("displayVm", sb.entity().isDisplayVm(), SearchCriteria.Op.EQ);
891896
}
@@ -978,6 +983,10 @@ private Pair<List<UserVmJoinVO>, Integer> searchForUserVMsInternal(ListVMsCmd cm
978983
sc.setParameters("affinityGroupId", affinityGroupId);
979984
}
980985

986+
if (keyPairName != null) {
987+
sc.setParameters("keyPairName", keyPairName);
988+
}
989+
981990
if (cmd instanceof ListVMsCmdByAdmin) {
982991
ListVMsCmdByAdmin aCmd = (ListVMsCmdByAdmin)cmd;
983992
if (aCmd.getPodId() != null) {

server/src/com/cloud/server/Criteria.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ public class Criteria {
8686
public static final String AFFINITY_GROUP_ID = "affinitygroupid";
8787
public static final String SERVICE_OFFERING_ID = "serviceofferingid";
8888
public static final String DISPLAY = "display";
89+
public static final String SSH_KEYPAIR = "keypair";
8990

9091
public Criteria(String orderBy, Boolean ascending, Long offset, Long limit) {
9192
this.offset = offset;

0 commit comments

Comments
 (0)