Merge branch 'master' into internallb1 Conflicts: server/src/com/cloud/api/ApiResponseHelper.java server/src/com/cloud/api/query/QueryManagerImpl.java server/src/com/cloud/configuration/ConfigurationManagerImpl.java server/src/com/cloud/network/NetworkManagerImpl.java server/src/com/cloud/network/firewall/FirewallManagerImpl.java setup/db/db/schema-410to420.sql
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/7b24a764 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/7b24a764 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/7b24a764 Branch: refs/heads/internallb Commit: 7b24a7640c53e5b5ab4493de309b43714f4646c6 Parents: 440e848 a0dbf89 Author: Alena Prokharchyk <alena.prokharc...@citrix.com> Authored: Mon Apr 29 15:49:48 2013 -0700 Committer: Alena Prokharchyk <alena.prokharc...@citrix.com> Committed: Mon Apr 29 16:12:10 2013 -0700 ---------------------------------------------------------------------- agent/conf/agent.properties | 2 +- .../com/cloud/agent/api/UnregisterVMCommand.java | 34 + .../cloud/configuration/ConfigurationService.java | 15 +- api/src/com/cloud/hypervisor/HypervisorGuru.java | 9 + api/src/com/cloud/network/NetworkModel.java | 2 +- api/src/com/cloud/network/NetworkService.java | 2 +- .../region/ha/GlobalLoadBalancingRulesService.java | 3 + api/src/com/cloud/vm/UserVmService.java | 27 +- .../org/apache/cloudstack/api/ApiConstants.java | 1 + api/src/org/apache/cloudstack/api/BaseCmd.java | 24 + .../apache/cloudstack/api/ResponseGenerator.java | 4 +- .../api/command/admin/cluster/ListClustersCmd.java | 8 +- .../api/command/admin/config/ListCfgsByCmd.java | 44 +- .../api/command/admin/config/UpdateCfgCmd.java | 47 +- .../api/command/admin/host/ListHostsCmd.java | 7 + .../admin/internallb/ListInternalLBVMsCmd.java | 7 + .../api/command/admin/pod/ListPodsByCmd.java | 7 + .../api/command/admin/router/ListRoutersCmd.java | 7 + .../command/admin/storage/ListStoragePoolsCmd.java | 7 + .../command/admin/systemvm/ListSystemVMsCmd.java | 7 + .../api/command/user/iso/ListIsosCmd.java | 7 + .../api/command/user/network/ListNetworksCmd.java | 7 + .../command/user/snapshot/ListSnapshotsCmd.java | 7 + .../command/user/template/ListTemplatesCmd.java | 8 + .../api/command/user/vm/AddIpToVmNicCmd.java | 9 +- .../api/command/user/vm/DeployVMCmd.java | 12 +- .../cloudstack/api/command/user/vm/ListVMsCmd.java | 10 +- .../api/command/user/vm/UpdateVMCmd.java | 2 +- .../api/command/user/volume/ListVolumesCmd.java | 7 + .../api/command/user/zone/ListZonesByCmd.java | 8 + .../api/response/ConfigurationResponse.java | 3 + .../api/response/GlobalLoadBalancerResponse.java | 10 + .../api/command/test/AddIpToVmNicTest.java | 6 +- .../com/cloud/bridge/service/core/s3/S3Engine.java | 2 +- .../WEB-INF/classes/resources/messages.properties | 561 ++-- .../classes/resources/messages_ar.properties | 285 ++ .../classes/resources/messages_ca.properties | 307 ++ .../classes/resources/messages_de_DE.properties | 748 ++++ .../classes/resources/messages_es.properties | 862 +++++ .../classes/resources/messages_fr_FR.properties | 1842 +++++----- .../classes/resources/messages_it_IT.properties | 618 +++ .../classes/resources/messages_ja.properties | 2904 +++++++------- .../classes/resources/messages_ko_KR.properties | 2883 +++++++------- .../classes/resources/messages_nb_NO.properties | 366 ++ .../classes/resources/messages_pt_BR.properties | 2092 +++++------ .../classes/resources/messages_ru_RU.properties | 2890 +++++++-------- .../classes/resources/messages_zh_CN.properties | 2986 +++++++-------- client/pom.xml | 11 +- client/tomcatconf/applicationContext.xml.in | 4 + core/src/com/cloud/async/AsyncJobVO.java | 1 + core/src/com/cloud/vm/UserVmVO.java | 6 +- docs/en-US/about-working-with-vms.xml | 85 +- docs/en-US/added-API-commands-4.2.xml | 24 + docs/en-US/append-displayname-vms.xml | 84 + docs/en-US/changed-API-commands-4.2.xml | 27 + docs/en-US/creating-network-offerings.xml | 45 + docs/en-US/delete-event-alerts.xml | 59 + docs/en-US/elastic-ip.xml | 90 + docs/en-US/events.xml | 5 +- docs/en-US/guest-ip-ranges.xml | 10 +- docs/en-US/images/add-vlan-icon.png | Bin 0 -> 860 bytes docs/en-US/images/eip-ns-basiczone.png | Bin 0 -> 55568 bytes docs/en-US/network-offerings.xml | 83 +- docs/en-US/networks.xml | 1 + docs/en-US/non-contiguous-vlan.xml | 68 + docs/en-US/set-up-network-for-users.xml | 13 +- docs/en-US/using-netscaler-load-balancers.xml | 132 +- docs/en-US/virtual-machines.xml | 1 + docs/en-US/vlan-provisioning.xml | 2 + packaging/centos63/package.sh | 4 +- .../debian/config/etc/init.d/cloud-early-config | 8 + .../hypervisor/kvm/resource/KVMHAMonitor.java | 7 +- .../hypervisor/kvm/resource/LibvirtConnection.java | 14 +- .../kvm/storage/KVMStoragePoolManager.java | 12 +- .../src/com/cloud/hypervisor/guru/VMwareGuru.java | 9 + .../hypervisor/vmware/resource/VmwareResource.java | 44 +- scripts/vm/network/security_group.py | 2 +- server/src/com/cloud/alert/AlertManagerImpl.java | 27 +- server/src/com/cloud/api/ApiDBUtils.java | 11 +- server/src/com/cloud/api/ApiDispatcher.java | 9 - server/src/com/cloud/api/ApiResponseHelper.java | 69 +- server/src/com/cloud/api/ApiServer.java | 155 +- server/src/com/cloud/api/ApiServerService.java | 1 + server/src/com/cloud/api/ApiServlet.java | 6 +- .../src/com/cloud/api/query/QueryManagerImpl.java | 45 +- .../cloud/api/query/dao/AccountJoinDaoImpl.java | 6 +- .../api/query/dao/DomainRouterJoinDaoImpl.java | 6 +- .../com/cloud/api/query/dao/HostJoinDaoImpl.java | 6 +- .../api/query/dao/SecurityGroupJoinDaoImpl.java | 6 +- .../api/query/dao/StoragePoolJoinDaoImpl.java | 6 +- .../api/query/dao/UserAccountJoinDaoImpl.java | 6 +- .../com/cloud/api/query/dao/UserVmJoinDaoImpl.java | 6 +- .../com/cloud/api/query/dao/VolumeJoinDaoImpl.java | 6 +- .../src/com/cloud/api/query/vo/AccountJoinVO.java | 6 +- .../com/cloud/api/query/vo/DomainRouterJoinVO.java | 6 +- server/src/com/cloud/api/query/vo/HostJoinVO.java | 6 +- .../cloud/api/query/vo/SecurityGroupJoinVO.java | 6 +- .../com/cloud/api/query/vo/StoragePoolJoinVO.java | 6 +- .../com/cloud/api/query/vo/UserAccountJoinVO.java | 6 +- .../src/com/cloud/api/query/vo/UserVmJoinVO.java | 6 +- .../src/com/cloud/api/query/vo/VolumeJoinVO.java | 6 +- server/src/com/cloud/capacity/dao/CapacityDao.java | 2 +- .../com/cloud/capacity/dao/CapacityDaoImpl.java | 35 +- server/src/com/cloud/configuration/Config.java | 20 +- .../cloud/configuration/ConfigurationManager.java | 2 +- .../configuration/ConfigurationManagerImpl.java | 175 +- server/src/com/cloud/deploy/FirstFitPlanner.java | 25 +- .../com/cloud/hypervisor/HypervisorGuruBase.java | 5 + .../network/ExternalFirewallDeviceManagerImpl.java | 2 +- .../src/com/cloud/network/NetworkManagerImpl.java | 8 +- server/src/com/cloud/network/NetworkModelImpl.java | 11 +- .../src/com/cloud/network/NetworkServiceImpl.java | 39 +- .../network/firewall/FirewallManagerImpl.java | 12 +- .../com/cloud/network/guru/GuestNetworkGuru.java | 2 +- .../src/com/cloud/network/vpc/VpcManagerImpl.java | 2 +- .../network/vpn/RemoteAccessVpnManagerImpl.java | 6 +- .../com/cloud/server/ConfigurationServerImpl.java | 11 +- server/src/com/cloud/server/Criteria.java | 1 + .../src/com/cloud/server/ManagementServerImpl.java | 153 +- .../storage/dao/StoragePoolDetailsDaoImpl.java | 1 + .../src/com/cloud/storage/dao/VMTemplateDao.java | 2 +- .../com/cloud/storage/dao/VMTemplateDaoImpl.java | 11 +- .../storage/snapshot/SnapshotManagerImpl.java | 32 +- .../com/cloud/template/TemplateAdapterBase.java | 7 +- .../com/cloud/template/TemplateManagerImpl.java | 10 +- .../upgrade/PremiumDatabaseUpgradeChecker.java | 75 +- server/src/com/cloud/vm/UserVmManagerImpl.java | 111 +- .../com/cloud/vm/VirtualMachineManagerImpl.java | 26 + .../gslb/GlobalLoadBalancingRulesServiceImpl.java | 14 + .../com/cloud/network/MockNetworkManagerImpl.java | 3 +- .../com/cloud/network/MockNetworkModelImpl.java | 2 +- .../test/com/cloud/vm/MockUserVmManagerImpl.java | 48 +- server/test/com/cloud/vm/UserVmManagerTest.java | 45 +- .../test/com/cloud/vm/dao/UserVmDaoImplTest.java | 43 +- .../cloud/vm/dao/UserVmDaoTestConfiguration.java | 50 + .../cloud/vpc/MockConfigurationManagerImpl.java | 8 +- .../test/com/cloud/vpc/MockNetworkManagerImpl.java | 3 +- .../test/com/cloud/vpc/MockNetworkModelImpl.java | 2 +- .../affinity/AffinityApiTestConfiguration.java | 29 +- .../networkoffering/ChildTestConfiguration.java | 38 +- server/test/resources/UserVMDaoTestContext.xml | 44 + .../resource/NfsSecondaryStorageResource.java | 22 + setup/db/db/schema-410to420.sql | 116 +- .../component/test_multiple_ip_ranges.py | 238 ++ test/integration/component/test_vpn_users.py | 447 +++ test/integration/smoke/test_affinity_groups.py | 10 +- .../smoke/test_deploy_vm_with_userdata.py | 144 + test/integration/smoke/test_global_settings.py | 14 +- test/integration/smoke/test_public_ip_range.py | 6 +- test/integration/smoke/test_vm_life_cycle.py | 28 +- tools/marvin/marvin/asyncJobMgr.py | 70 +- tools/marvin/marvin/cloudstackConnection.py | 49 +- tools/marvin/marvin/cloudstackTestClient.py | 53 +- tools/marvin/marvin/codegenerator.py | 4 +- tools/marvin/marvin/dbConnection.py | 6 +- tools/marvin/marvin/deployDataCenter.py | 7 + tools/marvin/marvin/integration/lib/base.py | 607 +++- tools/marvin/marvin/integration/lib/utils.py | 17 +- tools/marvin/marvin/remoteSSHClient.py | 18 +- tools/transifex/.tx/config | 32 + tools/transifex/README-transifex.txt | 71 + tools/transifex/sync-transifex-ui.sh | 160 + ui/css/cloudstack3.css | 83 +- ui/dictionary.jsp | 1710 +++++----- ui/images/icons.png | Bin 50745 -> 50052 bytes ui/images/sprites.png | Bin 188552 -> 192407 bytes ui/index.jsp | 27 +- ui/scripts/affinity.js | 183 + ui/scripts/cloudStack.js | 9 +- ui/scripts/domains.js | 2 +- ui/scripts/events.js | 8 +- ui/scripts/instanceWizard.js | 941 +++--- ui/scripts/instances.js | 165 +- ui/scripts/regions.js | 112 +- ui/scripts/sharedFunctions.js | 4 + ui/scripts/storage.js | 14 +- ui/scripts/system.js | 450 ++- ui/scripts/ui-custom/affinity.js | 173 + ui/scripts/ui-custom/instanceWizard.js | 19 + ui/scripts/ui/widgets/detailView.js | 29 +- ui/scripts/ui/widgets/listView.js | 10 +- 181 files changed, 17443 insertions(+), 10706 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/api/src/com/cloud/network/NetworkModel.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/api/src/org/apache/cloudstack/api/ApiConstants.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/api/src/org/apache/cloudstack/api/BaseCmd.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/api/src/org/apache/cloudstack/api/ResponseGenerator.java ---------------------------------------------------------------------- diff --cc api/src/org/apache/cloudstack/api/ResponseGenerator.java index 6512516,cbf8bb2..571901d --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@@ -19,8 -19,8 +19,9 @@@ package org.apache.cloudstack.api import java.text.DecimalFormat; import java.util.EnumSet; import java.util.List; +import java.util.Map; + import com.cloud.vm.NicSecondaryIp; import org.apache.cloudstack.affinity.AffinityGroup; import org.apache.cloudstack.affinity.AffinityGroupResponse; import org.apache.cloudstack.api.ApiConstants.HostDetails; @@@ -415,12 -390,9 +416,11 @@@ public interface ResponseGenerator TrafficMonitorResponse createTrafficMonitorResponse(Host trafficMonitor); VMSnapshotResponse createVMSnapshotResponse(VMSnapshot vmSnapshot); - NicSecondaryIpResponse createSecondaryIPToNicResponse(String ip, - Long nicId, Long networkId); + NicSecondaryIpResponse createSecondaryIPToNicResponse(NicSecondaryIp result); public NicResponse createNicResponse(Nic result); + ApplicationLoadBalancerResponse createLoadBalancerContainerReponse(ApplicationLoadBalancerRule lb, Map<Ip, UserVm> lbInstances); + AffinityGroupResponse createAffinityGroupResponse(AffinityGroup group); Long getAffinityGroupId(String name, long entityOwnerId); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/api/src/org/apache/cloudstack/api/command/admin/internallb/ListInternalLBVMsCmd.java ---------------------------------------------------------------------- diff --cc api/src/org/apache/cloudstack/api/command/admin/internallb/ListInternalLBVMsCmd.java index 5c80e58,0000000..e314b32 mode 100644,000000..100644 --- a/api/src/org/apache/cloudstack/api/command/admin/internallb/ListInternalLBVMsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/internallb/ListInternalLBVMsCmd.java @@@ -1,144 -1,0 +1,151 @@@ +// 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.internallb; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.HostResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.VpcResponse; +import org.apache.cloudstack.api.response.ZoneResponse; +import org.apache.log4j.Logger; + +import com.cloud.async.AsyncJob; +import com.cloud.network.router.VirtualRouter.Role; + +@APICommand(name = "listInternalLoadBalancerVMs", description="List internal LB VMs.", responseObject=DomainRouterResponse.class) +public class ListInternalLBVMsCmd extends BaseListProjectAndAccountResourcesCmd { + public static final Logger s_logger = Logger.getLogger(ListInternalLBVMsCmd.class.getName()); + + private static final String s_name = "listinternallbvmssresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @Parameter(name=ApiConstants.HOST_ID, type=CommandType.UUID, entityType=HostResponse.class, + description="the host ID of the Internal LB VM") + private Long hostId; + + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=UserVmResponse.class, + description="the ID of the Internal LB VM") + private Long id; + + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the Internal LB VM") + private String routerName; + + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType=PodResponse.class, + description="the Pod ID of the Internal LB VM") + private Long podId; + + @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="the state of the Internal LB VM") + private String state; + + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + description="the Zone ID of the Internal LB VM") + private Long zoneId; + + @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.UUID, entityType=NetworkResponse.class, + description="list by network id") + private Long networkId; + + @Parameter(name=ApiConstants.VPC_ID, type=CommandType.UUID, entityType=VpcResponse.class, + description="List Internal LB VMs by VPC") + private Long vpcId; + + @Parameter(name=ApiConstants.FOR_VPC, type=CommandType.BOOLEAN, description="if true is passed for this parameter, list only VPC Internal LB VMs") + private Boolean forVpc; + ++ @Parameter(name=ApiConstants.ZONE_TYPE, type=CommandType.STRING, description="the network type of the zone that the virtual machine belongs to") ++ private String zoneType; ++ + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public Long getHostId() { + return hostId; + } + + public Long getId() { + return id; + } + + public String getRouterName() { + return routerName; + } + + public Long getPodId() { + return podId; + } + + public String getState() { + return state; + } + + public Long getZoneId() { + return zoneId; + } + + public Long getNetworkId() { + return networkId; + } + + public Long getVpcId() { + return vpcId; + } + + public Boolean getForVpc() { + return forVpc; + } + + public String getRole() { + return Role.INTERNAL_LB_VM.toString(); + } ++ ++ public String getZoneType() { ++ return zoneType; ++ } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public AsyncJob.Type getInstanceType() { + return AsyncJob.Type.DomainRouter; + } + + @Override + public void execute(){ + ListResponse<DomainRouterResponse> response = _queryService.searchForInternalLbVms(this); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } +} http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/client/pom.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/client/tomcatconf/applicationContext.xml.in ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/src/com/cloud/api/ApiDBUtils.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/api/ApiDBUtils.java index 9c8fd68,e291c84..f071ffd --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@@ -493,9 -495,9 +496,10 @@@ public class ApiDBUtils @Inject private VMSnapshotDao vmSnapshotDao; @Inject private NicSecondaryIpDao nicSecondaryIpDao; @Inject private VpcProvisioningService vpcProvSvc; + @Inject private ApplicationLoadBalancerRuleDao _appLbDao; @Inject private AffinityGroupDao affinityGroupDao; @Inject private AffinityGroupJoinDao affinityGroupJoinDao; + @Inject private GlobalLoadBalancingRulesService gslbService; @PostConstruct void init() { http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/src/com/cloud/api/ApiResponseHelper.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/api/ApiResponseHelper.java index 2162fda,6090ff0..f88f7c8 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@@ -34,10 -34,9 +34,11 @@@ import java.util.TimeZone import javax.inject.Inject; + import com.cloud.vm.*; import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.affinity.AffinityGroup; +import org.apache.cloudstack.affinity.AffinityGroupResponse; import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.BaseCmd; @@@ -273,19 -264,40 +274,42 @@@ import com.cloud.user.UserContext import com.cloud.uservm.UserVm; import com.cloud.utils.Pair; import com.cloud.utils.StringUtils; +import com.cloud.utils.net.Ip; import com.cloud.utils.net.NetUtils; import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.dao.NicSecondaryIpVO; import com.cloud.vm.snapshot.VMSnapshot; + + import org.apache.cloudstack.acl.ControlledEntity; + import org.apache.cloudstack.acl.ControlledEntity.ACLType; + import org.apache.cloudstack.affinity.AffinityGroup; + import org.apache.cloudstack.affinity.AffinityGroupResponse; + import org.apache.cloudstack.api.ApiConstants.HostDetails; + import org.apache.cloudstack.api.ApiConstants.VMDetails; + import org.apache.cloudstack.api.BaseCmd; + import org.apache.cloudstack.api.ResponseGenerator; + import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd; + import org.apache.cloudstack.api.response.*; + import org.apache.cloudstack.region.Region; + import org.apache.cloudstack.usage.Usage; + import org.apache.cloudstack.usage.UsageService; + import org.apache.cloudstack.usage.UsageTypes; + import com.cloud.vm.dao.UserVmData; + import com.cloud.vm.dao.UserVmData.NicData; + import com.cloud.vm.dao.UserVmData.SecurityGroupData; + import com.cloud.vm.snapshot.VMSnapshot; + import org.apache.cloudstack.api.ResponseGenerator; + import org.apache.cloudstack.api.response.VMSnapshotResponse; + import org.apache.log4j.Logger; + + import java.text.DecimalFormat; + import java.util.*; + + import javax.inject.Inject; + + import static java.util.Collections.emptyList; + import static java.util.Collections.singletonList; + @Component public class ApiResponseHelper implements ResponseGenerator { http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/src/com/cloud/api/query/QueryManagerImpl.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/api/query/QueryManagerImpl.java index 3edbc94,50018e5..808b1ef --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@@ -975,32 -981,27 +983,32 @@@ public class QueryManagerImpl extends M @Override public ListResponse<DomainRouterResponse> searchForRouters(ListRoutersCmd cmd) { - Pair<List<DomainRouterJoinVO>, Integer> result = searchForRoutersInternal(cmd); + Pair<List<DomainRouterJoinVO>, Integer> result = searchForRoutersInternal(cmd, cmd.getId(), cmd.getRouterName(), + cmd.getState(), cmd.getZoneId(), cmd.getPodId(), cmd.getHostId(), cmd.getKeyword(), cmd.getNetworkId(), - cmd.getVpcId(), cmd.getForVpc(), cmd.getRole()); ++ cmd.getVpcId(), cmd.getForVpc(), cmd.getRole(), cmd.getZoneType()); ListResponse<DomainRouterResponse> response = new ListResponse<DomainRouterResponse>(); List<DomainRouterResponse> routerResponses = ViewResponseHelper.createDomainRouterResponse(result.first().toArray(new DomainRouterJoinVO[result.first().size()])); response.setResponses(routerResponses, result.second()); return response; } + + @Override + public ListResponse<DomainRouterResponse> searchForInternalLbVms(ListInternalLBVMsCmd cmd) { + Pair<List<DomainRouterJoinVO>, Integer> result = searchForRoutersInternal(cmd, cmd.getId(), cmd.getRouterName(), + cmd.getState(), cmd.getZoneId(), cmd.getPodId(), cmd.getHostId(), cmd.getKeyword(), cmd.getNetworkId(), - cmd.getVpcId(), cmd.getForVpc(), cmd.getRole()); ++ cmd.getVpcId(), cmd.getForVpc(), cmd.getRole(), cmd.getZoneType()); + ListResponse<DomainRouterResponse> response = new ListResponse<DomainRouterResponse>(); + List<DomainRouterResponse> routerResponses = ViewResponseHelper.createDomainRouterResponse(result.first().toArray(new DomainRouterJoinVO[result.first().size()])); + response.setResponses(routerResponses, result.second()); + return response; + } - private Pair<List<DomainRouterJoinVO>, Integer> searchForRoutersInternal(ListRoutersCmd cmd) { - Long id = cmd.getId(); - String name = cmd.getRouterName(); - String state = cmd.getState(); - Long zoneId = cmd.getZoneId(); - String zoneType = cmd.getZoneType(); - Long pod = cmd.getPodId(); - Long hostId = cmd.getHostId(); - String keyword = cmd.getKeyword(); - Long networkId = cmd.getNetworkId(); - Long vpcId = cmd.getVpcId(); - Boolean forVpc = cmd.getForVpc(); + + private Pair<List<DomainRouterJoinVO>, Integer> searchForRoutersInternal(BaseListProjectAndAccountResourcesCmd cmd, Long id, - String name, String state, Long zoneId, Long podId, Long hostId, String keyword, Long networkId, Long vpcId, Boolean forVpc, String role) { ++ String name, String state, Long zoneId, Long podId, Long hostId, String keyword, Long networkId, Long vpcId, Boolean forVpc, String role, String zoneType) { + Account caller = UserContext.current().getCaller(); List<Long> permittedAccounts = new ArrayList<Long>(); @@@ -1072,10 -1073,14 +1081,15 @@@ sc.setParameters("dataCenterId", zoneId); } + if (podId != null) { + sc.setParameters("podId", podId); + } + + if (zoneType != null) { + sc.setParameters("dataCenterType", zoneType); + } + - if (pod != null) { - sc.setParameters("podId", pod); - } + if (hostId != null) { sc.setParameters("hostId", hostId); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java index 80398f4,125db17..a7a83de --- a/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java @@@ -157,18 -156,14 +157,20 @@@ public class DomainRouterJoinDaoImpl ex routerResponse.setIp6Dns2(router.getIp6Dns2()); routerResponse.setVpcId(router.getVpcUuid()); + + routerResponse.setRole(router.getRole().toString()); // set async job - routerResponse.setJobId(router.getJobUuid()); - routerResponse.setJobStatus(router.getJobStatus()); + if (router.getJobId() != null) { + routerResponse.setJobId(router.getJobUuid()); + routerResponse.setJobStatus(router.getJobStatus()); + } - routerResponse.setObjectName("router"); + if (router.getRole() == Role.INTERNAL_LB_VM) { + routerResponse.setObjectName("internalloadbalancervm"); + } else { + routerResponse.setObjectName("router"); + } return routerResponse; } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/src/com/cloud/configuration/Config.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/src/com/cloud/configuration/ConfigurationManager.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/src/com/cloud/configuration/ConfigurationManagerImpl.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/configuration/ConfigurationManagerImpl.java index f281b14,068a586..4425f28 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@@ -39,6 -39,9 +39,10 @@@ import javax.naming.NamingException import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; ++ + import com.cloud.dc.*; + import com.cloud.dc.dao.*; + import com.cloud.user.*; import org.apache.cloudstack.acl.SecurityChecker; import org.apache.cloudstack.api.ApiConstants.LDAPParams; import org.apache.cloudstack.api.command.admin.config.UpdateCfgCmd; @@@ -71,29 -78,8 +79,19 @@@ import com.cloud.api.ApiDBUtils import com.cloud.capacity.dao.CapacityDao; import com.cloud.configuration.Resource.ResourceType; import com.cloud.configuration.dao.ConfigurationDao; - import com.cloud.dc.AccountVlanMapVO; - import com.cloud.dc.ClusterVO; - import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenter.NetworkType; - import com.cloud.dc.DataCenterIpAddressVO; - import com.cloud.dc.DataCenterLinkLocalIpAddressVO; - import com.cloud.dc.DataCenterVO; - import com.cloud.dc.DcDetailVO; - import com.cloud.dc.HostPodVO; - import com.cloud.dc.Pod; - import com.cloud.dc.PodVlanMapVO; - import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; +import com.cloud.dc.VlanVO; +import com.cloud.dc.dao.AccountVlanMapDao; +import com.cloud.dc.dao.ClusterDao; +import com.cloud.dc.dao.DataCenterDao; +import com.cloud.dc.dao.DataCenterIpAddressDao; +import com.cloud.dc.dao.DataCenterLinkLocalIpAddressDao; +import com.cloud.dc.dao.DcDetailsDao; +import com.cloud.dc.dao.HostPodDao; +import com.cloud.dc.dao.PodVlanMapDao; +import com.cloud.dc.dao.VlanDao; ++ import com.cloud.deploy.DataCenterDeployment; import com.cloud.domain.Domain; import com.cloud.domain.DomainVO; http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/src/com/cloud/network/NetworkManagerImpl.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/network/NetworkManagerImpl.java index 3b644b7,4a8b38f..175974a --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@@ -162,7 -155,7 +163,8 @@@ public class NetworkManagerImpl extend @Inject PodVlanMapDao _podVlanMapDao; @Inject + NetworkOfferingDetailsDao _ntwkOffDetailsDao; + ConfigurationServer _configServer; List<NetworkGuru> _networkGurus; public List<NetworkGuru> getNetworkGurus() { http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/src/com/cloud/network/NetworkModelImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/src/com/cloud/network/NetworkServiceImpl.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/network/NetworkServiceImpl.java index 9f222a3,2dcb47d..8b77528 --- a/server/src/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/com/cloud/network/NetworkServiceImpl.java @@@ -143,28 -76,34 +143,29 @@@ import com.cloud.utils.Journal import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.component.ManagerBase; -import com.cloud.utils.db.*; +import com.cloud.utils.db.DB; +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.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; -import com.cloud.vm.*; -import com.cloud.vm.dao.*; -import org.apache.cloudstack.acl.ControlledEntity.ACLType; -import org.apache.cloudstack.acl.SecurityChecker; -import org.apache.cloudstack.acl.SecurityChecker.AccessType; -import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; -import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; -import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; -import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; -import org.apache.cloudstack.api.command.user.vm.ListNicsCmd; -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; - -import javax.ejb.Local; -import javax.inject.Inject; -import javax.naming.ConfigurationException; -import java.net.Inet6Address; -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.security.InvalidParameterException; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.*; +import com.cloud.vm.Nic; ++import com.cloud.vm.NicSecondaryIp; +import com.cloud.vm.NicVO; +import com.cloud.vm.ReservationContext; +import com.cloud.vm.ReservationContextImpl; +import com.cloud.vm.SecondaryStorageVmVO; +import com.cloud.vm.UserVmVO; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.dao.NicDao; +import com.cloud.vm.dao.NicSecondaryIpDao; +import com.cloud.vm.dao.NicSecondaryIpVO; +import com.cloud.vm.dao.UserVmDao; +import com.cloud.vm.dao.VMInstanceDao; /** * NetworkServiceImpl implements NetworkService. http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/src/com/cloud/network/firewall/FirewallManagerImpl.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/network/firewall/FirewallManagerImpl.java index 9a425e1,4ad8868..def4c1e --- a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java +++ b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java @@@ -27,7 -27,7 +27,8 @@@ import javax.ejb.Local import javax.inject.Inject; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.command.user.firewall.ListEgressFirewallRulesCmd; + import com.cloud.network.dao.*; import org.apache.cloudstack.api.command.user.firewall.ListFirewallRulesCmd; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/src/com/cloud/network/guru/GuestNetworkGuru.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/src/com/cloud/network/vpc/VpcManagerImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/src/com/cloud/server/ConfigurationServerImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/src/com/cloud/server/ManagementServerImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/test/com/cloud/network/MockNetworkManagerImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/test/com/cloud/network/MockNetworkModelImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/test/com/cloud/vpc/MockNetworkManagerImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/server/test/com/cloud/vpc/MockNetworkModelImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b24a764/setup/db/db/schema-410to420.sql ---------------------------------------------------------------------- diff --cc setup/db/db/schema-410to420.sql index 2ba5165,a6913b6..c714dee --- a/setup/db/db/schema-410to420.sql +++ b/setup/db/db/schema-410to420.sql @@@ -836,7 -838,7 +838,8 @@@ CREATE VIEW `cloud`.`domain_router_view domain_router.scripts_version scripts_version, domain_router.is_redundant_router is_redundant_router, domain_router.redundant_state redundant_state, -- domain_router.stop_pending stop_pending ++ domain_router.stop_pending stop_pending, ++ domain_router.role role from `cloud`.`domain_router` inner join @@@ -1107,143 -1109,8 +1110,42 @@@ CREATE VIEW `cloud`.`account_view` A and async_job.instance_type = 'Account' and async_job.job_status = 0; + + +ALTER TABLE `cloud`.`load_balancing_rules` ADD COLUMN `source_ip_address` varchar(40) COMMENT 'source ip address for the load balancer rule'; +ALTER TABLE `cloud`.`load_balancing_rules` ADD COLUMN `source_ip_address_network_id` bigint unsigned COMMENT 'the id of the network where source ip belongs to'; +ALTER TABLE `cloud`.`load_balancing_rules` ADD COLUMN `scheme` varchar(40) NOT NULL COMMENT 'load balancer scheme; can be Internal or Public'; +UPDATE `cloud`.`load_balancing_rules` SET `scheme`='Public'; + + - -- Add role to the domain router view - ALTER VIEW `cloud`.`domain_router_view` AS - select - vm_instance.id id, - vm_instance.name name, - account.id account_id, - account.uuid account_uuid, - account.account_name account_name, - account.type account_type, - domain.id domain_id, - domain.uuid domain_uuid, - domain.name domain_name, - domain.path domain_path, - projects.id project_id, - projects.uuid project_uuid, - projects.name project_name, - vm_instance.uuid uuid, - vm_instance.created created, - vm_instance.state state, - vm_instance.removed removed, - vm_instance.pod_id pod_id, - vm_instance.instance_name instance_name, - host_pod_ref.uuid pod_uuid, - data_center.id data_center_id, - data_center.uuid data_center_uuid, - data_center.name data_center_name, - data_center.dns1 dns1, - data_center.dns2 dns2, - data_center.ip6_dns1 ip6_dns1, - data_center.ip6_dns2 ip6_dns2, - host.id host_id, - host.uuid host_uuid, - host.name host_name, - vm_template.id template_id, - vm_template.uuid template_uuid, - service_offering.id service_offering_id, - disk_offering.uuid service_offering_uuid, - disk_offering.name service_offering_name, - nics.id nic_id, - nics.uuid nic_uuid, - nics.network_id network_id, - nics.ip4_address ip_address, - nics.ip6_address ip6_address, - nics.ip6_gateway ip6_gateway, - nics.ip6_cidr ip6_cidr, - nics.default_nic is_default_nic, - nics.gateway gateway, - nics.netmask netmask, - nics.mac_address mac_address, - nics.broadcast_uri broadcast_uri, - nics.isolation_uri isolation_uri, - vpc.id vpc_id, - vpc.uuid vpc_uuid, - networks.uuid network_uuid, - networks.name network_name, - networks.network_domain network_domain, - networks.traffic_type traffic_type, - networks.guest_type guest_type, - async_job.id job_id, - async_job.uuid job_uuid, - async_job.job_status job_status, - async_job.account_id job_account_id, - domain_router.template_version template_version, - domain_router.scripts_version scripts_version, - domain_router.is_redundant_router is_redundant_router, - domain_router.redundant_state redundant_state, - domain_router.stop_pending stop_pending, - domain_router.role role - from - `cloud`.`domain_router` - inner join - `cloud`.`vm_instance` ON vm_instance.id = domain_router.id - inner join - `cloud`.`account` ON vm_instance.account_id = account.id - inner join - `cloud`.`domain` ON vm_instance.domain_id = domain.id - left join - `cloud`.`host_pod_ref` ON vm_instance.pod_id = host_pod_ref.id - left join - `cloud`.`projects` ON projects.project_account_id = account.id - left join - `cloud`.`data_center` ON vm_instance.data_center_id = data_center.id - left join - `cloud`.`host` ON vm_instance.host_id = host.id - left join - `cloud`.`vm_template` ON vm_instance.vm_template_id = vm_template.id - left join - `cloud`.`service_offering` ON vm_instance.service_offering_id = service_offering.id - left join - `cloud`.`disk_offering` ON vm_instance.service_offering_id = disk_offering.id - left join - `cloud`.`volumes` ON vm_instance.id = volumes.instance_id - left join - `cloud`.`storage_pool` ON volumes.pool_id = storage_pool.id - left join - `cloud`.`nics` ON vm_instance.id = nics.instance_id - left join - `cloud`.`networks` ON nics.network_id = networks.id - left join - `cloud`.`vpc` ON domain_router.vpc_id = vpc.id - left join - `cloud`.`async_job` ON async_job.instance_id = vm_instance.id - and async_job.instance_type = 'DomainRouter' - and async_job.job_status = 0; - + +-- Add details talbe for the network offering +CREATE TABLE `cloud`.`network_offering_details` ( + `id` bigint unsigned NOT NULL auto_increment, + `network_offering_id` bigint unsigned NOT NULL COMMENT 'network offering id', + `name` varchar(255) NOT NULL, + `value` varchar(1024) NOT NULL, + PRIMARY KEY (`id`), + CONSTRAINT `fk_network_offering_details__network_offering_id` FOREIGN KEY `fk_network_offering_details__network_offering_id`(`network_offering_id`) REFERENCES `network_offerings`(`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- Change the constraint for the network service map table. Now we support multiple provider for the same service +ALTER TABLE `cloud`.`ntwk_service_map` DROP FOREIGN KEY `fk_ntwk_service_map__network_id`; +ALTER TABLE `cloud`.`ntwk_service_map` DROP INDEX `network_id`; + +ALTER TABLE `cloud`.`ntwk_service_map` ADD UNIQUE `network_id` (`network_id`,`service`,`provider`); +ALTER TABLE `cloud`.`ntwk_service_map` ADD CONSTRAINT `fk_ntwk_service_map__network_id` FOREIGN KEY (`network_id`) REFERENCES `networks` (`id`) ON DELETE CASCADE; + + +ALTER TABLE `cloud`.`network_offerings` ADD COLUMN `internal_lb` int(1) unsigned NOT NULL DEFAULT '0' COMMENT 'true if the network offering supports Internal lb service'; +ALTER TABLE `cloud`.`network_offerings` ADD COLUMN `public_lb` int(1) unsigned NOT NULL DEFAULT '0' COMMENT 'true if the network offering supports Public lb service'; +UPDATE `cloud`.`network_offerings` SET public_lb=1 where id IN (SELECT DISTINCT network_offering_id FROM `cloud`.`ntwk_offering_service_map` WHERE service='Lb'); + - alter table `cloud_usage`.`usage_network_offering` add column nic_id bigint(20) unsigned NOT NULL; + +INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'NetworkManager', 'internallbvm.service.offering', null, 'Uuid of the service offering used by internal lb vm; if NULL - default system internal lb offering will be used'); + + alter table `cloud_usage`.`usage_network_offering` add column nic_id bigint(20) unsigned NOT NULL; + ALTER TABLE `cloud`.`data_center_details` MODIFY value varchar(1024); + ALTER TABLE `cloud`.`cluster_details` MODIFY value varchar(255); + ALTER TABLE `cloud`.`storage_pool_details` MODIFY value varchar(255); + ALTER TABLE `cloud`.`account_details` MODIFY value varchar(255);