mirror of https://github.com/apache/jclouds.git
Merge pull request #133 from vijaykiran/limit-client
Limit#listResourceLimits implementation
This commit is contained in:
commit
304dda4823
|
@ -26,6 +26,7 @@ import org.jclouds.cloudstack.features.EventAsyncClient;
|
||||||
import org.jclouds.cloudstack.features.FirewallAsyncClient;
|
import org.jclouds.cloudstack.features.FirewallAsyncClient;
|
||||||
import org.jclouds.cloudstack.features.GuestOSAsyncClient;
|
import org.jclouds.cloudstack.features.GuestOSAsyncClient;
|
||||||
import org.jclouds.cloudstack.features.HypervisorAsyncClient;
|
import org.jclouds.cloudstack.features.HypervisorAsyncClient;
|
||||||
|
import org.jclouds.cloudstack.features.LimitAsyncClient;
|
||||||
import org.jclouds.cloudstack.features.LoadBalancerAsyncClient;
|
import org.jclouds.cloudstack.features.LoadBalancerAsyncClient;
|
||||||
import org.jclouds.cloudstack.features.NATAsyncClient;
|
import org.jclouds.cloudstack.features.NATAsyncClient;
|
||||||
import org.jclouds.cloudstack.features.NetworkAsyncClient;
|
import org.jclouds.cloudstack.features.NetworkAsyncClient;
|
||||||
|
@ -157,4 +158,10 @@ public interface CloudStackAsyncClient {
|
||||||
@Delegate
|
@Delegate
|
||||||
EventAsyncClient getEventClient();
|
EventAsyncClient getEventClient();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides synchronous access to Resource Limits
|
||||||
|
*/
|
||||||
|
@Delegate
|
||||||
|
LimitAsyncClient getLimitClient();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ import org.jclouds.cloudstack.features.EventClient;
|
||||||
import org.jclouds.cloudstack.features.FirewallClient;
|
import org.jclouds.cloudstack.features.FirewallClient;
|
||||||
import org.jclouds.cloudstack.features.GuestOSClient;
|
import org.jclouds.cloudstack.features.GuestOSClient;
|
||||||
import org.jclouds.cloudstack.features.HypervisorClient;
|
import org.jclouds.cloudstack.features.HypervisorClient;
|
||||||
|
import org.jclouds.cloudstack.features.LimitClient;
|
||||||
import org.jclouds.cloudstack.features.LoadBalancerClient;
|
import org.jclouds.cloudstack.features.LoadBalancerClient;
|
||||||
import org.jclouds.cloudstack.features.NATClient;
|
import org.jclouds.cloudstack.features.NATClient;
|
||||||
import org.jclouds.cloudstack.features.NetworkClient;
|
import org.jclouds.cloudstack.features.NetworkClient;
|
||||||
|
@ -35,8 +36,8 @@ import org.jclouds.cloudstack.features.OfferingClient;
|
||||||
import org.jclouds.cloudstack.features.SSHKeyPairClient;
|
import org.jclouds.cloudstack.features.SSHKeyPairClient;
|
||||||
import org.jclouds.cloudstack.features.SecurityGroupClient;
|
import org.jclouds.cloudstack.features.SecurityGroupClient;
|
||||||
import org.jclouds.cloudstack.features.TemplateClient;
|
import org.jclouds.cloudstack.features.TemplateClient;
|
||||||
import org.jclouds.cloudstack.features.VirtualMachineClient;
|
|
||||||
import org.jclouds.cloudstack.features.VMGroupClient;
|
import org.jclouds.cloudstack.features.VMGroupClient;
|
||||||
|
import org.jclouds.cloudstack.features.VirtualMachineClient;
|
||||||
import org.jclouds.cloudstack.features.ZoneClient;
|
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;
|
||||||
|
@ -44,10 +45,10 @@ import org.jclouds.rest.annotations.Delegate;
|
||||||
/**
|
/**
|
||||||
* Provides synchronous access to CloudStack.
|
* Provides synchronous access to CloudStack.
|
||||||
* <p/>
|
* <p/>
|
||||||
*
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
* @see CloudStackAsyncClient
|
* @see CloudStackAsyncClient
|
||||||
* @see <a href="http://download.cloud.com/releases/2.2.0/api_2.2.12/TOC_User.html" />
|
* @see <a href="http://download.cloud.com/releases/2.2.0/api_2.2.12/TOC_User.html" />
|
||||||
* @author Adrian Cole
|
|
||||||
*/
|
*/
|
||||||
@Timeout(duration = 60, timeUnit = TimeUnit.SECONDS)
|
@Timeout(duration = 60, timeUnit = TimeUnit.SECONDS)
|
||||||
public interface CloudStackClient {
|
public interface CloudStackClient {
|
||||||
|
@ -160,4 +161,10 @@ public interface CloudStackClient {
|
||||||
@Delegate
|
@Delegate
|
||||||
EventClient getEventClient();
|
EventClient getEventClient();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides synchronous access to Resource Limits
|
||||||
|
*/
|
||||||
|
@Delegate
|
||||||
|
LimitClient getLimitClient();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ package org.jclouds.cloudstack.config;
|
||||||
|
|
||||||
import java.util.Map;
|
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.AccountAsyncClient;
|
||||||
|
@ -38,6 +39,8 @@ import org.jclouds.cloudstack.features.GuestOSAsyncClient;
|
||||||
import org.jclouds.cloudstack.features.GuestOSClient;
|
import org.jclouds.cloudstack.features.GuestOSClient;
|
||||||
import org.jclouds.cloudstack.features.HypervisorAsyncClient;
|
import org.jclouds.cloudstack.features.HypervisorAsyncClient;
|
||||||
import org.jclouds.cloudstack.features.HypervisorClient;
|
import org.jclouds.cloudstack.features.HypervisorClient;
|
||||||
|
import org.jclouds.cloudstack.features.LimitAsyncClient;
|
||||||
|
import org.jclouds.cloudstack.features.LimitClient;
|
||||||
import org.jclouds.cloudstack.features.LoadBalancerAsyncClient;
|
import org.jclouds.cloudstack.features.LoadBalancerAsyncClient;
|
||||||
import org.jclouds.cloudstack.features.LoadBalancerClient;
|
import org.jclouds.cloudstack.features.LoadBalancerClient;
|
||||||
import org.jclouds.cloudstack.features.NATAsyncClient;
|
import org.jclouds.cloudstack.features.NATAsyncClient;
|
||||||
|
@ -69,18 +72,16 @@ import org.jclouds.json.config.GsonModule.Iso8601DateAdapter;
|
||||||
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;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configures the cloudstack connection.
|
* Configures the cloudstack connection.
|
||||||
*
|
*
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@RequiresHttp
|
@RequiresHttp
|
||||||
@ConfiguresRestClient
|
@ConfiguresRestClient
|
||||||
public class CloudStackRestClientModule extends RestClientModule<CloudStackClient, CloudStackAsyncClient> {
|
public class CloudStackRestClientModule extends RestClientModule<CloudStackClient, CloudStackAsyncClient> {
|
||||||
|
|
||||||
public static final Map<Class<?>, Class<?>> DELEGATE_MAP = ImmutableMap.<Class<?>, Class<?>> builder()//
|
public static final Map<Class<?>, Class<?>> DELEGATE_MAP = ImmutableMap.<Class<?>, Class<?>>builder()//
|
||||||
.put(ZoneClient.class, ZoneAsyncClient.class)//
|
.put(ZoneClient.class, ZoneAsyncClient.class)//
|
||||||
.put(TemplateClient.class, TemplateAsyncClient.class)//
|
.put(TemplateClient.class, TemplateAsyncClient.class)//
|
||||||
.put(OfferingClient.class, OfferingAsyncClient.class)//
|
.put(OfferingClient.class, OfferingAsyncClient.class)//
|
||||||
|
@ -97,6 +98,7 @@ public class CloudStackRestClientModule extends RestClientModule<CloudStackClien
|
||||||
.put(ConfigurationClient.class, ConfigurationAsyncClient.class)//
|
.put(ConfigurationClient.class, ConfigurationAsyncClient.class)//
|
||||||
.put(AccountClient.class, AccountAsyncClient.class)//
|
.put(AccountClient.class, AccountAsyncClient.class)//
|
||||||
.put(EventClient.class, EventAsyncClient.class)//
|
.put(EventClient.class, EventAsyncClient.class)//
|
||||||
|
.put(LimitClient.class, LimitAsyncClient.class)//
|
||||||
.put(SSHKeyPairClient.class, SSHKeyPairAsyncClient.class)//
|
.put(SSHKeyPairClient.class, SSHKeyPairAsyncClient.class)//
|
||||||
.put(VMGroupClient.class, VMGroupAsyncClient.class)//
|
.put(VMGroupClient.class, VMGroupAsyncClient.class)//
|
||||||
.build();
|
.build();
|
||||||
|
|
|
@ -0,0 +1,209 @@
|
||||||
|
/**
|
||||||
|
* 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.domain;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.google.common.base.Function;
|
||||||
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Vijay Kiran
|
||||||
|
*/
|
||||||
|
public class ResourceLimit implements Comparable<ResourceLimit> {
|
||||||
|
|
||||||
|
public static Builder builder() {
|
||||||
|
return new Builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Builder {
|
||||||
|
|
||||||
|
private String account;
|
||||||
|
private String domain;
|
||||||
|
private long domainId;
|
||||||
|
private int max;
|
||||||
|
private ResourceType resourceType;
|
||||||
|
|
||||||
|
public Builder account(String account) {
|
||||||
|
this.account = account;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder domain(String domain) {
|
||||||
|
this.domain = domain;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder domainId(long domainId) {
|
||||||
|
this.domainId = domainId;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder max(int max) {
|
||||||
|
this.max = max;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder resourceType(ResourceType resourceType) {
|
||||||
|
this.resourceType = resourceType;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResourceLimit build() {
|
||||||
|
return new ResourceLimit(account, domain, domainId, max, resourceType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// for deserialization
|
||||||
|
ResourceLimit() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private String account;
|
||||||
|
private String domain;
|
||||||
|
@SerializedName("domainid")
|
||||||
|
private long domainId;
|
||||||
|
private int max;
|
||||||
|
@SerializedName("resourcetype")
|
||||||
|
private ResourceType resourceType;
|
||||||
|
|
||||||
|
public ResourceLimit(String account, String domain, long domainId, int max, ResourceType resourceType) {
|
||||||
|
this.account = account;
|
||||||
|
this.domain = domain;
|
||||||
|
this.domainId = domainId;
|
||||||
|
this.max = max;
|
||||||
|
this.resourceType = resourceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAccount() {
|
||||||
|
return account;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDomain() {
|
||||||
|
return domain;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getDomainId() {
|
||||||
|
return domainId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMax() {
|
||||||
|
return max;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResourceType getResourceType() {
|
||||||
|
return resourceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
|
||||||
|
ResourceLimit that = (ResourceLimit) o;
|
||||||
|
|
||||||
|
if (domainId != that.domainId) return false;
|
||||||
|
if (max != that.max) return false;
|
||||||
|
if (resourceType != that.resourceType) return false;
|
||||||
|
if (!account.equals(that.account)) return false;
|
||||||
|
if (!domain.equals(that.domain)) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = account.hashCode();
|
||||||
|
result = 31 * result + domain.hashCode();
|
||||||
|
result = 31 * result + (int) (domainId ^ (domainId >>> 32));
|
||||||
|
result = 31 * result + max;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(ResourceLimit that) {
|
||||||
|
return this.account.compareTo(that.account);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return String.format("[account=%s, domain=%s, domainId=%d, max=%d, resourceType=%s]",
|
||||||
|
account, domain, domainId, max, resourceType);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Type of resource to update.
|
||||||
|
*/
|
||||||
|
public enum ResourceType {
|
||||||
|
/**
|
||||||
|
* 0 - Instance. Number of instances a user can create.
|
||||||
|
*/
|
||||||
|
INSTANCE(0),
|
||||||
|
/**
|
||||||
|
* 1 - IP. Number of public IP addresses a user can own.
|
||||||
|
*/
|
||||||
|
IP(1),
|
||||||
|
/**
|
||||||
|
* 2 - Volume. Number of disk volumes a user can create.
|
||||||
|
*/
|
||||||
|
VOLUME(2),
|
||||||
|
/**
|
||||||
|
* 3 - Snapshot. Number of snapshots a user can create.
|
||||||
|
*/
|
||||||
|
SNAPSHOT(3),
|
||||||
|
/**
|
||||||
|
* 4 - Template. Number of templates that a user can register/create.
|
||||||
|
*/
|
||||||
|
TEMPLATE(4),
|
||||||
|
|
||||||
|
UNRECOGNIZED(Integer.MAX_VALUE);
|
||||||
|
|
||||||
|
private int code;
|
||||||
|
|
||||||
|
private static final Map<Integer, ResourceType> INDEX = Maps.uniqueIndex(ImmutableSet.copyOf(ResourceType.values()),
|
||||||
|
new Function<ResourceType, Integer>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer apply(ResourceType input) {
|
||||||
|
return input.code;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
ResourceType(int code) {
|
||||||
|
this.code = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return name();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ResourceType fromValue(String resourceType) {
|
||||||
|
Integer code = new Integer(checkNotNull(resourceType, "resourcetype"));
|
||||||
|
return INDEX.containsKey(code) ? INDEX.get(code) : UNRECOGNIZED;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
/**
|
||||||
|
* 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 javax.ws.rs.Consumes;
|
||||||
|
import javax.ws.rs.GET;
|
||||||
|
import javax.ws.rs.core.MediaType;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import com.google.common.util.concurrent.ListenableFuture;
|
||||||
|
import org.jclouds.cloudstack.domain.ResourceLimit;
|
||||||
|
import org.jclouds.cloudstack.domain.SshKeyPair;
|
||||||
|
import org.jclouds.cloudstack.filters.QuerySigner;
|
||||||
|
import org.jclouds.cloudstack.options.ListResourceLimitsOptions;
|
||||||
|
import org.jclouds.rest.annotations.ExceptionParser;
|
||||||
|
import org.jclouds.rest.annotations.QueryParams;
|
||||||
|
import org.jclouds.rest.annotations.RequestFilters;
|
||||||
|
import org.jclouds.rest.annotations.SelectJson;
|
||||||
|
import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides asynchronous access to CloudStack SSHKeyPair features.
|
||||||
|
*
|
||||||
|
* @author Vijay Kiran
|
||||||
|
* @see <a
|
||||||
|
* href="http://download.cloud.com/releases/2.2.0/api_2.2.12/TOC_User.html"
|
||||||
|
* />
|
||||||
|
*/
|
||||||
|
@RequestFilters(QuerySigner.class)
|
||||||
|
@QueryParams(keys = "response", values = "json")
|
||||||
|
public interface LimitAsyncClient {
|
||||||
|
/**
|
||||||
|
* @see org.jclouds.cloudstack.features.LimitClient#listResourceLimits
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@QueryParams(keys = "command", values = "listResourceLimits")
|
||||||
|
@SelectJson("resourcelimit")
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
|
||||||
|
ListenableFuture<Set<ResourceLimit>> listResourceLimits(ListResourceLimitsOptions... options);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
/**
|
||||||
|
* 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.util.Set;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import org.jclouds.cloudstack.domain.ResourceLimit;
|
||||||
|
import org.jclouds.cloudstack.options.ListResourceLimitsOptions;
|
||||||
|
import org.jclouds.concurrent.Timeout;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides synchronous access to CloudStack resource limit API.
|
||||||
|
*
|
||||||
|
* @author Vijay Kiran
|
||||||
|
* @see <a
|
||||||
|
* href="http://download.cloud.com/releases/2.2.0/api_2.2.12/TOC_User.html"
|
||||||
|
* />
|
||||||
|
*/
|
||||||
|
@Timeout(duration = 60, timeUnit = TimeUnit.SECONDS)
|
||||||
|
public interface LimitClient {
|
||||||
|
/**
|
||||||
|
* List the resource limits.
|
||||||
|
*
|
||||||
|
* @param options if present, how to constrain the list
|
||||||
|
*/
|
||||||
|
Set<ResourceLimit> listResourceLimits(ListResourceLimitsOptions... options);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,137 @@
|
||||||
|
/**
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Vijay Kiran
|
||||||
|
*/
|
||||||
|
public class ListResourceLimitsOptions extends BaseHttpRequestOptions {
|
||||||
|
public static final ListResourceLimitsOptions NONE = new ListResourceLimitsOptions();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists resource limits by account. Must be used with the domainId parameter.
|
||||||
|
*
|
||||||
|
* @param account - the account for which the resource limits are retrieved for.
|
||||||
|
* @return ListResourceLimitsOptions
|
||||||
|
*/
|
||||||
|
public ListResourceLimitsOptions account(String account, long domainId) {
|
||||||
|
this.queryParameters.replaceValues("account", ImmutableSet.of(account));
|
||||||
|
this.queryParameters.replaceValues("domainid", ImmutableSet.of(String.valueOf(domainId)));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists resource limits by domain ID. If used with the account parameter,
|
||||||
|
* lists resource limits for a specified account in a specified domain.
|
||||||
|
*
|
||||||
|
* @param domainId
|
||||||
|
* @return ListResourceLimitsOptions
|
||||||
|
*/
|
||||||
|
public ListResourceLimitsOptions domainId(long domainId) {
|
||||||
|
this.queryParameters.replaceValues("domainid", ImmutableSet.of(String.valueOf(domainId)));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists resource limits by ID.
|
||||||
|
*
|
||||||
|
* @param id of the resource limit.
|
||||||
|
* @return ListResourceLimitsOptions
|
||||||
|
*/
|
||||||
|
public ListResourceLimitsOptions id(long id) {
|
||||||
|
this.queryParameters.replaceValues("account", ImmutableSet.of(String.valueOf(id)));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List by keyword
|
||||||
|
*
|
||||||
|
* @param keyword
|
||||||
|
* @return ListResourceLimitsOptions
|
||||||
|
*/
|
||||||
|
public ListResourceLimitsOptions keyword(String keyword) {
|
||||||
|
this.queryParameters.replaceValues("keyword", ImmutableSet.of(keyword));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Type of resource to update. Values are 0, 1, 2, 3, and 4.
|
||||||
|
* <ul>
|
||||||
|
* <li>0 - Instance. Number of instances a user can create.</li>
|
||||||
|
* <li>1 - IP. Number of public IP addresses a user can own.</li>
|
||||||
|
* <li>2 - Volume. Number of disk volumes a user can create.</li>
|
||||||
|
* <li>3 - Snapshot. Number of snapshots a user can create.</li>
|
||||||
|
* <li>4 - Template. Number of templates that a user can register/create.</li>
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @param resourceType type of the resource to query for
|
||||||
|
* @return ListResourceLimitsOptions
|
||||||
|
*/
|
||||||
|
public ListResourceLimitsOptions resourceType(int resourceType) {
|
||||||
|
this.queryParameters.replaceValues("resourcetype", ImmutableSet.of(String.valueOf(resourceType)));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static class Builder {
|
||||||
|
/**
|
||||||
|
* @see ListResourceLimitsOptions#account(String, long)
|
||||||
|
*/
|
||||||
|
public static ListResourceLimitsOptions account(String account, long domainId) {
|
||||||
|
ListResourceLimitsOptions options = new ListResourceLimitsOptions();
|
||||||
|
return options.account(account, domainId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see ListResourceLimitsOptions#domainId(long)
|
||||||
|
*/
|
||||||
|
public static ListResourceLimitsOptions domainId(long domainId) {
|
||||||
|
ListResourceLimitsOptions options = new ListResourceLimitsOptions();
|
||||||
|
return options.domainId(domainId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see ListResourceLimitsOptions#id(long)
|
||||||
|
*/
|
||||||
|
public static ListResourceLimitsOptions id(long id) {
|
||||||
|
ListResourceLimitsOptions options = new ListResourceLimitsOptions();
|
||||||
|
return options.id(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see ListResourceLimitsOptions#keyword(String)
|
||||||
|
*/
|
||||||
|
public static ListResourceLimitsOptions keyword(String keyword) {
|
||||||
|
ListResourceLimitsOptions options = new ListResourceLimitsOptions();
|
||||||
|
return options.keyword(keyword);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see ListResourceLimitsOptions#resourceType(int)
|
||||||
|
*/
|
||||||
|
public static ListResourceLimitsOptions resourceType(int resourceType) {
|
||||||
|
ListResourceLimitsOptions options = new ListResourceLimitsOptions();
|
||||||
|
return options.resourceType(resourceType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,79 @@
|
||||||
|
/**
|
||||||
|
* 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 com.google.inject.TypeLiteral;
|
||||||
|
import org.jclouds.cloudstack.options.ListResourceLimitsOptions;
|
||||||
|
import org.jclouds.http.HttpRequest;
|
||||||
|
import org.jclouds.http.functions.ParseFirstJsonValueNamed;
|
||||||
|
import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
|
||||||
|
import org.jclouds.rest.internal.RestAnnotationProcessor;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests behavior of {@code LimitAsyncClient}
|
||||||
|
*
|
||||||
|
* @author Vijay Kiran
|
||||||
|
*/
|
||||||
|
@Test(groups = "unit", testName = "LimitAsyncClientTest")
|
||||||
|
public class LimitAsyncClientTest extends BaseCloudStackAsyncClientTest<LimitAsyncClient> {
|
||||||
|
|
||||||
|
public void testListResourceLimits() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = LimitAsyncClient.class.getMethod("listResourceLimits", ListResourceLimitsOptions[].class);
|
||||||
|
HttpRequest httpRequest = processor.createRequest(method);
|
||||||
|
|
||||||
|
assertRequestLineEquals(httpRequest,
|
||||||
|
"GET http://localhost:8080/client/api?response=json&command=listResourceLimits 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 testListResourceLimitsOptions() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = LimitAsyncClient.class.getMethod("listResourceLimits", ListResourceLimitsOptions[].class);
|
||||||
|
HttpRequest httpRequest = processor.createRequest(method, ListResourceLimitsOptions.Builder.account("jclouds" , 23));
|
||||||
|
|
||||||
|
assertRequestLineEquals(httpRequest,
|
||||||
|
"GET http://localhost:8080/client/api?response=json&command=listResourceLimits&account=jclouds&domainid=23 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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected TypeLiteral<RestAnnotationProcessor<LimitAsyncClient>> createTypeLiteral() {
|
||||||
|
return new TypeLiteral<RestAnnotationProcessor<LimitAsyncClient>>() {
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
/**
|
||||||
|
* 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.util.Set;
|
||||||
|
|
||||||
|
import org.jclouds.cloudstack.domain.ResourceLimit;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests behavior of {@code LimitClient}
|
||||||
|
*
|
||||||
|
* @author Vijay Kiran
|
||||||
|
*/
|
||||||
|
@Test(groups = "live", singleThreaded = true, testName = "LimitClientLiveTest")
|
||||||
|
public class LimitClientLiveTest extends BaseCloudStackClientLiveTest {
|
||||||
|
|
||||||
|
public void testListResourceLimits() {
|
||||||
|
final Set<ResourceLimit> resourceLimits = client.getLimitClient().listResourceLimits();
|
||||||
|
|
||||||
|
for (ResourceLimit resourceLimit : resourceLimits) {
|
||||||
|
checkResourceLimit(resourceLimit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkResourceLimit(ResourceLimit resourceLimit) {
|
||||||
|
System.out.println(resourceLimit);
|
||||||
|
assert resourceLimit.getAccount() != null : resourceLimit;
|
||||||
|
assert resourceLimit.getDomain() != null : resourceLimit;
|
||||||
|
assert resourceLimit.getResourceType() != ResourceLimit.ResourceType.UNRECOGNIZED : resourceLimit;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
{ "listresourcelimitsresponse" : { "count":5 ,"resourcelimit" : [ {"account":"jclouds","domainid":457,"domain":"AA000062-jclouds-dev","resourcetype":"0","max":-1}, {"account":"jclouds","domainid":457,"domain":"AA000062-jclouds-dev","resourcetype":"1","max":-1}, {"account":"jclouds","domainid":457,"domain":"AA000062-jclouds-dev","resourcetype":"2","max":-1}, {"account":"jclouds","domainid":457,"domain":"AA000062-jclouds-dev","resourcetype":"3","max":-1}, {"account":"jclouds","domainid":457,"domain":"AA000062-jclouds-dev","resourcetype":"4","max":-1} ] } }
|
Loading…
Reference in New Issue