Add Region APIs
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/6a1b0f3e Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/6a1b0f3e Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/6a1b0f3e Branch: refs/heads/master Commit: 6a1b0f3ecf02b3d3c730089ad18b458f216d9784 Parents: ccf15cb Author: kishan <[email protected]> Authored: Tue Jul 3 13:05:19 2012 -0700 Committer: kishan <[email protected]> Committed: Tue Jul 3 13:05:19 2012 -0700 ---------------------------------------------------------------------- api/src/com/cloud/api/ApiConstants.java | 1 + api/src/com/cloud/api/BaseCmd.java | 5 ++++- api/src/com/cloud/api/ResponseGenerator.java | 4 ++++ client/tomcatconf/commands.properties.in | 6 ++++++ core/src/com/cloud/user/AccountVO.java | 12 +++++++++++- core/src/com/cloud/user/UserVO.java | 11 +++++++++++ server/src/com/cloud/api/ApiResponseHelper.java | 12 ++++++++++++ .../configuration/DefaultComponentLibrary.java | 4 ++++ server/src/com/cloud/domain/DomainVO.java | 11 +++++++++++ server/src/com/cloud/domain/dao/DomainDaoImpl.java | 9 +++++++++ server/src/com/cloud/user/AccountManagerImpl.java | 6 ++++-- server/src/com/cloud/user/dao/AccountDaoImpl.java | 9 +++++++++ server/src/com/cloud/user/dao/UserDaoImpl.java | 9 +++++++++ setup/db/create-schema.sql | 15 +++++++++++++++ 14 files changed, 110 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/6a1b0f3e/api/src/com/cloud/api/ApiConstants.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/api/ApiConstants.java b/api/src/com/cloud/api/ApiConstants.java index f7acd51..69e7939 100755 --- a/api/src/com/cloud/api/ApiConstants.java +++ b/api/src/com/cloud/api/ApiConstants.java @@ -357,6 +357,7 @@ public class ApiConstants { public static final String VSM_CONFIG_STATE = "vsmconfigstate"; public static final String VSM_DEVICE_STATE = "vsmdevicestate"; public static final String ADD_VSM_FLAG = "addvsmflag"; + public static final String END_POINT = "endpoint"; public enum HostDetails { all, capacity, events, stats, min; http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/6a1b0f3e/api/src/com/cloud/api/BaseCmd.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/api/BaseCmd.java b/api/src/com/cloud/api/BaseCmd.java index a9b6f60..afebf2b 100755 --- a/api/src/com/cloud/api/BaseCmd.java +++ b/api/src/com/cloud/api/BaseCmd.java @@ -47,6 +47,7 @@ import com.cloud.network.security.SecurityGroupService; import com.cloud.network.vpn.RemoteAccessVpnService; import com.cloud.projects.Project; import com.cloud.projects.ProjectService; +import com.cloud.region.RegionService; import com.cloud.resource.ResourceService; import com.cloud.server.ManagementService; import com.cloud.storage.StorageService; @@ -128,7 +129,8 @@ public abstract class BaseCmd { public static ResourceLimitService _resourceLimitService; public static IdentityService _identityService; public static StorageNetworkService _storageNetworkService; - + public static RegionService _regionService; + static void setComponents(ResponseGenerator generator) { ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); _mgr = (ManagementService) ComponentLocator.getComponent(ManagementService.Name); @@ -155,6 +157,7 @@ public abstract class BaseCmd { _resourceLimitService = locator.getManager(ResourceLimitService.class); _identityService = locator.getManager(IdentityService.class); _storageNetworkService = locator.getManager(StorageNetworkService.class); + _regionService = locator.getManager(RegionService.class); } public abstract void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException; http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/6a1b0f3e/api/src/com/cloud/api/ResponseGenerator.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/api/ResponseGenerator.java b/api/src/com/cloud/api/ResponseGenerator.java index 5f55705..42da0fd 100755 --- a/api/src/com/cloud/api/ResponseGenerator.java +++ b/api/src/com/cloud/api/ResponseGenerator.java @@ -53,6 +53,7 @@ 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; @@ -83,6 +84,7 @@ import com.cloud.configuration.ResourceCount; import com.cloud.configuration.ResourceLimit; import com.cloud.dc.DataCenter; import com.cloud.dc.Pod; +import com.cloud.region.Region; import com.cloud.dc.StorageNetworkIpRange; import com.cloud.dc.Vlan; import com.cloud.domain.Domain; @@ -273,6 +275,8 @@ public interface ResponseGenerator { LDAPConfigResponse createLDAPConfigResponse(String hostname, Integer port, Boolean useSSL, String queryFilter, String baseSearch, String dn); StorageNetworkIpRangeResponse createStorageNetworkIpRangeResponse(StorageNetworkIpRange result); + + RegionResponse createRegionResponse(Region region); /** * @param tableName TODO http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/6a1b0f3e/client/tomcatconf/commands.properties.in ---------------------------------------------------------------------- diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index a939eb7..6ef0961 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -332,3 +332,9 @@ updateStorageNetworkIpRange=com.cloud.api.commands.UpdateStorageNetworkIpRangeCm addNetworkDevice=com.cloud.api.commands.AddNetworkDeviceCmd;1 listNetworkDevice=com.cloud.api.commands.ListNetworkDeviceCmd;1 deleteNetworkDevice=com.cloud.api.commands.DeleteNetworkDeviceCmd;1 + +#### Region commands +addRegion=com.cloud.api.commands.AddRegionCmd;1 +updateRegion=com.cloud.api.commands.UpdateRegionCmd;1 +removeRegion=com.cloud.api.commands.RemoveRegionCmd;1 +listRegions=com.cloud.api.commands.ListRegionsCmd;7 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/6a1b0f3e/core/src/com/cloud/user/AccountVO.java ---------------------------------------------------------------------- diff --git a/core/src/com/cloud/user/AccountVO.java b/core/src/com/cloud/user/AccountVO.java index b8f3940..a9bb51a 100644 --- a/core/src/com/cloud/user/AccountVO.java +++ b/core/src/com/cloud/user/AccountVO.java @@ -63,6 +63,9 @@ public class AccountVO implements Account, Identity { @Column(name="default_zone_id") private Long defaultZoneId = null; + @Column(name="region_id") + private long regionId; + public AccountVO() { this.uuid = UUID.randomUUID().toString(); } @@ -78,7 +81,6 @@ public class AccountVO implements Account, Identity { this.networkDomain = networkDomain; this.type = type; this.state = State.enabled; - this.uuid = UUID.randomUUID().toString(); } public void setNeedsCleanup(boolean value) { @@ -171,4 +173,12 @@ public class AccountVO implements Account, Identity { public void setUuid(String uuid) { this.uuid = uuid; } + + public long getRegionId() { + return regionId; + } + + public void setRegionId(long regionId) { + this.regionId = regionId; + } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/6a1b0f3e/core/src/com/cloud/user/UserVO.java ---------------------------------------------------------------------- diff --git a/core/src/com/cloud/user/UserVO.java b/core/src/com/cloud/user/UserVO.java index f866f15..efb0583 100644 --- a/core/src/com/cloud/user/UserVO.java +++ b/core/src/com/cloud/user/UserVO.java @@ -89,6 +89,9 @@ public class UserVO implements User, Identity { @Column(name="uuid") private String uuid; + @Column(name="region_id") + private long regionId; + public UserVO() { this.uuid = UUID.randomUUID().toString(); } @@ -257,4 +260,12 @@ public class UserVO implements User, Identity { public void setUuid(String uuid) { this.uuid = uuid; } + + public long getRegionId() { + return regionId; + } + + public void setRegionId(long regionId) { + this.regionId = regionId; + } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/6a1b0f3e/server/src/com/cloud/api/ApiResponseHelper.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index eb64d98..accdbab 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -67,6 +67,7 @@ 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; @@ -150,6 +151,7 @@ import com.cloud.org.Cluster; import com.cloud.projects.Project; import com.cloud.projects.ProjectAccount; import com.cloud.projects.ProjectInvitation; +import com.cloud.region.Region; import com.cloud.server.Criteria; import com.cloud.storage.DiskOfferingVO; import com.cloud.storage.GuestOS; @@ -3399,4 +3401,14 @@ public class ApiResponseHelper implements ResponseGenerator { 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; + } + } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/6a1b0f3e/server/src/com/cloud/configuration/DefaultComponentLibrary.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index 150d7af..a27ae17 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -129,6 +129,8 @@ import com.cloud.projects.ProjectManagerImpl; import com.cloud.projects.dao.ProjectAccountDaoImpl; import com.cloud.projects.dao.ProjectDaoImpl; import com.cloud.projects.dao.ProjectInvitationDaoImpl; +import com.cloud.region.RegionManagerImpl; +import com.cloud.region.dao.RegionDaoImpl; import com.cloud.resource.ResourceManagerImpl; import com.cloud.resourcelimit.ResourceLimitManagerImpl; import com.cloud.service.dao.ServiceOfferingDaoImpl; @@ -329,6 +331,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addDao("NetworkServiceMapDao", NetworkServiceMapDaoImpl.class); addDao("StorageNetworkIpAddressDao", StorageNetworkIpAddressDaoImpl.class); addDao("StorageNetworkIpRangeDao", StorageNetworkIpRangeDaoImpl.class); + addDao("RegionDao", RegionDaoImpl.class); } @Override @@ -385,6 +388,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addManager("StorageNetworkManager", StorageNetworkManagerImpl.class); addManager("ExternalLoadBalancerUsageManager", ExternalLoadBalancerUsageManagerImpl.class); addManager("HA Manager", HighAvailabilityManagerImpl.class); + addManager("Region Manager", RegionManagerImpl.class); } @Override http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/6a1b0f3e/server/src/com/cloud/domain/DomainVO.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/domain/DomainVO.java b/server/src/com/cloud/domain/DomainVO.java index 53ed075..a5cfe1b 100644 --- a/server/src/com/cloud/domain/DomainVO.java +++ b/server/src/com/cloud/domain/DomainVO.java @@ -69,6 +69,9 @@ public class DomainVO implements Domain, Identity { @Column(name="uuid") private String uuid; + + @Column(name="region_id") + private long regionId; public DomainVO() {} @@ -200,5 +203,13 @@ public class DomainVO implements Domain, Identity { public void setUuid(String uuid) { this.uuid = uuid; } + + public long getRegionId() { + return regionId; + } + + public void setRegionId(long regionId) { + this.regionId = regionId; + } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/6a1b0f3e/server/src/com/cloud/domain/dao/DomainDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/domain/dao/DomainDaoImpl.java b/server/src/com/cloud/domain/dao/DomainDaoImpl.java index c570969..b653d7b 100644 --- a/server/src/com/cloud/domain/dao/DomainDaoImpl.java +++ b/server/src/com/cloud/domain/dao/DomainDaoImpl.java @@ -25,6 +25,7 @@ import org.apache.log4j.Logger; import com.cloud.domain.Domain; import com.cloud.domain.DomainVO; +import com.cloud.user.UserVO; import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GlobalLock; @@ -42,6 +43,7 @@ public class DomainDaoImpl extends GenericDaoBase<DomainVO, Long> implements Dom protected SearchBuilder<DomainVO> ImmediateChildDomainSearch; protected SearchBuilder<DomainVO> FindAllChildrenSearch; protected SearchBuilder<DomainVO> AllFieldsSearch; + private final long _regionId = 1; public DomainDaoImpl () { DomainNameLikeSearch = createSearchBuilder(); @@ -266,4 +268,11 @@ public class DomainDaoImpl extends GenericDaoBase<DomainVO, Long> implements Dom return parentDomains; } + + @Override + @DB + public DomainVO persist(DomainVO domain) { + domain.setRegionId(_regionId); + return super.persist(domain); + } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/6a1b0f3e/server/src/com/cloud/user/AccountManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index 35fbfe0..cd63b4d 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -199,7 +199,9 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag private ProjectAccountDao _projectAccountDao; @Inject private IPAddressDao _ipAddressDao; - + //@Inject + //private RegionManager _regionMgr; + private Adapters<UserAuthenticator> _userAuthenticators; private final ScheduledExecutorService _executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("AccountChecker")); @@ -1575,7 +1577,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag // Create default security group _networkGroupMgr.createDefaultSecurityGroup(accountId); - + //_regionMgr.propogateAddResource(); txn.commit(); return account; http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/6a1b0f3e/server/src/com/cloud/user/dao/AccountDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/user/dao/AccountDaoImpl.java b/server/src/com/cloud/user/dao/AccountDaoImpl.java index c820e22..be14ec3 100755 --- a/server/src/com/cloud/user/dao/AccountDaoImpl.java +++ b/server/src/com/cloud/user/dao/AccountDaoImpl.java @@ -28,6 +28,7 @@ import com.cloud.user.User; import com.cloud.user.UserVO; import com.cloud.utils.Pair; import com.cloud.utils.crypt.DBEncryptionUtil; +import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; @@ -48,6 +49,7 @@ public class AccountDaoImpl extends GenericDaoBase<AccountVO, Long> implements A protected final SearchBuilder<AccountVO> CleanupForRemovedAccountsSearch; protected final SearchBuilder<AccountVO> CleanupForDisabledAccountsSearch; protected final SearchBuilder<AccountVO> NonProjectAccountSearch; + private final long _regionId = 1; protected AccountDaoImpl() { AllFieldsSearch = createSearchBuilder(); @@ -257,4 +259,11 @@ public class AccountDaoImpl extends GenericDaoBase<AccountVO, Long> implements A } } } + + @Override + @DB + public AccountVO persist(AccountVO account) { + account.setRegionId(_regionId); + return super.persist(account); + } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/6a1b0f3e/server/src/com/cloud/user/dao/UserDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/user/dao/UserDaoImpl.java b/server/src/com/cloud/user/dao/UserDaoImpl.java index 2c24461..17a7b5c 100644 --- a/server/src/com/cloud/user/dao/UserDaoImpl.java +++ b/server/src/com/cloud/user/dao/UserDaoImpl.java @@ -17,6 +17,7 @@ import java.util.List; import javax.ejb.Local; import com.cloud.user.UserVO; +import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -35,6 +36,7 @@ public class UserDaoImpl extends GenericDaoBase<UserVO, Long> implements UserDao protected SearchBuilder<UserVO> AccountIdSearch; protected SearchBuilder<UserVO> SecretKeySearch; protected SearchBuilder<UserVO> RegistrationTokenSearch; + private final long _regionId = 1; protected UserDaoImpl () { UsernameSearch = createSearchBuilder(); @@ -123,4 +125,11 @@ public class UserDaoImpl extends GenericDaoBase<UserVO, Long> implements UserDao sc.setParameters("username", username); return listBy(sc); } + + @Override + @DB + public UserVO persist(UserVO user) { + user.setRegionId(_regionId); + return super.persist(user); + } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/6a1b0f3e/setup/db/create-schema.sql ---------------------------------------------------------------------- diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 488fb06..ff092eb 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -137,6 +137,7 @@ DROP TABLE IF EXISTS `cloud`.`op_dc_storage_network_ip_address`; DROP TABLE IF EXISTS `cloud`.`cluster_vsm_map`; DROP TABLE IF EXISTS `cloud`.`virtual_supervisor_module`; DROP TABLE IF EXISTS `cloud`.`port_profile`; +DROP TABLE IF EXISTS `cloud`.`region`; CREATE TABLE `cloud`.`version` ( `id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT COMMENT 'id', @@ -874,6 +875,7 @@ CREATE TABLE `cloud`.`user` ( `timezone` varchar(30) default NULL, `registration_token` varchar(255) default NULL, `is_registered` tinyint NOT NULL DEFAULT 0 COMMENT '1: yes, 0: no', + `region_id` bigint unsigned, PRIMARY KEY (`id`), INDEX `i_user__removed`(`removed`), INDEX `i_user__secret_key_removed`(`secret_key`, `removed`), @@ -1219,6 +1221,7 @@ CREATE TABLE `cloud`.`domain` ( `state` char(32) NOT NULL default 'Active' COMMENT 'state of the domain', `network_domain` varchar(255), `type` varchar(255) NOT NULL DEFAULT 'Normal' COMMENT 'type of the domain - can be Normal or Project', + `region_id` bigint unsigned, PRIMARY KEY (`id`), UNIQUE (parent, name, removed), INDEX `i_domain__path`(`path`), @@ -1237,6 +1240,7 @@ CREATE TABLE `cloud`.`account` ( `cleanup_needed` tinyint(1) NOT NULL default '0', `network_domain` varchar(255), `default_zone_id` bigint unsigned, + `region_id` bigint unsigned, PRIMARY KEY (`id`), INDEX i_account__removed(`removed`), CONSTRAINT `fk_account__default_zone_id` FOREIGN KEY `fk_account__default_zone_id`(`default_zone_id`) REFERENCES `data_center`(`id`) ON DELETE CASCADE, @@ -2132,4 +2136,15 @@ CREATE TABLE `cloud`.`netscaler_pod_ref` ( CONSTRAINT `fk_ns_pod_ref__device_id` FOREIGN KEY (`external_load_balancer_device_id`) REFERENCES `external_load_balancer_devices`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE `cloud`.`region` ( + `id` bigint unsigned NOT NULL UNIQUE, + `name` varchar(255), + `end_point` varchar(255), + `status` varchar(32) NOT NULL, + `removed` datetime COMMENT 'date removed if not null', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + SET foreign_key_checks = 1;
