blob: bc689fef8736ff21f3895993107918a6223523a0 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF 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 com.cloud.vm;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.cloud.agent.api.to.DiskTO;
import com.cloud.host.Host;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.network.element.NetworkElement;
import com.cloud.offering.ServiceOffering;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.template.VirtualMachineTemplate;
import com.cloud.template.VirtualMachineTemplate.BootloaderType;
import com.cloud.user.Account;
import com.cloud.utils.db.EntityManager;
/**
* Implementation of VirtualMachineProfile.
*
*/
public class VirtualMachineProfileImpl implements VirtualMachineProfile {
VirtualMachine _vm;
ServiceOffering _offering;
VirtualMachineTemplate _template;
UserVmDetailVO _userVmDetails;
Map<Param, Object> _params;
List<NicProfile> _nics = new ArrayList<NicProfile>();
List<DiskTO> _disks = new ArrayList<DiskTO>();
StringBuilder _bootArgs = new StringBuilder();
Account _owner;
BootloaderType _bootloader;
Float cpuOvercommitRatio = 1.0f;
Float memoryOvercommitRatio = 1.0f;
Host _host = null;
VirtualMachine.Type _type;
List<String[]> vmData = null;
String configDriveLabel = null;
String configDriveIsoBaseLocation = "/tmp/";
String configDriveIsoRootFolder = null;
String configDriveIsoFile = null;
NetworkElement.Location configDriveLocation = NetworkElement.Location.SECONDARY;
public VirtualMachineProfileImpl(VirtualMachine vm, VirtualMachineTemplate template, ServiceOffering offering, Account owner, Map<Param, Object> params) {
_vm = vm;
_template = template;
_offering = offering;
_params = params;
_owner = owner;
if (_params == null) {
_params = new HashMap<Param, Object>();
}
if (vm != null)
_type = vm.getType();
}
public VirtualMachineProfileImpl(VirtualMachine vm) {
this(vm, null, null, null, null);
}
public VirtualMachineProfileImpl(VirtualMachine.Type type) {
_type = type;
}
@Override
public String toString() {
if (_vm != null) {
return _vm.toString();
}
return "";
}
@Override
public VirtualMachine getVirtualMachine() {
return _vm;
}
@Override
public ServiceOffering getServiceOffering() {
if (_offering == null) {
_offering = s_entityMgr.findById(ServiceOffering.class, _vm.getServiceOfferingId());
}
return _offering;
}
@Override
public void setParameter(Param name, Object value) {
_params.put(name, value);
}
@Override
public void setBootLoaderType(BootloaderType bootLoader) {
_bootloader = bootLoader;
}
@Override
public VirtualMachineTemplate getTemplate() {
if (_template == null && _vm != null) {
_template = s_entityMgr.findByIdIncludingRemoved(VirtualMachineTemplate.class, _vm.getTemplateId());
}
return _template;
}
@Override
public HypervisorType getHypervisorType() {
return _vm.getHypervisorType();
}
@Override
public long getTemplateId() {
return _vm.getTemplateId();
}
@Override
public long getServiceOfferingId() {
return _vm.getServiceOfferingId();
}
@Override
public long getId() {
return _vm.getId();
}
@Override
public String getUuid() {
return _vm.getUuid();
}
public void setNics(List<NicProfile> nics) {
_nics = nics;
}
public void setDisks(List<DiskTO> disks) {
_disks = disks;
}
@Override
public List<NicProfile> getNics() {
return _nics;
}
@Override
public List<DiskTO> getDisks() {
return _disks;
}
@Override
public void addNic(int index, NicProfile nic) {
_nics.add(index, nic);
}
@Override
public void addDisk(int index, DiskTO disk) {
_disks.add(index, disk);
}
@Override
public StringBuilder getBootArgsBuilder() {
return _bootArgs;
}
@Override
public void addBootArgs(String... args) {
for (String arg : args) {
_bootArgs.append(arg).append(" ");
}
}
@Override
public VirtualMachine.Type getType() {
return _type;
}
@Override
public Account getOwner() {
if (_owner == null) {
_owner = s_entityMgr.findById(Account.class, _vm.getAccountId());
}
return _owner;
}
@Override
public String getBootArgs() {
return _bootArgs.toString();
}
static EntityManager s_entityMgr;
static void init(EntityManager entityMgr) {
s_entityMgr = entityMgr;
}
@Override
public void addNic(NicProfile nic) {
_nics.add(nic);
}
@Override
public void addDisk(DiskTO disk) {
_disks.add(disk);
}
@Override
public Object getParameter(Param name) {
return _params.get(name);
}
@Override
public Long getHostId() {
if (_host != null) {
return _host.getId();
}
return _vm.getHostId();
}
@Override
public void setHost(Host host) {
this._host = host;
}
@Override
public String getHostName() {
return _vm.getHostName();
}
@Override
public String getInstanceName() {
return _vm.getInstanceName();
}
@Override
public BootloaderType getBootLoaderType() {
return _bootloader;
}
@Override
public Map<Param, Object> getParameters() {
return _params;
}
public void setServiceOffering(ServiceOfferingVO offering) {
_offering = offering;
}
public void setCpuOvercommitRatio(Float cpuOvercommitRatio) {
this.cpuOvercommitRatio = cpuOvercommitRatio;
}
public void setMemoryOvercommitRatio(Float memoryOvercommitRatio) {
this.memoryOvercommitRatio = memoryOvercommitRatio;
}
@Override
public Float getCpuOvercommitRatio() {
return cpuOvercommitRatio;
}
@Override
public Float getMemoryOvercommitRatio() {
return memoryOvercommitRatio;
}
@Override
public boolean isRollingRestart() {
return Boolean.TRUE.equals(getParameter(VirtualMachineProfile.Param.RollingRestart));
}
@Override
public List<String[]> getVmData() {
return vmData;
}
@Override
public void setVmData(List<String[]> vmData) {
this.vmData = vmData;
}
@Override
public String getConfigDriveLabel() {
return configDriveLabel;
}
@Override
public void setConfigDriveLabel(String configDriveLabel) {
this.configDriveLabel = configDriveLabel;
}
@Override
public String getConfigDriveIsoRootFolder() {
return configDriveIsoRootFolder;
}
@Override
public void setConfigDriveIsoRootFolder(String configDriveIsoRootFolder) {
this.configDriveIsoRootFolder = configDriveIsoRootFolder;
}
public String getConfigDriveIsoBaseLocation() {
return configDriveIsoBaseLocation;
}
@Override
public String getConfigDriveIsoFile() {
return configDriveIsoFile;
}
@Override
public void setConfigDriveIsoFile(String isoFile) {
this.configDriveIsoFile = isoFile;
}
@Override
public NetworkElement.Location getConfigDriveLocation() {
return configDriveLocation;
}
@Override
public void setConfigDriveLocation(NetworkElement.Location location) {
this.configDriveLocation = location;
}
}