mirror of https://github.com/apache/jclouds.git
First-cut implementation of SSHKeyPair for cloudstack
This commit is contained in:
parent
fd9b49873b
commit
60f70a0589
|
@ -18,120 +18,112 @@
|
||||||
*/
|
*/
|
||||||
package org.jclouds.cloudstack;
|
package org.jclouds.cloudstack;
|
||||||
|
|
||||||
import org.jclouds.cloudstack.features.AccountAsyncClient;
|
import org.jclouds.cloudstack.features.*;
|
||||||
import org.jclouds.cloudstack.features.AddressAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.AsyncJobAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.ConfigurationAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.FirewallAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.GuestOSAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.HypervisorAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.LoadBalancerAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.NATAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.NetworkAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.OfferingAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.SecurityGroupAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.TemplateAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.VirtualMachineAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.ZoneAsyncClient;
|
|
||||||
import org.jclouds.rest.annotations.Delegate;
|
import org.jclouds.rest.annotations.Delegate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides asynchronous access to CloudStack via their REST API.
|
* Provides asynchronous access to CloudStack via their REST API.
|
||||||
* <p/>
|
* <p/>
|
||||||
*
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
* @see CloudStackClient
|
* @see CloudStackClient
|
||||||
* @see <a href="http://download.cloud.com/releases/2.2.0/api/TOC_User.html" />
|
* @see <a href="http://download.cloud.com/releases/2.2.0/api/TOC_User.html" />
|
||||||
* @author Adrian Cole
|
|
||||||
*/
|
*/
|
||||||
public interface CloudStackAsyncClient {
|
public interface CloudStackAsyncClient {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides asynchronous access to Zone features.
|
* Provides asynchronous access to Zone features.
|
||||||
*/
|
*/
|
||||||
@Delegate
|
@Delegate
|
||||||
ZoneAsyncClient getZoneClient();
|
ZoneAsyncClient getZoneClient();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides asynchronous access to Template features.
|
* Provides asynchronous access to Template features.
|
||||||
*/
|
*/
|
||||||
@Delegate
|
@Delegate
|
||||||
TemplateAsyncClient getTemplateClient();
|
TemplateAsyncClient getTemplateClient();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides asynchronous access to Service, Disk, and Network Offering features.
|
* Provides asynchronous access to Service, Disk, and Network Offering features.
|
||||||
*/
|
*/
|
||||||
@Delegate
|
@Delegate
|
||||||
OfferingAsyncClient getOfferingClient();
|
OfferingAsyncClient getOfferingClient();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides asynchronous access to Network features.
|
* Provides asynchronous access to Network features.
|
||||||
*/
|
*/
|
||||||
@Delegate
|
@Delegate
|
||||||
NetworkAsyncClient getNetworkClient();
|
NetworkAsyncClient getNetworkClient();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides asynchronous access to VirtualMachine features.
|
* Provides asynchronous access to VirtualMachine features.
|
||||||
*/
|
*/
|
||||||
@Delegate
|
@Delegate
|
||||||
VirtualMachineAsyncClient getVirtualMachineClient();
|
VirtualMachineAsyncClient getVirtualMachineClient();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides asynchronous access to SecurityGroup features.
|
* Provides asynchronous access to SecurityGroup features.
|
||||||
*/
|
*/
|
||||||
@Delegate
|
@Delegate
|
||||||
SecurityGroupAsyncClient getSecurityGroupClient();
|
SecurityGroupAsyncClient getSecurityGroupClient();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides asynchronous access to AsyncJob features.
|
* Provides asynchronous access to AsyncJob features.
|
||||||
*/
|
*/
|
||||||
@Delegate
|
@Delegate
|
||||||
AsyncJobAsyncClient getAsyncJobClient();
|
AsyncJobAsyncClient getAsyncJobClient();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides asynchronous access to Address features.
|
* Provides asynchronous access to Address features.
|
||||||
*/
|
*/
|
||||||
@Delegate
|
@Delegate
|
||||||
AddressAsyncClient getAddressClient();
|
AddressAsyncClient getAddressClient();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides asynchronous access to NAT features.
|
* Provides asynchronous access to NAT features.
|
||||||
*/
|
*/
|
||||||
@Delegate
|
@Delegate
|
||||||
NATAsyncClient getNATClient();
|
NATAsyncClient getNATClient();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides asynchronous access to Firewall features.
|
* Provides asynchronous access to Firewall features.
|
||||||
*/
|
*/
|
||||||
@Delegate
|
@Delegate
|
||||||
FirewallAsyncClient getFirewallClient();
|
FirewallAsyncClient getFirewallClient();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides asynchronous access to LoadBalancer features.
|
* Provides asynchronous access to LoadBalancer features.
|
||||||
*/
|
*/
|
||||||
@Delegate
|
@Delegate
|
||||||
LoadBalancerAsyncClient getLoadBalancerClient();
|
LoadBalancerAsyncClient getLoadBalancerClient();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides asynchronous access to GuestOS features.
|
* Provides asynchronous access to GuestOS features.
|
||||||
*/
|
*/
|
||||||
@Delegate
|
@Delegate
|
||||||
GuestOSAsyncClient getGuestOSClient();
|
GuestOSAsyncClient getGuestOSClient();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides asynchronous access to Hypervisor features.
|
* Provides asynchronous access to Hypervisor features.
|
||||||
*/
|
*/
|
||||||
@Delegate
|
@Delegate
|
||||||
HypervisorAsyncClient getHypervisorClient();
|
HypervisorAsyncClient getHypervisorClient();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides asynchronous access to Configuration features.
|
* Provides asynchronous access to Configuration features.
|
||||||
*/
|
*/
|
||||||
@Delegate
|
@Delegate
|
||||||
ConfigurationAsyncClient getConfigurationClient();
|
ConfigurationAsyncClient getConfigurationClient();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides asynchronous access to Account features.
|
* Provides asynchronous access to Account features.
|
||||||
*/
|
*/
|
||||||
@Delegate
|
@Delegate
|
||||||
AccountAsyncClient getAccountClient();
|
AccountAsyncClient getAccountClient();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides asynchronous access to SSH Keypairs
|
||||||
|
*/
|
||||||
|
@Delegate
|
||||||
|
SSHKeyPairAsyncClient getSSHKeyPairClient();
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,26 +18,12 @@
|
||||||
*/
|
*/
|
||||||
package org.jclouds.cloudstack;
|
package org.jclouds.cloudstack;
|
||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import org.jclouds.cloudstack.features.*;
|
||||||
|
|
||||||
import org.jclouds.cloudstack.features.AccountClient;
|
|
||||||
import org.jclouds.cloudstack.features.AddressClient;
|
|
||||||
import org.jclouds.cloudstack.features.AsyncJobClient;
|
|
||||||
import org.jclouds.cloudstack.features.ConfigurationClient;
|
|
||||||
import org.jclouds.cloudstack.features.FirewallClient;
|
|
||||||
import org.jclouds.cloudstack.features.GuestOSClient;
|
|
||||||
import org.jclouds.cloudstack.features.HypervisorClient;
|
|
||||||
import org.jclouds.cloudstack.features.LoadBalancerClient;
|
|
||||||
import org.jclouds.cloudstack.features.NATClient;
|
|
||||||
import org.jclouds.cloudstack.features.NetworkClient;
|
|
||||||
import org.jclouds.cloudstack.features.OfferingClient;
|
|
||||||
import org.jclouds.cloudstack.features.SecurityGroupClient;
|
|
||||||
import org.jclouds.cloudstack.features.TemplateClient;
|
|
||||||
import org.jclouds.cloudstack.features.VirtualMachineClient;
|
|
||||||
import org.jclouds.cloudstack.features.ZoneClient;
|
|
||||||
import org.jclouds.concurrent.Timeout;
|
import org.jclouds.concurrent.Timeout;
|
||||||
import org.jclouds.rest.annotations.Delegate;
|
import org.jclouds.rest.annotations.Delegate;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides synchronous access to CloudStack.
|
* Provides synchronous access to CloudStack.
|
||||||
* <p/>
|
* <p/>
|
||||||
|
@ -137,4 +123,11 @@ public interface CloudStackClient {
|
||||||
*/
|
*/
|
||||||
@Delegate
|
@Delegate
|
||||||
AccountClient getAccountClient();
|
AccountClient getAccountClient();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides synchronous access to SSH Keypairs
|
||||||
|
*/
|
||||||
|
@Delegate
|
||||||
|
SSHKeyPairClient getSSHKeyPairClient();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,40 +18,10 @@
|
||||||
*/
|
*/
|
||||||
package org.jclouds.cloudstack.config;
|
package org.jclouds.cloudstack.config;
|
||||||
|
|
||||||
import java.util.Map;
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
|
||||||
import org.jclouds.cloudstack.CloudStackAsyncClient;
|
import org.jclouds.cloudstack.CloudStackAsyncClient;
|
||||||
import org.jclouds.cloudstack.CloudStackClient;
|
import org.jclouds.cloudstack.CloudStackClient;
|
||||||
import org.jclouds.cloudstack.features.AccountAsyncClient;
|
import org.jclouds.cloudstack.features.*;
|
||||||
import org.jclouds.cloudstack.features.AccountClient;
|
|
||||||
import org.jclouds.cloudstack.features.AddressAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.AddressClient;
|
|
||||||
import org.jclouds.cloudstack.features.AsyncJobAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.AsyncJobClient;
|
|
||||||
import org.jclouds.cloudstack.features.ConfigurationAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.ConfigurationClient;
|
|
||||||
import org.jclouds.cloudstack.features.FirewallAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.FirewallClient;
|
|
||||||
import org.jclouds.cloudstack.features.GuestOSAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.GuestOSClient;
|
|
||||||
import org.jclouds.cloudstack.features.HypervisorAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.HypervisorClient;
|
|
||||||
import org.jclouds.cloudstack.features.LoadBalancerAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.LoadBalancerClient;
|
|
||||||
import org.jclouds.cloudstack.features.NATAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.NATClient;
|
|
||||||
import org.jclouds.cloudstack.features.NetworkAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.NetworkClient;
|
|
||||||
import org.jclouds.cloudstack.features.OfferingAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.OfferingClient;
|
|
||||||
import org.jclouds.cloudstack.features.SecurityGroupAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.SecurityGroupClient;
|
|
||||||
import org.jclouds.cloudstack.features.TemplateAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.TemplateClient;
|
|
||||||
import org.jclouds.cloudstack.features.VirtualMachineAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.VirtualMachineClient;
|
|
||||||
import org.jclouds.cloudstack.features.ZoneAsyncClient;
|
|
||||||
import org.jclouds.cloudstack.features.ZoneClient;
|
|
||||||
import org.jclouds.cloudstack.handlers.CloudStackErrorHandler;
|
import org.jclouds.cloudstack.handlers.CloudStackErrorHandler;
|
||||||
import org.jclouds.http.HttpErrorHandler;
|
import org.jclouds.http.HttpErrorHandler;
|
||||||
import org.jclouds.http.RequiresHttp;
|
import org.jclouds.http.RequiresHttp;
|
||||||
|
@ -65,7 +35,7 @@ import org.jclouds.predicates.SocketOpen;
|
||||||
import org.jclouds.rest.ConfiguresRestClient;
|
import org.jclouds.rest.ConfiguresRestClient;
|
||||||
import org.jclouds.rest.config.RestClientModule;
|
import org.jclouds.rest.config.RestClientModule;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configures the cloudstack connection.
|
* Configures the cloudstack connection.
|
||||||
|
@ -92,6 +62,7 @@ public class CloudStackRestClientModule extends RestClientModule<CloudStackClien
|
||||||
.put(HypervisorClient.class, HypervisorAsyncClient.class)//
|
.put(HypervisorClient.class, HypervisorAsyncClient.class)//
|
||||||
.put(ConfigurationClient.class, ConfigurationAsyncClient.class)//
|
.put(ConfigurationClient.class, ConfigurationAsyncClient.class)//
|
||||||
.put(AccountClient.class, AccountAsyncClient.class)//
|
.put(AccountClient.class, AccountAsyncClient.class)//
|
||||||
|
.put(SSHKeyPairClient.class, SSHKeyPairAsyncClient.class)//
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public CloudStackRestClientModule() {
|
public CloudStackRestClientModule() {
|
||||||
|
|
|
@ -0,0 +1,116 @@
|
||||||
|
package org.jclouds.cloudstack.domain;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
public class SSHKeyPair implements Comparable<SSHKeyPair> {
|
||||||
|
|
||||||
|
public static Builder builder() {
|
||||||
|
return new Builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Builder {
|
||||||
|
|
||||||
|
private String fingerprint;
|
||||||
|
private String name;
|
||||||
|
private String privateKey;
|
||||||
|
|
||||||
|
public Builder fingerprint(String fingerprint) {
|
||||||
|
this.fingerprint = fingerprint;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder name(String name) {
|
||||||
|
this.name = name;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder privateKey(String privateKey) {
|
||||||
|
this.privateKey = privateKey;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public SSHKeyPair build() {
|
||||||
|
return new SSHKeyPair(fingerprint, name, privateKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// for deserialization
|
||||||
|
SSHKeyPair() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private String fingerprint;
|
||||||
|
private String name;
|
||||||
|
@SerializedName("privatekey")
|
||||||
|
private String privateKey;
|
||||||
|
|
||||||
|
public SSHKeyPair(String fingerprint, String name, String privateKey) {
|
||||||
|
this.fingerprint = fingerprint;
|
||||||
|
this.name = name;
|
||||||
|
this.privateKey = privateKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFingerprint() {
|
||||||
|
return fingerprint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPrivateKey() {
|
||||||
|
return privateKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result + ((fingerprint == null) ? 0 : fingerprint.hashCode());
|
||||||
|
result = prime * result + ((name == null) ? 0 : name.hashCode());
|
||||||
|
result = prime * result + ((privateKey == null) ? 0 : privateKey.hashCode());
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
SSHKeyPair other = (SSHKeyPair) obj;
|
||||||
|
if (fingerprint == null) {
|
||||||
|
if (other.fingerprint != null)
|
||||||
|
return false;
|
||||||
|
} else if (!fingerprint.equals(other.fingerprint))
|
||||||
|
return false;
|
||||||
|
if (name == null) {
|
||||||
|
if (other.name != null)
|
||||||
|
return false;
|
||||||
|
} else if (!name.equals(other.name))
|
||||||
|
return false;
|
||||||
|
if (privateKey == null) {
|
||||||
|
if (other.privateKey != null)
|
||||||
|
return false;
|
||||||
|
} else if (!privateKey.equals(other.privateKey))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "[fingerprint=" + fingerprint + ", name=" + name + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(SSHKeyPair arg0) {
|
||||||
|
return fingerprint.compareTo(arg0.getFingerprint());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
/**
|
||||||
|
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. jclouds licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.jclouds.cloudstack.features;
|
||||||
|
|
||||||
|
import com.google.common.util.concurrent.ListenableFuture;
|
||||||
|
import org.jclouds.cloudstack.filters.QuerySigner;
|
||||||
|
import org.jclouds.rest.annotations.QueryParams;
|
||||||
|
import org.jclouds.rest.annotations.RequestFilters;
|
||||||
|
|
||||||
|
import javax.ws.rs.GET;
|
||||||
|
import javax.ws.rs.QueryParam;
|
||||||
|
|
||||||
|
@RequestFilters(QuerySigner.class)
|
||||||
|
@QueryParams(keys = "response", values = "json")
|
||||||
|
public interface SSHKeyPairAsyncClient {
|
||||||
|
/**
|
||||||
|
* @see AccountClient#listAccounts
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@QueryParams(keys = "command", values = "listSSHKeyPairs")
|
||||||
|
// @SelectJson("")
|
||||||
|
// @Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
// @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
|
||||||
|
// ListenableFuture<Set<SSHKeyPair>> listSSHKeyPairs();
|
||||||
|
ListenableFuture<String> listSSHKeyPairs();
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@QueryParams(keys = "command", values="createSSHKeyPair")
|
||||||
|
ListenableFuture<String> createSSHKeyPair(@QueryParam("name") String name);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
package org.jclouds.cloudstack.features;
|
||||||
|
|
||||||
|
import org.jclouds.concurrent.Timeout;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides synchronous access to CloudStack SSHKeyPair features.
|
||||||
|
* <p/>
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
* @see <a href="http://download.cloud.com/releases/2.2.0/api_2.2.8/user/listSSHKeyPairs.html" />
|
||||||
|
*/
|
||||||
|
@Timeout(duration = 60, timeUnit = TimeUnit.SECONDS)
|
||||||
|
|
||||||
|
public interface SSHKeyPairClient {
|
||||||
|
|
||||||
|
String listSSHKeyPairs();
|
||||||
|
|
||||||
|
String createSSHKeyPair(String name);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
/**
|
||||||
|
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. jclouds licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.jclouds.cloudstack.options;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
import org.jclouds.http.options.BaseHttpRequestOptions;
|
||||||
|
|
||||||
|
public class ListSSHKeyPairsOptions extends BaseHttpRequestOptions {
|
||||||
|
|
||||||
|
public static final ListSSHKeyPairsOptions NONE = new ListSSHKeyPairsOptions();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param name the SSHKeyPair name
|
||||||
|
*/
|
||||||
|
public ListSSHKeyPairsOptions name(String name) {
|
||||||
|
this.queryParameters.replaceValues("name", ImmutableSet.of(name));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Builder {
|
||||||
|
/**
|
||||||
|
* @see ListSSHKeyPairsOptions#name
|
||||||
|
*/
|
||||||
|
public static ListSSHKeyPairsOptions name(String name) {
|
||||||
|
ListSSHKeyPairsOptions options = new ListSSHKeyPairsOptions();
|
||||||
|
return options.name(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,23 +18,23 @@
|
||||||
*/
|
*/
|
||||||
package org.jclouds.cloudstack;
|
package org.jclouds.cloudstack;
|
||||||
|
|
||||||
import java.io.IOException;
|
import com.google.inject.TypeLiteral;
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
|
|
||||||
import org.jclouds.cloudstack.features.BaseCloudStackAsyncClientTest;
|
import org.jclouds.cloudstack.features.BaseCloudStackAsyncClientTest;
|
||||||
import org.jclouds.http.HttpRequest;
|
import org.jclouds.http.HttpRequest;
|
||||||
import org.jclouds.rest.internal.RestAnnotationProcessor;
|
import org.jclouds.rest.internal.RestAnnotationProcessor;
|
||||||
import org.testng.annotations.BeforeClass;
|
import org.testng.annotations.BeforeClass;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import com.google.inject.TypeLiteral;
|
import java.io.IOException;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests behavior of {@code CloudStackAsyncClient}
|
* Tests behavior of {@code CloudStackAsyncClient}
|
||||||
*
|
*
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
// NOTE:without testName, this will not call @Before* and fail w/NPE during surefire
|
// NOTE:without testName, this will not call @Before* and fail w/NPE during
|
||||||
|
// surefire
|
||||||
@Test(groups = "unit", testName = "CloudStackAsyncClientTest")
|
@Test(groups = "unit", testName = "CloudStackAsyncClientTest")
|
||||||
public class CloudStackAsyncClientTest extends BaseCloudStackAsyncClientTest<CloudStackAsyncClient> {
|
public class CloudStackAsyncClientTest extends BaseCloudStackAsyncClientTest<CloudStackAsyncClient> {
|
||||||
|
|
||||||
|
@ -57,6 +57,7 @@ public class CloudStackAsyncClientTest extends BaseCloudStackAsyncClientTest<Clo
|
||||||
assert syncClient.getHypervisorClient() != null;
|
assert syncClient.getHypervisorClient() != null;
|
||||||
assert syncClient.getConfigurationClient() != null;
|
assert syncClient.getConfigurationClient() != null;
|
||||||
assert syncClient.getAccountClient() != null;
|
assert syncClient.getAccountClient() != null;
|
||||||
|
assert syncClient.getSSHKeyPairClient() != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAsync() throws SecurityException, NoSuchMethodException, InterruptedException, ExecutionException {
|
public void testAsync() throws SecurityException, NoSuchMethodException, InterruptedException, ExecutionException {
|
||||||
|
@ -75,6 +76,7 @@ public class CloudStackAsyncClientTest extends BaseCloudStackAsyncClientTest<Clo
|
||||||
assert asyncClient.getHypervisorClient() != null;
|
assert asyncClient.getHypervisorClient() != null;
|
||||||
assert asyncClient.getConfigurationClient() != null;
|
assert asyncClient.getConfigurationClient() != null;
|
||||||
assert asyncClient.getAccountClient() != null;
|
assert asyncClient.getAccountClient() != null;
|
||||||
|
assert asyncClient.getSSHKeyPairClient() != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -0,0 +1,103 @@
|
||||||
|
/**
|
||||||
|
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. jclouds licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.jclouds.cloudstack.features;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
import org.jclouds.cloudstack.options.ListSSHKeyPairsOptions;
|
||||||
|
import org.jclouds.functions.IdentityFunction;
|
||||||
|
import org.jclouds.http.HttpRequest;
|
||||||
|
import org.jclouds.http.functions.ParseFirstJsonValueNamed;
|
||||||
|
import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
|
||||||
|
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
|
||||||
|
import org.jclouds.rest.internal.RestAnnotationProcessor;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import com.google.common.base.Functions;
|
||||||
|
import com.google.inject.TypeLiteral;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests behavior of {@code SSHKeyPairAsyncClient}
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
// NOTE:without testName, this will not call @Before* and fail w/NPE during
|
||||||
|
// surefire
|
||||||
|
@Test(groups = "unit", testName = "SSHKeyPairAsyncClientTest")
|
||||||
|
public class SSHKeyPairAsyncClientTest extends BaseCloudStackAsyncClientTest<SSHKeyPairAsyncClient> {
|
||||||
|
|
||||||
|
public void testListSSHKeyPairs() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = SSHKeyPairAsyncClient.class.getMethod("listSSHKeyPairs", ListSSHKeyPairsOptions[].class);
|
||||||
|
HttpRequest httpRequest = processor.createRequest(method);
|
||||||
|
|
||||||
|
assertRequestLineEquals(httpRequest,
|
||||||
|
"GET http://localhost:8080/client/api?response=json&command=listSSHKeyPairs HTTP/1.1");
|
||||||
|
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
||||||
|
assertPayloadEquals(httpRequest, null, null, false);
|
||||||
|
|
||||||
|
assertResponseParserClassEquals(method, httpRequest, ParseFirstJsonValueNamed.class);
|
||||||
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
assertExceptionParserClassEquals(method, ReturnEmptySetOnNotFoundOr404.class);
|
||||||
|
|
||||||
|
checkFilters(httpRequest);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testListSSHKeyPairsOptions() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = SSHKeyPairAsyncClient.class.getMethod("listSSHKeyPairs", ListSSHKeyPairsOptions[].class);
|
||||||
|
HttpRequest httpRequest = processor.createRequest(method, ListSSHKeyPairsOptions.Builder.name("jclouds"));
|
||||||
|
|
||||||
|
assertRequestLineEquals(httpRequest,
|
||||||
|
"GET http://localhost:8080/client/api?response=json&command=listSSHKeyPairs&SSHKeyPair=jclouds&domainid=123 HTTP/1.1");
|
||||||
|
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
||||||
|
assertPayloadEquals(httpRequest, null, null, false);
|
||||||
|
|
||||||
|
assertResponseParserClassEquals(method, httpRequest, ParseFirstJsonValueNamed.class);
|
||||||
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
assertExceptionParserClassEquals(method, ReturnEmptySetOnNotFoundOr404.class);
|
||||||
|
|
||||||
|
checkFilters(httpRequest);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetSSHKeyPair() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = SSHKeyPairAsyncClient.class.getMethod("getSSHKeyPair", long.class);
|
||||||
|
HttpRequest httpRequest = processor.createRequest(method, 3l);
|
||||||
|
|
||||||
|
assertRequestLineEquals(httpRequest,
|
||||||
|
"GET http://localhost:8080/client/api?response=json&command=listSSHKeyPairs&id=3 HTTP/1.1");
|
||||||
|
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
||||||
|
assertPayloadEquals(httpRequest, null, null, false);
|
||||||
|
|
||||||
|
assertResponseParserClassEquals(method, httpRequest,
|
||||||
|
Functions.compose(IdentityFunction.INSTANCE, IdentityFunction.INSTANCE).getClass());
|
||||||
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
assertExceptionParserClassEquals(method, ReturnNullOnNotFoundOr404.class);
|
||||||
|
|
||||||
|
checkFilters(httpRequest);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected TypeLiteral<RestAnnotationProcessor<SSHKeyPairAsyncClient>> createTypeLiteral() {
|
||||||
|
return new TypeLiteral<RestAnnotationProcessor<SSHKeyPairAsyncClient>>() {
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
/**
|
||||||
|
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. jclouds licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.jclouds.cloudstack.features;
|
||||||
|
|
||||||
|
import org.jclouds.cloudstack.domain.SSHKeyPair;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests behavior of {@code SSHKeyPairClient}
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@Test(groups = "live", singleThreaded = true, testName = "SSHKeyPairClientLiveTest")
|
||||||
|
public class SSHKeyPairClientLiveTest extends BaseCloudStackClientLiveTest {
|
||||||
|
|
||||||
|
public void testListSSHKeyPairs() {
|
||||||
|
System.out.println(client.getSSHKeyPairClient().listSSHKeyPairs());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testCreateSSHKeyPair() {
|
||||||
|
final String sshKeyPair = client.getSSHKeyPairClient().createSSHKeyPair("vijay-test");
|
||||||
|
System.out.println(sshKeyPair);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void checkSSHKeyPair(SSHKeyPair pair) {
|
||||||
|
assert pair.getName() != null : pair;
|
||||||
|
// assertEquals(pair.toString(),
|
||||||
|
// client.getSSHKeyPairClient().getSSHKeyPair(pair.getName()).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue