package org.zstack.header.cluster;
import org.zstack.header.configuration.PythonClassInventory;
import org.zstack.header.host.HostInventory;
import org.zstack.header.network.l2.L2NetworkClusterRefInventory;
import org.zstack.header.query.ExpandedQueries;
import org.zstack.header.query.ExpandedQuery;
import org.zstack.header.query.ExpandedQueryAlias;
import org.zstack.header.query.ExpandedQueryAliases;
import org.zstack.header.search.Inventory;
import org.zstack.header.storage.primary.PrimaryStorageClusterRefInventory;
import org.zstack.header.vm.VmInstanceInventory;
import org.zstack.header.zone.ZoneInventory;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* @inventory inventory for cluster
* @example {
* "inventory": {
* "createDate": "Apr 28, 2014 5:54:09 PM",
* "description": "test",
* "hypervisorType": "KVM",
* "lastOpDate": "Apr 28, 2014 5:54:09 PM",
* "name": "cluster1",
* "state": "Enabled",
* "type": "zstack",
* "uuid": "c1bd173d5cd84f0e9e7c47195ae27ec6",
* "zoneUuid": "1b830f5bd1cb469b821b4b77babfdd6f"
* }
* }
* @since 0.1.0
*/
@Inventory(mappingVOClass = ClusterVO.class)
@PythonClassInventory
@ExpandedQueries({
@ExpandedQuery(expandedField = "zone", inventoryClass = ZoneInventory.class,
foreignKey = "zoneUuid", expandedInventoryKey = "uuid"),
@ExpandedQuery(expandedField = "host", inventoryClass = HostInventory.class,
foreignKey = "uuid", expandedInventoryKey = "clusterUuid"),
@ExpandedQuery(expandedField = "vmInstance", inventoryClass = VmInstanceInventory.class,
foreignKey = "uuid", expandedInventoryKey = "clusterUuid"),
@ExpandedQuery(expandedField = "l2NetworkRef", inventoryClass = L2NetworkClusterRefInventory.class,
foreignKey = "uuid", expandedInventoryKey = "clusterUuid", hidden = true),
@ExpandedQuery(expandedField = "l2VlanNetworkRef", inventoryClass = L2NetworkClusterRefInventory.class,
foreignKey = "uuid", expandedInventoryKey = "clusterUuid", hidden = true),
@ExpandedQuery(expandedField = "primaryStorageRef", inventoryClass = PrimaryStorageClusterRefInventory.class,
foreignKey = "uuid", expandedInventoryKey = "clusterUuid", hidden = true),
})
@ExpandedQueryAliases({
@ExpandedQueryAlias(alias = "l2Network", expandedField = "l2NetworkRef.l2Network"),
@ExpandedQueryAlias(alias = "l2VlanNetwork", expandedField = "l2VlanNetworkRef.l2Network"),
@ExpandedQueryAlias(alias = "primaryStorage", expandedField = "primaryStorageRef.primaryStorage"),
})
public class ClusterInventory implements Serializable {
/**
* @desc max length of 255 characters
*/
private String name;
/**
* @desc cluster uuid
*/
private String uuid;
/**
* @desc max length of 2048 characters
* @nullable
*/
private String description;
/**
* @desc when state is Disabled, no vm can be created, unless child resource host has different state Enabled
* @choices - Enabled
* - Disabled
*/
private String state;
/**
* @desc hypervisor type of hosts in cluster. All hosts in the same cluster must have the same hypervisor type.
* Now only kvm has been supported
* @choices KVM
*/
private String hypervisorType;
/**
* @desc the time this resource gets created
*/
private Timestamp createDate;
/**
* @desc last time this resource gets operated
*/
private Timestamp lastOpDate;
/**
* @desc zone uuid this cluster belongs to. For zone (see :ref:`ZoneInventory`)
*/
private String zoneUuid;
/**
* @desc for now, the only type is 'zstack'. This field is reserved for future extension
*/
private String type;
public static ClusterInventory valueOf(ClusterVO vo) {
ClusterInventory inv = new ClusterInventory();
inv.setName(vo.getName());
inv.setDescription(vo.getDescription());
inv.setUuid(vo.getUuid());
inv.setState(vo.getState().toString());
inv.setCreateDate(vo.getCreateDate());
inv.setHypervisorType(vo.getHypervisorType());
inv.setZoneUuid(vo.getZoneUuid());
inv.setType(vo.getType());
inv.setLastOpDate(vo.getLastOpDate());
return inv;
}
public static List<ClusterInventory> valueOf(Collection<ClusterVO> vos) {
List<ClusterInventory> invs = new ArrayList<ClusterInventory>(vos.size());
for (ClusterVO vo : vos) {
invs.add(ClusterInventory.valueOf(vo));
}
return invs;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getHypervisorType() {
return hypervisorType;
}
public void setHypervisorType(String hypervisorType) {
this.hypervisorType = hypervisorType;
}
public String getZoneUuid() {
return zoneUuid;
}
public void setZoneUuid(String zoneUuid) {
this.zoneUuid = zoneUuid;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Timestamp getCreateDate() {
return createDate;
}
public void setCreateDate(Timestamp createDate) {
this.createDate = createDate;
}
public Timestamp getLastOpDate() {
return lastOpDate;
}
public void setLastOpDate(Timestamp lastOpDate) {
this.lastOpDate = lastOpDate;
}
}