mirror of https://github.com/apache/jclouds.git
Merge pull request #230 from andreisavu/list-hosts
Implement the Cloudstack global admin listHosts API call
This commit is contained in:
commit
ed9e4c8232
|
@ -21,6 +21,7 @@ package org.jclouds.cloudstack;
|
|||
import org.jclouds.cloudstack.features.GlobalAccountAsyncClient;
|
||||
import org.jclouds.cloudstack.features.GlobalAlertAsyncClient;
|
||||
import org.jclouds.cloudstack.features.GlobalCapacityAsyncClient;
|
||||
import org.jclouds.cloudstack.features.GlobalHostAsyncClient;
|
||||
import org.jclouds.cloudstack.features.GlobalOfferingAsyncClient;
|
||||
import org.jclouds.rest.annotations.Delegate;
|
||||
|
||||
|
@ -62,4 +63,10 @@ public interface CloudStackGlobalAsyncClient extends CloudStackDomainAsyncClient
|
|||
@Override
|
||||
GlobalOfferingAsyncClient getOfferingClient();
|
||||
|
||||
/**
|
||||
* Provides asynchronous access to Hosts
|
||||
*/
|
||||
@Delegate
|
||||
GlobalHostAsyncClient getHostClient();
|
||||
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ import java.util.concurrent.TimeUnit;
|
|||
import org.jclouds.cloudstack.features.GlobalAccountClient;
|
||||
import org.jclouds.cloudstack.features.GlobalAlertClient;
|
||||
import org.jclouds.cloudstack.features.GlobalCapacityClient;
|
||||
import org.jclouds.cloudstack.features.GlobalHostClient;
|
||||
import org.jclouds.cloudstack.features.GlobalOfferingClient;
|
||||
import org.jclouds.concurrent.Timeout;
|
||||
import org.jclouds.rest.annotations.Delegate;
|
||||
|
@ -66,4 +67,10 @@ public interface CloudStackGlobalClient extends CloudStackDomainClient {
|
|||
@Override
|
||||
GlobalOfferingClient getOfferingClient();
|
||||
|
||||
/**
|
||||
* Provides synchronous access to Hosts
|
||||
*/
|
||||
@Delegate
|
||||
GlobalHostClient getHostClient();
|
||||
|
||||
}
|
||||
|
|
|
@ -48,6 +48,8 @@ import org.jclouds.cloudstack.features.GlobalAlertAsyncClient;
|
|||
import org.jclouds.cloudstack.features.GlobalAlertClient;
|
||||
import org.jclouds.cloudstack.features.GlobalCapacityAsyncClient;
|
||||
import org.jclouds.cloudstack.features.GlobalCapacityClient;
|
||||
import org.jclouds.cloudstack.features.GlobalHostAsyncClient;
|
||||
import org.jclouds.cloudstack.features.GlobalHostClient;
|
||||
import org.jclouds.cloudstack.features.GlobalOfferingAsyncClient;
|
||||
import org.jclouds.cloudstack.features.GlobalOfferingClient;
|
||||
import org.jclouds.cloudstack.features.GuestOSAsyncClient;
|
||||
|
@ -136,6 +138,7 @@ public class CloudStackRestClientModule extends RestClientModule<CloudStackClien
|
|||
.put(GlobalAlertClient.class, GlobalAlertAsyncClient.class)//
|
||||
.put(GlobalCapacityClient.class, GlobalCapacityAsyncClient.class)//
|
||||
.put(GlobalOfferingClient.class, GlobalOfferingAsyncClient.class)//
|
||||
.put(GlobalHostClient.class, GlobalHostAsyncClient.class)//
|
||||
.build();
|
||||
|
||||
@Override
|
||||
|
|
|
@ -0,0 +1,774 @@
|
|||
/**
|
||||
* 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 com.google.gson.annotations.SerializedName;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* Represents a host issued by Cloudstack
|
||||
*
|
||||
* @author Andrei Savu
|
||||
*/
|
||||
public class Host implements Comparable<Host> {
|
||||
|
||||
public static Builder builder() {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
private long id;
|
||||
private String allocationState;
|
||||
private int averageLoad;
|
||||
private String capabilities;
|
||||
private long clusterId;
|
||||
private String clusterName;
|
||||
private String clusterType;
|
||||
private String cpuAllocated;
|
||||
private int cpuNumber;
|
||||
private int cpuSpeed;
|
||||
private String cpuUsed;
|
||||
private float cpuWithOverProvisioning;
|
||||
private Date created;
|
||||
private Date disconnected;
|
||||
private long diskSizeAllocated;
|
||||
private long diskSizeTotal;
|
||||
private String events;
|
||||
private boolean hasEnoughCapacity;
|
||||
private String hostTags;
|
||||
private String hypervisor;
|
||||
private String ipAddress;
|
||||
private boolean localStorageActive;
|
||||
private long jobId;
|
||||
private AsyncJob.Status jobStatus;
|
||||
private Date lastPinged;
|
||||
private long managementServerId;
|
||||
private long memoryAllocated;
|
||||
private long memoryTotal;
|
||||
private long memoryUsed;
|
||||
private String name;
|
||||
private long networkKbsRead;
|
||||
private long networkKbsWrite;
|
||||
private long osCategoryId;
|
||||
private long osCategoryName;
|
||||
private long podId;
|
||||
private String podName;
|
||||
private Date removed;
|
||||
private String state;
|
||||
private String type;
|
||||
private String version;
|
||||
private long zoneId;
|
||||
private String zoneName;
|
||||
|
||||
public Builder id(long id) {
|
||||
this.id = id;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder allocationState(String allocationState) {
|
||||
this.allocationState = allocationState;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder averageLoad(int averageLoad) {
|
||||
this.averageLoad = averageLoad;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder capabilities(String capabilities) {
|
||||
this.capabilities = capabilities;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder clusterId(long clusterId) {
|
||||
this.clusterId = clusterId;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder clusterName(String clusterName) {
|
||||
this.clusterName = clusterName;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder clusterType(String clusterType) {
|
||||
this.clusterType = clusterType;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder cpuAllocated(String cpuAllocated) {
|
||||
this.cpuAllocated = cpuAllocated;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder cpuNumber(int cpuNumber) {
|
||||
this.cpuNumber = cpuNumber;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder cpuSpeed(int cpuSpeed) {
|
||||
this.cpuSpeed = cpuSpeed;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder cpuUsed(String cpuUsed) {
|
||||
this.cpuUsed = cpuUsed;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder cpuWithOverProvisioning(float cpuWithOverProvisioning) {
|
||||
this.cpuWithOverProvisioning = cpuWithOverProvisioning;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder created(Date created) {
|
||||
this.created = created;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder disconnected(Date disconnected) {
|
||||
this.disconnected = disconnected;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder diskSizeAllocated(long diskSizeAllocated) {
|
||||
this.diskSizeAllocated = diskSizeAllocated;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder diskSizeTotal(long diskSizeTotal) {
|
||||
this.diskSizeTotal = diskSizeTotal;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder events(String events) {
|
||||
this.events = events;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder hasEnoughCapacity(boolean hasEnoughCapacity) {
|
||||
this.hasEnoughCapacity = hasEnoughCapacity;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder hostTags(String hostTags) {
|
||||
this.hostTags = hostTags;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder hypervisor(String hypervisor) {
|
||||
this.hypervisor = hypervisor;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder ipAddress(String ipAddress) {
|
||||
this.ipAddress = ipAddress;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder localStorageActive(boolean localStorageActive) {
|
||||
this.localStorageActive = localStorageActive;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder jobId(long jobId) {
|
||||
this.jobId = jobId;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder jobStatus(AsyncJob.Status jobStatus) {
|
||||
this.jobStatus = jobStatus;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder lastPinged(Date lastPinged) {
|
||||
this.lastPinged = lastPinged;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder managementServerId(long managementServerId) {
|
||||
this.managementServerId = managementServerId;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder memoryAllocated(long memoryAllocated) {
|
||||
this.memoryAllocated = memoryAllocated;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder memoryTotal(long memoryTotal) {
|
||||
this.memoryTotal = memoryTotal;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder memoryUsed(long memoryUsed) {
|
||||
this.memoryUsed = memoryUsed;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder name(String name) {
|
||||
this.name = name;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder networkKbsRead(long networkKbsRead) {
|
||||
this.networkKbsRead = networkKbsRead;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder networkKbsWrite(long networkKbsWrite) {
|
||||
this.networkKbsWrite = networkKbsWrite;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder osCategoryId(long osCategoryId) {
|
||||
this.osCategoryId = osCategoryId;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder osCategoryName(long osCategoryName) {
|
||||
this.osCategoryName = osCategoryName;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder podId(long podId) {
|
||||
this.podId = podId;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder podName(String podName) {
|
||||
this.podName = podName;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder removed(Date removed) {
|
||||
this.removed = removed;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder state(String state) {
|
||||
this.state = state;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder type(String type) {
|
||||
this.type = type;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder version(String version) {
|
||||
this.version = version;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder zoneId(long zoneId) {
|
||||
this.zoneId = zoneId;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder zoneName(String zoneName) {
|
||||
this.zoneName = zoneName;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Host build() {
|
||||
return new Host(id, allocationState, averageLoad, capabilities,
|
||||
clusterId, clusterName, clusterType, cpuAllocated,
|
||||
cpuNumber, cpuSpeed, cpuUsed, cpuWithOverProvisioning,
|
||||
created, disconnected, diskSizeAllocated, diskSizeTotal,
|
||||
events, hasEnoughCapacity, hostTags, hypervisor,
|
||||
ipAddress, localStorageActive, jobId, jobStatus,
|
||||
lastPinged, managementServerId, memoryAllocated, memoryTotal,
|
||||
memoryUsed, name, networkKbsRead, networkKbsWrite,
|
||||
osCategoryId, osCategoryName, podId, podName, removed,
|
||||
state, type, version, zoneId, zoneName);
|
||||
}
|
||||
}
|
||||
|
||||
private long id;
|
||||
@SerializedName("allocationstate")
|
||||
private String allocationState;
|
||||
@SerializedName("averageload")
|
||||
private int averageLoad;
|
||||
@SerializedName("capabilities")
|
||||
private String capabilities;
|
||||
@SerializedName("clusterid")
|
||||
private long clusterId;
|
||||
@SerializedName("clustername")
|
||||
private String clusterName;
|
||||
@SerializedName("clustertype")
|
||||
private String clusterType;
|
||||
@SerializedName("cpuallocated")
|
||||
private String cpuAllocated;
|
||||
@SerializedName("cpunumber")
|
||||
private int cpuNumber;
|
||||
@SerializedName("cpuspeed")
|
||||
private int cpuSpeed;
|
||||
@SerializedName("cpuused")
|
||||
private String cpuUsed;
|
||||
@SerializedName("cpuwithoverprovisioning")
|
||||
private float cpuWithOverProvisioning;
|
||||
private Date created;
|
||||
private Date disconnected;
|
||||
@SerializedName("disksizeallocated")
|
||||
private long diskSizeAllocated;
|
||||
@SerializedName("disksizetotal")
|
||||
private long diskSizeTotal;
|
||||
private String events;
|
||||
@SerializedName("hasenoughcapacity")
|
||||
private boolean hasEnoughCapacity;
|
||||
@SerializedName("hosttags")
|
||||
private String hostTags;
|
||||
private String hypervisor;
|
||||
@SerializedName("ipaddress")
|
||||
private String ipAddress;
|
||||
@SerializedName("islocalstorageactive")
|
||||
private boolean localStorageActive;
|
||||
@SerializedName("jobid")
|
||||
private long jobId;
|
||||
@SerializedName("jobstatus")
|
||||
private AsyncJob.Status jobStatus;
|
||||
@SerializedName("lastpinged")
|
||||
private Date lastPinged;
|
||||
@SerializedName("managementserverid")
|
||||
private long managementServerId;
|
||||
@SerializedName("memoryallocated")
|
||||
private long memoryAllocated;
|
||||
@SerializedName("memorytotal")
|
||||
private long memoryTotal;
|
||||
@SerializedName("memoryused")
|
||||
private long memoryUsed;
|
||||
private String name;
|
||||
@SerializedName("networkkbsread")
|
||||
private long networkKbsRead;
|
||||
@SerializedName("networkkbswrite")
|
||||
private long networkKbsWrite;
|
||||
@SerializedName("oscategoryid")
|
||||
private long osCategoryId;
|
||||
@SerializedName("oscategoryname")
|
||||
private long osCategoryName;
|
||||
@SerializedName("podid")
|
||||
private long podId;
|
||||
@SerializedName("podname")
|
||||
private String podName;
|
||||
private Date removed;
|
||||
private String state;
|
||||
private String type;
|
||||
private String version;
|
||||
@SerializedName("zoneid")
|
||||
private long zoneId;
|
||||
@SerializedName("zonename")
|
||||
private String zoneName;
|
||||
|
||||
/* exists for the deserializer, only */
|
||||
Host() {
|
||||
}
|
||||
|
||||
public Host(long id, String allocationState, int averageLoad, String capabilities,
|
||||
long clusterId, String clusterName, String clusterType, String cpuAllocated,
|
||||
int cpuNumber, int cpuSpeed, String cpuUsed, float cpuWithOverProvisioning,
|
||||
Date created, Date disconnected, long diskSizeAllocated, long diskSizeTotal,
|
||||
String events, boolean hasEnoughCapacity, String hostTags, String hypervisor,
|
||||
String ipAddress, boolean localStorageActive, long jobId, AsyncJob.Status jobStatus,
|
||||
Date lastPinged, long managementServerId, long memoryAllocated, long memoryTotal,
|
||||
long memoryUsed, String name, long networkKbsRead, long networkKbsWrite,
|
||||
long osCategoryId, long osCategoryName, long podId, String podName, Date removed,
|
||||
String state, String type, String version, long zoneId, String zoneName) {
|
||||
this.id = id;
|
||||
this.allocationState = allocationState;
|
||||
this.averageLoad = averageLoad;
|
||||
this.capabilities = capabilities;
|
||||
this.clusterId = clusterId;
|
||||
this.clusterName = clusterName;
|
||||
this.clusterType = clusterType;
|
||||
this.cpuAllocated = cpuAllocated;
|
||||
this.cpuNumber = cpuNumber;
|
||||
this.cpuSpeed = cpuSpeed;
|
||||
this.cpuUsed = cpuUsed;
|
||||
this.cpuWithOverProvisioning = cpuWithOverProvisioning;
|
||||
this.created = created;
|
||||
this.disconnected = disconnected;
|
||||
this.diskSizeAllocated = diskSizeAllocated;
|
||||
this.diskSizeTotal = diskSizeTotal;
|
||||
this.events = events;
|
||||
this.hasEnoughCapacity = hasEnoughCapacity;
|
||||
this.hostTags = hostTags;
|
||||
this.hypervisor = hypervisor;
|
||||
this.ipAddress = ipAddress;
|
||||
this.localStorageActive = localStorageActive;
|
||||
this.jobId = jobId;
|
||||
this.jobStatus = jobStatus;
|
||||
this.lastPinged = lastPinged;
|
||||
this.managementServerId = managementServerId;
|
||||
this.memoryAllocated = memoryAllocated;
|
||||
this.memoryTotal = memoryTotal;
|
||||
this.memoryUsed = memoryUsed;
|
||||
this.name = name;
|
||||
this.networkKbsRead = networkKbsRead;
|
||||
this.networkKbsWrite = networkKbsWrite;
|
||||
this.osCategoryId = osCategoryId;
|
||||
this.osCategoryName = osCategoryName;
|
||||
this.podId = podId;
|
||||
this.podName = podName;
|
||||
this.removed = removed;
|
||||
this.state = state;
|
||||
this.type = type;
|
||||
this.version = version;
|
||||
this.zoneId = zoneId;
|
||||
this.zoneName = zoneName;
|
||||
}
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getAllocationState() {
|
||||
return allocationState;
|
||||
}
|
||||
|
||||
public int getAverageLoad() {
|
||||
return averageLoad;
|
||||
}
|
||||
|
||||
public String getCapabilities() {
|
||||
return capabilities;
|
||||
}
|
||||
|
||||
public long getClusterId() {
|
||||
return clusterId;
|
||||
}
|
||||
|
||||
public String getClusterName() {
|
||||
return clusterName;
|
||||
}
|
||||
|
||||
public String getClusterType() {
|
||||
return clusterType;
|
||||
}
|
||||
|
||||
public String getCpuAllocated() {
|
||||
return cpuAllocated;
|
||||
}
|
||||
|
||||
public int getCpuNumber() {
|
||||
return cpuNumber;
|
||||
}
|
||||
|
||||
public int getCpuSpeed() {
|
||||
return cpuSpeed;
|
||||
}
|
||||
|
||||
public String getCpuUsed() {
|
||||
return cpuUsed;
|
||||
}
|
||||
|
||||
public float getCpuWithOverProvisioning() {
|
||||
return cpuWithOverProvisioning;
|
||||
}
|
||||
|
||||
public Date getCreated() {
|
||||
return created;
|
||||
}
|
||||
|
||||
public Date getDisconnected() {
|
||||
return disconnected;
|
||||
}
|
||||
|
||||
public long getDiskSizeAllocated() {
|
||||
return diskSizeAllocated;
|
||||
}
|
||||
|
||||
public long getDiskSizeTotal() {
|
||||
return diskSizeTotal;
|
||||
}
|
||||
|
||||
public String getEvents() {
|
||||
return events;
|
||||
}
|
||||
|
||||
public boolean isHasEnoughCapacity() {
|
||||
return hasEnoughCapacity;
|
||||
}
|
||||
|
||||
public String getHostTags() {
|
||||
return hostTags;
|
||||
}
|
||||
|
||||
public String getHypervisor() {
|
||||
return hypervisor;
|
||||
}
|
||||
|
||||
public String getIpAddress() {
|
||||
return ipAddress;
|
||||
}
|
||||
|
||||
public boolean isLocalStorageActive() {
|
||||
return localStorageActive;
|
||||
}
|
||||
|
||||
public long getJobId() {
|
||||
return jobId;
|
||||
}
|
||||
|
||||
public AsyncJob.Status getJobStatus() {
|
||||
return jobStatus;
|
||||
}
|
||||
|
||||
public Date getLastPinged() {
|
||||
return lastPinged;
|
||||
}
|
||||
|
||||
public long getManagementServerId() {
|
||||
return managementServerId;
|
||||
}
|
||||
|
||||
public long getMemoryAllocated() {
|
||||
return memoryAllocated;
|
||||
}
|
||||
|
||||
public long getMemoryTotal() {
|
||||
return memoryTotal;
|
||||
}
|
||||
|
||||
public long getMemoryUsed() {
|
||||
return memoryUsed;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public long getNetworkKbsRead() {
|
||||
return networkKbsRead;
|
||||
}
|
||||
|
||||
public long getNetworkKbsWrite() {
|
||||
return networkKbsWrite;
|
||||
}
|
||||
|
||||
public long getOsCategoryId() {
|
||||
return osCategoryId;
|
||||
}
|
||||
|
||||
public long getOsCategoryName() {
|
||||
return osCategoryName;
|
||||
}
|
||||
|
||||
public long getPodId() {
|
||||
return podId;
|
||||
}
|
||||
|
||||
public String getPodName() {
|
||||
return podName;
|
||||
}
|
||||
|
||||
public Date getRemoved() {
|
||||
return removed;
|
||||
}
|
||||
|
||||
public String getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public long getZoneId() {
|
||||
return zoneId;
|
||||
}
|
||||
|
||||
public String getZoneName() {
|
||||
return zoneName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = (int) (id ^ (id >>> 32));
|
||||
result = 31 * result + (allocationState != null ? allocationState.hashCode() : 0);
|
||||
result = 31 * result + averageLoad;
|
||||
result = 31 * result + (capabilities != null ? capabilities.hashCode() : 0);
|
||||
result = 31 * result + (int) (clusterId ^ (clusterId >>> 32));
|
||||
result = 31 * result + (clusterName != null ? clusterName.hashCode() : 0);
|
||||
result = 31 * result + (clusterType != null ? clusterType.hashCode() : 0);
|
||||
result = 31 * result + (cpuAllocated != null ? cpuAllocated.hashCode() : 0);
|
||||
result = 31 * result + cpuNumber;
|
||||
result = 31 * result + cpuSpeed;
|
||||
result = 31 * result + (cpuUsed != null ? cpuUsed.hashCode() : 0);
|
||||
result = 31 * result + (int) cpuWithOverProvisioning;
|
||||
result = 31 * result + (created != null ? created.hashCode() : 0);
|
||||
result = 31 * result + (disconnected != null ? disconnected.hashCode() : 0);
|
||||
result = 31 * result + (int) (diskSizeAllocated ^ (diskSizeAllocated >>> 32));
|
||||
result = 31 * result + (int) (diskSizeTotal ^ (diskSizeTotal >>> 32));
|
||||
result = 31 * result + (events != null ? events.hashCode() : 0);
|
||||
result = 31 * result + (hasEnoughCapacity ? 1 : 0);
|
||||
result = 31 * result + (hostTags != null ? hostTags.hashCode() : 0);
|
||||
result = 31 * result + (hypervisor != null ? hypervisor.hashCode() : 0);
|
||||
result = 31 * result + (ipAddress != null ? ipAddress.hashCode() : 0);
|
||||
result = 31 * result + (localStorageActive ? 1 : 0);
|
||||
result = 31 * result + (int) (jobId ^ (jobId >>> 32));
|
||||
result = 31 * result + (jobStatus != null ? jobStatus.hashCode() : 0);
|
||||
result = 31 * result + (lastPinged != null ? lastPinged.hashCode() : 0);
|
||||
result = 31 * result + (int) (managementServerId ^ (managementServerId >>> 32));
|
||||
result = 31 * result + (int) (memoryAllocated ^ (memoryAllocated >>> 32));
|
||||
result = 31 * result + (int) (memoryTotal ^ (memoryTotal >>> 32));
|
||||
result = 31 * result + (int) (memoryUsed ^ (memoryUsed >>> 32));
|
||||
result = 31 * result + (name != null ? name.hashCode() : 0);
|
||||
result = 31 * result + (int) (networkKbsRead ^ (networkKbsRead >>> 32));
|
||||
result = 31 * result + (int) (networkKbsWrite ^ (networkKbsWrite >>> 32));
|
||||
result = 31 * result + (int) (osCategoryId ^ (osCategoryId >>> 32));
|
||||
result = 31 * result + (int) (osCategoryName ^ (osCategoryName >>> 32));
|
||||
result = 31 * result + (int) (podId ^ (podId >>> 32));
|
||||
result = 31 * result + (podName != null ? podName.hashCode() : 0);
|
||||
result = 31 * result + (removed != null ? removed.hashCode() : 0);
|
||||
result = 31 * result + (state != null ? state.hashCode() : 0);
|
||||
result = 31 * result + (type != null ? type.hashCode() : 0);
|
||||
result = 31 * result + (version != null ? version.hashCode() : 0);
|
||||
result = 31 * result + (int) (zoneId ^ (zoneId >>> 32));
|
||||
result = 31 * result + (zoneName != null ? zoneName.hashCode() : 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
Host host = (Host) o;
|
||||
|
||||
if (averageLoad != host.averageLoad) return false;
|
||||
if (clusterId != host.clusterId) return false;
|
||||
if (cpuAllocated != host.cpuAllocated) return false;
|
||||
if (cpuNumber != host.cpuNumber) return false;
|
||||
if (cpuSpeed != host.cpuSpeed) return false;
|
||||
if (cpuUsed != host.cpuUsed) return false;
|
||||
if (cpuWithOverProvisioning != host.cpuWithOverProvisioning) return false;
|
||||
if (disconnected != host.disconnected) return false;
|
||||
if (diskSizeAllocated != host.diskSizeAllocated) return false;
|
||||
if (diskSizeTotal != host.diskSizeTotal) return false;
|
||||
if (hasEnoughCapacity != host.hasEnoughCapacity) return false;
|
||||
if (id != host.id) return false;
|
||||
if (localStorageActive != host.localStorageActive) return false;
|
||||
if (jobId != host.jobId) return false;
|
||||
if (managementServerId != host.managementServerId) return false;
|
||||
if (memoryAllocated != host.memoryAllocated) return false;
|
||||
if (memoryTotal != host.memoryTotal) return false;
|
||||
if (memoryUsed != host.memoryUsed) return false;
|
||||
if (networkKbsRead != host.networkKbsRead) return false;
|
||||
if (networkKbsWrite != host.networkKbsWrite) return false;
|
||||
if (osCategoryId != host.osCategoryId) return false;
|
||||
if (osCategoryName != host.osCategoryName) return false;
|
||||
if (podId != host.podId) return false;
|
||||
if (zoneId != host.zoneId) return false;
|
||||
if (allocationState != null ? !allocationState.equals(host.allocationState) : host.allocationState != null)
|
||||
return false;
|
||||
if (capabilities != null ? !capabilities.equals(host.capabilities) : host.capabilities != null)
|
||||
return false;
|
||||
if (clusterName != null ? !clusterName.equals(host.clusterName) : host.clusterName != null)
|
||||
return false;
|
||||
if (clusterType != null ? !clusterType.equals(host.clusterType) : host.clusterType != null)
|
||||
return false;
|
||||
if (created != null ? !created.equals(host.created) : host.created != null)
|
||||
return false;
|
||||
if (events != null ? !events.equals(host.events) : host.events != null)
|
||||
return false;
|
||||
if (hostTags != null ? !hostTags.equals(host.hostTags) : host.hostTags != null)
|
||||
return false;
|
||||
if (hypervisor != null ? !hypervisor.equals(host.hypervisor) : host.hypervisor != null)
|
||||
return false;
|
||||
if (ipAddress != null ? !ipAddress.equals(host.ipAddress) : host.ipAddress != null)
|
||||
return false;
|
||||
if (jobStatus != host.jobStatus) return false;
|
||||
if (lastPinged != null ? !lastPinged.equals(host.lastPinged) : host.lastPinged != null)
|
||||
return false;
|
||||
if (name != null ? !name.equals(host.name) : host.name != null)
|
||||
return false;
|
||||
if (podName != null ? !podName.equals(host.podName) : host.podName != null)
|
||||
return false;
|
||||
if (removed != null ? !removed.equals(host.removed) : host.removed != null)
|
||||
return false;
|
||||
if (state != null ? !state.equals(host.state) : host.state != null)
|
||||
return false;
|
||||
if (type != null ? !type.equals(host.type) : host.type != null)
|
||||
return false;
|
||||
if (version != null ? !version.equals(host.version) : host.version != null)
|
||||
return false;
|
||||
if (zoneName != null ? !zoneName.equals(host.zoneName) : host.zoneName != null)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Host{" +
|
||||
"id=" + id +
|
||||
", allocationState='" + allocationState + '\'' +
|
||||
", averageLoad=" + averageLoad +
|
||||
", capabilities='" + capabilities + '\'' +
|
||||
", clusterId=" + clusterId +
|
||||
", clusterName='" + clusterName + '\'' +
|
||||
", clusterType='" + clusterType + '\'' +
|
||||
", cpuAllocated=" + cpuAllocated +
|
||||
", cpuNumber=" + cpuNumber +
|
||||
", cpuSpeed=" + cpuSpeed +
|
||||
", cpuUsed=" + cpuUsed +
|
||||
", cpuWithOverProvisioning=" + cpuWithOverProvisioning +
|
||||
", created=" + created +
|
||||
", disconnected=" + disconnected +
|
||||
", diskSizeAllocated=" + diskSizeAllocated +
|
||||
", diskSizeTotal=" + diskSizeTotal +
|
||||
", events='" + events + '\'' +
|
||||
", hasEnoughCapacity=" + hasEnoughCapacity +
|
||||
", hostTags='" + hostTags + '\'' +
|
||||
", hypervisor='" + hypervisor + '\'' +
|
||||
", ipAddress='" + ipAddress + '\'' +
|
||||
", localStorageActive=" + localStorageActive +
|
||||
", jobId=" + jobId +
|
||||
", jobStatus=" + jobStatus +
|
||||
", lastPinged=" + lastPinged +
|
||||
", managementServerId=" + managementServerId +
|
||||
", memoryAllocated=" + memoryAllocated +
|
||||
", memoryTotal=" + memoryTotal +
|
||||
", memoryUsed=" + memoryUsed +
|
||||
", name='" + name + '\'' +
|
||||
", networkKbsRead=" + networkKbsRead +
|
||||
", networkKbsWrite=" + networkKbsWrite +
|
||||
", osCategoryId=" + osCategoryId +
|
||||
", osCategoryName=" + osCategoryName +
|
||||
", podId=" + podId +
|
||||
", podName='" + podName + '\'' +
|
||||
", removed=" + removed +
|
||||
", state='" + state + '\'' +
|
||||
", type='" + type + '\'' +
|
||||
", version='" + version + '\'' +
|
||||
", zoneId=" + zoneId +
|
||||
", zoneName='" + zoneName + '\'' +
|
||||
'}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Host other) {
|
||||
return Long.valueOf(this.getId()).compareTo(other.getId());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
/**
|
||||
* 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.domain.Host;
|
||||
import org.jclouds.cloudstack.filters.QuerySigner;
|
||||
import org.jclouds.cloudstack.options.ListHostsOptions;
|
||||
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;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Provides asynchronous access to cloudstack via their REST API.
|
||||
* <p/>
|
||||
*
|
||||
* @see GlobalHostClient
|
||||
* @see <a href="http://download.cloud.com/releases/2.2.0/api_2.2.12/TOC_Global_Admin.html" />
|
||||
* @author Andrei Savu
|
||||
*/
|
||||
@RequestFilters(QuerySigner.class)
|
||||
@QueryParams(keys = "response", values = "json")
|
||||
public interface GlobalHostAsyncClient {
|
||||
|
||||
/**
|
||||
* @see GlobalHostClient#listHosts
|
||||
*/
|
||||
@GET
|
||||
@QueryParams(keys = "command", values = "listHosts")
|
||||
@SelectJson("host")
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
|
||||
ListenableFuture<Set<Host>> listHosts(ListHostsOptions... options);
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
/**
|
||||
* 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.Host;
|
||||
import org.jclouds.cloudstack.options.ListHostsOptions;
|
||||
import org.jclouds.concurrent.Timeout;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* Provides synchronous access to CloudStack host features.
|
||||
* <p/>
|
||||
*
|
||||
* @see org.jclouds.cloudstack.features.GlobalOfferingAsyncClient
|
||||
* @see <a href="http://download.cloud.com/releases/2.2.0/api_2.2.12/TOC_Global_Admin.html" />
|
||||
* @author Andrei Savu
|
||||
*/
|
||||
@Timeout(duration = 60, timeUnit = TimeUnit.SECONDS)
|
||||
public interface GlobalHostClient {
|
||||
|
||||
/**
|
||||
* Lists hosts
|
||||
*
|
||||
* @param options
|
||||
* if present, how to constrain the list.
|
||||
* @return hosts matching query, or empty set, if no service
|
||||
* offerings are found
|
||||
*/
|
||||
Set<Host> listHosts(ListHostsOptions... options);
|
||||
|
||||
}
|
|
@ -0,0 +1,264 @@
|
|||
/**
|
||||
* 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.cloudstack.domain.NetworkType;
|
||||
import org.jclouds.cloudstack.domain.TrafficType;
|
||||
|
||||
/**
|
||||
* Options used to control what hosts information is returned
|
||||
*
|
||||
* @author Andrei Savu
|
||||
* @see <a
|
||||
* href="http://download.cloud.com/releases/2.2.0/api_2.2.12/global_admin/listHosts.html"
|
||||
* />
|
||||
*/
|
||||
public class ListHostsOptions extends AccountInDomainOptions {
|
||||
|
||||
public static final ListHostsOptions NONE = new ListHostsOptions();
|
||||
|
||||
/**
|
||||
* @param id the id of the host
|
||||
*/
|
||||
public ListHostsOptions id(long id) {
|
||||
this.queryParameters.replaceValues("id", ImmutableSet.of(id + ""));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param allocationState list hosts by allocation state
|
||||
*/
|
||||
public ListHostsOptions allocationState(String allocationState) {
|
||||
this.queryParameters.replaceValues("allocationstate", ImmutableSet.of(allocationState));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param clusterId lists hosts existing in particular cluster
|
||||
*/
|
||||
public ListHostsOptions clusterId(long clusterId) {
|
||||
this.queryParameters.replaceValues("clusterid", ImmutableSet.of(clusterId + ""));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param keyword List by keyword
|
||||
*/
|
||||
public ListHostsOptions keyword(String keyword) {
|
||||
this.queryParameters.replaceValues("keyword", ImmutableSet.of(keyword));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param name List by name
|
||||
*/
|
||||
public ListHostsOptions name(String name) {
|
||||
this.queryParameters.replaceValues("name", ImmutableSet.of(name));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param page
|
||||
*/
|
||||
public ListHostsOptions page(long page) {
|
||||
this.queryParameters.replaceValues("page", ImmutableSet.of(page + ""));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param pageSize the page size
|
||||
*/
|
||||
public ListHostsOptions pageSize(long pageSize) {
|
||||
this.queryParameters.replaceValues("pagesize", ImmutableSet.of(pageSize + ""));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param podId the Pod ID for the host
|
||||
*/
|
||||
public ListHostsOptions podId(long podId) {
|
||||
this.queryParameters.replaceValues("podid", ImmutableSet.of(podId + ""));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param state the state of the host
|
||||
*/
|
||||
public ListHostsOptions state(String state) {
|
||||
this.queryParameters.replaceValues("state", ImmutableSet.of(state));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param type the type of the host
|
||||
*/
|
||||
public ListHostsOptions type(String type) {
|
||||
this.queryParameters.replaceValues("type", ImmutableSet.of(type));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param virtualMachineId lists hosts in the same cluster as this VM and flag hosts with
|
||||
* enough CPU/RAm to host this VM
|
||||
*/
|
||||
public ListHostsOptions virtualMachineId(long virtualMachineId) {
|
||||
this.queryParameters.replaceValues("virtualmachineid", ImmutableSet.of(virtualMachineId + ""));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param zoneId the Zone ID for the host
|
||||
*/
|
||||
public ListHostsOptions zoneId(long zoneId) {
|
||||
this.queryParameters.replaceValues("zoneid", ImmutableSet.of(zoneId + ""));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public ListHostsOptions accountInDomain(String account, long domain) {
|
||||
return ListHostsOptions.class.cast(super.accountInDomain(account, domain));
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public ListHostsOptions domainId(long domainId) {
|
||||
return ListHostsOptions.class.cast(super.domainId(domainId));
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
/**
|
||||
* @see ListHostsOptions#id
|
||||
*/
|
||||
public static ListHostsOptions id(long id) {
|
||||
ListHostsOptions options = new ListHostsOptions();
|
||||
return options.id(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ListHostsOptions#allocationState
|
||||
*/
|
||||
public static ListHostsOptions allocationState(String allocationState) {
|
||||
ListHostsOptions options = new ListHostsOptions();
|
||||
return options.allocationState(allocationState);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ListHostsOptions#clusterId
|
||||
*/
|
||||
public static ListHostsOptions clusterId(long clusterId) {
|
||||
ListHostsOptions options = new ListHostsOptions();
|
||||
return options.clusterId(clusterId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ListHostsOptions#keyword(String)
|
||||
*/
|
||||
public static ListHostsOptions keyword(String keyword) {
|
||||
ListHostsOptions options = new ListHostsOptions();
|
||||
return options.keyword(keyword);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ListHostsOptions#name(String)
|
||||
*/
|
||||
public static ListHostsOptions name(String name) {
|
||||
ListHostsOptions options = new ListHostsOptions();
|
||||
return options.name(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ListHostsOptions#page
|
||||
*/
|
||||
public static ListHostsOptions page(long page) {
|
||||
ListHostsOptions options = new ListHostsOptions();
|
||||
return options.page(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ListHostsOptions#pageSize
|
||||
*/
|
||||
public static ListHostsOptions pageSize(long pageSize) {
|
||||
ListHostsOptions options = new ListHostsOptions();
|
||||
return options.pageSize(pageSize);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ListHostsOptions#podId
|
||||
*/
|
||||
public static ListHostsOptions podId(long podId) {
|
||||
ListHostsOptions options = new ListHostsOptions();
|
||||
return options.podId(podId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ListHostsOptions#state
|
||||
*/
|
||||
public static ListHostsOptions state(String state) {
|
||||
ListHostsOptions options = new ListHostsOptions();
|
||||
return options.state(state);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ListHostsOptions#type
|
||||
*/
|
||||
public static ListHostsOptions type(String type) {
|
||||
ListHostsOptions options = new ListHostsOptions();
|
||||
return options.type(type);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ListHostsOptions#virtualMachineId
|
||||
*/
|
||||
public static ListHostsOptions virtualMachineId(long virtualMachineId) {
|
||||
ListHostsOptions options = new ListHostsOptions();
|
||||
return options.virtualMachineId(virtualMachineId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ListHostsOptions#zoneId
|
||||
*/
|
||||
public static ListHostsOptions zoneId(long zoneId) {
|
||||
ListHostsOptions options = new ListHostsOptions();
|
||||
return options.zoneId(zoneId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ListHostsOptions#accountInDomain
|
||||
*/
|
||||
public static ListHostsOptions accountInDomain(String account, long domain) {
|
||||
ListHostsOptions options = new ListHostsOptions();
|
||||
return options.accountInDomain(account, domain);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ListHostsOptions#domainId
|
||||
*/
|
||||
public static ListHostsOptions domainId(long domainId) {
|
||||
ListHostsOptions options = new ListHostsOptions();
|
||||
return options.domainId(domainId);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
/**
|
||||
* 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.inject.TypeLiteral;
|
||||
import org.jclouds.cloudstack.options.ListHostsOptions;
|
||||
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;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/**
|
||||
* Tests behavior of {@code GlobalHostAsyncClient}
|
||||
*
|
||||
* @author Andrei Savu
|
||||
*/
|
||||
@Test(groups = "unit", testName = "GlobalHostAsyncClientTest")
|
||||
public class GlobalHostAsyncClientTest extends BaseCloudStackAsyncClientTest<GlobalHostAsyncClient> {
|
||||
|
||||
public void testListHosts() throws Exception {
|
||||
Method method =GlobalHostAsyncClient.class.getMethod("listHosts", ListHostsOptions[].class);
|
||||
HttpRequest httpRequest = processor.createRequest(method);
|
||||
|
||||
assertRequestLineEquals(httpRequest,
|
||||
"GET http://localhost:8080/client/api?response=json&command=listHosts 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<GlobalHostAsyncClient>> createTypeLiteral() {
|
||||
return new TypeLiteral<RestAnnotationProcessor<GlobalHostAsyncClient>>() {
|
||||
};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
/**
|
||||
* 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.Host;
|
||||
import org.jclouds.logging.Logger;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import static org.testng.Assert.assertEquals;
|
||||
import static org.testng.Assert.assertTrue;
|
||||
|
||||
/**
|
||||
* Tests behavior of {@code GlobalHostClient}
|
||||
*
|
||||
* @author Andrei Savu
|
||||
*/
|
||||
@Test(groups = "live", singleThreaded = true, testName = "GlobalHostClientLiveTest")
|
||||
public class GlobalHostClientLiveTest extends BaseCloudStackClientLiveTest {
|
||||
|
||||
@Test(groups = "live", enabled = true)
|
||||
public void testListHosts() throws Exception {
|
||||
assertTrue(globalAdminEnabled, "Test cannot run without global admin identity and credentials");
|
||||
|
||||
Set<Host> hosts = globalAdminClient.getHostClient().listHosts();
|
||||
assert hosts.size() > 0 : hosts;
|
||||
|
||||
for(Host host : hosts) {
|
||||
checkHost(host);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkHost(Host host) {
|
||||
if (host.getType().equals("Routing")) {
|
||||
assert host.getCpuNumber() > 0;
|
||||
assert host.getAverageLoad() >= 0;
|
||||
assert host.getHypervisor() != null;
|
||||
}
|
||||
assert host.getAllocationState() != null;
|
||||
assert host.getEvents() != null;
|
||||
if (host.getType().equals("SecondaryStorageVM")) {
|
||||
assert host.getName().startsWith("s-");
|
||||
}
|
||||
if (host.getType().equals("ConsoleProxy")) {
|
||||
assert host.getName().startsWith("v-");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,166 @@
|
|||
/**
|
||||
* 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.ImmutableList;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import static org.jclouds.cloudstack.options.ListHostsOptions.Builder.allocationState;
|
||||
import static org.jclouds.cloudstack.options.ListHostsOptions.Builder.clusterId;
|
||||
import static org.jclouds.cloudstack.options.ListHostsOptions.Builder.id;
|
||||
import static org.jclouds.cloudstack.options.ListHostsOptions.Builder.keyword;
|
||||
import static org.jclouds.cloudstack.options.ListHostsOptions.Builder.name;
|
||||
import static org.jclouds.cloudstack.options.ListHostsOptions.Builder.page;
|
||||
import static org.jclouds.cloudstack.options.ListHostsOptions.Builder.pageSize;
|
||||
import static org.jclouds.cloudstack.options.ListHostsOptions.Builder.podId;
|
||||
import static org.jclouds.cloudstack.options.ListHostsOptions.Builder.state;
|
||||
import static org.jclouds.cloudstack.options.ListHostsOptions.Builder.type;
|
||||
import static org.jclouds.cloudstack.options.ListHostsOptions.Builder.virtualMachineId;
|
||||
import static org.jclouds.cloudstack.options.ListHostsOptions.Builder.zoneId;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* Tests behavior of {@code ListHostsOptions}
|
||||
*
|
||||
* @author Andrei Savu
|
||||
*/
|
||||
@Test(groups = "unit")
|
||||
public class ListHostsOptionsTest {
|
||||
|
||||
public void testId() {
|
||||
ListHostsOptions options = new ListHostsOptions().id(42L);
|
||||
assertEquals(ImmutableList.of("42"), options.buildQueryParameters().get("id"));
|
||||
}
|
||||
|
||||
public void testIdStatic() {
|
||||
ListHostsOptions options = id(42L);
|
||||
assertEquals(ImmutableList.of("42"), options.buildQueryParameters().get("id"));
|
||||
}
|
||||
|
||||
public void testAllocationState() {
|
||||
ListHostsOptions options = new ListHostsOptions().allocationState("Enabled");
|
||||
assertEquals(ImmutableList.of("Enabled"), options.buildQueryParameters().get("allocationstate"));
|
||||
}
|
||||
|
||||
public void testAllocationStateStatic() {
|
||||
ListHostsOptions options = allocationState("Enabled");
|
||||
assertEquals(ImmutableList.of("Enabled"), options.buildQueryParameters().get("allocationstate"));
|
||||
}
|
||||
|
||||
public void testClusterId() {
|
||||
ListHostsOptions options = new ListHostsOptions().clusterId(42L);
|
||||
assertEquals(ImmutableList.of("42"), options.buildQueryParameters().get("clusterid"));
|
||||
}
|
||||
|
||||
public void testClusterIdStatic() {
|
||||
ListHostsOptions options = clusterId(42L);
|
||||
assertEquals(ImmutableList.of("42"), options.buildQueryParameters().get("clusterid"));
|
||||
}
|
||||
|
||||
public void testKeyword() {
|
||||
ListHostsOptions options = new ListHostsOptions().keyword("Enabled");
|
||||
assertEquals(ImmutableList.of("Enabled"), options.buildQueryParameters().get("keyword"));
|
||||
}
|
||||
|
||||
public void testKeywordStatic() {
|
||||
ListHostsOptions options = keyword("Enabled");
|
||||
assertEquals(ImmutableList.of("Enabled"), options.buildQueryParameters().get("keyword"));
|
||||
}
|
||||
|
||||
public void testName() {
|
||||
ListHostsOptions options = new ListHostsOptions().name("Host Name");
|
||||
assertEquals(ImmutableList.of("Host Name"), options.buildQueryParameters().get("name"));
|
||||
}
|
||||
|
||||
public void testNameStatic() {
|
||||
ListHostsOptions options = name("Host Name");
|
||||
assertEquals(ImmutableList.of("Host Name"), options.buildQueryParameters().get("name"));
|
||||
}
|
||||
|
||||
public void testPage() {
|
||||
ListHostsOptions options = new ListHostsOptions().page(42L);
|
||||
assertEquals(ImmutableList.of("42"), options.buildQueryParameters().get("page"));
|
||||
}
|
||||
|
||||
public void testPageStatic() {
|
||||
ListHostsOptions options = page(42L);
|
||||
assertEquals(ImmutableList.of("42"), options.buildQueryParameters().get("page"));
|
||||
}
|
||||
|
||||
public void testPageSize() {
|
||||
ListHostsOptions options = new ListHostsOptions().pageSize(42L);
|
||||
assertEquals(ImmutableList.of("42"), options.buildQueryParameters().get("pagesize"));
|
||||
}
|
||||
|
||||
public void testPageSizeStatic() {
|
||||
ListHostsOptions options = pageSize(42L);
|
||||
assertEquals(ImmutableList.of("42"), options.buildQueryParameters().get("pagesize"));
|
||||
}
|
||||
|
||||
public void testPodId() {
|
||||
ListHostsOptions options = new ListHostsOptions().podId(42L);
|
||||
assertEquals(ImmutableList.of("42"), options.buildQueryParameters().get("podid"));
|
||||
}
|
||||
|
||||
public void testPodIdStatic() {
|
||||
ListHostsOptions options = podId(42L);
|
||||
assertEquals(ImmutableList.of("42"), options.buildQueryParameters().get("podid"));
|
||||
}
|
||||
|
||||
public void testState() {
|
||||
ListHostsOptions options = new ListHostsOptions().state("Up");
|
||||
assertEquals(ImmutableList.of("Up"), options.buildQueryParameters().get("state"));
|
||||
}
|
||||
|
||||
public void testStateStatic() {
|
||||
ListHostsOptions options = state("Up");
|
||||
assertEquals(ImmutableList.of("Up"), options.buildQueryParameters().get("state"));
|
||||
}
|
||||
|
||||
public void testType() {
|
||||
ListHostsOptions options = new ListHostsOptions().type("Routing");
|
||||
assertEquals(ImmutableList.of("Routing"), options.buildQueryParameters().get("type"));
|
||||
}
|
||||
|
||||
public void testTypeStatic() {
|
||||
ListHostsOptions options = type("Routing");
|
||||
assertEquals(ImmutableList.of("Routing"), options.buildQueryParameters().get("type"));
|
||||
}
|
||||
|
||||
public void testVirtualMachineId() {
|
||||
ListHostsOptions options = new ListHostsOptions().virtualMachineId(42L);
|
||||
assertEquals(ImmutableList.of("42"), options.buildQueryParameters().get("virtualmachineid"));
|
||||
}
|
||||
|
||||
public void testVirtualMachineIdStatic() {
|
||||
ListHostsOptions options = virtualMachineId(42L);
|
||||
assertEquals(ImmutableList.of("42"), options.buildQueryParameters().get("virtualmachineid"));
|
||||
}
|
||||
|
||||
public void testZoneId() {
|
||||
ListHostsOptions options = new ListHostsOptions().zoneId(42L);
|
||||
assertEquals(ImmutableList.of("42"), options.buildQueryParameters().get("zoneid"));
|
||||
}
|
||||
|
||||
public void testZoneIdStatic() {
|
||||
ListHostsOptions options = zoneId(42L);
|
||||
assertEquals(ImmutableList.of("42"), options.buildQueryParameters().get("zoneid"));
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,160 @@
|
|||
/**
|
||||
* 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.parse;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import org.jclouds.cloudstack.config.CloudStackParserModule;
|
||||
import org.jclouds.cloudstack.domain.Host;
|
||||
import org.jclouds.date.internal.SimpleDateFormatDateService;
|
||||
import org.jclouds.json.BaseSetParserTest;
|
||||
import org.jclouds.json.config.GsonModule;
|
||||
import org.jclouds.rest.annotations.SelectJson;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author Andrei Savu
|
||||
*/
|
||||
@Test(groups = "unit")
|
||||
public class ListHostsResponseTest extends BaseSetParserTest<Host> {
|
||||
|
||||
@Override
|
||||
protected Injector injector() {
|
||||
return Guice.createInjector(new CloudStackParserModule(), new GsonModule() {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(DateAdapter.class).to(Iso8601DateAdapter.class);
|
||||
super.configure();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String resource() {
|
||||
return "/listhostsresponse.json";
|
||||
}
|
||||
|
||||
@Override
|
||||
@SelectJson("host")
|
||||
public Set<Host> expected() {
|
||||
return ImmutableSet.of(
|
||||
|
||||
Host.builder()
|
||||
.id(1L)
|
||||
.name("cs2-xevsrv.alucloud.local")
|
||||
.state("Up")
|
||||
.type("Routing")
|
||||
.ipAddress("10.26.26.107")
|
||||
.zoneId(1)
|
||||
.zoneName("Dev Zone 1")
|
||||
.podId(1)
|
||||
.podName("Dev Pod 1")
|
||||
.version("2.2.12.20110928142833")
|
||||
.hypervisor("XenServer")
|
||||
.cpuNumber(24)
|
||||
.cpuSpeed(2266)
|
||||
.cpuAllocated("2.76%")
|
||||
.cpuUsed("0.1%")
|
||||
.cpuWithOverProvisioning(54384.0f)
|
||||
.networkKbsRead(4443L)
|
||||
.networkKbsWrite(15048L)
|
||||
.memoryTotal(100549733760L)
|
||||
.memoryAllocated(3623878656L)
|
||||
.memoryUsed(3623878656L)
|
||||
.capabilities("xen-3.0-x86_64 , xen-3.0-x86_32p , hvm-3.0-x86_32 , hvm-3.0-x86_32p , hvm-3.0-x86_64")
|
||||
.lastPinged(new SimpleDateFormatDateService().iso8601SecondsDateParse("1970-01-16T00:54:43+0200"))
|
||||
.managementServerId(223098941760041L)
|
||||
.clusterId(1)
|
||||
.clusterName("Xen Clust 1")
|
||||
.clusterType("CloudManaged")
|
||||
.localStorageActive(false)
|
||||
.created(new SimpleDateFormatDateService().iso8601SecondsDateParse("2011-11-26T23:28:36+0200"))
|
||||
.events("PrepareUnmanaged; HypervisorVersionChanged; ManagementServerDown; PingTimeout; " +
|
||||
"AgentDisconnected; MaintenanceRequested; HostDown; AgentConnected; StartAgentRebalance; ShutdownRequested; Ping")
|
||||
.hostTags("")
|
||||
.hasEnoughCapacity(false)
|
||||
.allocationState("Enabled").build(),
|
||||
|
||||
Host.builder()
|
||||
.id(2)
|
||||
.name("nfs://10.26.26.165/mnt/nfs/cs_sec")
|
||||
.state("Alert")
|
||||
.disconnected(new SimpleDateFormatDateService().iso8601SecondsDateParse("2011-11-26T23:33:38+0200"))
|
||||
.type("SecondaryStorage")
|
||||
.ipAddress("nfs")
|
||||
.zoneId(1L)
|
||||
.zoneName("Dev Zone 1")
|
||||
.version("2.2.12.20110928142833")
|
||||
.hypervisor("None")
|
||||
.lastPinged(new SimpleDateFormatDateService().iso8601SecondsDateParse("1970-01-16T00:42:30+0200"))
|
||||
.localStorageActive(false)
|
||||
.created(new SimpleDateFormatDateService().iso8601SecondsDateParse("2011-11-26T23:33:38+0200"))
|
||||
.events("ManagementServerDown; AgentDisconnected; Remove; MaintenanceRequested; AgentConnected; Ping")
|
||||
.hasEnoughCapacity(false)
|
||||
.allocationState("Enabled").build(),
|
||||
|
||||
Host.builder()
|
||||
.id(3)
|
||||
.name("s-1-VM")
|
||||
.state("Up")
|
||||
.type("SecondaryStorageVM")
|
||||
.ipAddress("10.26.26.81")
|
||||
.zoneId(1)
|
||||
.zoneName("Dev Zone 1")
|
||||
.podId(1)
|
||||
.podName("Dev Pod 1")
|
||||
.version("2.2.12.20110928142833")
|
||||
.lastPinged(new SimpleDateFormatDateService().iso8601SecondsDateParse("1970-01-16T00:54:43+0200"))
|
||||
.managementServerId(223098941760041L)
|
||||
.localStorageActive(false)
|
||||
.created(new SimpleDateFormatDateService().iso8601SecondsDateParse("2011-11-26T23:35:51+0200"))
|
||||
.events("PrepareUnmanaged; HypervisorVersionChanged; ManagementServerDown; PingTimeout; " +
|
||||
"AgentDisconnected; MaintenanceRequested; HostDown; AgentConnected; StartAgentRebalance; ShutdownRequested; Ping")
|
||||
.hasEnoughCapacity(false)
|
||||
.allocationState("Enabled").build(),
|
||||
|
||||
Host.builder()
|
||||
.id(4)
|
||||
.name("v-2-VM")
|
||||
.state("Up")
|
||||
.type("ConsoleProxy")
|
||||
.ipAddress("10.26.26.96")
|
||||
.zoneId(1)
|
||||
.zoneName("Dev Zone 1")
|
||||
.podId(1)
|
||||
.podName("Dev Pod 1")
|
||||
.version("2.2.12.20110928142833")
|
||||
.lastPinged(new SimpleDateFormatDateService().iso8601SecondsDateParse("1970-01-16T00:54:43+0200"))
|
||||
.managementServerId(223098941760041L)
|
||||
.localStorageActive(false)
|
||||
.created(new SimpleDateFormatDateService().iso8601SecondsDateParse("2011-11-26T23:36:46+0200"))
|
||||
.events("PrepareUnmanaged; HypervisorVersionChanged; ManagementServerDown; PingTimeout; " +
|
||||
"AgentDisconnected; MaintenanceRequested; HostDown; AgentConnected; StartAgentRebalance; ShutdownRequested; Ping")
|
||||
.hasEnoughCapacity(false)
|
||||
.allocationState("Enabled").build()
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
{ "listhostsresponse" : { "count":4 ,"host" : [
|
||||
{"id":1,"name":"cs2-xevsrv.alucloud.local","state":"Up","type":"Routing","ipaddress":"10.26.26.107","zoneid":1,"zonename":"Dev Zone 1","podid":1,"podname":"Dev Pod 1","version":"2.2.12.20110928142833","hypervisor":"XenServer","cpunumber":24,"cpuspeed":2266,"cpuallocated":"2.76%","cpuused":"0.1%","cpuwithoverprovisioning":"54384.0","networkkbsread":4443,"networkkbswrite":15048,"memorytotal":100549733760,"memoryallocated":3623878656,"memoryused":3623878656,"capabilities":"xen-3.0-x86_64 , xen-3.0-x86_32p , hvm-3.0-x86_32 , hvm-3.0-x86_32p , hvm-3.0-x86_64","lastpinged":"1970-01-16T00:54:43+0200","managementserverid":223098941760041,"clusterid":1,"clustername":"Xen Clust 1","clustertype":"CloudManaged","islocalstorageactive":false,"created":"2011-11-26T23:28:36+0200","events":"PrepareUnmanaged; HypervisorVersionChanged; ManagementServerDown; PingTimeout; AgentDisconnected; MaintenanceRequested; HostDown; AgentConnected; StartAgentRebalance; ShutdownRequested; Ping","hosttags":"","hasEnoughCapacity":false,"allocationstate":"Enabled"},
|
||||
{"id":2,"name":"nfs://10.26.26.165/mnt/nfs/cs_sec","state":"Alert","disconnected":"2011-11-26T23:33:38+0200","type":"SecondaryStorage","ipaddress":"nfs","zoneid":1,"zonename":"Dev Zone 1","version":"2.2.12.20110928142833","hypervisor":"None","lastpinged":"1970-01-16T00:42:30+0200","islocalstorageactive":false,"created":"2011-11-26T23:33:38+0200","events":"ManagementServerDown; AgentDisconnected; Remove; MaintenanceRequested; AgentConnected; Ping","hasEnoughCapacity":false,"allocationstate":"Enabled"},
|
||||
{"id":3,"name":"s-1-VM","state":"Up","type":"SecondaryStorageVM","ipaddress":"10.26.26.81","zoneid":1,"zonename":"Dev Zone 1","podid":1,"podname":"Dev Pod 1","version":"2.2.12.20110928142833","lastpinged":"1970-01-16T00:54:43+0200","managementserverid":223098941760041,"islocalstorageactive":false,"created":"2011-11-26T23:35:51+0200","events":"PrepareUnmanaged; HypervisorVersionChanged; ManagementServerDown; PingTimeout; AgentDisconnected; MaintenanceRequested; HostDown; AgentConnected; StartAgentRebalance; ShutdownRequested; Ping","hasEnoughCapacity":false,"allocationstate":"Enabled"},
|
||||
{"id":4,"name":"v-2-VM","state":"Up","type":"ConsoleProxy","ipaddress":"10.26.26.96","zoneid":1,"zonename":"Dev Zone 1","podid":1,"podname":"Dev Pod 1","version":"2.2.12.20110928142833","lastpinged":"1970-01-16T00:54:43+0200","managementserverid":223098941760041,"islocalstorageactive":false,"created":"2011-11-26T23:36:46+0200","events":"PrepareUnmanaged; HypervisorVersionChanged; ManagementServerDown; PingTimeout; AgentDisconnected; MaintenanceRequested; HostDown; AgentConnected; StartAgentRebalance; ShutdownRequested; Ping","hasEnoughCapacity":false,"allocationstate":"Enabled"} ] } }
|
Loading…
Reference in New Issue