diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java index daf1bdc705de..1267f25692f2 100644 --- a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java @@ -451,6 +451,7 @@ public class ApiConstants { public static final String SERIAL = "serial"; public static final String SERVICE_IP = "serviceip"; public static final String SERVICE_OFFERING_ID = "serviceofferingid"; + public static final String SERVICE_OFFERING_NAME = "serviceofferingname"; public static final String SESSIONKEY = "sessionkey"; public static final String SHOW_CAPACITIES = "showcapacities"; public static final String SHOW_REMOVED = "showremoved"; diff --git a/api/src/main/java/org/apache/cloudstack/api/response/NetworkOfferingResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/NetworkOfferingResponse.java index 87f960590283..740dd23604a9 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/NetworkOfferingResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/NetworkOfferingResponse.java @@ -91,6 +91,10 @@ public class NetworkOfferingResponse extends BaseResponseWithAnnotations { @Param(description = "The ID of the service offering used by virtual router provider") private String serviceOfferingId; + @SerializedName(ApiConstants.SERVICE_OFFERING_NAME) + @Param(description = "the name of the service offering used by virtual router provider") + private String serviceOfferingName; + @SerializedName(ApiConstants.SERVICE) @Param(description = "The list of supported services", responseObject = ServiceResponse.class) private List services; @@ -330,4 +334,12 @@ public String getRoutingMode() { public void setRoutingMode(String routingMode) { this.routingMode = routingMode; } + + public String getServiceOfferingName() { + return serviceOfferingName; + } + + public void setServiceOfferingName(String serviceOfferingName) { + this.serviceOfferingName = serviceOfferingName; + } } diff --git a/server/src/main/java/com/cloud/api/ApiResponseHelper.java b/server/src/main/java/com/cloud/api/ApiResponseHelper.java index 2b7ed1b11005..55e46803d04b 100644 --- a/server/src/main/java/com/cloud/api/ApiResponseHelper.java +++ b/server/src/main/java/com/cloud/api/ApiResponseHelper.java @@ -2336,8 +2336,9 @@ public NetworkOfferingResponse createNetworkOfferingResponse(NetworkOffering off } if (so != null) { ServiceOffering soffering = ApiDBUtils.findServiceOfferingById(so); - if (soffering != null) { + if (soffering != null && _accountMgr.isRootAdmin(CallContext.current().getCallingAccountId())) { response.setServiceOfferingId(soffering.getUuid()); + response.setServiceOfferingName(soffering.getName()); } } Map> serviceProviderMap = ApiDBUtils.listNetworkOfferingServices(offering.getId()); diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index 673f6da0ad11..345661711a27 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -2484,6 +2484,7 @@ "label.virtual.network": "Virtual Network", "label.virtual.networking": "Virtual Networking", "label.virtual.routers": "Virtual Routers", +"label.virtual.routers.system.offering": "VR system offering", "label.virtualmachineid": "Instance ID", "label.virtualmachinename": "Instance name", "label.virtualsize": "Virtual Size", diff --git a/ui/public/locales/pt_BR.json b/ui/public/locales/pt_BR.json index 1b51bc438e58..29f8377fd32b 100644 --- a/ui/public/locales/pt_BR.json +++ b/ui/public/locales/pt_BR.json @@ -1729,6 +1729,7 @@ "label.virtual.network": "Rede virtual", "label.virtual.networking": "Rede virtual", "label.virtual.routers": "Roteadores virtuais", + "label.virtual.routers.system.offering": "Oferta de sistema do roteador virtual", "label.virtualmachineid": "ID da VM", "label.virtualmachinename": "Nome da VM", "label.virtualsize": "Tamanho virtual", diff --git a/ui/src/components/view/ListView.vue b/ui/src/components/view/ListView.vue index a02fb5569ed7..002411db87bc 100644 --- a/ui/src/components/view/ListView.vue +++ b/ui/src/components/view/ListView.vue @@ -208,7 +208,8 @@ {{ text }} + diff --git a/ui/src/config/section/offering.js b/ui/src/config/section/offering.js index d958522b333f..62e3fe4d346e 100644 --- a/ui/src/config/section/offering.js +++ b/ui/src/config/section/offering.js @@ -389,7 +389,13 @@ export default { docHelp: 'adminguide/networking.html#network-offerings', permission: ['listNetworkOfferings'], searchFilters: ['name', 'zoneid', 'domainid', 'tags'], - columns: ['name', 'state', 'guestiptype', 'traffictype', 'networkrate', 'domain', 'zone', 'order'], + columns: () => { + const fields = ['name', 'state', 'guestiptype', 'traffictype', 'networkrate', 'domain', 'zone', 'egressdefaultpolicy', 'order'] + if (store.getters.userInfo.roletype === 'Admin') { + fields.splice(fields.length - 1, 0, { field: 'serviceofferingname', customTitle: 'virtual.routers.system.offering' }) + } + return fields + }, details: ['name', 'id', 'displaytext', 'guestiptype', 'traffictype', 'internetprotocol', 'networkrate', 'ispersistent', 'egressdefaultpolicy', 'availability', 'conservemode', 'specifyvlan', 'routingmode', 'specifyasnumber', 'specifyipranges', 'supportspublicaccess', 'supportsstrechedl2subnet', 'forvpc', 'fornsx', 'networkmode', 'service', 'tags', 'domain', 'zone'], resourceType: 'NetworkOffering', tabs: [