diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java index 6c2e1a8ae32..91677cf47aa 100644 --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -313,7 +313,7 @@ public interface ResponseGenerator { NetworkOfferingResponse createNetworkOfferingResponse(NetworkOffering offering); - NetworkResponse createNetworkResponse(Network network); + NetworkResponse createNetworkResponse(ResponseView view, Network network); UserResponse createUserResponse(User user); @@ -374,7 +374,7 @@ public interface ResponseGenerator { * @param vpc * @return */ - VpcResponse createVpcResponse(Vpc vpc); + VpcResponse createVpcResponse(ResponseView view, Vpc vpc); /** * @param networkACLItem diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkCmdByAdmin.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkCmdByAdmin.java new file mode 100644 index 00000000000..c129d6ab51b --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkCmdByAdmin.java @@ -0,0 +1,66 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// 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.CreateNetworkCmd; +import org.apache.cloudstack.api.response.NetworkResponse; + +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.network.Network; + +@APICommand(name = "createNetwork", description = "Creates a network", responseObject = NetworkResponse.class, responseView = ResponseView.Full) +public class CreateNetworkCmdByAdmin extends CreateNetworkCmd { + public static final Logger s_logger = Logger.getLogger(CreateNetworkCmdByAdmin.class.getName()); + + @Parameter(name=ApiConstants.VLAN, type=CommandType.STRING, description="the ID or VID of the network") + private String vlan; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public String getVlan() { + return vlan; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + // an exception thrown by createNetwork() will be caught by the dispatcher. + public void execute() throws InsufficientCapacityException, ConcurrentOperationException, ResourceAllocationException{ + Network result = _networkService.createGuestNetwork(this); + if (result != null) { + NetworkResponse response = _responseGenerator.createNetworkResponse(ResponseView.Full, result); + response.setResponseName(getCommandName()); + setResponseObject(response); + }else { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create network"); + } + } +} diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworksCmdByAdmin.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworksCmdByAdmin.java new file mode 100644 index 00000000000..7363be9ec17 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworksCmdByAdmin.java @@ -0,0 +1,50 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.admin.network; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ResponseObject.ResponseView; +import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.NetworkResponse; + +import com.cloud.network.Network; + +@APICommand(name = "listNetworks", description = "Lists all available networks.", responseObject = NetworkResponse.class, responseView = ResponseView.Full) +public class ListNetworksCmdByAdmin extends ListNetworksCmd { + public static final Logger s_logger = Logger.getLogger(ListNetworksCmdByAdmin.class.getName()); + + @Override + public void execute(){ + List networks = _networkService.searchForNetworks(this); + ListResponse response = new ListResponse(); + List networkResponses = new ArrayList(); + for (Network network : networks) { + NetworkResponse networkResponse = _responseGenerator.createNetworkResponse(ResponseView.Full, network); + networkResponses.add(networkResponse); + } + + response.setResponses(networkResponses); + response.setResponseName(getCommandName()); + setResponseObject(response); + } +} diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkCmdByAdmin.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkCmdByAdmin.java new file mode 100644 index 00000000000..bd2a3706bbb --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkCmdByAdmin.java @@ -0,0 +1,63 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// 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.ApiErrorCode; +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 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) +public class UpdateNetworkCmdByAdmin extends UpdateNetworkCmd { + public static final Logger s_logger = Logger.getLogger(UpdateNetworkCmdByAdmin.class.getName()); + + + @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()); + + + if (result != null) { + NetworkResponse response = _responseGenerator.createNetworkResponse(ResponseView.Full, result); + response.setResponseName(getCommandName()); + setResponseObject(response); + } else { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update network"); + } + } + +} diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCCmdByAdmin.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCCmdByAdmin.java new file mode 100644 index 00000000000..f063cdbde44 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCCmdByAdmin.java @@ -0,0 +1,64 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.admin.vpc; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.ResponseObject.ResponseView; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.command.user.vpc.CreateVPCCmd; +import org.apache.cloudstack.api.response.VpcResponse; + +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.vpc.Vpc; + +@APICommand(name = "createVPC", description = "Creates a VPC", responseObject = VpcResponse.class, responseView = ResponseView.Full) +public class CreateVPCCmdByAdmin extends CreateVPCCmd { + public static final Logger s_logger = Logger.getLogger(CreateVPCCmdByAdmin.class.getName()); + + @Override + public void execute() { + Vpc vpc = null; + try { + if (_vpcService.startVpc(getEntityId(), true)) { + vpc = _entityMgr.findById(Vpc.class, getEntityId()); + } + } catch (ResourceUnavailableException ex) { + s_logger.warn("Exception: ", ex); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + } catch (ConcurrentOperationException ex) { + s_logger.warn("Exception: ", ex); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); + } catch (InsufficientCapacityException ex) { + s_logger.info(ex); + s_logger.trace(ex); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); + } + + if (vpc != null) { + VpcResponse response = _responseGenerator.createVpcResponse(ResponseView.Full, vpc); + response.setResponseName(getCommandName()); + setResponseObject(response); + } else { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create VPC"); + } + } +} diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/ListVPCsCmdByAdmin.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/ListVPCsCmdByAdmin.java new file mode 100644 index 00000000000..8ba954c7516 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/ListVPCsCmdByAdmin.java @@ -0,0 +1,55 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.admin.vpc; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ResponseObject.ResponseView; +import org.apache.cloudstack.api.command.user.vpc.ListVPCsCmd; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.VpcResponse; + +import com.cloud.network.vpc.Vpc; + + +@APICommand(name = "listVPCs", description = "Lists VPCs", responseObject = VpcResponse.class, responseView = ResponseView.Full) +public class ListVPCsCmdByAdmin extends ListVPCsCmd { + public static final Logger s_logger = Logger.getLogger(ListVPCsCmdByAdmin.class.getName()); + + @Override + public void execute() { + List vpcs = _vpcService.listVpcs(getId(), getVpcName(), getDisplayText(), + getSupportedServices(), getCidr(), getVpcOffId(), getState(), getAccountName(), getDomainId(), + getKeyword(), getStartIndex(), getPageSizeVal(), getZoneId(), isRecursive(), + listAll(), getRestartRequired(), getTags(), getProjectId()); + ListResponse response = new ListResponse(); + List offeringResponses = new ArrayList(); + for (Vpc vpc : vpcs) { + VpcResponse offeringResponse = _responseGenerator.createVpcResponse(ResponseView.Full, vpc); + offeringResponses.add(offeringResponse); + } + + response.setResponses(offeringResponses); + response.setResponseName(getCommandName()); + setResponseObject(response); + } + +} diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCCmdByAdmin.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCCmdByAdmin.java new file mode 100644 index 00000000000..a0e80210874 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCCmdByAdmin.java @@ -0,0 +1,47 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.admin.vpc; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.ResponseObject.ResponseView; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.command.user.vpc.UpdateVPCCmd; +import org.apache.cloudstack.api.response.VpcResponse; + +import com.cloud.network.vpc.Vpc; + +@APICommand(name = "updateVPC", description = "Updates a VPC", responseObject = VpcResponse.class, responseView = ResponseView.Full) +public class UpdateVPCCmdByAdmin extends UpdateVPCCmd { + public static final Logger s_logger = Logger.getLogger(UpdateVPCCmdByAdmin.class.getName()); + + @Override + public void execute(){ + Vpc result = _vpcService.updateVpc(getId(), getVpcName(), getDisplayText()); + if (result != null) { + VpcResponse response = _responseGenerator.createVpcResponse(ResponseView.Full, result); + response.setResponseName(getCommandName()); + setResponseObject(response); + } else { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update VPC"); + } + } + + +} diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java index 5ce0000bd16..ad196f2201c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ResponseObject.ResponseView; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.NetworkACLResponse; @@ -42,7 +43,7 @@ import com.cloud.network.Network; import com.cloud.network.Network.GuestType; import com.cloud.offering.NetworkOffering; -@APICommand(name = "createNetwork", description="Creates a network", responseObject=NetworkResponse.class) +@APICommand(name = "createNetwork", description = "Creates a network", responseObject = NetworkResponse.class, responseView = ResponseView.Restricted) public class CreateNetworkCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateNetworkCmd.class.getName()); @@ -85,9 +86,6 @@ public class CreateNetworkCmd extends BaseCmd { " range. If not specified, will be defaulted to startIP") private String endIp; - @Parameter(name=ApiConstants.VLAN, type=CommandType.STRING, description="the ID or VID of the network") - private String vlan; - @Parameter(name=ApiConstants.ISOLATED_PVLAN, type=CommandType.STRING, description="the isolated private vlan for this network") private String isolatedPvlan; @@ -148,10 +146,6 @@ public class CreateNetworkCmd extends BaseCmd { return gateway; } - public String getVlan() { - return vlan; - } - public String getIsolatedPvlan() { return isolatedPvlan; } @@ -293,7 +287,7 @@ public class CreateNetworkCmd extends BaseCmd { public void execute() throws InsufficientCapacityException, ConcurrentOperationException, ResourceAllocationException{ Network result = _networkService.createGuestNetwork(this); if (result != null) { - NetworkResponse response = _responseGenerator.createNetworkResponse(result); + NetworkResponse response = _responseGenerator.createNetworkResponse(ResponseView.Restricted, result); response.setResponseName(getCommandName()); setResponseObject(response); }else { diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java index afce0926e4d..755b751eeef 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java @@ -19,20 +19,22 @@ package org.apache.cloudstack.api.command.user.network; import java.util.ArrayList; import java.util.List; +import org.apache.log4j.Logger; + import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ResponseObject.ResponseView; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.NetworkResponse; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.cloudstack.api.response.VpcResponse; import org.apache.cloudstack.api.response.ZoneResponse; -import org.apache.log4j.Logger; import com.cloud.network.Network; -@APICommand(name = "listNetworks", description="Lists all available networks.", responseObject=NetworkResponse.class) +@APICommand(name = "listNetworks", description = "Lists all available networks.", responseObject = NetworkResponse.class, responseView = ResponseView.Restricted) public class ListNetworksCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListNetworksCmd.class.getName()); private static final String _name = "listnetworksresponse"; @@ -154,12 +156,12 @@ public class ListNetworksCmd extends BaseListTaggedResourcesCmd { ListResponse response = new ListResponse(); List networkResponses = new ArrayList(); for (Network network : networks) { - NetworkResponse networkResponse = _responseGenerator.createNetworkResponse(network); + NetworkResponse networkResponse = _responseGenerator.createNetworkResponse(ResponseView.Restricted, network); networkResponses.add(networkResponse); } response.setResponses(networkResponses); response.setResponseName(getCommandName()); - this.setResponseObject(response); + setResponseObject(response); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java index a44b76828fb..a08b931bb9e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java @@ -16,18 +16,19 @@ // under the License. package org.apache.cloudstack.api.command.user.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.BaseAsyncCmd; import org.apache.cloudstack.api.Parameter; +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; import com.cloud.exception.InsufficientCapacityException; @@ -37,7 +38,7 @@ 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) +@APICommand(name = "updateNetwork", description = "Updates a network", responseObject = NetworkResponse.class, responseView = ResponseView.Restricted) public class UpdateNetworkCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateNetworkCmd.class.getName()); @@ -48,7 +49,7 @@ public class UpdateNetworkCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = NetworkResponse.class, required=true, description="the ID of the network") - private Long id; + protected Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the new name for the network") private String name; @@ -88,11 +89,11 @@ public class UpdateNetworkCmd extends BaseAsyncCmd { return displayText; } - private String getNetworkDomain() { + public String getNetworkDomain() { return networkDomain; } - private Long getNetworkOfferingId() { + public Long getNetworkOfferingId() { return networkOfferingId; } @@ -103,7 +104,7 @@ public class UpdateNetworkCmd extends BaseAsyncCmd { return false; } - private String getGuestVmCidr() { + public String getGuestVmCidr() { return guestVmCidr; } @@ -143,9 +144,9 @@ public class UpdateNetworkCmd extends BaseAsyncCmd { if (result != null) { - NetworkResponse response = _responseGenerator.createNetworkResponse(result); + NetworkResponse response = _responseGenerator.createNetworkResponse(ResponseView.Full, result); response.setResponseName(getCommandName()); - this.setResponseObject(response); + setResponseObject(response); } else { throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update network"); } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java index 6e86ba086d6..89bd3b3e599 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ResponseObject.ResponseView; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ProjectResponse; @@ -38,7 +39,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.vpc.Vpc; -@APICommand(name = "createVPC", description="Creates a VPC", responseObject=VpcResponse.class) +@APICommand(name = "createVPC", description = "Creates a VPC", responseObject = VpcResponse.class, responseView = ResponseView.Restricted) public class CreateVPCCmd extends BaseAsyncCreateCmd{ public static final Logger s_logger = Logger.getLogger(CreateVPCCmd.class.getName()); private static final String s_name = "createvpcresponse"; @@ -151,7 +152,7 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{ } if (vpc != null) { - VpcResponse response = _responseGenerator.createVpcResponse(vpc); + VpcResponse response = _responseGenerator.createVpcResponse(ResponseView.Restricted, vpc); response.setResponseName(getCommandName()); setResponseObject(response); } else { diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java index b6bc68f9f4e..766ab8ae0f1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java @@ -19,21 +19,22 @@ package org.apache.cloudstack.api.command.user.vpc; import java.util.ArrayList; import java.util.List; +import org.apache.log4j.Logger; + import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.ResponseObject.ResponseView; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.VpcOfferingResponse; import org.apache.cloudstack.api.response.VpcResponse; import org.apache.cloudstack.api.response.ZoneResponse; -import org.apache.log4j.Logger; import com.cloud.network.vpc.Vpc; -@APICommand(name = "listVPCs", description="Lists VPCs", responseObject=VpcResponse.class) +@APICommand(name = "listVPCs", description = "Lists VPCs", responseObject = VpcResponse.class, responseView = ResponseView.Restricted) public class ListVPCsCmd extends BaseListTaggedResourcesCmd{ public static final Logger s_logger = Logger.getLogger(ListVPCsCmd.class.getName()); private static final String s_name = "listvpcsresponse"; @@ -122,18 +123,18 @@ public class ListVPCsCmd extends BaseListTaggedResourcesCmd{ public void execute() { List vpcs = _vpcService.listVpcs(getId(), getVpcName(), getDisplayText(), getSupportedServices(), getCidr(), getVpcOffId(), getState(), getAccountName(), getDomainId(), - this.getKeyword(), this.getStartIndex(), this.getPageSizeVal(), getZoneId(), this.isRecursive(), - this.listAll(), getRestartRequired(), getTags(), getProjectId()); + getKeyword(), getStartIndex(), getPageSizeVal(), getZoneId(), isRecursive(), + listAll(), getRestartRequired(), getTags(), getProjectId()); ListResponse response = new ListResponse(); List offeringResponses = new ArrayList(); for (Vpc vpc : vpcs) { - VpcResponse offeringResponse = _responseGenerator.createVpcResponse(vpc); + VpcResponse offeringResponse = _responseGenerator.createVpcResponse(ResponseView.Restricted, vpc); offeringResponses.add(offeringResponse); } response.setResponses(offeringResponses); response.setResponseName(getCommandName()); - this.setResponseObject(response); + setResponseObject(response); } @Override diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java index 588333efff0..54e9ad6b8f2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java @@ -16,20 +16,22 @@ // under the License. package org.apache.cloudstack.api.command.user.vpc; +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.BaseAsyncCmd; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ResponseObject.ResponseView; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.VpcResponse; -import org.apache.log4j.Logger; import com.cloud.event.EventTypes; import com.cloud.network.vpc.Vpc; import com.cloud.user.Account; -@APICommand(name = "updateVPC", description="Updates a VPC", responseObject=VpcResponse.class) +@APICommand(name = "updateVPC", description = "Updates a VPC", responseObject = VpcResponse.class, responseView = ResponseView.Restricted) public class UpdateVPCCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(UpdateVPCCmd.class.getName()); private static final String _name = "updatevpcresponse"; @@ -88,9 +90,9 @@ public class UpdateVPCCmd extends BaseAsyncCmd{ public void execute(){ Vpc result = _vpcService.updateVpc(getId(), getVpcName(), getDisplayText()); if (result != null) { - VpcResponse response = _responseGenerator.createVpcResponse(result); + VpcResponse response = _responseGenerator.createVpcResponse(ResponseView.Restricted, result); response.setResponseName(getCommandName()); - this.setResponseObject(response); + setResponseObject(response); } else { throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update VPC"); } diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java index ca2c2fe2f2d..001a0e18acc 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java @@ -24,15 +24,16 @@ import javax.inject.Inject; 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.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ResponseObject.ResponseView; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.NetworkResponse; + import com.cloud.api.response.F5LoadBalancerResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -79,14 +80,14 @@ public class ListF5LoadBalancerNetworksCmd extends BaseListCmd { if (networks != null && !networks.isEmpty()) { for (Network network : networks) { - NetworkResponse networkResponse = _responseGenerator.createNetworkResponse(network); + NetworkResponse networkResponse = _responseGenerator.createNetworkResponse(ResponseView.Full, network); networkResponses.add(networkResponse); } } response.setResponses(networkResponses); response.setResponseName(getCommandName()); - this.setResponseObject(response); + setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java index 72caf09f39c..6a853b266a4 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java @@ -11,7 +11,7 @@ // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.api.commands; @@ -21,12 +21,18 @@ import java.util.List; import javax.inject.Inject; -import org.apache.cloudstack.api.*; 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.BaseListCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ResponseObject.ResponseView; +import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.NetworkResponse; + import com.cloud.api.response.SrxFirewallResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -73,14 +79,14 @@ public class ListSrxFirewallNetworksCmd extends BaseListCmd { if (networks != null && !networks.isEmpty()) { for (Network network : networks) { - NetworkResponse networkResponse = _responseGenerator.createNetworkResponse(network); + NetworkResponse networkResponse = _responseGenerator.createNetworkResponse(ResponseView.Full, network); networkResponses.add(networkResponse); } } response.setResponses(networkResponses); response.setResponseName(getCommandName()); - this.setResponseObject(response); + setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java index f182b4e3f1f..a93e3116acb 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java @@ -21,15 +21,16 @@ import javax.inject.Inject; 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.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ResponseObject.ResponseView; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.NetworkResponse; + import com.cloud.api.response.NetscalerLoadBalancerResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -76,14 +77,14 @@ public class ListNetscalerLoadBalancerNetworksCmd extends BaseListCmd { if (networks != null && !networks.isEmpty()) { for (Network network : networks) { - NetworkResponse networkResponse = _responseGenerator.createNetworkResponse(network); + NetworkResponse networkResponse = _responseGenerator.createNetworkResponse(ResponseView.Full, network); networkResponses.add(networkResponse); } } response.setResponses(networkResponses); response.setResponseName(getCommandName()); - this.setResponseObject(response); + setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java index 53203a7cfdf..e1e5988734a 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java @@ -28,6 +28,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ResponseObject.ResponseView; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.NetworkResponse; @@ -78,7 +79,7 @@ public class ListNiciraNvpDeviceNetworksCmd extends BaseListCmd { if (networks != null && !networks.isEmpty()) { for (Network network : networks) { - NetworkResponse networkResponse = _responseGenerator.createNetworkResponse(network); + NetworkResponse networkResponse = _responseGenerator.createNetworkResponse(ResponseView.Full, network); networkResponses.add(networkResponse); } } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index d91ed3866df..2aacb78e46a 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -2144,7 +2144,7 @@ public class ApiResponseHelper implements ResponseGenerator { } @Override - public NetworkResponse createNetworkResponse(Network network) { + public NetworkResponse createNetworkResponse(ResponseView view, Network network) { // need to get network profile in order to retrieve dns information from // there NetworkProfile profile = ApiDBUtils.getNetworkProfile(network.getId()); @@ -2214,20 +2214,18 @@ public class ApiResponseHelper implements ResponseGenerator { response.setReservedIpRange(reservation); // return vlan information only to Root admin - if (network.getBroadcastUri() != null - && _accountMgr.isRootAdmin(CallContext.current().getCallingAccount().getId())) { + if (network.getBroadcastUri() != null && view == ResponseView.Full) { String broadcastUri = network.getBroadcastUri().toString(); response.setBroadcastUri(broadcastUri); String vlan = "N/A"; - switch (BroadcastDomainType.getSchemeValue(network.getBroadcastUri())){ - case Vlan: - case Vxlan: + switch (BroadcastDomainType.getSchemeValue(network.getBroadcastUri())) { + case Vlan: + case Vxlan: vlan = BroadcastDomainType.getValue(network.getBroadcastUri()); - break; + break; } // return vlan information only to Root admin response.setVlan(vlan); - } DataCenter zone = ApiDBUtils.findZoneById(network.getDataCenterId()); @@ -2915,7 +2913,7 @@ public class ApiResponseHelper implements ResponseGenerator { } @Override - public VpcResponse createVpcResponse(Vpc vpc) { + public VpcResponse createVpcResponse(ResponseView view, Vpc vpc) { VpcResponse response = new VpcResponse(); response.setId(vpc.getUuid()); response.setName(vpc.getName()); @@ -2954,7 +2952,7 @@ public class ApiResponseHelper implements ResponseGenerator { List networkResponses = new ArrayList(); List networks = ApiDBUtils.listVpcNetworks(vpc.getId()); for (Network network : networks) { - NetworkResponse ntwkRsp = createNetworkResponse(network); + NetworkResponse ntwkRsp = createNetworkResponse(view, network); networkResponses.add(ntwkRsp); } diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java index 14ed6e2792e..b4f26c782a9 100755 --- a/server/src/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/com/cloud/network/NetworkServiceImpl.java @@ -41,8 +41,10 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; import org.apache.log4j.Logger; + import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.acl.SecurityChecker.AccessType; +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.usage.ListTrafficTypeImplementorsCmd; @@ -158,13 +160,13 @@ import com.cloud.utils.db.Filter; import com.cloud.utils.db.JoinBuilder; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.SearchCriteria.Op; +import com.cloud.utils.db.Transaction; import com.cloud.utils.db.TransactionCallback; import com.cloud.utils.db.TransactionCallbackNoReturn; import com.cloud.utils.db.TransactionCallbackWithException; import com.cloud.utils.db.TransactionLegacy; import com.cloud.utils.db.TransactionStatus; -import com.cloud.utils.db.SearchCriteria.Op; -import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.exception.ExceptionUtil; import com.cloud.utils.net.NetUtils; @@ -988,7 +990,10 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { String endIP = cmd.getEndIp(); String netmask = cmd.getNetmask(); String networkDomain = cmd.getNetworkDomain(); - String vlanId = cmd.getVlan(); + String vlanId = null; + if (cmd instanceof CreateNetworkCmdByAdmin) { + vlanId = ((CreateNetworkCmdByAdmin)cmd).getVlan(); + } String name = cmd.getNetworkName(); String displayText = cmd.getDisplayText(); Account caller = CallContext.current().getCallingAccount(); @@ -3912,7 +3917,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { throw new InvalidParameterValueException("unsupported type of broadcastUri specified: " + broadcastUriString); } - final NetworkOfferingVO ntwkOffFinal = ntwkOff; + final NetworkOfferingVO ntwkOffFinal = ntwkOff; try { return Transaction.execute(new TransactionCallbackWithException() { @Override @@ -4005,7 +4010,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { @Inject public void setNetworkGurus(List networkGurus) { - this._networkGurus = networkGurus; + _networkGurus = networkGurus; } }