// 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 _params; List _nics = new ArrayList(); List _disks = new ArrayList(); StringBuilder _bootArgs = new StringBuilder(); Account _owner; BootloaderType _bootloader; Float cpuOvercommitRatio = 1.0f; Float memoryOvercommitRatio = 1.0f; Host _host = null; VirtualMachine.Type _type; List 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 params) { _vm = vm; _template = template; _offering = offering; _params = params; _owner = owner; if (_params == null) { _params = new HashMap(); } 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() { return _vm.toString(); } @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 nics) { _nics = nics; } public void setDisks(List disks) { _disks = disks; } @Override public List getNics() { return _nics; } @Override public List 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 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 getVmData() { return vmData; } @Override public void setVmData(List 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; } }