2121import java .util .ArrayList ;
2222import java .util .List ;
2323
24+ import com .cloud .exception .InvalidParameterValueException ;
25+ import com .cloud .uservm .UserVm ;
26+
2427import org .apache .cloudstack .api .APICommand ;
2528import org .apache .cloudstack .api .ApiConstants ;
2629import org .apache .cloudstack .api .BaseListCmd ;
2730import org .apache .cloudstack .api .Parameter ;
2831import org .apache .cloudstack .api .response .ListResponse ;
32+ import org .apache .cloudstack .api .response .UserVmResponse ;
2933import org .apache .cloudstack .api .response .VnfProviderResponse ;
3034import org .apache .cloudstack .vnf .VnfProviderManager ;
3135import 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 );
0 commit comments