Skip to content

Commit b0cb087

Browse files
shwstpprPearl1594
andauthored
server: fixes NPE on empty vmware.root.disk.controller config (#5045)
* server: fixes NPE on empty vmware.root.disk.controller config When global config - vmware.root.disk.controller is set to empty and template is registered with deployasis, server will throw NPE while deploying a VM. This change fixes the problem by using default value of the config in this case. Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com> * use StringUtils utility Co-authored-by: Pearl Dsilva <pearl1594@gmail.com> * fix indentation Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com> Co-authored-by: Pearl Dsilva <pearl1594@gmail.com>
1 parent dafa377 commit b0cb087

1 file changed

Lines changed: 13 additions & 12 deletions

File tree

server/src/main/java/com/cloud/vm/UserVmManagerImpl.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
// under the License.
1717
package com.cloud.vm;
1818

19+
import static com.cloud.utils.NumbersUtil.toHumanReadableSize;
20+
1921
import java.io.IOException;
2022
import java.io.StringReader;
2123
import java.io.UnsupportedEncodingException;
@@ -48,14 +50,6 @@
4850
import javax.xml.parsers.DocumentBuilderFactory;
4951
import javax.xml.parsers.ParserConfigurationException;
5052

51-
import com.cloud.agent.api.to.deployasis.OVFPropertyTO;
52-
import com.cloud.api.query.dao.ServiceOfferingJoinDao;
53-
import com.cloud.api.query.vo.ServiceOfferingJoinVO;
54-
import com.cloud.deployasis.UserVmDeployAsIsDetailVO;
55-
import com.cloud.deployasis.dao.UserVmDeployAsIsDetailsDao;
56-
import com.cloud.exception.UnsupportedServiceException;
57-
import com.cloud.hypervisor.Hypervisor;
58-
import com.cloud.deployasis.dao.TemplateDeployAsIsDetailsDao;
5953
import org.apache.cloudstack.acl.ControlledEntity;
6054
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
6155
import org.apache.cloudstack.acl.SecurityChecker.AccessType;
@@ -87,7 +81,6 @@
8781
import org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd;
8882
import org.apache.cloudstack.api.command.user.vmgroup.DeleteVMGroupCmd;
8983
import org.apache.cloudstack.api.command.user.volume.ResizeVolumeCmd;
90-
import com.cloud.agent.api.to.deployasis.OVFNetworkTO;
9184
import org.apache.cloudstack.context.CallContext;
9285
import org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntity;
9386
import org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMNetworkMapDao;
@@ -148,9 +141,13 @@
148141
import com.cloud.agent.api.to.DiskTO;
149142
import com.cloud.agent.api.to.NicTO;
150143
import com.cloud.agent.api.to.VirtualMachineTO;
144+
import com.cloud.agent.api.to.deployasis.OVFNetworkTO;
145+
import com.cloud.agent.api.to.deployasis.OVFPropertyTO;
151146
import com.cloud.agent.manager.Commands;
152147
import com.cloud.alert.AlertManager;
153148
import com.cloud.api.ApiDBUtils;
149+
import com.cloud.api.query.dao.ServiceOfferingJoinDao;
150+
import com.cloud.api.query.vo.ServiceOfferingJoinVO;
154151
import com.cloud.capacity.Capacity;
155152
import com.cloud.capacity.CapacityManager;
156153
import com.cloud.configuration.Config;
@@ -177,6 +174,9 @@
177174
import com.cloud.deploy.DeploymentPlanningManager;
178175
import com.cloud.deploy.PlannerHostReservationVO;
179176
import com.cloud.deploy.dao.PlannerHostReservationDao;
177+
import com.cloud.deployasis.UserVmDeployAsIsDetailVO;
178+
import com.cloud.deployasis.dao.TemplateDeployAsIsDetailsDao;
179+
import com.cloud.deployasis.dao.UserVmDeployAsIsDetailsDao;
180180
import com.cloud.domain.Domain;
181181
import com.cloud.domain.DomainVO;
182182
import com.cloud.domain.dao.DomainDao;
@@ -198,13 +198,15 @@
198198
import com.cloud.exception.ResourceAllocationException;
199199
import com.cloud.exception.ResourceUnavailableException;
200200
import com.cloud.exception.StorageUnavailableException;
201+
import com.cloud.exception.UnsupportedServiceException;
201202
import com.cloud.exception.VirtualMachineMigrationException;
202203
import com.cloud.gpu.GPU;
203204
import com.cloud.ha.HighAvailabilityManager;
204205
import com.cloud.host.Host;
205206
import com.cloud.host.HostVO;
206207
import com.cloud.host.Status;
207208
import com.cloud.host.dao.HostDao;
209+
import com.cloud.hypervisor.Hypervisor;
208210
import com.cloud.hypervisor.Hypervisor.HypervisorType;
209211
import com.cloud.hypervisor.HypervisorCapabilitiesVO;
210212
import com.cloud.hypervisor.dao.HypervisorCapabilitiesDao;
@@ -337,8 +339,6 @@
337339
import com.cloud.vm.snapshot.VMSnapshotVO;
338340
import com.cloud.vm.snapshot.dao.VMSnapshotDao;
339341

340-
import static com.cloud.utils.NumbersUtil.toHumanReadableSize;
341-
342342
public class UserVmManagerImpl extends ManagerBase implements UserVmManager, VirtualMachineGuru, UserVmService, Configurable {
343343
private static final Logger s_logger = Logger.getLogger(UserVmManagerImpl.class);
344344

@@ -4048,7 +4048,8 @@ public UserVmVO doInTransaction(TransactionStatus status) throws InsufficientCap
40484048
vm.setDetail(VmDetailConstants.FIRMWARE, "efi");
40494049
s_logger.info("guestOS is OSX : overwrite root disk controller to scsi, use smc and efi");
40504050
} else {
4051-
String controllerSetting = _configDao.getValue("vmware.root.disk.controller");
4051+
String controllerSetting = StringUtils.defaultIfEmpty(_configDao.getValue(Config.VmwareRootDiskControllerType.key()),
4052+
Config.VmwareRootDiskControllerType.getDefaultValue());
40524053
// Don't override if VM already has root/data disk controller detail
40534054
if (vm.getDetail(VmDetailConstants.ROOT_DISK_CONTROLLER) == null) {
40544055
vm.setDetail(VmDetailConstants.ROOT_DISK_CONTROLLER, controllerSetting);

0 commit comments

Comments
 (0)