You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ki...@apache.org on 2013/01/28 13:22:51 UTC
[40/50] [abbrv] Apply API refactoring changes. Make changes to
Regions API to work with new code
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/server/src/com/cloud/api/ApiResponseHelper.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/api/ApiResponseHelper.java
index 6b84ac0,1965f33..cae27bd
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@@ -29,87 -29,111 +29,186 @@@ import java.util.Map
import java.util.Set;
import java.util.StringTokenizer;
+ import org.apache.cloudstack.api.BaseCmd;
+ import org.apache.cloudstack.api.ResponseGenerator;
import org.apache.log4j.Logger;
- import com.cloud.acl.ControlledEntity;
- import com.cloud.acl.ControlledEntity.ACLType;
- import com.cloud.api.ApiConstants.HostDetails;
- import com.cloud.api.ApiConstants.VMDetails;
- import com.cloud.api.commands.QueryAsyncJobResultCmd;
- import com.cloud.api.response.AccountResponse;
+ import org.apache.cloudstack.acl.ControlledEntity;
+ import org.apache.cloudstack.acl.ControlledEntity.ACLType;
+ import org.apache.cloudstack.api.ApiConstants.HostDetails;
+ import org.apache.cloudstack.api.ApiConstants.VMDetails;
+ import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd;
+ import org.apache.cloudstack.api.response.AccountResponse;
+
+ import com.cloud.api.query.ViewResponseHelper;
+ import com.cloud.api.query.vo.AccountJoinVO;
+ import com.cloud.api.query.vo.AsyncJobJoinVO;
+ import com.cloud.api.query.vo.ControlledViewEntity;
+ import com.cloud.api.query.vo.DiskOfferingJoinVO;
+ import com.cloud.api.query.vo.DomainRouterJoinVO;
+ import com.cloud.api.query.vo.EventJoinVO;
+ import com.cloud.api.query.vo.HostJoinVO;
+ import com.cloud.api.query.vo.InstanceGroupJoinVO;
+ import com.cloud.api.query.vo.ProjectAccountJoinVO;
+ import com.cloud.api.query.vo.ProjectInvitationJoinVO;
+ import com.cloud.api.query.vo.ProjectJoinVO;
+ import com.cloud.api.query.vo.ResourceTagJoinVO;
+ import com.cloud.api.query.vo.SecurityGroupJoinVO;
+ import com.cloud.api.query.vo.ServiceOfferingJoinVO;
+ import com.cloud.api.query.vo.StoragePoolJoinVO;
+ import com.cloud.api.query.vo.UserAccountJoinVO;
+ import com.cloud.api.query.vo.UserVmJoinVO;
+ import com.cloud.api.query.vo.VolumeJoinVO;
import com.cloud.api.response.ApiResponseSerializer;
++<<<<<<< HEAD
+import com.cloud.api.response.AsyncJobResponse;
+import com.cloud.api.response.CapabilityResponse;
+import com.cloud.api.response.CapacityResponse;
+import com.cloud.api.response.ClusterResponse;
+import com.cloud.api.response.ConfigurationResponse;
+import com.cloud.api.response.ControlledEntityResponse;
+import com.cloud.api.response.CreateCmdResponse;
+import com.cloud.api.response.DiskOfferingResponse;
+import com.cloud.api.response.DomainResponse;
+import com.cloud.api.response.DomainRouterResponse;
+import com.cloud.api.response.EventResponse;
+import com.cloud.api.response.ExtractResponse;
+import com.cloud.api.response.FindAccountResponse;
+import com.cloud.api.response.FindDomainResponse;
+import com.cloud.api.response.FindUserResponse;
+import com.cloud.api.response.FirewallResponse;
+import com.cloud.api.response.FirewallRuleResponse;
+import com.cloud.api.response.HostResponse;
+import com.cloud.api.response.HypervisorCapabilitiesResponse;
+import com.cloud.api.response.IPAddressResponse;
+import com.cloud.api.response.InstanceGroupResponse;
+import com.cloud.api.response.IpForwardingRuleResponse;
+import com.cloud.api.response.LBStickinessPolicyResponse;
+import com.cloud.api.response.LBStickinessResponse;
+import com.cloud.api.response.LDAPConfigResponse;
+import com.cloud.api.response.ListResponse;
+import com.cloud.api.response.LoadBalancerResponse;
+import com.cloud.api.response.NetworkACLResponse;
+import com.cloud.api.response.NetworkOfferingResponse;
+import com.cloud.api.response.NetworkResponse;
+import com.cloud.api.response.NicResponse;
+import com.cloud.api.response.PhysicalNetworkResponse;
+import com.cloud.api.response.PodResponse;
+import com.cloud.api.response.PrivateGatewayResponse;
+import com.cloud.api.response.ProjectAccountResponse;
+import com.cloud.api.response.ProjectInvitationResponse;
+import com.cloud.api.response.ProjectResponse;
+import com.cloud.api.response.ProviderResponse;
+import com.cloud.api.response.RegionResponse;
+import com.cloud.api.response.RemoteAccessVpnResponse;
+import com.cloud.api.response.ResourceCountResponse;
+import com.cloud.api.response.ResourceLimitResponse;
+import com.cloud.api.response.ResourceTagResponse;
+import com.cloud.api.response.SecurityGroupResponse;
+import com.cloud.api.response.SecurityGroupResultObject;
+import com.cloud.api.response.SecurityGroupRuleResponse;
+import com.cloud.api.response.SecurityGroupRuleResultObject;
+import com.cloud.api.response.ServiceOfferingResponse;
+import com.cloud.api.response.ServiceResponse;
+import com.cloud.api.response.Site2SiteCustomerGatewayResponse;
+import com.cloud.api.response.Site2SiteVpnConnectionResponse;
+import com.cloud.api.response.Site2SiteVpnGatewayResponse;
+import com.cloud.api.response.SnapshotPolicyResponse;
+import com.cloud.api.response.SnapshotResponse;
+import com.cloud.api.response.StaticRouteResponse;
+import com.cloud.api.response.StorageNetworkIpRangeResponse;
+import com.cloud.api.response.StoragePoolResponse;
+import com.cloud.api.response.SwiftResponse;
+import com.cloud.api.response.SystemVmInstanceResponse;
+import com.cloud.api.response.SystemVmResponse;
+import com.cloud.api.response.TemplatePermissionsResponse;
+import com.cloud.api.response.TemplateResponse;
+import com.cloud.api.response.TrafficTypeResponse;
+import com.cloud.api.response.UserResponse;
+import com.cloud.api.response.UserVmResponse;
+import com.cloud.api.response.VirtualRouterProviderResponse;
+import com.cloud.api.response.VlanIpRangeResponse;
+import com.cloud.api.response.VolumeResponse;
+import com.cloud.api.response.VpcOfferingResponse;
+import com.cloud.api.response.VpcResponse;
+import com.cloud.api.response.VpnUsersResponse;
+import com.cloud.api.response.ZoneResponse;
++=======
+ 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.CounterResponse;
+ import org.apache.cloudstack.api.response.CreateCmdResponse;
+ 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.GuestOSResponse;
+ import org.apache.cloudstack.api.response.HostResponse;
+ import org.apache.cloudstack.api.response.HypervisorCapabilitiesResponse;
+ import org.apache.cloudstack.api.response.ControlledViewEntityResponse;
+ import org.apache.cloudstack.api.response.IPAddressResponse;
+ import org.apache.cloudstack.api.response.InstanceGroupResponse;
+ import org.apache.cloudstack.api.response.IpForwardingRuleResponse;
+ import org.apache.cloudstack.api.response.LBStickinessPolicyResponse;
+ import org.apache.cloudstack.api.response.LBStickinessResponse;
+ import org.apache.cloudstack.api.response.LDAPConfigResponse;
+ import org.apache.cloudstack.api.response.LoadBalancerResponse;
+ 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.PhysicalNetworkResponse;
+ import org.apache.cloudstack.api.response.PodResponse;
+ 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.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.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.SwiftResponse;
+ 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.TrafficTypeResponse;
+ import org.apache.cloudstack.api.response.UserResponse;
+ import org.apache.cloudstack.api.response.UserVmResponse;
+ 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.api.response.S3Response;
++>>>>>>> master
import com.cloud.async.AsyncJob;
import com.cloud.capacity.Capacity;
import com.cloud.capacity.CapacityVO;
@@@ -200,10 -226,9 +302,10 @@@ import com.cloud.storage.VMTemplateVO
import com.cloud.storage.Volume;
import com.cloud.storage.VolumeVO;
import com.cloud.storage.snapshot.SnapshotPolicy;
+ import com.cloud.storage.snapshot.SnapshotSchedule;
import com.cloud.template.VirtualMachineTemplate;
- import com.cloud.test.PodZoneConfig;
import com.cloud.user.Account;
+import com.cloud.user.AccountVO;
import com.cloud.user.User;
import com.cloud.user.UserAccount;
import com.cloud.user.UserContext;
@@@ -3654,21 -2751,6 +2828,24 @@@ public class ApiResponseHelper implemen
response.setObjectName("storagenetworkiprange");
return response;
}
++<<<<<<< HEAD
+
+ @Override
+ public Long getIdentiyId(String tableName, String token) {
+ return ApiDispatcher.getIdentiyId(tableName, token);
+ }
+
+ @Override
+ public RegionResponse createRegionResponse(Region region) {
+ RegionResponse response = new RegionResponse();
+ response.setId(region.getId());
+ response.setName(region.getName());
+ response.setEndPoint(region.getEndPoint());
+ response.setObjectName("region");
+ return response;
+ }
++=======
++>>>>>>> master
@Override
public ResourceTagResponse createResourceTagResponse(ResourceTag resourceTag, boolean keyValueOnly) {
@@@ -3931,55 -3130,46 +3225,100 @@@
response.setObjectName("vpnconnection");
return response;
}
++<<<<<<< HEAD
+
+ @Override
+ public FindUserResponse createFindUserResponse(User user) {
+ FindUserResponse userResponse = new FindUserResponse();
+ userResponse.setId(user.getId());
+ userResponse.setUsername(user.getUsername());
+ userResponse.setPassword(user.getPassword());
+ userResponse.setFirstname(user.getFirstname());
+ userResponse.setLastname(user.getLastname());
+ userResponse.setAccountId(user.getAccountId());
+ userResponse.setEmail(user.getEmail());
+ userResponse.setState(user.getState().toString());
+ userResponse.setApiKey(user.getApiKey());
+ userResponse.setSecretKey(user.getSecretKey());
+ userResponse.setCreated(user.getCreated());
+ userResponse.setTimezone(user.getTimezone());
+ userResponse.setRegistrationToken(user.getRegistrationToken());
+ userResponse.setRegistered(user.isRegistered());
+ userResponse.setRegionId(user.getRegionId());
+ userResponse.setObjectName("user");
+
+ return userResponse;
+ }
+
+ @Override
+ public FindAccountResponse createFindAccountResponse(Account account) {
+ FindAccountResponse accountResponse = new FindAccountResponse();
+ accountResponse.setId(account.getId());
+ accountResponse.setName(account.getAccountName());
+ accountResponse.setAccountType(account.getType());
+ accountResponse.setDefaultZone(account.getDefaultZoneId());
+ accountResponse.setDomainId(account.getDomainId());
+ accountResponse.setRegionId(account.getRegionId());
+ accountResponse.setState(account.getState().toString());
+ accountResponse.setObjectName("account");
+ return accountResponse;
+ }
+
+ @Override
+ public FindDomainResponse createFindDomainResponse(Domain domain) {
+ FindDomainResponse domainResponse = new FindDomainResponse();
+ domainResponse.setDomainName(domain.getName());
+ domainResponse.setId(domain.getId());
+ domainResponse.setLevel(domain.getLevel());
+ domainResponse.setNetworkDomain(domain.getNetworkDomain());
+ domainResponse.setParent(domain.getParent());
+ domainResponse.setPath(domain.getPath());
+ domainResponse.setObjectName("domain");
+ domainResponse.setRegionId(domain.getRegionId());
+ return domainResponse;
+ }
++=======
+
+
+
+ @Override
+ public GuestOSResponse createGuestOSResponse(GuestOS guestOS) {
+ GuestOSResponse response = new GuestOSResponse();
+ response.setDescription(guestOS.getDisplayName());
+ response.setId(guestOS.getUuid());
+ GuestOSCategoryVO category = ApiDBUtils.findGuestOsCategoryById(guestOS.getCategoryId());
+ if ( category != null ){
+ response.setOsCategoryId(category.getUuid());
+ }
+
+ response.setObjectName("ostype");
+ return response;
+ }
+
+
+
+ @Override
+ public SnapshotScheduleResponse createSnapshotScheduleResponse(SnapshotSchedule snapshotSchedule) {
+ SnapshotScheduleResponse response = new SnapshotScheduleResponse();
+ response.setId(snapshotSchedule.getUuid());
+ if (snapshotSchedule.getVolumeId() != null) {
+ Volume vol = ApiDBUtils.findVolumeById(snapshotSchedule.getVolumeId());
+ if (vol != null) {
+ response.setVolumeId(vol.getUuid());
+ }
+ }
+ if (snapshotSchedule.getPolicyId() != null) {
+ SnapshotPolicy policy = ApiDBUtils.findSnapshotPolicyById(snapshotSchedule.getPolicyId());
+ if (policy != null) {
+ response.setSnapshotPolicyId(policy.getUuid());
+ }
+ }
+ response.setScheduled(snapshotSchedule.getScheduledTimestamp());
+
+ response.setObjectName("snapshot");
+ return response;
+ }
+
+
++>>>>>>> master
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/server/src/com/cloud/api/ApiServer.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/api/ApiServer.java
index 50c0125,ad2a12f..93089a1
--- a/server/src/com/cloud/api/ApiServer.java
+++ b/server/src/com/cloud/api/ApiServer.java
@@@ -94,10 -116,14 +116,15 @@@ import com.cloud.configuration.dao.Conf
import com.cloud.domain.Domain;
import com.cloud.domain.DomainVO;
import com.cloud.event.EventUtils;
+ import com.cloud.exception.AccountLimitException;
import com.cloud.exception.CloudAuthenticationException;
+ import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.exception.PermissionDeniedException;
+import com.cloud.region.RegionManager;
+ import com.cloud.exception.RequestLimitException;
+ import com.cloud.exception.ResourceAllocationException;
+ import com.cloud.exception.ResourceUnavailableException;
import com.cloud.server.ManagementServer;
import com.cloud.user.Account;
import com.cloud.user.AccountManager;
@@@ -121,31 -146,25 +147,27 @@@ public class ApiServer implements HttpR
private static final Logger s_logger = Logger.getLogger(ApiServer.class.getName());
private static final Logger s_accessLogger = Logger.getLogger("apiserver." + ApiServer.class.getName());
- public static final short ADMIN_COMMAND = 1;
- public static final short DOMAIN_ADMIN_COMMAND = 4;
- public static final short RESOURCE_DOMAIN_ADMIN_COMMAND = 2;
- public static final short USER_COMMAND = 8;
public static boolean encodeApiResponse = false;
public static String jsonContentType = "text/javascript";
- private Properties _apiCommands = null;
private ApiDispatcher _dispatcher;
- private AccountManager _accountMgr = null;
- private DomainManager _domainMgr = null;
- private AsyncJobManager _asyncMgr = null;
+
+ @Inject private AccountManager _accountMgr = null;
+ @Inject private DomainManager _domainMgr = null;
+ @Inject private AsyncJobManager _asyncMgr = null;
+
+ @Inject(adapter = APILimitChecker.class)
+ protected Adapters<APILimitChecker> _apiLimitCheckers;
+ @Inject(adapter = APIChecker.class)
+ protected Adapters<APIChecker> _apiAccessCheckers;
+
private Account _systemAccount = null;
private User _systemUser = null;
+ private RegionManager _regionMgr = null;
+
private static int _workerCount = 0;
-
private static ApiServer s_instance = null;
- private static List<String> s_userCommands = null;
- private static List<String> s_resellerCommands = null; // AKA domain-admin
- private static List<String> s_adminCommands = null;
- private static List<String> s_resourceDomainAdminCommands = null;
- private static List<String> s_allCommands = null;
- private static List<String> s_pluggableServiceCommands = null;
private static final DateFormat _dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
+ private static Map<String, Class<?>> _apiNameCmdClassMap = new HashMap<String, Class<?>>();
private static ExecutorService _executor = new ThreadPoolExecutor(10, 150, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), new NamedThreadFactory("ApiServer"));
@@@ -270,17 -194,9 +197,11 @@@
_systemAccount = _accountMgr.getSystemAccount();
_systemUser = _accountMgr.getSystemUser();
_dispatcher = ApiDispatcher.getInstance();
- _domainMgr = locator.getManager(DomainManager.class);
- _regionMgr = locator.getManager(RegionManager.class);
++ _domainMgr = ComponentLocator.inject(DomainManager.class);
++ _regionMgr = ComponentLocator.inject(RegionManager.class);
Integer apiPort = null; // api port, null by default
+ ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);
ConfigurationDao configDao = locator.getDao(ConfigurationDao.class);
SearchCriteria<ConfigurationVO> sc = configDao.createSearchCriteria();
sc.addAnd("name", SearchCriteria.Op.EQ, "integration.api.port");
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/server/src/com/cloud/configuration/DefaultComponentLibrary.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/server/src/com/cloud/domain/DomainVO.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/server/src/com/cloud/projects/ProjectManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/projects/ProjectManagerImpl.java
index daf185f,15d3675..f65627e
--- a/server/src/com/cloud/projects/ProjectManagerImpl.java
+++ b/server/src/com/cloud/projects/ProjectManagerImpl.java
@@@ -206,14 -205,14 +205,14 @@@ public class ProjectManagerImpl impleme
//Create an account associated with the project
StringBuilder acctNm = new StringBuilder("PrjAcct-");
acctNm.append(name).append("-").append(owner.getDomainId());
-
- Account projectAccount = _accountMgr.createAccount(acctNm.toString(), Account.ACCOUNT_TYPE_PROJECT, domainId, null, null);
-
+
+ Account projectAccount = _accountMgr.createAccount(acctNm.toString(), Account.ACCOUNT_TYPE_PROJECT, domainId, null, null, "", 0);
+
Project project = _projectDao.persist(new ProjectVO(name, displayText, owner.getDomainId(), projectAccount.getId()));
-
+
//assign owner to the project
assignAccountToProject(project, owner.getId(), ProjectAccount.Role.Admin);
-
+
if (project != null) {
UserContext.current().setEventDetails("Project id=" + project.getId());
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/server/src/com/cloud/server/ConfigurationServerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/server/ConfigurationServerImpl.java
index 43fe57a,b0abd04..a63ad19
--- a/server/src/com/cloud/server/ConfigurationServerImpl.java
+++ b/server/src/com/cloud/server/ConfigurationServerImpl.java
@@@ -105,8 -70,21 +72,23 @@@ import com.cloud.utils.db.Transaction
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.net.NetUtils;
import com.cloud.utils.script.Script;
+import com.cloud.uuididentity.dao.IdentityDao;
+
+ import org.apache.commons.codec.binary.Base64;
+ import org.apache.log4j.Logger;
+
+ import javax.crypto.KeyGenerator;
+ import javax.crypto.SecretKey;
+ import java.io.*;
+ import java.net.InetAddress;
+ import java.net.UnknownHostException;
+ import java.security.NoSuchAlgorithmException;
+ import java.sql.PreparedStatement;
+ import java.sql.ResultSet;
+ import java.sql.SQLException;
+ import java.util.*;
+ import java.util.regex.Pattern;
+
public class ConfigurationServerImpl implements ConfigurationServer {
public static final Logger s_logger = Logger.getLogger(ConfigurationServerImpl.class.getName());
@@@ -279,8 -251,9 +261,8 @@@
// Update the cloud identifier
updateCloudIdentifier();
- updateUuids();
-
+ // We should not update seed data UUID column here since this will be invoked in upgrade case as well.
+ //updateUuids();
-
// Set init to true
_configDao.update("init", "Hidden", "true");
}
@@@ -330,9 -306,8 +315,9 @@@
@DB
protected void saveUser() {
+ //ToDo: Add regionId to default users and accounts
// insert system account
- String insertSql = "INSERT INTO `cloud`.`account` (id, account_name, type, domain_id) VALUES (1, 'system', '1', '1')";
+ String insertSql = "INSERT INTO `cloud`.`account` (id, uuid, account_name, type, domain_id) VALUES (1, UUID(), 'system', '1', '1')";
Transaction txn = Transaction.currentTxn();
try {
PreparedStatement stmt = txn.prepareAutoCloseStatement(insertSql);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/server/src/com/cloud/user/AccountManager.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/server/src/com/cloud/user/AccountManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/user/AccountManagerImpl.java
index b72a8ac,b910a03..dcd6da3
--- a/server/src/com/cloud/user/AccountManagerImpl.java
+++ b/server/src/com/cloud/user/AccountManagerImpl.java
@@@ -1702,18 -1722,20 +1756,31 @@@ public class AccountManagerImpl impleme
if (s_logger.isDebugEnabled()) {
s_logger.debug("Creating user: " + userName + ", accountId: " + accountId + " timezone:" + timezone);
}
+
+ UserVO user = _userDao.persist(new UserVO(accountId, userName, password, firstName, lastName, email, timezone, UUID.randomUUID().toString(), _regionMgr.getId()));
+
+ return user;
+ }
+
+ //ToDo Add events??
+ public UserVO createUser(long accountId, String userName, String password, String firstName, String lastName, String email, String timezone, String uuid, int regionId) {
+ if (s_logger.isDebugEnabled()) {
+ s_logger.debug("Creating user: " + userName + ", accountId: " + accountId + " timezone:" + timezone);
+ }
- UserVO user = _userDao.persist(new UserVO(accountId, userName, password, firstName, lastName, email, timezone, uuid, regionId));
+
+ String encodedPassword = null;
+ for (Enumeration<UserAuthenticator> en = _userAuthenticators.enumeration(); en.hasMoreElements();) {
+ UserAuthenticator authenticator = en.nextElement();
+ encodedPassword = authenticator.encode(password);
+ if (encodedPassword != null) {
+ break;
+ }
+ }
+ if (encodedPassword == null) {
+ throw new CloudRuntimeException("Failed to encode password");
+ }
-
- UserVO user = _userDao.persist(new UserVO(accountId, userName, encodedPassword, firstName, lastName, email, timezone));
++
++ UserVO user = _userDao.persist(new UserVO(accountId, userName, encodedPassword, firstName, lastName, email, timezone, uuid, regionId));
return user;
}
@@@ -1937,11 -1966,16 +2011,17 @@@
@Override @DB
public String[] createApiKeyAndSecretKey(RegisterCmd cmd) {
+ //Send keys to other Regions
Long userId = cmd.getId();
- if (getUserIncludingRemoved(userId) == null) {
- throw new InvalidParameterValueException("unable to find user for id : " + userId);
+ User user = getUserIncludingRemoved(userId);
+ if (user == null) {
+ throw new InvalidParameterValueException("unable to find user by id");
+ }
+
+ //don't allow updating system user
+ if (user.getId() == User.UID_SYSTEM) {
+ throw new PermissionDeniedException("user id : " + user.getId() + " is system account, update is not allowed");
}
// generate both an api key and a secret key, update the user table with the keys, return the keys to the user
@@@ -2374,26 -2194,51 +2240,69 @@@
}
}
- @Override
+ @Override
- public UserAccount getUserByApiKey(String apiKey) {
- return _userAccountDao.getUserByApiKey(apiKey);
- }
-
- @Override
+ public User findUser(String username, Long domainId) {
+ UserAccount userAccount = _userAccountDao.getUserAccount(username, domainId);
+ if(userAccount == null){
+ throw new InvalidParameterValueException("Unable to find user account by name: "+username);
+ }
+ User user = _userDao.findById(userAccount.getId());
+ if(user == null){
+ throw new InvalidParameterValueException("Unable to find user by name: "+username);
+ }
+ return user;
+ }
+
+ @Override
+ public Account findAccount(Long id) {
+ return _accountDao.findById(id);
+ }
++
++ @Override
+ public void buildACLViewSearchBuilder(SearchBuilder<? extends ControlledViewEntity> sb, Long domainId,
+ boolean isRecursive, List<Long> permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria) {
+
+ sb.and("accountIdIN", sb.entity().getAccountId(), SearchCriteria.Op.IN);
+ sb.and("domainId", sb.entity().getDomainId(), SearchCriteria.Op.EQ);
+
+ if (((permittedAccounts.isEmpty()) && (domainId != null) && isRecursive)) {
+ // if accountId isn't specified, we can do a domain match for the
+ // admin case if isRecursive is true
+ sb.and("domainPath", sb.entity().getDomainPath(), SearchCriteria.Op.LIKE);
+ }
+
+ if (listProjectResourcesCriteria != null) {
+ if (listProjectResourcesCriteria == Project.ListProjectResourcesCriteria.ListProjectResourcesOnly) {
+ sb.and("accountType", sb.entity().getAccountType(), SearchCriteria.Op.EQ);
+ } else if (listProjectResourcesCriteria == Project.ListProjectResourcesCriteria.SkipProjectResources) {
+ sb.and("accountType", sb.entity().getAccountType(), SearchCriteria.Op.NEQ);
+ }
+ }
+
+ }
+
+ @Override
+ public void buildACLViewSearchCriteria(SearchCriteria<? extends ControlledViewEntity> sc,
+ Long domainId, boolean isRecursive, List<Long> permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria) {
+
+ if (listProjectResourcesCriteria != null) {
+ sc.setParameters("accountType", Account.ACCOUNT_TYPE_PROJECT);
+ }
+
+ if (!permittedAccounts.isEmpty()) {
+ sc.setParameters("accountIdIN", permittedAccounts.toArray());
+ } else if (domainId != null) {
+ DomainVO domain = _domainDao.findById(domainId);
+ if (isRecursive) {
+ sc.setParameters("domainPath", domain.getPath() + "%");
+ } else {
+ sc.setParameters("domainId", domainId);
+ }
+ }
+ }
+
+ @Override
+ public UserAccount getUserByApiKey(String apiKey) {
+ return _userAccountDao.getUserByApiKey(apiKey);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/server/src/com/cloud/user/DomainManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/user/DomainManagerImpl.java
index 8ec68bb,54ca2ac..92277e8
--- a/server/src/com/cloud/user/DomainManagerImpl.java
+++ b/server/src/com/cloud/user/DomainManagerImpl.java
@@@ -24,11 -24,10 +24,11 @@@ import java.util.Set
import javax.ejb.Local;
import javax.naming.ConfigurationException;
+ import org.apache.cloudstack.api.command.admin.domain.ListDomainChildrenCmd;
+ import org.apache.cloudstack.api.command.admin.domain.ListDomainsCmd;
++import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd;
import org.apache.log4j.Logger;
- import com.cloud.api.commands.ListDomainChildrenCmd;
- import com.cloud.api.commands.ListDomainsCmd;
- import com.cloud.api.commands.UpdateDomainCmd;
import com.cloud.configuration.ResourceLimit;
import com.cloud.configuration.dao.ResourceCountDao;
import com.cloud.domain.Domain;
@@@ -481,100 -472,7 +488,100 @@@ public class DomainManagerImpl implemen
sc.addAnd("state", SearchCriteria.Op.EQ, Domain.State.Active);
}
- return _domainDao.search(sc, searchFilter);
+ return _domainDao.searchAndCount(sc, searchFilter);
}
+ @Override
+ @ActionEvent(eventType = EventTypes.EVENT_DOMAIN_UPDATE, eventDescription = "updating Domain")
+ @DB
+ public DomainVO updateDomain(UpdateDomainCmd cmd) {
+ Long domainId = cmd.getId();
+ String domainName = cmd.getDomainName();
+ String networkDomain = cmd.getNetworkDomain();
+
+ // check if domain exists in the system
+ DomainVO domain = _domainDao.findById(domainId);
+ if (domain == null) {
+ InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find domain with specified domain id");
+ ex.addProxyObject(domain, domainId, "domainId");
+ throw ex;
+ } else if (domain.getParent() == null && domainName != null) {
+ // check if domain is ROOT domain - and deny to edit it with the new name
+ throw new InvalidParameterValueException("ROOT domain can not be edited with a new name");
+ }
+
+ // check permissions
+ Account caller = UserContext.current().getCaller();
+ _accountMgr.checkAccess(caller, domain);
+
+ // domain name is unique in the cloud
+ if (domainName != null) {
+ SearchCriteria<DomainVO> sc = _domainDao.createSearchCriteria();
+ sc.addAnd("name", SearchCriteria.Op.EQ, domainName);
+ List<DomainVO> domains = _domainDao.search(sc, null);
+
+ boolean sameDomain = (domains.size() == 1 && domains.get(0).getId() == domainId);
+
+ if (!domains.isEmpty() && !sameDomain) {
+ InvalidParameterValueException ex = new InvalidParameterValueException("Failed to update specified domain id with name '" + domainName + "' since it already exists in the system");
+ ex.addProxyObject(domain, domainId, "domainId");
+ throw ex;
+ }
+ }
+
+ // validate network domain
+ if (networkDomain != null && !networkDomain.isEmpty()) {
+ if (!NetUtils.verifyDomainName(networkDomain)) {
+ throw new InvalidParameterValueException(
+ "Invalid network domain. Total length shouldn't exceed 190 chars. Each domain label must be between 1 and 63 characters long, can contain ASCII letters 'a' through 'z', the digits '0' through '9', "
+ + "and the hyphen ('-'); can't start or end with \"-\"");
+ }
+ }
+
+ Transaction txn = Transaction.currentTxn();
+
+ txn.start();
+
+ if (domainName != null) {
+ String updatedDomainPath = getUpdatedDomainPath(domain.getPath(), domainName);
+ updateDomainChildren(domain, updatedDomainPath);
+ domain.setName(domainName);
+ domain.setPath(updatedDomainPath);
+ }
+
+ if (networkDomain != null) {
+ if (networkDomain.isEmpty()) {
+ domain.setNetworkDomain(null);
+ } else {
+ domain.setNetworkDomain(networkDomain);
+ }
+ }
+ _domainDao.update(domainId, domain);
+
+ txn.commit();
+
+ return _domainDao.findById(domainId);
+
+ }
+
+ private String getUpdatedDomainPath(String oldPath, String newName) {
+ String[] tokenizedPath = oldPath.split("/");
+ tokenizedPath[tokenizedPath.length - 1] = newName;
+ StringBuilder finalPath = new StringBuilder();
+ for (String token : tokenizedPath) {
+ finalPath.append(token);
+ finalPath.append("/");
+ }
+ return finalPath.toString();
+ }
+
+ private void updateDomainChildren(DomainVO domain, String updatedDomainPrefix) {
+ List<DomainVO> domainChildren = _domainDao.findAllChildren(domain.getPath(), domain.getId());
+ // for each child, update the path
+ for (DomainVO dom : domainChildren) {
+ dom.setPath(dom.getPath().replaceFirst(domain.getPath(), updatedDomainPrefix));
+ _domainDao.update(dom.getId(), dom);
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/server/test/com/cloud/user/MockAccountManagerImpl.java
----------------------------------------------------------------------
diff --cc server/test/com/cloud/user/MockAccountManagerImpl.java
index c4c2e6b,550304a..7e20491
--- a/server/test/com/cloud/user/MockAccountManagerImpl.java
+++ b/server/test/com/cloud/user/MockAccountManagerImpl.java
@@@ -22,14 -22,16 +22,18 @@@ import java.util.Map
import javax.ejb.Local;
import javax.naming.ConfigurationException;
- import com.cloud.acl.ControlledEntity;
- import com.cloud.acl.SecurityChecker.AccessType;
- import com.cloud.api.commands.DeleteUserCmd;
- import com.cloud.api.commands.ListAccountsCmd;
- import com.cloud.api.commands.ListUsersCmd;
- import com.cloud.api.commands.RegisterCmd;
- import com.cloud.api.commands.UpdateAccountCmd;
- import com.cloud.api.commands.UpdateUserCmd;
+ import org.apache.cloudstack.acl.ControlledEntity;
+ import org.apache.cloudstack.acl.RoleType;
+ import org.apache.cloudstack.acl.SecurityChecker.AccessType;
+ import com.cloud.api.query.vo.ControlledViewEntity;
+
+ import org.apache.cloudstack.api.command.admin.user.DeleteUserCmd;
++import org.apache.cloudstack.api.command.admin.user.ListUsersCmd;
+ import org.apache.cloudstack.api.command.admin.user.RegisterCmd;
+ import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd;
+ import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd;
++import org.apache.cloudstack.api.command.user.account.ListAccountsCmd;
+
import com.cloud.domain.Domain;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.PermissionDeniedException;
@@@ -274,18 -282,23 +278,6 @@@ public class MockAccountManagerImpl imp
return true;
}
- @Override
- public List<? extends Account> searchForAccounts(ListAccountsCmd cmd) {
- // TODO Auto-generated method stub
- return null;
- }
--
- @Override
- public List<? extends UserAccount> searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public UserAccount createUserAccount(String userName, String password,
- String firstName, String lastName, String email, String timezone,
- String accountName, short accountType, Long domainId,
- String networkDomain, Map<String, String> details) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public Account createAccount(String accountName, short accountType,
- Long domainId, String networkDomain, Map details) {
- // TODO Auto-generated method stub
- return null;
- }
-
@Override
public boolean enableAccount(long accountId) {
// TODO Auto-generated method stub
@@@ -320,42 -345,9 +324,46 @@@
return null;
}
+ @Override
+ public UserAccount createUserAccount(String userName, String password,
+ String firstName, String lastName, String email, String timezone,
+ String accountName, short accountType, Long domainId,
+ String networkDomain, Map<String, String> details,
+ String accountUUID, String userUUID, Integer regionId) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public User createUser(String userName, String password, String firstName,
+ String lastName, String email, String timeZone, String accountName,
+ Long domainId, String userUUID, Integer regionId) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public User findUser(String username, Long domainId) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Account findAccount(Long id) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Account createAccount(String accountName, short accountType,
+ Long domainId, String networkDomain, Map details, String uuid,
+ int regionId) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+ @Override
+ public RoleType getRoleType(Account account) {
+ return null;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/server/test/com/cloud/user/MockDomainManagerImpl.java
----------------------------------------------------------------------
diff --cc server/test/com/cloud/user/MockDomainManagerImpl.java
index 2927526,0fe259d..4f134a0
--- a/server/test/com/cloud/user/MockDomainManagerImpl.java
+++ b/server/test/com/cloud/user/MockDomainManagerImpl.java
@@@ -23,18 -23,24 +23,20 @@@ import java.util.Set
import javax.ejb.Local;
import javax.naming.ConfigurationException;
- import com.cloud.api.commands.ListDomainChildrenCmd;
- import com.cloud.api.commands.ListDomainsCmd;
- import com.cloud.api.commands.UpdateDomainCmd;
+ import org.apache.cloudstack.api.command.admin.domain.ListDomainChildrenCmd;
+ import org.apache.cloudstack.api.command.admin.domain.ListDomainsCmd;
++import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd;
++
import com.cloud.domain.Domain;
import com.cloud.domain.DomainVO;
import com.cloud.exception.PermissionDeniedException;
import com.cloud.utils.component.Manager;
+ import com.cloud.utils.Pair;
- @Local(value = { DomainManager.class })
- public class MockDomainManagerImpl implements Manager, DomainManager {
+ @Local(value = { DomainManager.class, DomainService.class })
+ public class MockDomainManagerImpl implements Manager, DomainManager, DomainService {
@Override
- public Domain createDomain(String name, Long parentId, String networkDomain) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
public Domain getDomain(long id) {
// TODO Auto-generated method stub
return null;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/server/test/com/cloud/vm/MockUserVmManagerImpl.java
----------------------------------------------------------------------
diff --cc server/test/com/cloud/vm/MockUserVmManagerImpl.java
index 1baf34a,27508b1..e397b82
--- a/server/test/com/cloud/vm/MockUserVmManagerImpl.java
+++ b/server/test/com/cloud/vm/MockUserVmManagerImpl.java
@@@ -193,9 -194,9 +195,9 @@@ public class MockUserVmManagerImpl impl
}
@Override
- public List<UserVmVO> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, List<Long> permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags) {
+ public Pair<List<UserVmJoinVO>, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, List<Long> permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags) {
// TODO Auto-generated method stub
- return null;
+ return new ArrayList<UserVmVO>();
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/setup/db/create-schema.sql
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/utils/conf/db.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/utils/src/com/cloud/utils/db/GenericDao.java
----------------------------------------------------------------------
diff --cc utils/src/com/cloud/utils/db/GenericDao.java
index ca4c21a,15d04b7..9864b18
--- a/utils/src/com/cloud/utils/db/GenericDao.java
+++ b/utils/src/com/cloud/utils/db/GenericDao.java
@@@ -260,6 -265,11 +265,13 @@@ public interface GenericDao<T, ID exten
* @return
*/
Class<T> getEntityBeanType();
+
+ public int getRegionId();
+
+ /**
+ * @param sc
+ * @param filter
+ * @return
+ */
+ Pair<List<T>, Integer> searchAndCount(SearchCriteria<T> sc, Filter filter);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/utils/src/com/cloud/utils/db/GenericDaoBase.java
----------------------------------------------------------------------
diff --cc utils/src/com/cloud/utils/db/GenericDaoBase.java
index 271cec5,880e9de..ec2e7e0
--- a/utils/src/com/cloud/utils/db/GenericDaoBase.java
+++ b/utils/src/com/cloud/utils/db/GenericDaoBase.java
@@@ -1769,9 -1794,74 +1794,79 @@@ public abstract class GenericDaoBase<T
factory.setCallback(0, sc);
return sc;
}
+
+ @Override
+ public int getRegionId(){
+ return Transaction.s_region_id;
+ }
+
+ public Integer getCount(SearchCriteria<T> sc) {
+ String clause = sc != null ? sc.getWhereClause() : null;
+ if (clause != null && clause.length() == 0) {
+ clause = null;
+ }
+
+ final StringBuilder str = createCountSelect(sc, clause != null);
+ if (clause != null) {
+ str.append(clause);
+ }
+
+ Collection<JoinBuilder<SearchCriteria<?>>> joins = null;
+ if (sc != null) {
+ joins = sc.getJoins();
+ if (joins != null) {
+ addJoins(str, joins);
+ }
+ }
+
+ // we have to disable group by in getting count, since count for groupBy clause will be different.
+ //List<Object> groupByValues = addGroupBy(str, sc);
+ final Transaction txn = Transaction.currentTxn();
+ final String sql = str.toString();
+
+ PreparedStatement pstmt = null;
+ try {
+ pstmt = txn.prepareAutoCloseStatement(sql);
+ int i = 0;
+ if (clause != null) {
+ for (final Pair<Attribute, Object> value : sc.getValues()) {
+ prepareAttribute(++i, pstmt, value.first(), value.second());
+ }
+ }
+
+ if (joins != null) {
+ i = addJoinAttributes(i, pstmt, joins);
+ }
+
+ /*
+ if (groupByValues != null) {
+ for (Object value : groupByValues) {
+ pstmt.setObject(i++, value);
+ }
+ }
+ */
+
+ final ResultSet rs = pstmt.executeQuery();
+ while (rs.next()) {
+ return rs.getInt(1);
+ }
+ return 0;
+ } catch (final SQLException e) {
+ throw new CloudRuntimeException("DB Exception on: " + pstmt, e);
+ } catch (final Throwable e) {
+ throw new CloudRuntimeException("Caught: " + pstmt, e);
+ }
+ }
+
+ @DB(txn=false)
+ protected StringBuilder createCountSelect(SearchCriteria<?> sc, final boolean whereClause) {
+ StringBuilder sql = new StringBuilder(_count);
+
+ if (!whereClause) {
+ sql.delete(sql.length() - (_discriminatorClause == null ? 6 : 4), sql.length());
+ }
+
+ return sql;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/utils/src/com/cloud/utils/db/Transaction.java
----------------------------------------------------------------------