http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java ---------------------------------------------------------------------- diff --cc plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 4a398cf,e837dbd..bb4198f --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@@ -2786,8 -2766,18 +2766,18 @@@ public class VmwareResource implements if (s_logger.isInfoEnabled()) { s_logger.info("Executing resource PingTestCommand: " + _gson.toJson(cmd)); } - + String controlIp = cmd.getRouterIp(); + String args = " -c 1 -n -q " + cmd.getPrivateIp(); + try { + VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME); + Pair<Boolean, String> result = SshHelper.sshExecute(controlIp, DEFAULT_DOMR_SSHPORT, "root", mgr.getSystemVMKeyFile(), null, "/bin/ping" + args); + if(result.first()) - return new Answer(cmd); + return new Answer(cmd); + } catch (Exception e) { + s_logger.error("Unable to execute ping command on DomR (" + controlIp + "), domR may not be ready yet. failure due to " + + VmwareHelper.getExceptionMessage(e), e); + } + return new Answer(cmd,false,"PingTestCommand failed"); } protected Answer execute(CheckOnHostCommand cmd) {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java ---------------------------------------------------------------------- diff --cc plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java index e4d52f5,272c357..bfa44c8 --- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java +++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java @@@ -1008,28 -987,18 +1008,33 @@@ public class ElasticLoadBalancerManager return VirtualMachineName.getSystemVmId(vmName); } + + @Override + public boolean plugNic(Network network, NicTO nic, VirtualMachineTO vm, + ReservationContext context, DeployDestination dest) throws ConcurrentOperationException, ResourceUnavailableException, + InsufficientCapacityException { + //not supported + throw new UnsupportedOperationException("Plug nic is not supported for vm of type " + vm.getType()); + } - @Override - public boolean recreateNeeded( - VirtualMachineProfile<DomainRouterVO> profile, long hostId, - Commands cmds, ReservationContext context) { - // TODO Auto-generated method stub - return false; - } + @Override + public boolean unplugNic(Network network, NicTO nic, VirtualMachineTO vm, + ReservationContext context, DeployDestination dest) throws ConcurrentOperationException, ResourceUnavailableException { + //not supported + throw new UnsupportedOperationException("Unplug nic is not supported for vm of type " + vm.getType()); + } + + + @Override + public boolean recreateNeeded( + VirtualMachineProfile<DomainRouterVO> profile, long hostId, Commands cmds, ReservationContext context) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void prepareStop(VirtualMachineProfile<DomainRouterVO> profile) { + } + } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java index 1a09503,a7e457c..f833e98 --- a/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java +++ b/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java @@@ -374,5 -352,9 +374,9 @@@ public class AgentBasedConsoleProxyMana Commands cmds, ReservationContext context) { // TODO Auto-generated method stub return false; - } + } + + @Override + public void prepareStop(VirtualMachineProfile<ConsoleProxyVO> profile) { + } -} +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index 326dbb4,7101375..72d48b4 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@@ -2031,5 -2013,9 +2031,9 @@@ public class ConsoleProxyManagerImpl im Commands cmds, ReservationContext context) { // TODO Auto-generated method stub return false; - } + } + + @Override + public void prepareStop(VirtualMachineProfile<ConsoleProxyVO> profile) { + } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/server/src/com/cloud/network/NetworkManagerImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 93f1baf,82f7231..d2118d2 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@@ -496,47 -504,20 +496,26 @@@ public class VirtualNetworkApplianceMan final Transaction txn = Transaction.currentTxn(); try { txn.start(); - final UserStatisticsVO userStats = _userStatsDao.lock(router.getAccountId(), router.getDataCenterIdToDeployIn(), router.getNetworkId(), null, router.getId(), router.getType().toString()); - if (userStats != null) { + //FIXME!!! - UserStats command should grab bytesSent/Received for all guest interfaces of the VR + List<Long> routerGuestNtwkIds = _routerDao.getRouterNetworks(router.getId()); + for (Long guestNtwkId : routerGuestNtwkIds) { + final UserStatisticsVO userStats = _userStatsDao.lock(router.getAccountId(), router.getDataCenterIdToDeployIn(), + guestNtwkId, null, router.getId(), router.getType().toString()); + if (userStats != null) { - final RebootAnswer sa = (RebootAnswer) answer; - final Long received = sa.getBytesReceived(); - long netBytes = 0; - if (received != null) { - if (received.longValue() >= userStats.getCurrentBytesReceived()) { - netBytes = received.longValue(); - } else { - netBytes = userStats.getCurrentBytesReceived() + received; - } - } else { - netBytes = userStats.getCurrentBytesReceived(); - } + final long currentBytesRcvd = userStats.getCurrentBytesReceived(); - userStats.setCurrentBytesReceived(0); + userStats.setCurrentBytesReceived(0); - userStats.setNetBytesReceived(userStats.getNetBytesReceived() + netBytes); - - final Long sent = sa.getBytesSent(); + userStats.setNetBytesReceived(userStats.getNetBytesReceived() + currentBytesRcvd); - if (sent != null) { - if (sent.longValue() >= userStats.getCurrentBytesSent()) { - netBytes = sent.longValue(); - } else { - netBytes = userStats.getCurrentBytesSent() + sent; - } - } else { - netBytes = userStats.getCurrentBytesSent(); - } - userStats.setNetBytesSent(userStats.getNetBytesSent() + netBytes); + final long currentBytesSent = userStats.getCurrentBytesSent(); - userStats.setCurrentBytesSent(0); + userStats.setCurrentBytesSent(0); + userStats.setNetBytesSent(userStats.getNetBytesSent() + currentBytesSent); - _userStatsDao.update(userStats.getId(), userStats); - s_logger.debug("Successfully updated user statistics as a part of domR " + router + " reboot/stop"); - } else { - s_logger.warn("User stats were not created for account " + router.getAccountId() + " and dc " + router.getDataCenterIdToDeployIn()); + _userStatsDao.update(userStats.getId(), userStats); + s_logger.debug("Successfully updated user statistics as a part of domR " + router + " reboot/stop"); + } else { + s_logger.warn("User stats were not created for account " + router.getAccountId() + " and dc " + router.getDataCenterIdToDeployIn()); + } } + txn.commit(); } catch (final Exception e) { txn.rollback(); http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/server/src/com/cloud/network/rules/RulesManagerImpl.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/network/rules/RulesManagerImpl.java index 14588dd,b45443e..928e6b8 --- a/server/src/com/cloud/network/rules/RulesManagerImpl.java +++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java @@@ -372,13 -331,12 +371,15 @@@ public class RulesManagerImpl implement } @Override + @ActionEvent(eventType = EventTypes.EVENT_ENABLE_STATIC_NAT, eventDescription = "enabling static nat") - public boolean enableStaticNat(long ipId, long vmId, boolean isSystemVm) throws NetworkRuleConflictException, ResourceUnavailableException { + public boolean enableStaticNat(long ipId, long vmId, long networkId, boolean isSystemVm) + throws NetworkRuleConflictException, ResourceUnavailableException { UserContext ctx = UserContext.current(); Account caller = ctx.getCaller(); + UserContext.current().setEventDetails("Ip Id: " + ipId); + // Verify input parameters + IPAddressVO ipAddress = _ipAddressDao.findById(ipId); if (ipAddress == null) { throw new InvalidParameterValueException("Unable to find ip address by id " + ipId); http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/server/src/com/cloud/upgrade/dao/Upgrade302to303.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/server/src/com/cloud/vm/UserVmManagerImpl.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/vm/UserVmManagerImpl.java index b57ac15,b221ef1..4522557 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@@ -3679,20 -3630,8 +3679,24 @@@ public class UserVmManagerImpl implemen return vm; } - @Override + @Override + public boolean plugNic(Network network, NicTO nic, VirtualMachineTO vm, + ReservationContext context, DeployDestination dest) throws ConcurrentOperationException, ResourceUnavailableException, + InsufficientCapacityException { + //not supported + throw new UnsupportedOperationException("Plug nic is not supported for vm of type " + vm.getType()); + } + + + @Override + public boolean unplugNic(Network network, NicTO nic, VirtualMachineTO vm, + ReservationContext context, DeployDestination dest) throws ConcurrentOperationException, ResourceUnavailableException { + //not supported + throw new UnsupportedOperationException("Unplug nic is not supported for vm of type " + vm.getType()); + } ++ ++ @Override + public void prepareStop(VirtualMachineProfile<UserVmVO> profile) { - } ++ } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/server/src/com/cloud/vm/VirtualMachineGuru.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/vm/VirtualMachineGuru.java index dbd5531,26c3944..2b9114d --- a/server/src/com/cloud/vm/VirtualMachineGuru.java +++ b/server/src/com/cloud/vm/VirtualMachineGuru.java @@@ -82,32 -76,9 +82,40 @@@ public interface VirtualMachineGuru<T e Long convertToId(String vmName); /** ++<<<<<<< HEAD + * Prepare for a nic to be plugged into the network. + * @param network + * @param nic + * @param vm + * @param context + * @param dest TODO + * @return + * @throws ConcurrentOperationException + * @throws ResourceUnavailableException + * @throws InsufficientNetworkCapacityException + */ + boolean plugNic(Network network, NicTO nic, VirtualMachineTO vm, + ReservationContext context, DeployDestination dest) throws ConcurrentOperationException, + ResourceUnavailableException, InsufficientCapacityException; + + /** + * A nic is unplugged from this network. + * @param network + * @param nic + * @param vm + * @param context + * @param dest TODO + * @return + * @throws ConcurrentOperationException + * @throws ResourceUnavailableException + */ + boolean unplugNic(Network network, NicTO nic, VirtualMachineTO vm, + ReservationContext context, DeployDestination dest) throws ConcurrentOperationException, ResourceUnavailableException; ++ ++ /** + * Prepare Vm for Stop + * @param profile + * @return + */ + void prepareStop(VirtualMachineProfile<T> profile); } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/server/src/com/cloud/vm/VirtualMachineManagerImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/setup/db/create-schema.sql ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/ui/css/cloudstack3.css ---------------------------------------------------------------------- diff --cc ui/css/cloudstack3.css index 291711a,876d663..dd1b5d8 --- a/ui/css/cloudstack3.css +++ b/ui/css/cloudstack3.css @@@ -10004,3 -9969,7 +10006,7 @@@ div.panel.ui-dialog div.list-view div.f background-position: -230px -615px; } + .label-hovered { + cursor: pointer; + color: blue !important; -} ++} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/ui/index.jsp ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/ui/scripts/system.js ---------------------------------------------------------------------- diff --cc ui/scripts/system.js index c08eddc,59d2d87..b369bec --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@@ -8115,7 -7766,29 +8137,29 @@@ validation: { required: true }, isHidden: true }, - + + // RBD + rbdmonitor: { + label: 'label.rbd.monitor', + validation: { required: true }, + isHidden: true + }, + rbdpool: { + label: 'label.rbd.pool', + validation: { required: true }, + isHidden: true + }, + rbdid: { + label: 'label.rbd.id', + validation: { required: false }, + isHidden: true + }, + rbdsecret: { + label: 'label.rbd.secret', + validation: { required: false }, + isHidden: true + }, + //always appear (begin) storageTags: { label: 'label.storage.tags', http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/ui/scripts/ui-custom/instanceWizard.js ---------------------------------------------------------------------- diff --cc ui/scripts/ui-custom/instanceWizard.js index ef65963,b94e587..1e8dca9 --- a/ui/scripts/ui-custom/instanceWizard.js +++ b/ui/scripts/ui-custom/instanceWizard.js @@@ -539,31 -539,48 +542,48 @@@ }, 'review': function($step, formData) { - return { - response: { - success: function(args) { - $step.find('[wizard-field]').each(function() { - var field = $(this).attr('wizard-field'); - var fieldName; - var $input = $wizard.find('[wizard-field=' + field + ']').filter(function() { - return $(this).is(':selected') || $(this).is(':checked'); - }); + $step.find('[wizard-field]').each(function() { + var field = $(this).attr('wizard-field'); + var fieldName; + var $input = $wizard.find('[wizard-field=' + field + ']').filter(function() { + return $(this).is(':selected') || $(this).is(':checked'); + }); - if ($input.is('option')) { - fieldName = $input.html(); - } else if ($input.is('input[type=radio]')) { + if ($input.is('option')) { + fieldName = $input.html(); + } else if ($input.is('input[type=radio]')) { + // Choosen New network as default + if ($input.parents('div.new-network').size()) { + fieldName = $input.closest('div.new-network').find('input[name="new-network-name"]').val(); + // Choosen Network from existed + } else if ($input.parents('div.my-networks').size()) { + fieldName = $input.closest('div.select').find('.select-desc .name').html(); + } else { - fieldName = $input.parent().find('.select-desc .name').html(); - } + fieldName = $input.parent().find('.select-desc .name').html(); + } + } else if ($input.eq(0).is('input[type=checkbox]')) { + fieldName = ''; + $input.each(function(index) { + if (index != 0) fieldName += '<br />'; + fieldName += $(this).next('div.select-desc').find('.name').html(); + }); + } - if (fieldName) { - $(this).html(fieldName); - } else { - $(this).html('(' + _l('label.none') + ')'); - } + if (fieldName) { + $(this).html(fieldName); + } else { + $(this).html('(' + _l('label.none') + ')'); + } - }); + + var conditionalFieldFrom = $(this).attr('conditional-field'); + if (conditionalFieldFrom) { + if ($wizard.find('.'+conditionalFieldFrom).css('display') == 'block') { + $(this).closest('div.select').show(); + } else { + $(this).closest('div.select').hide(); } } - }; + }); } }; http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a39fd612/ui/scripts/ui/widgets/multiEdit.js ----------------------------------------------------------------------
