| // Copyright 2012 Citrix Systems, Inc. Licensed under the |
| // Apache License, Version 2.0 (the "License"); you may not use this |
| // file except in compliance with the License. Citrix Systems, Inc. |
| // reserves all rights not expressly granted by 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. |
| // |
| // Automatically generated by addcopyright.py at 04/03/2012 |
| package com.cloud.vm;
|
|
|
| import java.util.Date; |
| import java.util.Map; |
| import java.util.Random; |
| import java.util.UUID; |
| |
| import javax.persistence.Column; |
| import javax.persistence.DiscriminatorColumn; |
| import javax.persistence.DiscriminatorType; |
| import javax.persistence.Entity; |
| import javax.persistence.EnumType; |
| import javax.persistence.Enumerated; |
| import javax.persistence.Id; |
| import javax.persistence.Inheritance; |
| import javax.persistence.InheritanceType; |
| import javax.persistence.Table; |
| import javax.persistence.TableGenerator; |
| import javax.persistence.Temporal; |
| import javax.persistence.TemporalType; |
| import javax.persistence.Transient; |
| |
| import com.cloud.hypervisor.Hypervisor.HypervisorType; |
| import com.cloud.utils.db.GenericDao; |
| import com.cloud.utils.db.StateMachine; |
| import com.cloud.utils.fsm.FiniteStateObject; |
| import com.cloud.vm.VirtualMachine.State; |
|
|
| @Entity
|
| @Table(name="vm_instance")
|
| @Inheritance(strategy=InheritanceType.JOINED)
|
| @DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING, length=32)
|
| public class VMInstanceVO implements VirtualMachine, FiniteStateObject<State, VirtualMachine.Event> { |
| @Id
|
| @TableGenerator(name="vm_instance_sq", table="sequence", pkColumnName="name", valueColumnName="value", pkColumnValue="vm_instance_seq", allocationSize=1)
|
| @Column(name="id", updatable=false, nullable = false)
|
| protected long id;
|
|
|
| @Column(name="name", updatable=false, nullable=false, length=255)
|
| protected String hostName = null;
|
|
|
| @Column(name="vnc_password", updatable=true, nullable=false, length=255, encryptable=true) |
| protected String vncPassword; |
| |
| @Column(name="proxy_id", updatable=true, nullable=true) |
| protected Long proxyId; |
| |
| @Temporal(TemporalType.TIMESTAMP) |
| @Column(name="proxy_assign_time", updatable=true, nullable=true) |
| protected Date proxyAssignTime; |
|
|
| /**
|
| * Note that state is intentionally missing the setter. Any updates to
|
| * the state machine needs to go through the DAO object because someone
|
| * else could be updating it as well.
|
| */
|
| @Enumerated(value=EnumType.STRING) |
| @StateMachine(state=State.class, event=Event.class)
|
| @Column(name="state", updatable=true, nullable=false, length=32)
|
| protected State state = null;
|
|
|
| @Column(name="private_ip_address", updatable=true)
|
| protected String privateIpAddress;
|
|
|
| @Column(name="instance_name", updatable=true, nullable=false)
|
| protected String instanceName;
|
|
|
| @Column(name="vm_template_id", updatable=true, nullable=true, length=17)
|
| protected Long templateId = new Long(-1);
|
|
|
| @Column(name="guest_os_id", nullable=false, length=17)
|
| protected long guestOSId;
|
|
|
| @Column(name="host_id", updatable=true, nullable=true)
|
| protected Long hostId; |
| |
| @Column(name="last_host_id", updatable=true, nullable=true) |
| protected Long lastHostId;
|
|
|
| @Column(name="pod_id", updatable=true, nullable=false)
|
| protected Long podIdToDeployIn;
|
|
|
| @Column(name="private_mac_address", updatable=true, nullable=true)
|
| protected String privateMacAddress;
|
|
|
| @Column(name="data_center_id", updatable=true, nullable=false)
|
| protected long dataCenterIdToDeployIn;
|
|
|
| @Column(name="vm_type", updatable=false, nullable=false, length=32)
|
| @Enumerated(value=EnumType.STRING)
|
| protected Type type;
|
|
|
| @Column(name="ha_enabled", updatable=true, nullable=true)
|
| protected boolean haEnabled;
|
| |
| @Column(name="limit_cpu_use", updatable=true, nullable=true) |
| private boolean limitCpuUse; |
|
|
| @Column(name="update_count", updatable = true, nullable=false)
|
| protected long updated; // This field should be updated everytime the state is updated. There's no set method in the vo object because it is done with in the dao code.
|
|
|
| @Column(name=GenericDao.CREATED_COLUMN)
|
| protected Date created;
|
|
|
| @Column(name=GenericDao.REMOVED_COLUMN)
|
| protected Date removed;
|
|
|
| @Column(name="update_time", updatable=true)
|
| @Temporal(value=TemporalType.TIMESTAMP)
|
| protected Date updateTime; |
| |
| @Column(name="domain_id") |
| protected long domainId; |
| |
| @Column(name="account_id") |
| protected long accountId; |
| |
| @Column(name="service_offering_id") |
| protected long serviceOfferingId; |
| |
| @Column(name="reservation_id") |
| protected String reservationId; |
| |
| @Column(name="hypervisor_type") |
| @Enumerated(value=EnumType.STRING) |
| protected HypervisorType hypervisorType; |
| |
| @Transient |
| Map<String, String> details; |
| |
| @Column(name="uuid") |
| protected String uuid = UUID.randomUUID().toString(); |
| ; |
| |
| public VMInstanceVO(long id, |
| long serviceOfferingId, |
| String name, |
| String instanceName, |
| Type type, |
| Long vmTemplateId, |
| HypervisorType hypervisorType, |
| long guestOSId, |
| long domainId, |
| long accountId, |
| boolean haEnabled) { |
| this.id = id; |
| this.hostName = name != null ? name : this.uuid; |
| if (vmTemplateId != null) { |
| this.templateId = vmTemplateId; |
| } |
| this.instanceName = instanceName; |
| this.type = type; |
| this.guestOSId = guestOSId; |
| this.haEnabled = haEnabled; |
| this.vncPassword = Long.toHexString(new Random().nextLong()); |
| this.state = State.Stopped; |
| this.accountId = accountId; |
| this.domainId = domainId; |
| this.serviceOfferingId = serviceOfferingId; |
| this.hypervisorType = hypervisorType; |
| this.limitCpuUse = false; |
| } |
| |
| public VMInstanceVO(long id, |
| long serviceOfferingId, |
| String name, |
| String instanceName, |
| Type type, |
| Long vmTemplateId, |
| HypervisorType hypervisorType, |
| long guestOSId, |
| long domainId, |
| long accountId, |
| boolean haEnabled, |
| boolean limitResourceUse) { |
| this(id, serviceOfferingId, name, instanceName, type, vmTemplateId, hypervisorType, guestOSId, domainId, accountId, haEnabled); |
| this.limitCpuUse = limitResourceUse; |
| } |
|
|
| protected VMInstanceVO() {
|
| }
|
|
|
| public Date getRemoved() {
|
| return removed;
|
| } |
| |
| @Override |
| public long getDomainId() { |
| return domainId; |
| } |
| |
| @Override |
| public long getAccountId() { |
| return accountId; |
| }
|
|
|
| @Override
|
| public Type getType() {
|
| return type;
|
| }
|
|
|
| public long getUpdated() {
|
| return updated;
|
| }
|
|
|
| @Override |
| public long getId() {
|
| return id;
|
| } |
| |
| @Override |
| public String getUuid() { |
| return uuid; |
| } |
| |
| public void setUuid(String uuid) { |
| this.uuid = uuid; |
| } |
| |
| @Override |
| public HypervisorType getHypervisorType() { |
| return hypervisorType; |
| }
|
|
|
| @Override |
| public Date getCreated() {
|
| return created;
|
| }
|
|
|
| public Date getUpdateTime() {
|
| return updateTime;
|
| }
|
|
|
| @Override |
| public long getDataCenterIdToDeployIn() {
|
| return dataCenterIdToDeployIn;
|
| }
|
|
|
| @Override
|
| public String getHostName() {
|
| return hostName;
|
| }
|
|
|
| @Override
|
| public String getInstanceName() {
|
| return instanceName;
|
| }
|
|
|
| @Override
|
| public State getState() {
|
| return state;
|
| } |
| |
| // don't use this directly, use VM state machine instead, this method is added for migration tool only |
| @Override |
| public void setState(State state) { |
| this.state = state; |
| }
|
|
|
| @Override
|
| public String getPrivateIpAddress() {
|
| return privateIpAddress;
|
| }
|
|
|
| public void setPrivateIpAddress(String address) {
|
| privateIpAddress = address;
|
| } |
| |
| public void setVncPassword(String vncPassword) { |
| this.vncPassword = vncPassword; |
| } |
| |
| @Override |
| public String getVncPassword() { |
| return vncPassword; |
| } |
| |
| @Override |
| public long getServiceOfferingId() { |
| return serviceOfferingId; |
| } |
| |
| public Long getProxyId() { |
| return proxyId; |
| } |
| |
| public void setProxyId(Long proxyId) { |
| this.proxyId = proxyId; |
| } |
| |
| public Date getProxyAssignTime() { |
| return this.proxyAssignTime; |
| } |
| |
| public void setProxyAssignTime(Date time) { |
| this.proxyAssignTime = time; |
| } |
|
|
| @Override
|
| public long getTemplateId() {
|
| if (templateId == null) { |
| return -1; |
| } else { |
| return templateId; |
| }
|
| }
|
|
|
| public void setTemplateId(Long templateId) {
|
| this.templateId = templateId;
|
| }
|
|
|
| @Override |
| public long getGuestOSId() {
|
| return guestOSId;
|
| }
|
|
|
| public void setGuestOSId(long guestOSId) {
|
| this.guestOSId = guestOSId;
|
| }
|
|
|
| public void incrUpdated() {
|
| updated++;
|
| } |
| |
| public void decrUpdated() { |
| updated--; |
| }
|
|
|
| @Override
|
| public Long getHostId() {
|
| return hostId;
|
| } |
| |
| @Override |
| public Long getLastHostId() { |
| return lastHostId; |
| } |
| |
| public void setLastHostId(Long lastHostId) { |
| this.lastHostId = lastHostId; |
| } |
| |
| public void setHostId(Long hostId) { |
| this.hostId = hostId; |
| }
|
|
|
| @Override
|
| public boolean isHaEnabled() {
|
| return haEnabled;
|
| } |
|
|
| @Override |
| public boolean limitCpuUse() { |
| return limitCpuUse; |
| } |
| |
| public void setLimitCpuUse(boolean value) { |
| limitCpuUse = value; |
| } |
|
|
| @Override
|
| public String getPrivateMacAddress() {
|
| return privateMacAddress;
|
| }
|
|
|
| @Override
|
| public Long getPodIdToDeployIn() {
|
| return podIdToDeployIn;
|
| }
|
|
|
| public void setPodId(long podId) {
|
| this.podIdToDeployIn = podId;
|
| }
|
|
|
| public void setPrivateMacAddress(String privateMacAddress) {
|
| this.privateMacAddress = privateMacAddress;
|
| }
|
|
|
| public void setDataCenterId(long dataCenterId) {
|
| this.dataCenterIdToDeployIn = dataCenterId;
|
| }
|
|
|
| public boolean isRemoved() {
|
| return removed != null;
|
| }
|
|
|
| public void setHaEnabled(boolean value) {
|
| haEnabled = value;
|
| }
|
|
|
| public void setReservationId(String reservationId) { |
| this.reservationId = reservationId; |
| } |
| |
| public String getReservationId() { |
| return this.reservationId; |
| } |
| |
| public Map<String, String> getDetails() { |
| return details; |
| } |
| |
| public void setDetail(String name, String value) { |
| assert (details != null) : "Did you forget to load the details?"; |
| |
| details.put(name, value); |
| } |
| |
| public void setDetails(Map<String, String> details) { |
| this.details = details; |
| } |
| |
| transient String toString;
|
| @Override
|
| public String toString() { |
| if (toString == null) { |
| toString = new StringBuilder("VM[").append(type.toString()).append("|").append(hostName).append("]").toString(); |
| } |
| return toString;
|
| } |
| |
| |
| @Override |
| public int hashCode() { |
| final int prime = 31; |
| int result = 1; |
| result = prime * result + (int) (id ^ (id >>> 32)); |
| return result; |
| } |
| |
| @Override |
| public boolean equals(Object obj) { |
| if (this == obj) |
| return true; |
| if (obj == null) |
| return false; |
| if (getClass() != obj.getClass()) |
| return false; |
| VMInstanceVO other = (VMInstanceVO) obj; |
| if (id != other.id) |
| return false; |
| return true; |
| } |
| |
| |
| public void setServiceOfferingId(long serviceOfferingId) { |
| this.serviceOfferingId = serviceOfferingId; |
| } |
|
|
| }
|