Skip to content

Commit c941c6e

Browse files
Fix NPE while checking for user data provider
1 parent 4d9fd1b commit c941c6e

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

server/src/main/java/com/cloud/network/NetworkModelImpl.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -935,8 +935,12 @@ public Nic getDefaultNic(long vmId) {
935935

936936
@Override
937937
public UserDataServiceProvider getUserDataUpdateProvider(Network network) {
938-
String userDataProvider = _ntwkSrvcDao.getProviderForServiceInNetwork(network.getId(), Service.UserData);
938+
if (network == null) {
939+
s_logger.warn("No network details, can't fetch user data provider");
940+
return null;
941+
}
939942

943+
String userDataProvider = _ntwkSrvcDao.getProviderForServiceInNetwork(network.getId(), Service.UserData);
940944
if (userDataProvider == null) {
941945
s_logger.debug("Network " + network + " doesn't support service " + Service.UserData.getName());
942946
return null;

server/src/main/java/com/cloud/network/element/ConfigDriveNetworkElement.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -320,8 +320,12 @@ public boolean postStateTransitionEvent(StateMachine2.Transition<VirtualMachine.
320320
try {
321321
final Network network = _networkMgr.getNetwork(nic.getNetworkId());
322322
final UserDataServiceProvider userDataUpdateProvider = _networkModel.getUserDataUpdateProvider(network);
323+
if (userDataUpdateProvider == null) {
324+
LOG.warn("Failed to get user data provider");
325+
return false;
326+
}
323327
final Provider provider = userDataUpdateProvider.getProvider();
324-
if (provider.equals(Provider.ConfigDrive)) {
328+
if (Provider.ConfigDrive.equals(provider)) {
325329
try {
326330
return deleteConfigDriveIso(vm);
327331
} catch (ResourceUnavailableException e) {
@@ -336,7 +340,12 @@ public boolean postStateTransitionEvent(StateMachine2.Transition<VirtualMachine.
336340

337341
@Override
338342
public boolean prepareMigration(NicProfile nic, Network network, VirtualMachineProfile vm, DeployDestination dest, ReservationContext context) {
339-
if (_networkModel.getUserDataUpdateProvider(network).getProvider().equals(Provider.ConfigDrive)) {
343+
final UserDataServiceProvider userDataUpdateProvider = _networkModel.getUserDataUpdateProvider(network);
344+
if (userDataUpdateProvider == null) {
345+
LOG.warn("Failed to prepare for migration, can't get user data provider");
346+
return false;
347+
}
348+
if (Provider.ConfigDrive.equals(userDataUpdateProvider.getProvider())) {
340349
LOG.trace(String.format("[prepareMigration] for vm: %s", vm.getInstanceName()));
341350
try {
342351
if (isConfigDriveIsoOnHostCache(vm.getId())) {
@@ -384,7 +393,11 @@ public void commitMigration(NicProfile nic, Network network, VirtualMachineProfi
384393
}
385394

386395
private void recreateConfigDriveIso(NicProfile nic, Network network, VirtualMachineProfile vm, DeployDestination dest) throws ResourceUnavailableException {
387-
if (nic.isDefaultNic() && _networkModel.getUserDataUpdateProvider(network).getProvider().equals(Provider.ConfigDrive)) {
396+
final UserDataServiceProvider userDataUpdateProvider = _networkModel.getUserDataUpdateProvider(network);
397+
if (userDataUpdateProvider == null) {
398+
return;
399+
}
400+
if (nic.isDefaultNic() && Provider.ConfigDrive.equals(userDataUpdateProvider.getProvider())) {
388401
DiskTO diskToUse = null;
389402
for (DiskTO disk : vm.getDisks()) {
390403
if (disk.getType() == Volume.Type.ISO && disk.getPath() != null && disk.getPath().contains("configdrive")) {

server/src/main/java/com/cloud/network/element/VirtualRouterElement.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -767,7 +767,8 @@ public boolean saveSSHKey(final Network network, final NicProfile nic, final Vir
767767

768768
@Override
769769
public boolean saveHypervisorHostname(NicProfile nicProfile, Network network, VirtualMachineProfile vm, DeployDestination dest) throws ResourceUnavailableException {
770-
if (_networkModel.getUserDataUpdateProvider(network).getProvider().equals(Provider.VirtualRouter) && vm.getVirtualMachine().getType() == VirtualMachine.Type.User) {
770+
final UserDataServiceProvider userDataUpdateProvider = _networkModel.getUserDataUpdateProvider(network);
771+
if (userDataUpdateProvider != null && Provider.VirtualRouter.equals(userDataUpdateProvider.getProvider()) && vm.getVirtualMachine().getType() == VirtualMachine.Type.User) {
771772
VirtualMachine uvm = vm.getVirtualMachine();
772773
UserVmVO destVm = _userVmDao.findById(uvm.getId());
773774
VirtualMachineProfile profile = null;

0 commit comments

Comments
 (0)