Skip to content

Commit

Permalink
Fix NPE while checking for user data provider
Browse files Browse the repository at this point in the history
  • Loading branch information
sureshanaparti committed Jan 23, 2025
1 parent 4d9fd1b commit c941c6e
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 5 deletions.
6 changes: 5 additions & 1 deletion server/src/main/java/com/cloud/network/NetworkModelImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -935,8 +935,12 @@ public Nic getDefaultNic(long vmId) {

@Override
public UserDataServiceProvider getUserDataUpdateProvider(Network network) {
String userDataProvider = _ntwkSrvcDao.getProviderForServiceInNetwork(network.getId(), Service.UserData);
if (network == null) {
s_logger.warn("No network details, can't fetch user data provider");
return null;

Check warning on line 940 in server/src/main/java/com/cloud/network/NetworkModelImpl.java

View check run for this annotation

Codecov / codecov/patch

server/src/main/java/com/cloud/network/NetworkModelImpl.java#L939-L940

Added lines #L939 - L940 were not covered by tests
}

String userDataProvider = _ntwkSrvcDao.getProviderForServiceInNetwork(network.getId(), Service.UserData);
if (userDataProvider == null) {
s_logger.debug("Network " + network + " doesn't support service " + Service.UserData.getName());
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -320,8 +320,12 @@ public boolean postStateTransitionEvent(StateMachine2.Transition<VirtualMachine.
try {
final Network network = _networkMgr.getNetwork(nic.getNetworkId());
final UserDataServiceProvider userDataUpdateProvider = _networkModel.getUserDataUpdateProvider(network);
if (userDataUpdateProvider == null) {
LOG.warn("Failed to get user data provider");
return false;

Check warning on line 325 in server/src/main/java/com/cloud/network/element/ConfigDriveNetworkElement.java

View check run for this annotation

Codecov / codecov/patch

server/src/main/java/com/cloud/network/element/ConfigDriveNetworkElement.java#L324-L325

Added lines #L324 - L325 were not covered by tests
}
final Provider provider = userDataUpdateProvider.getProvider();
if (provider.equals(Provider.ConfigDrive)) {
if (Provider.ConfigDrive.equals(provider)) {
try {
return deleteConfigDriveIso(vm);
} catch (ResourceUnavailableException e) {
Expand All @@ -336,7 +340,12 @@ public boolean postStateTransitionEvent(StateMachine2.Transition<VirtualMachine.

@Override
public boolean prepareMigration(NicProfile nic, Network network, VirtualMachineProfile vm, DeployDestination dest, ReservationContext context) {
if (_networkModel.getUserDataUpdateProvider(network).getProvider().equals(Provider.ConfigDrive)) {
final UserDataServiceProvider userDataUpdateProvider = _networkModel.getUserDataUpdateProvider(network);

Check warning on line 343 in server/src/main/java/com/cloud/network/element/ConfigDriveNetworkElement.java

View check run for this annotation

Codecov / codecov/patch

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

Added line #L343 was not covered by tests
if (userDataUpdateProvider == null) {
LOG.warn("Failed to prepare for migration, can't get user data provider");
return false;

Check warning on line 346 in server/src/main/java/com/cloud/network/element/ConfigDriveNetworkElement.java

View check run for this annotation

Codecov / codecov/patch

server/src/main/java/com/cloud/network/element/ConfigDriveNetworkElement.java#L345-L346

Added lines #L345 - L346 were not covered by tests
}
if (Provider.ConfigDrive.equals(userDataUpdateProvider.getProvider())) {
LOG.trace(String.format("[prepareMigration] for vm: %s", vm.getInstanceName()));
try {
if (isConfigDriveIsoOnHostCache(vm.getId())) {
Expand Down Expand Up @@ -384,7 +393,11 @@ public void commitMigration(NicProfile nic, Network network, VirtualMachineProfi
}

private void recreateConfigDriveIso(NicProfile nic, Network network, VirtualMachineProfile vm, DeployDestination dest) throws ResourceUnavailableException {
if (nic.isDefaultNic() && _networkModel.getUserDataUpdateProvider(network).getProvider().equals(Provider.ConfigDrive)) {
final UserDataServiceProvider userDataUpdateProvider = _networkModel.getUserDataUpdateProvider(network);

Check warning on line 396 in server/src/main/java/com/cloud/network/element/ConfigDriveNetworkElement.java

View check run for this annotation

Codecov / codecov/patch

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

Added line #L396 was not covered by tests
if (userDataUpdateProvider == null) {
return;

Check warning on line 398 in server/src/main/java/com/cloud/network/element/ConfigDriveNetworkElement.java

View check run for this annotation

Codecov / codecov/patch

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

Added line #L398 was not covered by tests
}
if (nic.isDefaultNic() && Provider.ConfigDrive.equals(userDataUpdateProvider.getProvider())) {
DiskTO diskToUse = null;
for (DiskTO disk : vm.getDisks()) {
if (disk.getType() == Volume.Type.ISO && disk.getPath() != null && disk.getPath().contains("configdrive")) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -767,7 +767,8 @@ public boolean saveSSHKey(final Network network, final NicProfile nic, final Vir

@Override
public boolean saveHypervisorHostname(NicProfile nicProfile, Network network, VirtualMachineProfile vm, DeployDestination dest) throws ResourceUnavailableException {
if (_networkModel.getUserDataUpdateProvider(network).getProvider().equals(Provider.VirtualRouter) && vm.getVirtualMachine().getType() == VirtualMachine.Type.User) {
final UserDataServiceProvider userDataUpdateProvider = _networkModel.getUserDataUpdateProvider(network);

Check warning on line 770 in server/src/main/java/com/cloud/network/element/VirtualRouterElement.java

View check run for this annotation

Codecov / codecov/patch

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

Added line #L770 was not covered by tests
if (userDataUpdateProvider != null && Provider.VirtualRouter.equals(userDataUpdateProvider.getProvider()) && vm.getVirtualMachine().getType() == VirtualMachine.Type.User) {
VirtualMachine uvm = vm.getVirtualMachine();
UserVmVO destVm = _userVmDao.findById(uvm.getId());
VirtualMachineProfile profile = null;
Expand Down

0 comments on commit c941c6e

Please sign in to comment.