Skip to content

Commit 8b2aae0

Browse files
author
Alena Prokharchyk
committed
CLOUDSTACK-3169: ipAssoc - set account id of the ip to the project account. Used to be set to the network owner which is System in Shared network case, and the further verification used to fail because of that
1 parent 388e80e commit 8b2aae0

1 file changed

Lines changed: 40 additions & 7 deletions

File tree

api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,42 @@
1616
// under the License.
1717
package org.apache.cloudstack.api.command.user.address;
1818

19+
import java.util.List;
20+
21+
import org.apache.cloudstack.api.APICommand;
22+
import org.apache.cloudstack.api.ApiConstants;
23+
import org.apache.cloudstack.api.ApiErrorCode;
24+
import org.apache.cloudstack.api.BaseAsyncCmd;
25+
import org.apache.cloudstack.api.BaseAsyncCreateCmd;
26+
import org.apache.cloudstack.api.BaseCmd;
27+
import org.apache.cloudstack.api.Parameter;
28+
import org.apache.cloudstack.api.ServerApiException;
29+
import org.apache.cloudstack.api.response.DomainResponse;
30+
import org.apache.cloudstack.api.response.IPAddressResponse;
31+
import org.apache.cloudstack.api.response.NetworkResponse;
32+
import org.apache.cloudstack.api.response.ProjectResponse;
33+
import org.apache.cloudstack.api.response.RegionResponse;
34+
import org.apache.cloudstack.api.response.VpcResponse;
35+
import org.apache.cloudstack.api.response.ZoneResponse;
36+
import org.apache.log4j.Logger;
37+
1938
import com.cloud.async.AsyncJob;
2039
import com.cloud.dc.DataCenter;
2140
import com.cloud.dc.DataCenter.NetworkType;
2241
import com.cloud.event.EventTypes;
23-
import com.cloud.exception.*;
42+
import com.cloud.exception.ConcurrentOperationException;
43+
import com.cloud.exception.InsufficientAddressCapacityException;
44+
import com.cloud.exception.InsufficientCapacityException;
45+
import com.cloud.exception.InvalidParameterValueException;
46+
import com.cloud.exception.PermissionDeniedException;
47+
import com.cloud.exception.ResourceAllocationException;
48+
import com.cloud.exception.ResourceUnavailableException;
2449
import com.cloud.network.IpAddress;
2550
import com.cloud.network.Network;
2651
import com.cloud.network.vpc.Vpc;
52+
import com.cloud.projects.Project;
2753
import com.cloud.user.Account;
2854
import com.cloud.user.UserContext;
29-
import org.apache.cloudstack.api.*;
30-
import org.apache.cloudstack.api.response.*;
31-
import org.apache.log4j.Logger;
32-
33-
import java.util.List;
3455

3556
@APICommand(name = "associateIpAddress", description="Acquires and associates a public IP to an account.", responseObject=IPAddressResponse.class)
3657
public class AssociateIPAddrCmd extends BaseAsyncCreateCmd {
@@ -175,7 +196,19 @@ public long getEntityOwnerId() {
175196
if (accountName != null && domainId != null) {
176197
Account account = _accountService.finalizeOwner(caller, accountName, domainId, projectId);
177198
return account.getId();
178-
} else if (networkId != null){
199+
} else if (projectId != null) {
200+
Project project = _projectService.getProject(projectId);
201+
if (project != null) {
202+
if (project.getState() == Project.State.Active) {
203+
return project.getProjectAccountId();
204+
} else {
205+
throw new PermissionDeniedException("Can't add resources to the project with specified projectId in state="
206+
+ project.getState() + " as it's no longer active");
207+
}
208+
} else {
209+
throw new InvalidParameterValueException("Unable to find project by id");
210+
}
211+
} else if (networkId != null){
179212
Network network = _networkService.getNetwork(networkId);
180213
return network.getAccountId();
181214
} else if (vpcId != null) {

0 commit comments

Comments
 (0)