bug 11360: make user_vm_details generic to all VMs instead of user-only VMs, VM details info will be carried down to hypervisor resource

This commit is contained in:
Kelven Yang 2011-09-07 15:36:25 -07:00
parent 6f366a0ed2
commit a73f41e56c
7 changed files with 43 additions and 23 deletions

View File

@ -47,9 +47,6 @@ public class UserVmVO extends VMInstanceVO implements UserVm {
transient String password;
@Transient
Map<String, String> details;
@Override
public String getPassword() {
return password;
@ -119,26 +116,10 @@ public class UserVmVO extends VMInstanceVO implements UserVm {
this.displayName = displayName;
}
@Override
public Map<String, String> getDetails() {
return details;
}
@Override
public String getDetail(String name) {
assert (details != null) : "Did you forget to load the details?";
return details != null ? details.get(name) : null;
}
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;
}
}

View File

@ -35,6 +35,7 @@ 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;
@ -140,6 +141,9 @@ public class VMInstanceVO implements VirtualMachine, FiniteStateObject<State, Vi
@Column(name="hypervisor_type")
@Enumerated(value=EnumType.STRING)
protected HypervisorType hypervisorType;
@Transient
Map<String, String> details;
public VMInstanceVO(long id,
long serviceOfferingId,
@ -396,9 +400,19 @@ public class VMInstanceVO implements VirtualMachine, FiniteStateObject<State, Vi
return this.reservationId;
}
public Map<String, String> getDetails() {
return null;
}
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

View File

@ -121,6 +121,7 @@ import com.cloud.vm.NicProfile;
import com.cloud.vm.ReservationContext;
import com.cloud.vm.SystemVmLoadScanHandler;
import com.cloud.vm.SystemVmLoadScanner;
import com.cloud.vm.UserVmVO;
import com.cloud.vm.SystemVmLoadScanner.AfterScanAction;
import com.cloud.vm.VMInstanceVO;
import com.cloud.vm.VirtualMachine;
@ -130,6 +131,7 @@ import com.cloud.vm.VirtualMachineManager;
import com.cloud.vm.VirtualMachineName;
import com.cloud.vm.VirtualMachineProfile;
import com.cloud.vm.dao.ConsoleProxyDao;
import com.cloud.vm.dao.UserVmDetailsDao;
import com.cloud.vm.dao.VMInstanceDao;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@ -195,6 +197,8 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx
NetworkOfferingDao _networkOfferingDao;
@Inject
StoragePoolDao _storagePoolDao;
@Inject
UserVmDetailsDao _vmDetailsDao;
private ConsoleProxyListener _listener;
@ -1288,6 +1292,11 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx
@Override
public boolean finalizeVirtualMachineProfile(VirtualMachineProfile<ConsoleProxyVO> profile, DeployDestination dest, ReservationContext context) {
ConsoleProxyVO vm = profile.getVirtualMachine();
Map<String, String> details = _vmDetailsDao.findDetails(vm.getId());
vm.setDetails(details);
StringBuilder buf = profile.getBootArgsBuilder();
buf.append(" template=domP type=consoleproxy");
buf.append(" host=").append(_mgmt_host);

View File

@ -195,6 +195,7 @@ import com.cloud.vm.VirtualMachineProfile.Param;
import com.cloud.vm.dao.DomainRouterDao;
import com.cloud.vm.dao.NicDao;
import com.cloud.vm.dao.UserVmDao;
import com.cloud.vm.dao.UserVmDetailsDao;
import com.cloud.vm.dao.VMInstanceDao;
/**
@ -301,6 +302,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
VolumeDao _volumeDao = null;
@Inject
FirewallRulesCidrsDao _firewallCidrsDao;
@Inject
UserVmDetailsDao _vmDetailsDao;
int _routerRamSize;
int _routerCpuMHz;
@ -1211,6 +1214,9 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
public boolean finalizeVirtualMachineProfile(VirtualMachineProfile<DomainRouterVO> profile, DeployDestination dest, ReservationContext context) {
DomainRouterVO router = profile.getVirtualMachine();
Map<String, String> details = _vmDetailsDao.findDetails(router.getId());
router.setDetails(details);
NetworkVO network = _networkDao.findById(router.getNetworkId());
String type = null;

View File

@ -108,6 +108,7 @@ import com.cloud.vm.VirtualMachineManager;
import com.cloud.vm.VirtualMachineName;
import com.cloud.vm.VirtualMachineProfile;
import com.cloud.vm.dao.SecondaryStorageVmDao;
import com.cloud.vm.dao.UserVmDetailsDao;
import com.cloud.vm.dao.VMInstanceDao;
//
@ -186,6 +187,8 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V
protected VMInstanceDao _vmDao;
@Inject
protected CapacityDao _capacityDao;
@Inject
UserVmDetailsDao _vmDetailsDao;
private long _capacityScanInterval = DEFAULT_CAPACITY_SCAN_INTERVAL;
@ -940,6 +943,10 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V
@Override
public boolean finalizeVirtualMachineProfile(VirtualMachineProfile<SecondaryStorageVmVO> profile, DeployDestination dest, ReservationContext context) {
SecondaryStorageVmVO vm = profile.getVirtualMachine();
Map<String, String> details = _vmDetailsDao.findDetails(vm.getId());
vm.setDetails(details);
HostVO secHost = _hostDao.findSecondaryStorageHost(dest.getDataCenter().getId());
assert (secHost != null);

View File

@ -915,13 +915,14 @@ CREATE TABLE `cloud`.`user_vm` (
CONSTRAINT `fk_user_vm__id` FOREIGN KEY `fk_user_vm__id` (`id`) REFERENCES `vm_instance`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- note, uer_vm_details is now used for all VMs (not just for user vms)
CREATE TABLE `cloud`.`user_vm_details` (
`id` bigint unsigned NOT NULL auto_increment,
`vm_id` bigint unsigned NOT NULL COMMENT 'vm id',
`name` varchar(255) NOT NULL,
`value` varchar(1024) NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `fk_user_vm_details__vm_id` FOREIGN KEY `fk_user_vm_details__vm_id`(`vm_id`) REFERENCES `user_vm`(`id`) ON DELETE CASCADE
CONSTRAINT `fk_user_vm_details__vm_id` FOREIGN KEY `fk_user_vm_details__vm_id`(`vm_id`) REFERENCES `vm_instance`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

View File

@ -8,3 +8,5 @@ UPDATE vm_instance SET state='Error' WHERE state='Creating' AND removed IS null;
INSERT IGNORE INTO configuration VALUES ('Advanced', 'DEFAULT', 'management-server', 'json.content.type', 'text/javascript', 'Http response content type for .js files (default is text/javascript)');
ALTER IGNORE TABLE `cloud`.`user_vm_details` DROP FOREIGN KEY `fk_user_vm_details__vm_id`;
ALTER TABLE `cloud`.`user_vm_details` ADD CONSTRAINT `fk_user_vm_details__vm_id` FOREIGN KEY `fk_user_vm_details__vm_id`(`vm_id`) REFERENCES `vm_instance`(`id`) ON DELETE CASCADE;