This is an automated email from the ASF dual-hosted git repository.
rohit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/master by this push:
new 0e87040 network: allow ability to specify if network's ipaddress
usage need to be hidden (#3235)
0e87040 is described below
commit 0e87040eb29ea6385df7eb8b86d71ac334ceb7b4
Author: Rohit Yadav <[email protected]>
AuthorDate: Wed Jun 19 10:25:59 2019 +0530
network: allow ability to specify if network's ipaddress usage need to be
hidden (#3235)
Problem: Admins don’t want to charge for IP address usage on certain
(shared) networks.
Root Cause: There is no flag or detail for admins to provide using UI or
API when creating networks to specify if they want IP address usage of the
network hidden.
Solution: A new boolean hideipaddressusage flag is added to the
createNetwork API and a checkbox in the ‘Add guest network’ UI for the root
admins to specify if they want the shared network’s IP address usage to be
hidden in the listUsageRecords API response. The provided flag is saved as the
‘hideIpAddressUsage’ detail in the cloud.network_details table for the network.
For existing (shared) networks, root admins can also specify the same boolean
API parameter hideipaddressusage with [...]
The API flag works for any kind of network via the API, but the checkbox is
only shown while creating shared networks in the UI.
Signed-off-by: Rohit Yadav <[email protected]>
---
api/src/main/java/com/cloud/network/Network.java | 7 +-
.../java/com/cloud/network/NetworkService.java | 4 +-
.../org/apache/cloudstack/api/ApiConstants.java | 1 +
.../admin/network/CreateNetworkCmdByAdmin.java | 10 +
.../admin/network/UpdateNetworkCmdByAdmin.java | 24 +-
.../command/admin/usage/ListUsageRecordsCmd.java | 11 +-
.../api/command/user/network/UpdateNetworkCmd.java | 13 +-
.../cloudstack/api/response/NetworkResponse.java | 11 +-
.../com/cloud/network/dao/NetworkDetailVO.java | 8 +
.../main/java/com/cloud/api/ApiResponseHelper.java | 327 +++++++++++----------
.../java/com/cloud/network/NetworkServiceImpl.java | 40 ++-
.../java/com/cloud/vpc/MockNetworkManagerImpl.java | 12 +-
ui/l10n/en.js | 1 +
ui/scripts/docs.js | 4 +
ui/scripts/sharedFunctions.js | 13 +
15 files changed, 290 insertions(+), 196 deletions(-)
diff --git a/api/src/main/java/com/cloud/network/Network.java
b/api/src/main/java/com/cloud/network/Network.java
index 2aa241d..2cabd02 100644
--- a/api/src/main/java/com/cloud/network/Network.java
+++ b/api/src/main/java/com/cloud/network/Network.java
@@ -40,13 +40,14 @@ import com.cloud.utils.fsm.StateObject;
*/
public interface Network extends ControlledEntity, StateObject<Network.State>,
InternalIdentity, Identity, Serializable, Displayable {
- public enum GuestType {
+ enum GuestType {
Shared, Isolated, L2
}
- public String updatingInSequence ="updatingInSequence";
+ String updatingInSequence = "updatingInSequence";
+ String hideIpAddressUsage = "hideIpAddressUsage";
- public static class Service {
+ class Service {
private static List<Service> supportedServices = new
ArrayList<Service>();
public static final Service Vpn = new Service("Vpn",
Capability.SupportedVpnProtocols, Capability.VpnTypes);
diff --git a/api/src/main/java/com/cloud/network/NetworkService.java
b/api/src/main/java/com/cloud/network/NetworkService.java
index aa33def..b228c59 100644
--- a/api/src/main/java/com/cloud/network/NetworkService.java
+++ b/api/src/main/java/com/cloud/network/NetworkService.java
@@ -26,6 +26,7 @@ import
org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementors
import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd;
import org.apache.cloudstack.api.command.user.network.ListNetworksCmd;
import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd;
+import org.apache.cloudstack.api.command.user.network.UpdateNetworkCmd;
import org.apache.cloudstack.api.command.user.vm.ListNicsCmd;
import org.apache.cloudstack.api.response.AcquirePodIpCmdResponse;
@@ -81,8 +82,7 @@ public interface NetworkService {
IpAddress getIp(long id);
- Network updateGuestNetwork(long networkId, String name, String
displayText, Account callerAccount, User callerUser, String domainSuffix, Long
networkOfferingId,
- Boolean changeCidr, String guestVmCidr, Boolean displayNetwork, String
newUUID, boolean updateInSequence, boolean forced);
+ Network updateGuestNetwork(final UpdateNetworkCmd cmd);
/**
* Migrate a network from one physical network to another physical network
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 0d8cb03..99efafc 100644
--- a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java
@@ -150,6 +150,7 @@ public class ApiConstants {
public static final String HA_PROVIDER = "haprovider";
public static final String HA_STATE = "hastate";
public static final String HEALTH = "health";
+ public static final String HIDE_IP_ADDRESS_USAGE = "hideipaddressusage";
public static final String HOST_ID = "hostid";
public static final String HOST_NAME = "hostname";
public static final String HYPERVISOR = "hypervisor";
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateNetworkCmdByAdmin.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateNetworkCmdByAdmin.java
index 2dfd749..7a60940 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateNetworkCmdByAdmin.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateNetworkCmdByAdmin.java
@@ -43,6 +43,9 @@ public class CreateNetworkCmdByAdmin extends CreateNetworkCmd
{
@Parameter(name=ApiConstants.BYPASS_VLAN_OVERLAP_CHECK,
type=CommandType.BOOLEAN, description="when true bypasses VLAN id/range overlap
check during network creation for shared and L2 networks")
private Boolean bypassVlanOverlapCheck;
+ @Parameter(name=ApiConstants.HIDE_IP_ADDRESS_USAGE,
type=CommandType.BOOLEAN, description="when true ip address usage for the
network will not be exported by the listUsageRecords API")
+ private Boolean hideIpAddressUsage;
+
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
@@ -58,6 +61,13 @@ public class CreateNetworkCmdByAdmin extends
CreateNetworkCmd {
return false;
}
+ public Boolean getHideIpAddressUsage() {
+ if (hideIpAddressUsage != null) {
+ return hideIpAddressUsage;
+ }
+ return false;
+ }
+
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateNetworkCmdByAdmin.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateNetworkCmdByAdmin.java
index 388348c..487ed14 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateNetworkCmdByAdmin.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/network/UpdateNetworkCmdByAdmin.java
@@ -16,42 +16,44 @@
// under the License.
package org.apache.cloudstack.api.command.admin.network;
-import org.apache.log4j.Logger;
-
import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
+import org.apache.cloudstack.api.Parameter;
import org.apache.cloudstack.api.ResponseObject.ResponseView;
import org.apache.cloudstack.api.ServerApiException;
import org.apache.cloudstack.api.command.user.network.UpdateNetworkCmd;
import org.apache.cloudstack.api.response.NetworkResponse;
-import org.apache.cloudstack.context.CallContext;
+import org.apache.log4j.Logger;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.network.Network;
-import com.cloud.user.Account;
-import com.cloud.user.User;
@APICommand(name = "updateNetwork", description = "Updates a network",
responseObject = NetworkResponse.class, responseView = ResponseView.Full,
entityType = {Network.class},
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
public class UpdateNetworkCmdByAdmin extends UpdateNetworkCmd {
public static final Logger s_logger =
Logger.getLogger(UpdateNetworkCmdByAdmin.class.getName());
+ @Parameter(name= ApiConstants.HIDE_IP_ADDRESS_USAGE,
type=CommandType.BOOLEAN, description="when true ip address usage for the
network will not be exported by the listUsageRecords API")
+ private Boolean hideIpAddressUsage;
+
+ public Boolean getHideIpAddressUsage() {
+ if (hideIpAddressUsage == null) {
+ return false;
+ }
+ return hideIpAddressUsage;
+ }
@Override
public void execute() throws InsufficientCapacityException,
ConcurrentOperationException{
- User callerUser =
_accountService.getActiveUser(CallContext.current().getCallingUserId());
- Account callerAccount =
_accountService.getActiveAccountById(callerUser.getAccountId());
Network network = _networkService.getNetwork(id);
if (network == null) {
throw new InvalidParameterValueException("Couldn't find network by
id");
}
- Network result = _networkService.updateGuestNetwork(getId(),
getNetworkName(), getDisplayText(), callerAccount,
- callerUser, getNetworkDomain(), getNetworkOfferingId(),
getChangeCidr(), getGuestVmCidr(), getDisplayNetwork(), getCustomId(),
getUpdateInSequence(),getForced());
-
-
+ Network result = _networkService.updateGuestNetwork(this);
if (result != null) {
NetworkResponse response =
_responseGenerator.createNetworkResponse(ResponseView.Full, result);
response.setResponseName(getCommandName());
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/ListUsageRecordsCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/ListUsageRecordsCmd.java
index 605439f..2698c81 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/ListUsageRecordsCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/usage/ListUsageRecordsCmd.java
@@ -22,7 +22,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import com.cloud.utils.Pair;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.BaseCmd;
@@ -36,6 +35,8 @@ import org.apache.cloudstack.api.response.ResourceTagResponse;
import org.apache.cloudstack.api.response.UsageRecordResponse;
import org.apache.cloudstack.usage.Usage;
+import com.cloud.utils.Pair;
+
@APICommand(name = ListUsageRecordsCmd.APINAME,
description = "Lists usage records for accounts",
responseObject = UsageRecordResponse.class,
@@ -168,11 +169,13 @@ public class ListUsageRecordsCmd extends BaseListCmd {
}
for (Usage usageRecord : usageRecords.first()) {
UsageRecordResponse usageResponse =
_responseGenerator.createUsageResponse(usageRecord, resourceTagResponseMap);
- usageResponse.setObjectName("usagerecord");
- usageResponses.add(usageResponse);
+ if (usageResponse != null) {
+ usageResponse.setObjectName("usagerecord");
+ usageResponses.add(usageResponse);
+ }
}
- response.setResponses(usageResponses, usageRecords.second());
+ response.setResponses(usageResponses, usageResponses.size());
}
response.setResponseName(getCommandName());
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java
index c313f36..3e93e5e 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java
@@ -16,8 +16,6 @@
// under the License.
package org.apache.cloudstack.api.command.user.network;
-import org.apache.log4j.Logger;
-
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.acl.SecurityChecker.AccessType;
import org.apache.cloudstack.api.ACL;
@@ -31,7 +29,7 @@ import org.apache.cloudstack.api.ResponseObject.ResponseView;
import org.apache.cloudstack.api.ServerApiException;
import org.apache.cloudstack.api.response.NetworkOfferingResponse;
import org.apache.cloudstack.api.response.NetworkResponse;
-import org.apache.cloudstack.context.CallContext;
+import org.apache.log4j.Logger;
import com.cloud.event.EventTypes;
import com.cloud.exception.ConcurrentOperationException;
@@ -39,8 +37,6 @@ import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.network.Network;
import com.cloud.offering.NetworkOffering;
-import com.cloud.user.Account;
-import com.cloud.user.User;
@APICommand(name = "updateNetwork", description = "Updates a network",
responseObject = NetworkResponse.class, responseView = ResponseView.Restricted,
entityType = {Network.class},
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
@@ -159,17 +155,12 @@ public class UpdateNetworkCmd extends
BaseAsyncCustomIdCmd {
@Override
public void execute() throws InsufficientCapacityException,
ConcurrentOperationException {
- User callerUser =
_accountService.getActiveUser(CallContext.current().getCallingUserId());
- Account callerAccount =
_accountService.getActiveAccountById(callerUser.getAccountId());
Network network = _networkService.getNetwork(id);
if (network == null) {
throw new InvalidParameterValueException("Couldn't find network by
ID");
}
- Network result =
- _networkService.updateGuestNetwork(getId(), getNetworkName(),
getDisplayText(), callerAccount, callerUser, getNetworkDomain(),
getNetworkOfferingId(),
- getChangeCidr(), getGuestVmCidr(), getDisplayNetwork(),
getCustomId(), getUpdateInSequence(), getForced());
-
+ Network result = _networkService.updateGuestNetwork(this);
if (result != null) {
NetworkResponse response =
_responseGenerator.createNetworkResponse(ResponseView.Restricted, result);
response.setResponseName(getCommandName());
diff --git
a/api/src/main/java/org/apache/cloudstack/api/response/NetworkResponse.java
b/api/src/main/java/org/apache/cloudstack/api/response/NetworkResponse.java
index 8d0f725..84a5aaa 100644
--- a/api/src/main/java/org/apache/cloudstack/api/response/NetworkResponse.java
+++ b/api/src/main/java/org/apache/cloudstack/api/response/NetworkResponse.java
@@ -17,8 +17,9 @@
package org.apache.cloudstack.api.response;
import java.util.List;
-
+import java.util.Map;
import java.util.Set;
+
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.BaseResponse;
@@ -201,6 +202,10 @@ public class NetworkResponse extends BaseResponse
implements ControlledEntityRes
@Param(description = "the list of resource tags associated with network",
responseObject = ResourceTagResponse.class)
private List<ResourceTagResponse> tags;
+ @SerializedName(ApiConstants.DETAILS)
+ @Param(description = "the details of the network")
+ private Map<String, String> details;
+
@SerializedName(ApiConstants.IP6_GATEWAY)
@Param(description = "the gateway of IPv6 network")
private String ip6Gateway;
@@ -414,6 +419,10 @@ public class NetworkResponse extends BaseResponse
implements ControlledEntityRes
this.tags = tags;
}
+ public void setDetails(Map<String, String> details) {
+ this.details = details;
+ }
+
public void setIp6Gateway(String ip6Gateway) {
this.ip6Gateway = ip6Gateway;
}
diff --git
a/engine/schema/src/main/java/com/cloud/network/dao/NetworkDetailVO.java
b/engine/schema/src/main/java/com/cloud/network/dao/NetworkDetailVO.java
index e6cad17..23c85f7 100644
--- a/engine/schema/src/main/java/com/cloud/network/dao/NetworkDetailVO.java
+++ b/engine/schema/src/main/java/com/cloud/network/dao/NetworkDetailVO.java
@@ -79,4 +79,12 @@ public class NetworkDetailVO implements ResourceDetail {
public boolean isDisplay() {
return display;
}
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public void setDisplay(boolean display) {
+ this.display = display;
+ }
}
diff --git a/server/src/main/java/com/cloud/api/ApiResponseHelper.java
b/server/src/main/java/com/cloud/api/ApiResponseHelper.java
index c10744d..9deaa96 100644
--- a/server/src/main/java/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/main/java/com/cloud/api/ApiResponseHelper.java
@@ -16,9 +16,153 @@
// under the License.
package com.cloud.api;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TimeZone;
+import java.util.stream.Collectors;
+
+import javax.inject.Inject;
+
+import org.apache.cloudstack.acl.ControlledEntity;
+import org.apache.cloudstack.acl.ControlledEntity.ACLType;
+import org.apache.cloudstack.affinity.AffinityGroup;
+import org.apache.cloudstack.affinity.AffinityGroupResponse;
+import org.apache.cloudstack.api.ApiConstants.HostDetails;
+import org.apache.cloudstack.api.ApiConstants.VMDetails;
+import org.apache.cloudstack.api.ResponseGenerator;
+import org.apache.cloudstack.api.ResponseObject.ResponseView;
+import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd;
+import org.apache.cloudstack.api.response.AccountResponse;
+import
org.apache.cloudstack.api.response.ApplicationLoadBalancerInstanceResponse;
+import org.apache.cloudstack.api.response.ApplicationLoadBalancerResponse;
+import org.apache.cloudstack.api.response.ApplicationLoadBalancerRuleResponse;
+import org.apache.cloudstack.api.response.AsyncJobResponse;
+import org.apache.cloudstack.api.response.AutoScalePolicyResponse;
+import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse;
+import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse;
+import org.apache.cloudstack.api.response.CapabilityResponse;
+import org.apache.cloudstack.api.response.CapacityResponse;
+import org.apache.cloudstack.api.response.ClusterResponse;
+import org.apache.cloudstack.api.response.ConditionResponse;
+import org.apache.cloudstack.api.response.ConfigurationResponse;
+import org.apache.cloudstack.api.response.ControlledEntityResponse;
+import org.apache.cloudstack.api.response.ControlledViewEntityResponse;
+import org.apache.cloudstack.api.response.CounterResponse;
+import org.apache.cloudstack.api.response.CreateCmdResponse;
+import org.apache.cloudstack.api.response.CreateSSHKeyPairResponse;
+import org.apache.cloudstack.api.response.DiskOfferingResponse;
+import org.apache.cloudstack.api.response.DomainResponse;
+import org.apache.cloudstack.api.response.DomainRouterResponse;
+import org.apache.cloudstack.api.response.EventResponse;
+import org.apache.cloudstack.api.response.ExtractResponse;
+import org.apache.cloudstack.api.response.FirewallResponse;
+import org.apache.cloudstack.api.response.FirewallRuleResponse;
+import org.apache.cloudstack.api.response.GlobalLoadBalancerResponse;
+import org.apache.cloudstack.api.response.GuestOSResponse;
+import org.apache.cloudstack.api.response.GuestOsMappingResponse;
+import org.apache.cloudstack.api.response.GuestVlanRangeResponse;
+import org.apache.cloudstack.api.response.HostForMigrationResponse;
+import org.apache.cloudstack.api.response.HostResponse;
+import org.apache.cloudstack.api.response.HypervisorCapabilitiesResponse;
+import org.apache.cloudstack.api.response.IPAddressResponse;
+import org.apache.cloudstack.api.response.ImageStoreResponse;
+import org.apache.cloudstack.api.response.InstanceGroupResponse;
+import org.apache.cloudstack.api.response.InternalLoadBalancerElementResponse;
+import org.apache.cloudstack.api.response.IpForwardingRuleResponse;
+import org.apache.cloudstack.api.response.IsolationMethodResponse;
+import org.apache.cloudstack.api.response.LBHealthCheckPolicyResponse;
+import org.apache.cloudstack.api.response.LBHealthCheckResponse;
+import org.apache.cloudstack.api.response.LBStickinessPolicyResponse;
+import org.apache.cloudstack.api.response.LBStickinessResponse;
+import org.apache.cloudstack.api.response.ListResponse;
+import org.apache.cloudstack.api.response.LoadBalancerResponse;
+import org.apache.cloudstack.api.response.ManagementServerResponse;
+import org.apache.cloudstack.api.response.NetworkACLItemResponse;
+import org.apache.cloudstack.api.response.NetworkACLResponse;
+import org.apache.cloudstack.api.response.NetworkOfferingResponse;
+import org.apache.cloudstack.api.response.NetworkResponse;
+import org.apache.cloudstack.api.response.NicExtraDhcpOptionResponse;
+import org.apache.cloudstack.api.response.NicResponse;
+import org.apache.cloudstack.api.response.NicSecondaryIpResponse;
+import org.apache.cloudstack.api.response.OvsProviderResponse;
+import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
+import org.apache.cloudstack.api.response.PodResponse;
+import org.apache.cloudstack.api.response.PortableIpRangeResponse;
+import org.apache.cloudstack.api.response.PortableIpResponse;
+import org.apache.cloudstack.api.response.PrivateGatewayResponse;
+import org.apache.cloudstack.api.response.ProjectAccountResponse;
+import org.apache.cloudstack.api.response.ProjectInvitationResponse;
+import org.apache.cloudstack.api.response.ProjectResponse;
+import org.apache.cloudstack.api.response.ProviderResponse;
+import org.apache.cloudstack.api.response.RegionResponse;
+import org.apache.cloudstack.api.response.RemoteAccessVpnResponse;
+import org.apache.cloudstack.api.response.ResourceCountResponse;
+import org.apache.cloudstack.api.response.ResourceLimitResponse;
+import org.apache.cloudstack.api.response.ResourceTagResponse;
+import org.apache.cloudstack.api.response.SSHKeyPairResponse;
+import org.apache.cloudstack.api.response.SecurityGroupResponse;
+import org.apache.cloudstack.api.response.SecurityGroupRuleResponse;
+import org.apache.cloudstack.api.response.ServiceOfferingResponse;
+import org.apache.cloudstack.api.response.ServiceResponse;
+import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse;
+import org.apache.cloudstack.api.response.Site2SiteVpnConnectionResponse;
+import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse;
+import org.apache.cloudstack.api.response.SnapshotPolicyResponse;
+import org.apache.cloudstack.api.response.SnapshotResponse;
+import org.apache.cloudstack.api.response.SnapshotScheduleResponse;
+import org.apache.cloudstack.api.response.StaticRouteResponse;
+import org.apache.cloudstack.api.response.StorageNetworkIpRangeResponse;
+import org.apache.cloudstack.api.response.StoragePoolResponse;
+import org.apache.cloudstack.api.response.SystemVmInstanceResponse;
+import org.apache.cloudstack.api.response.SystemVmResponse;
+import org.apache.cloudstack.api.response.TemplatePermissionsResponse;
+import org.apache.cloudstack.api.response.TemplateResponse;
+import org.apache.cloudstack.api.response.TrafficMonitorResponse;
+import org.apache.cloudstack.api.response.TrafficTypeResponse;
+import org.apache.cloudstack.api.response.UpgradeRouterTemplateResponse;
+import org.apache.cloudstack.api.response.UsageRecordResponse;
+import org.apache.cloudstack.api.response.UserResponse;
+import org.apache.cloudstack.api.response.UserVmResponse;
+import org.apache.cloudstack.api.response.VMSnapshotResponse;
+import org.apache.cloudstack.api.response.VirtualRouterProviderResponse;
+import org.apache.cloudstack.api.response.VlanIpRangeResponse;
+import org.apache.cloudstack.api.response.VolumeResponse;
+import org.apache.cloudstack.api.response.VpcOfferingResponse;
+import org.apache.cloudstack.api.response.VpcResponse;
+import org.apache.cloudstack.api.response.VpnUsersResponse;
+import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.config.Configuration;
+import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
+import
org.apache.cloudstack.engine.subsystem.api.storage.DataStoreCapabilities;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
+import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory;
+import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
+import org.apache.cloudstack.framework.jobs.AsyncJob;
+import org.apache.cloudstack.framework.jobs.AsyncJobManager;
import org.apache.cloudstack.management.ManagementServerHost;
-import com.cloud.utils.crypt.DBEncryptionUtil;
-import com.cloud.tags.dao.ResourceTagDao;
+import org.apache.cloudstack.network.lb.ApplicationLoadBalancerRule;
+import org.apache.cloudstack.region.PortableIp;
+import org.apache.cloudstack.region.PortableIpRange;
+import org.apache.cloudstack.region.Region;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreDao;
+import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreVO;
+import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
+import org.apache.cloudstack.usage.Usage;
+import org.apache.cloudstack.usage.UsageService;
+import org.apache.cloudstack.usage.UsageTypes;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.log4j.Logger;
+
import com.cloud.agent.api.VgpuTypesInfo;
import com.cloud.api.query.ViewResponseHelper;
import com.cloud.api.query.vo.AccountJoinVO;
@@ -102,6 +246,8 @@ import com.cloud.network.as.Counter;
import com.cloud.network.dao.IPAddressDao;
import com.cloud.network.dao.IPAddressVO;
import com.cloud.network.dao.LoadBalancerVO;
+import com.cloud.network.dao.NetworkDetailVO;
+import com.cloud.network.dao.NetworkDetailsDao;
import com.cloud.network.dao.NetworkVO;
import com.cloud.network.dao.PhysicalNetworkVO;
import com.cloud.network.router.VirtualRouter;
@@ -154,6 +300,7 @@ import com.cloud.storage.VolumeVO;
import com.cloud.storage.dao.VolumeDao;
import com.cloud.storage.snapshot.SnapshotPolicy;
import com.cloud.storage.snapshot.SnapshotSchedule;
+import com.cloud.tags.dao.ResourceTagDao;
import com.cloud.template.VirtualMachineTemplate;
import com.cloud.user.Account;
import com.cloud.user.AccountManager;
@@ -163,11 +310,12 @@ import com.cloud.user.UserAccount;
import com.cloud.uservm.UserVm;
import com.cloud.utils.Pair;
import com.cloud.utils.StringUtils;
+import com.cloud.utils.crypt.DBEncryptionUtil;
import com.cloud.utils.db.EntityManager;
-import com.cloud.utils.net.Dhcp;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.exception.CloudRuntimeException;
+import com.cloud.utils.net.Dhcp;
import com.cloud.utils.net.Ip;
import com.cloud.utils.net.NetUtils;
import com.cloud.vm.ConsoleProxyVO;
@@ -183,150 +331,6 @@ import com.cloud.vm.VirtualMachine.Type;
import com.cloud.vm.dao.NicExtraDhcpOptionDao;
import com.cloud.vm.dao.NicSecondaryIpVO;
import com.cloud.vm.snapshot.VMSnapshot;
-import org.apache.cloudstack.acl.ControlledEntity;
-import org.apache.cloudstack.acl.ControlledEntity.ACLType;
-import org.apache.cloudstack.affinity.AffinityGroup;
-import org.apache.cloudstack.affinity.AffinityGroupResponse;
-import org.apache.cloudstack.api.ApiConstants.HostDetails;
-import org.apache.cloudstack.api.ApiConstants.VMDetails;
-import org.apache.cloudstack.api.ResponseGenerator;
-import org.apache.cloudstack.api.ResponseObject.ResponseView;
-import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd;
-import org.apache.cloudstack.api.response.AccountResponse;
-import
org.apache.cloudstack.api.response.ApplicationLoadBalancerInstanceResponse;
-import org.apache.cloudstack.api.response.ApplicationLoadBalancerResponse;
-import org.apache.cloudstack.api.response.ApplicationLoadBalancerRuleResponse;
-import org.apache.cloudstack.api.response.AsyncJobResponse;
-import org.apache.cloudstack.api.response.AutoScalePolicyResponse;
-import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse;
-import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse;
-import org.apache.cloudstack.api.response.CapabilityResponse;
-import org.apache.cloudstack.api.response.CapacityResponse;
-import org.apache.cloudstack.api.response.ClusterResponse;
-import org.apache.cloudstack.api.response.ConditionResponse;
-import org.apache.cloudstack.api.response.ConfigurationResponse;
-import org.apache.cloudstack.api.response.ControlledEntityResponse;
-import org.apache.cloudstack.api.response.ControlledViewEntityResponse;
-import org.apache.cloudstack.api.response.CounterResponse;
-import org.apache.cloudstack.api.response.CreateCmdResponse;
-import org.apache.cloudstack.api.response.CreateSSHKeyPairResponse;
-import org.apache.cloudstack.api.response.DiskOfferingResponse;
-import org.apache.cloudstack.api.response.DomainResponse;
-import org.apache.cloudstack.api.response.DomainRouterResponse;
-import org.apache.cloudstack.api.response.EventResponse;
-import org.apache.cloudstack.api.response.ExtractResponse;
-import org.apache.cloudstack.api.response.FirewallResponse;
-import org.apache.cloudstack.api.response.FirewallRuleResponse;
-import org.apache.cloudstack.api.response.GlobalLoadBalancerResponse;
-import org.apache.cloudstack.api.response.GuestOSResponse;
-import org.apache.cloudstack.api.response.GuestOsMappingResponse;
-import org.apache.cloudstack.api.response.GuestVlanRangeResponse;
-import org.apache.cloudstack.api.response.HostForMigrationResponse;
-import org.apache.cloudstack.api.response.HostResponse;
-import org.apache.cloudstack.api.response.HypervisorCapabilitiesResponse;
-import org.apache.cloudstack.api.response.IPAddressResponse;
-import org.apache.cloudstack.api.response.ImageStoreResponse;
-import org.apache.cloudstack.api.response.InstanceGroupResponse;
-import org.apache.cloudstack.api.response.InternalLoadBalancerElementResponse;
-import org.apache.cloudstack.api.response.IpForwardingRuleResponse;
-import org.apache.cloudstack.api.response.IsolationMethodResponse;
-import org.apache.cloudstack.api.response.LBHealthCheckPolicyResponse;
-import org.apache.cloudstack.api.response.LBHealthCheckResponse;
-import org.apache.cloudstack.api.response.LBStickinessPolicyResponse;
-import org.apache.cloudstack.api.response.LBStickinessResponse;
-import org.apache.cloudstack.api.response.ListResponse;
-import org.apache.cloudstack.api.response.LoadBalancerResponse;
-import org.apache.cloudstack.api.response.ManagementServerResponse;
-import org.apache.cloudstack.api.response.NetworkACLItemResponse;
-import org.apache.cloudstack.api.response.NetworkACLResponse;
-import org.apache.cloudstack.api.response.NetworkOfferingResponse;
-import org.apache.cloudstack.api.response.NetworkResponse;
-import org.apache.cloudstack.api.response.NicExtraDhcpOptionResponse;
-import org.apache.cloudstack.api.response.NicResponse;
-import org.apache.cloudstack.api.response.NicSecondaryIpResponse;
-import org.apache.cloudstack.api.response.OvsProviderResponse;
-import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
-import org.apache.cloudstack.api.response.PodResponse;
-import org.apache.cloudstack.api.response.PortableIpRangeResponse;
-import org.apache.cloudstack.api.response.PortableIpResponse;
-import org.apache.cloudstack.api.response.PrivateGatewayResponse;
-import org.apache.cloudstack.api.response.ProjectAccountResponse;
-import org.apache.cloudstack.api.response.ProjectInvitationResponse;
-import org.apache.cloudstack.api.response.ProjectResponse;
-import org.apache.cloudstack.api.response.ProviderResponse;
-import org.apache.cloudstack.api.response.RegionResponse;
-import org.apache.cloudstack.api.response.RemoteAccessVpnResponse;
-import org.apache.cloudstack.api.response.ResourceCountResponse;
-import org.apache.cloudstack.api.response.ResourceLimitResponse;
-import org.apache.cloudstack.api.response.ResourceTagResponse;
-import org.apache.cloudstack.api.response.SSHKeyPairResponse;
-import org.apache.cloudstack.api.response.SecurityGroupResponse;
-import org.apache.cloudstack.api.response.SecurityGroupRuleResponse;
-import org.apache.cloudstack.api.response.ServiceOfferingResponse;
-import org.apache.cloudstack.api.response.ServiceResponse;
-import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse;
-import org.apache.cloudstack.api.response.Site2SiteVpnConnectionResponse;
-import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse;
-import org.apache.cloudstack.api.response.SnapshotPolicyResponse;
-import org.apache.cloudstack.api.response.SnapshotResponse;
-import org.apache.cloudstack.api.response.SnapshotScheduleResponse;
-import org.apache.cloudstack.api.response.StaticRouteResponse;
-import org.apache.cloudstack.api.response.StorageNetworkIpRangeResponse;
-import org.apache.cloudstack.api.response.StoragePoolResponse;
-import org.apache.cloudstack.api.response.SystemVmInstanceResponse;
-import org.apache.cloudstack.api.response.SystemVmResponse;
-import org.apache.cloudstack.api.response.TemplatePermissionsResponse;
-import org.apache.cloudstack.api.response.TemplateResponse;
-import org.apache.cloudstack.api.response.TrafficMonitorResponse;
-import org.apache.cloudstack.api.response.TrafficTypeResponse;
-import org.apache.cloudstack.api.response.UpgradeRouterTemplateResponse;
-import org.apache.cloudstack.api.response.UsageRecordResponse;
-import org.apache.cloudstack.api.response.UserResponse;
-import org.apache.cloudstack.api.response.UserVmResponse;
-import org.apache.cloudstack.api.response.VMSnapshotResponse;
-import org.apache.cloudstack.api.response.VirtualRouterProviderResponse;
-import org.apache.cloudstack.api.response.VlanIpRangeResponse;
-import org.apache.cloudstack.api.response.VolumeResponse;
-import org.apache.cloudstack.api.response.VpcOfferingResponse;
-import org.apache.cloudstack.api.response.VpcResponse;
-import org.apache.cloudstack.api.response.VpnUsersResponse;
-import org.apache.cloudstack.api.response.ZoneResponse;
-import org.apache.cloudstack.config.Configuration;
-import org.apache.cloudstack.context.CallContext;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
-import
org.apache.cloudstack.engine.subsystem.api.storage.DataStoreCapabilities;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
-import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory;
-import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
-import org.apache.cloudstack.framework.jobs.AsyncJob;
-import org.apache.cloudstack.framework.jobs.AsyncJobManager;
-import org.apache.cloudstack.network.lb.ApplicationLoadBalancerRule;
-import org.apache.cloudstack.region.PortableIp;
-import org.apache.cloudstack.region.PortableIpRange;
-import org.apache.cloudstack.region.Region;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
-import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreDao;
-import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreVO;
-import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
-import org.apache.cloudstack.usage.Usage;
-import org.apache.cloudstack.usage.UsageService;
-import org.apache.cloudstack.usage.UsageTypes;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.log4j.Logger;
-
-import javax.inject.Inject;
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TimeZone;
-import java.util.stream.Collectors;
public class ApiResponseHelper implements ResponseGenerator {
@@ -363,6 +367,8 @@ public class ApiResponseHelper implements ResponseGenerator
{
private NicExtraDhcpOptionDao _nicExtraDhcpOptionDao;
@Inject
private IPAddressDao userIpAddressDao;
+ @Inject
+ NetworkDetailsDao networkDetailsDao;
@Override
public UserResponse createUserResponse(User user) {
@@ -2118,6 +2124,15 @@ public class ApiResponseHelper implements
ResponseGenerator {
response.setVlan(vlan);
}
+ // return network details only to Root admin
+ if (view == ResponseView.Full) {
+ Map<String, String> details = new HashMap<>();
+ for (NetworkDetailVO detail:
networkDetailsDao.listDetails(network.getId())) {
+ details.put(detail.getName(),detail.getValue());
+ }
+ response.setDetails(details);
+ }
+
DataCenter zone = ApiDBUtils.findZoneById(network.getDataCenterId());
if (zone != null) {
response.setZoneId(zone.getUuid());
@@ -3360,18 +3375,26 @@ public class ApiResponseHelper implements
ResponseGenerator {
}
} else if (usageRecord.getUsageType() == UsageTypes.IP_ADDRESS) {
- //isSourceNAT
-
usageRecResponse.setSourceNat((usageRecord.getType().equals("SourceNat")) ?
true : false);
- //isSystem
- usageRecResponse.setSystem((usageRecord.getSize() == 1) ? true :
false);
//IP Address ID
IPAddressVO ip =
_entityMgr.findByIdIncludingRemoved(IPAddressVO.class,
usageRecord.getUsageId().toString());
if (ip != null) {
+ Long networkId = ip.getAssociatedWithNetworkId();
+ if (networkId == null) {
+ networkId = ip.getSourceNetworkId();
+ }
+ NetworkDetailVO networkDetail =
networkDetailsDao.findDetail(networkId, Network.hideIpAddressUsage);
+ if (networkDetail != null && networkDetail.getValue() != null
&& networkDetail.getValue().equals("true")) {
+ // Don't export network usage when admin wants it hidden
+ return null;
+ }
resourceType = ResourceObjectType.PublicIpAddress;
resourceId = ip.getId();
usageRecResponse.setUsageId(ip.getUuid());
}
-
+ //isSourceNAT
+
usageRecResponse.setSourceNat((usageRecord.getType().equals("SourceNat")) ?
true : false);
+ //isSystem
+ usageRecResponse.setSystem((usageRecord.getSize() == 1) ? true :
false);
} else if (usageRecord.getUsageType() == UsageTypes.NETWORK_BYTES_SENT
|| usageRecord.getUsageType() == UsageTypes.NETWORK_BYTES_RECEIVED) {
//Device Type
resourceType = ResourceObjectType.UserVm;
diff --git a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
index 76d5560..0e52c05 100644
--- a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
@@ -45,10 +45,12 @@ import
org.apache.cloudstack.api.command.admin.address.ReleasePodIpCmdByAdmin;
import org.apache.cloudstack.api.command.admin.network.CreateNetworkCmdByAdmin;
import
org.apache.cloudstack.api.command.admin.network.DedicateGuestVlanRangeCmd;
import
org.apache.cloudstack.api.command.admin.network.ListDedicatedGuestVlanRangesCmd;
+import org.apache.cloudstack.api.command.admin.network.UpdateNetworkCmdByAdmin;
import
org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd;
import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd;
import org.apache.cloudstack.api.command.user.network.ListNetworksCmd;
import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd;
+import org.apache.cloudstack.api.command.user.network.UpdateNetworkCmd;
import org.apache.cloudstack.api.command.user.vm.ListNicsCmd;
import org.apache.cloudstack.api.response.AcquirePodIpCmdResponse;
import org.apache.cloudstack.context.CallContext;
@@ -1023,11 +1025,11 @@ public class NetworkServiceImpl extends ManagerBase
implements NetworkService {
String networkDomain = cmd.getNetworkDomain();
String vlanId = null;
boolean bypassVlanOverlapCheck = false;
+ boolean hideIpAddressUsage = false;
if (cmd instanceof CreateNetworkCmdByAdmin) {
vlanId = ((CreateNetworkCmdByAdmin)cmd).getVlan();
- }
- if (cmd instanceof CreateNetworkCmdByAdmin) {
bypassVlanOverlapCheck =
((CreateNetworkCmdByAdmin)cmd).getBypassVlanOverlapCheck();
+ hideIpAddressUsage =
((CreateNetworkCmdByAdmin)cmd).getHideIpAddressUsage();
}
String name = cmd.getNetworkName();
@@ -1309,6 +1311,10 @@ public class NetworkServiceImpl extends ManagerBase
implements NetworkService {
domainId, isDomainSpecific, subdomainAccess, vpcId, startIPv6,
endIPv6, ip6Gateway, ip6Cidr, displayNetwork, aclId, isolatedPvlan, ntwkOff,
pNtwk, aclType, owner, cidr, createVlan,
externalId);
+ if (hideIpAddressUsage) {
+ _networkDetailsDao.persist(new NetworkDetailVO(network.getId(),
Network.hideIpAddressUsage, String.valueOf(hideIpAddressUsage), false));
+ }
+
// if the network offering has persistent set to true, implement the
network
if (ntwkOff.isPersistent()) {
try {
@@ -1981,8 +1987,21 @@ public class NetworkServiceImpl extends ManagerBase
implements NetworkService {
@Override
@DB
@ActionEvent(eventType = EventTypes.EVENT_NETWORK_UPDATE, eventDescription
= "updating network", async = true)
- public Network updateGuestNetwork(final long networkId, String name,
String displayText, Account callerAccount, User callerUser, String
domainSuffix, final Long networkOfferingId,
- Boolean changeCidr, String guestVmCidr, Boolean displayNetwork,
String customId, boolean updateInSequence, boolean forced) {
+ public Network updateGuestNetwork(final UpdateNetworkCmd cmd) {
+ User callerUser =
_accountService.getActiveUser(CallContext.current().getCallingUserId());
+ Account callerAccount =
_accountService.getActiveAccountById(callerUser.getAccountId());
+ final long networkId = cmd.getId();
+ String name = cmd.getNetworkName();
+ String displayText = cmd.getDisplayText();
+ String domainSuffix = cmd.getNetworkDomain();
+ final Long networkOfferingId = cmd.getNetworkOfferingId();
+ Boolean changeCidr = cmd.getChangeCidr();
+ String guestVmCidr = cmd.getGuestVmCidr();
+ Boolean displayNetwork = cmd.getDisplayNetwork();
+ String customId = cmd.getCustomId();
+ boolean updateInSequence = cmd.getUpdateInSequence();
+ boolean forced = cmd.getForced();
+
boolean restartNetwork = false;
// verify input parameters
@@ -2016,6 +2035,19 @@ public class NetworkServiceImpl extends ManagerBase
implements NetworkService {
_accountMgr.checkAccess(callerAccount, null, true, network);
+ if (cmd instanceof UpdateNetworkCmdByAdmin) {
+ final Boolean hideIpAddressUsage = ((UpdateNetworkCmdByAdmin)
cmd).getHideIpAddressUsage();
+ if (hideIpAddressUsage != null) {
+ final NetworkDetailVO detail =
_networkDetailsDao.findDetail(network.getId(), Network.hideIpAddressUsage);
+ if (detail != null) {
+ detail.setValue(hideIpAddressUsage.toString());
+ _networkDetailsDao.update(detail.getId(), detail);
+ } else {
+ _networkDetailsDao.persist(new
NetworkDetailVO(network.getId(), Network.hideIpAddressUsage,
hideIpAddressUsage.toString(), false));
+ }
+ }
+ }
+
if (name != null) {
network.setName(name);
}
diff --git a/server/src/test/java/com/cloud/vpc/MockNetworkManagerImpl.java
b/server/src/test/java/com/cloud/vpc/MockNetworkManagerImpl.java
index b3027f2..e99c2a8 100644
--- a/server/src/test/java/com/cloud/vpc/MockNetworkManagerImpl.java
+++ b/server/src/test/java/com/cloud/vpc/MockNetworkManagerImpl.java
@@ -24,9 +24,6 @@ import java.util.Map;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
import org.apache.cloudstack.api.command.admin.address.ReleasePodIpCmdByAdmin;
import
org.apache.cloudstack.api.command.admin.network.DedicateGuestVlanRangeCmd;
@@ -35,9 +32,12 @@ import
org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementors
import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd;
import org.apache.cloudstack.api.command.user.network.ListNetworksCmd;
import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd;
+import org.apache.cloudstack.api.command.user.network.UpdateNetworkCmd;
import org.apache.cloudstack.api.command.user.vm.ListNicsCmd;
import org.apache.cloudstack.api.response.AcquirePodIpCmdResponse;
import
org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
import com.cloud.deploy.DataCenterDeployment;
import com.cloud.deploy.DeployDestination;
@@ -250,12 +250,8 @@ public class MockNetworkManagerImpl extends ManagerBase
implements NetworkOrches
return null;
}
- /* (non-Javadoc)
- * @see com.cloud.network.NetworkService#updateGuestNetwork(long,
java.lang.String, java.lang.String, com.cloud.user.Account,
com.cloud.user.User, java.lang.String, java.lang.Long, java.lang.Boolean)
- */
@Override
- public Network updateGuestNetwork(long networkId, String name, String
displayText, Account callerAccount, User callerUser, String domainSuffix,
- Long networkOfferingId, Boolean changeCidr, String guestVmCidr,
Boolean displayNetwork, String newUUID,boolean updateInSequence, boolean
forced) {
+ public Network updateGuestNetwork(final UpdateNetworkCmd cmd) {
// TODO Auto-generated method stub
return null;
}
diff --git a/ui/l10n/en.js b/ui/l10n/en.js
index ca3d9cf..db26925 100644
--- a/ui/l10n/en.js
+++ b/ui/l10n/en.js
@@ -1177,6 +1177,7 @@ var dictionary = {
"label.network.device.type":"Network Device Type",
"label.network.domain":"Network Domain",
"label.network.domain.text":"Network domain",
+"label.network.hideipaddressusage":"Hide IP Address Usage",
"label.network.id":"Network ID",
"label.network.label.display.for.blank.value":"Use default gateway",
"label.network.limits":"Network limits",
diff --git a/ui/scripts/docs.js b/ui/scripts/docs.js
index 9a73746..aef5e77 100755
--- a/ui/scripts/docs.js
+++ b/ui/scripts/docs.js
@@ -506,6 +506,10 @@ cloudStack.docs = {
desc: 'If you want to assign a special domain name to this guest VM
network, specify the DNS suffix',
externalLink: ''
},
+ helpGuestNetworkHideIpAddressUsage: {
+ desc: 'If you want the IP address usage records hidden for the
network',
+ externalLink: ''
+ },
// Add host
helpHostZone: {
desc: 'The zone where you want to add the host',
diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js
index 995b841..1a389bb 100644
--- a/ui/scripts/sharedFunctions.js
+++ b/ui/scripts/sharedFunctions.js
@@ -704,7 +704,16 @@ var addGuestNetworkDialog = {
networkdomain: {
label: 'label.network.domain',
docID: 'helpGuestNetworkZoneNetworkDomain'
+ },
+
+ hideipaddressusage: {
+ label: 'label.network.hideipaddressusage',
+ dependsOn: ['zoneId', 'physicalNetworkId', 'scope'],
+ isBoolean: true,
+ isChecked: false,
+ docID: 'helpGuestNetworkHideIpAddressUsage'
}
+
}
},
@@ -795,6 +804,10 @@ var addGuestNetworkDialog = {
if (args.data.networkdomain != null &&
args.data.networkdomain.length > 0){
array1.push("&networkdomain=" +
encodeURIComponent(args.data.networkdomain));
}
+ if (args.data.hideipaddressusage != null &&
args.data.hideipaddressusage) {
+ array1.push("&hideipaddressusage=true")
+ }
+
$.ajax({
url: createURL("createNetwork" + array1.join("")),
dataType: "json",