Skip to content

Commit 129f799

Browse files
committed
VNF: list VNF provider by vmId
1 parent cd8e35e commit 129f799

File tree

3 files changed

+41
-1
lines changed

3 files changed

+41
-1
lines changed

api/src/main/java/org/apache/cloudstack/storage/template/VnfTemplateManager.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,5 @@ void createIsolatedNetworkRulesForVnfAppliance(DataCenter zone, VirtualMachineTe
5151
UserVm vm, DeployVnfApplianceCmd cmd)
5252
throws InsufficientAddressCapacityException, ResourceAllocationException, ResourceUnavailableException;
5353

54+
String getVnfProviderForVm(UserVm userVm);
5455
}

plugins/vnf-providers/custom/src/main/java/org/apache/cloudstack/vnf/api/command/VnfListProvidersCmd.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,15 @@
2121
import java.util.ArrayList;
2222
import java.util.List;
2323

24+
import com.cloud.exception.InvalidParameterValueException;
25+
import com.cloud.uservm.UserVm;
26+
2427
import org.apache.cloudstack.api.APICommand;
2528
import org.apache.cloudstack.api.ApiConstants;
2629
import org.apache.cloudstack.api.BaseListCmd;
2730
import org.apache.cloudstack.api.Parameter;
2831
import org.apache.cloudstack.api.response.ListResponse;
32+
import org.apache.cloudstack.api.response.UserVmResponse;
2933
import org.apache.cloudstack.api.response.VnfProviderResponse;
3034
import org.apache.cloudstack.vnf.VnfProviderManager;
3135
import org.apache.cloudstack.vnf.VnfProvider;
@@ -50,6 +54,13 @@ public class VnfListProvidersCmd extends BaseListCmd {
5054
description = "Name of the Vnf provider")
5155
private String name;
5256

57+
@Parameter(name = ApiConstants.VIRTUAL_MACHINE_ID,
58+
type = CommandType.UUID,
59+
entityType = UserVmResponse.class,
60+
description = "The ID of the virtual machine")
61+
private Long vmId;
62+
63+
5364
/////////////////////////////////////////////////////
5465
/////////////////// Accessors ///////////////////////
5566
/////////////////////////////////////////////////////
@@ -59,14 +70,30 @@ public String getName() {
5970
return name;
6071
}
6172

73+
public Long getVmId() {
74+
return vmId;
75+
}
76+
6277
/////////////////////////////////////////////////////
6378
/////////////// API Implementation///////////////////
6479
/////////////////////////////////////////////////////
6580

6681
@Override
6782
public void execute() {
6883
List<VnfProvider> vnfProviders = new ArrayList<>();
69-
if (StringUtils.isEmpty(name)) {
84+
if (vmId != null) {
85+
UserVm userVm = _userVmService.getUserVm(vmId);
86+
String vnfProviderName = vnfTemplateManager.getVnfProviderForVm(userVm);
87+
if (vnfProviderName != null) {
88+
if (name != null && !vnfProviderName.equals(name)) {
89+
throw new InvalidParameterValueException("VNF provider names do not match. VNF provider name: " + vnfProviderName);
90+
}
91+
VnfProvider vnfProvider = vnfService.getVnfProviderByName(vnfProviderName);
92+
if (vnfProvider != null) {
93+
vnfProviders.add(vnfProvider);
94+
}
95+
}
96+
} else if (StringUtils.isEmpty(name)) {
7097
vnfProviders.addAll(vnfService.getVnfProviders());
7198
} else {
7299
VnfProvider vnfProvider = vnfService.getVnfProviderByName(name);

server/src/main/java/org/apache/cloudstack/storage/template/VnfTemplateManagerImpl.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,4 +389,16 @@ public void doInTransactionWithoutResult(final TransactionStatus status) throws
389389
logger.debug("Created network rules for VNF appliance on isolated network {}", network);
390390
}
391391
}
392+
393+
@Override
394+
public String getVnfProviderForVm(UserVm userVm) {
395+
if (userVm == null) {
396+
return null;
397+
}
398+
VnfTemplateDetailVO vnfProviderName = vnfTemplateDetailsDao.findDetail(userVm.getTemplateId(), VNF.VnfDetail.VNF_PROVIDER.name().toLowerCase());
399+
if (vnfProviderName != null) {
400+
return vnfProviderName.getValue();
401+
}
402+
return null;
403+
}
392404
}

0 commit comments

Comments
 (0)