diff --git a/cloud.spec b/cloud.spec
index 931b2b1d1fb..03e6228744d 100644
--- a/cloud.spec
+++ b/cloud.spec
@@ -218,14 +218,19 @@ Requires: jpackage-utils
Requires: %{name}-daemonize
Requires: /sbin/service
Requires: /sbin/chkconfig
+
+%if 0%{?rhel} >= 6
+Requires: cloud-kvm
+%else
Requires: kvm
+%endif
+
%if 0%{?fedora} >= 12
Requires: qemu-cloud-system-x86
Requires: qemu-cloud-img
%endif
%if 0%{?rhel} >= 6
-Requires: cloud-qemu-kvm
Requires: cloud-qemu-img
%endif
diff --git a/deps/.project b/deps/.project
new file mode 100644
index 00000000000..2d10b0c4b06
--- /dev/null
+++ b/deps/.project
@@ -0,0 +1,11 @@
+
+
+ deps
+
+
+
+
+
+
+
+
diff --git a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java
index 95ed8945228..c96dae3c6dc 100644
--- a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java
+++ b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java
@@ -201,10 +201,10 @@ public class ApiXmlDocWriter {
regularUserSorted.close();
//gzip directory with xml doc
- zipDir(dirName + "xmldoc.zip", xmlDocDir);
+ //zipDir(dirName + "xmldoc.zip", xmlDocDir);
//Delete directory
- deleteDir(new File(xmlDocDir));
+ //deleteDir(new File(xmlDocDir));
} catch (Exception ex) {
ex.printStackTrace();
diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java
index 0e59a7363cc..d641635b3b4 100644
--- a/server/src/com/cloud/network/element/VirtualRouterElement.java
+++ b/server/src/com/cloud/network/element/VirtualRouterElement.java
@@ -32,25 +32,26 @@ import com.cloud.deploy.DeployDestination;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.host.Host;
import com.cloud.network.LoadBalancerVO;
import com.cloud.network.Network;
-import com.cloud.network.Network.Capability;
-import com.cloud.network.Network.GuestIpType;
-import com.cloud.network.Network.Provider;
-import com.cloud.network.Network.Service;
import com.cloud.network.NetworkManager;
import com.cloud.network.PublicIpAddress;
import com.cloud.network.RemoteAccessVpn;
import com.cloud.network.VpnUser;
+import com.cloud.network.Network.Capability;
+import com.cloud.network.Network.GuestIpType;
+import com.cloud.network.Network.Provider;
+import com.cloud.network.Network.Service;
import com.cloud.network.dao.LoadBalancerDao;
import com.cloud.network.dao.NetworkDao;
import com.cloud.network.lb.LoadBalancingRule;
-import com.cloud.network.lb.LoadBalancingRule.LbDestination;
import com.cloud.network.lb.LoadBalancingRulesManager;
+import com.cloud.network.lb.LoadBalancingRule.LbDestination;
import com.cloud.network.router.VirtualNetworkApplianceManager;
import com.cloud.network.rules.FirewallRule;
-import com.cloud.network.rules.FirewallRule.Purpose;
import com.cloud.network.rules.PortForwardingRule;
+import com.cloud.network.rules.FirewallRule.Purpose;
import com.cloud.network.vpn.RemoteAccessVpnElement;
import com.cloud.offering.NetworkOffering;
import com.cloud.offerings.dao.NetworkOfferingDao;
@@ -63,8 +64,8 @@ import com.cloud.vm.NicProfile;
import com.cloud.vm.ReservationContext;
import com.cloud.vm.UserVmManager;
import com.cloud.vm.VirtualMachine;
-import com.cloud.vm.VirtualMachine.State;
import com.cloud.vm.VirtualMachineProfile;
+import com.cloud.vm.VirtualMachine.State;
import com.cloud.vm.dao.DomainRouterDao;
import com.cloud.vm.dao.UserVmDao;
@@ -96,6 +97,7 @@ public class VirtualRouterElement extends AdapterBase implements NetworkElement,
if (!canHandle(guestConfig.getGuestType(), dest.getDataCenter())) {
return false;
}
+
_routerMgr.deployVirtualRouter(guestConfig, dest, context.getAccount());
return true;
@@ -111,6 +113,30 @@ public class VirtualRouterElement extends AdapterBase implements NetworkElement,
@SuppressWarnings("unchecked")
VirtualMachineProfile uservm = (VirtualMachineProfile)vm;
+ DomainRouterVO router = _routerDao.findById(uservm.getVirtualMachine().getDomainRouterId());
+ if(router != null) {
+ State state = router.getState();
+ if ( state == State.Starting ) {
+ // wait 300 seconds
+ for ( int i = 0; i < 300; ) {
+ try {
+ Thread.sleep(2000);
+ } catch (Exception e) {
+ }
+ i += 2;
+
+ state = router.getState();
+ if ( state != State.Starting ) {
+ break;
+ }
+ }
+ }
+
+ // TODO: need to find a better exception to throw!
+ if(state != State.Running)
+ throw new ResourceUnavailableException("Virtual router is not available", Host.class, router.getHostId());
+ }
+
return _routerMgr.addVirtualMachineIntoNetwork(config, nic, uservm, dest, context, false) != null;
} else {
return false;
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index e2697ca5a18..db30258a9df 100644
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -72,10 +72,9 @@ import com.cloud.configuration.ConfigurationManager;
import com.cloud.configuration.dao.ConfigurationDao;
import com.cloud.configuration.dao.ResourceLimitDao;
import com.cloud.dc.DataCenter;
-import com.cloud.dc.DataCenter.NetworkType;
import com.cloud.dc.DataCenterVO;
import com.cloud.dc.HostPodVO;
-import com.cloud.dc.Vlan;
+import com.cloud.dc.DataCenter.NetworkType;
import com.cloud.dc.dao.AccountVlanMapDao;
import com.cloud.dc.dao.DataCenterDao;
import com.cloud.dc.dao.HostPodDao;
@@ -105,18 +104,18 @@ import com.cloud.network.IPAddressVO;
import com.cloud.network.IpAddress;
import com.cloud.network.LoadBalancerVO;
import com.cloud.network.Network;
-import com.cloud.network.Network.GuestIpType;
import com.cloud.network.NetworkManager;
import com.cloud.network.NetworkVO;
-import com.cloud.network.Networks.BroadcastDomainType;
-import com.cloud.network.Networks.IsolationType;
-import com.cloud.network.Networks.TrafficType;
import com.cloud.network.PublicIpAddress;
import com.cloud.network.RemoteAccessVpn;
import com.cloud.network.SshKeysDistriMonitor;
import com.cloud.network.VirtualNetworkApplianceService;
import com.cloud.network.VpnUser;
import com.cloud.network.VpnUserVO;
+import com.cloud.network.Network.GuestIpType;
+import com.cloud.network.Networks.BroadcastDomainType;
+import com.cloud.network.Networks.IsolationType;
+import com.cloud.network.Networks.TrafficType;
import com.cloud.network.addr.PublicIp;
import com.cloud.network.dao.FirewallRulesDao;
import com.cloud.network.dao.IPAddressDao;
@@ -127,8 +126,8 @@ import com.cloud.network.dao.NetworkRuleConfigDao;
import com.cloud.network.dao.RemoteAccessVpnDao;
import com.cloud.network.dao.VpnUserDao;
import com.cloud.network.lb.LoadBalancingRule;
-import com.cloud.network.lb.LoadBalancingRule.LbDestination;
import com.cloud.network.lb.LoadBalancingRulesManager;
+import com.cloud.network.lb.LoadBalancingRule.LbDestination;
import com.cloud.network.ovs.GreTunnelException;
import com.cloud.network.ovs.OvsNetworkManager;
import com.cloud.network.router.VirtualRouter.Role;
@@ -177,11 +176,11 @@ import com.cloud.vm.ReservationContext;
import com.cloud.vm.UserVmVO;
import com.cloud.vm.VMInstanceVO;
import com.cloud.vm.VirtualMachine;
-import com.cloud.vm.VirtualMachine.State;
import com.cloud.vm.VirtualMachineGuru;
import com.cloud.vm.VirtualMachineManager;
import com.cloud.vm.VirtualMachineName;
import com.cloud.vm.VirtualMachineProfile;
+import com.cloud.vm.VirtualMachine.State;
import com.cloud.vm.dao.DomainRouterDao;
import com.cloud.vm.dao.NicDao;
import com.cloud.vm.dao.UserVmDao;
@@ -1034,24 +1033,9 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
} else {
EventUtils.saveEvent(User.UID_SYSTEM, owner.getAccountId(), EventVO.LEVEL_ERROR, EventTypes.EVENT_ROUTER_CREATE, "router creation failed", startEventId);
}
-
- }
- State state = router.getState();
-
- if ( state == State.Starting ) {
- // wait 300 seconds
- for ( int i = 0; i < 300; ) {
- try {
- Thread.sleep(2);
- } catch (Exception e) {
- }
- i += 2;
- state = router.getState();
- if ( state != State.Starting ) {
- break;
- }
- }
}
+
+ State state = router.getState();
if (state != State.Starting && state != State.Running) {
long startEventId = EventUtils.saveStartedEvent(User.UID_SYSTEM, owner.getId(), EventTypes.EVENT_ROUTER_START, "Starting router : " +router.getName());
router = this.start(router, _accountService.getSystemUser(), _accountService.getSystemAccount());
@@ -1061,11 +1045,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
EventUtils.saveEvent(User.UID_SYSTEM, owner.getAccountId(), EventVO.LEVEL_ERROR, EventTypes.EVENT_ROUTER_START, "failed to start router", startEventId);
}
}
- state = router.getState();
- if ( state == State.Running ) {
- return router;
- }
- throw new CloudRuntimeException(router.getName() + " is not running , it is in " + state);
+
+ return router;
}
@Override
diff --git a/server/src/com/cloud/vm/dao/UserVmDaoImpl.java b/server/src/com/cloud/vm/dao/UserVmDaoImpl.java
index 41170718b4c..c3fcd3c9d39 100755
--- a/server/src/com/cloud/vm/dao/UserVmDaoImpl.java
+++ b/server/src/com/cloud/vm/dao/UserVmDaoImpl.java
@@ -62,6 +62,7 @@ public class UserVmDaoImpl extends GenericDaoBase implements Use
protected final SearchBuilder DestroySearch;
protected SearchBuilder AccountDataCenterVirtualSearch;
+ protected SearchBuilder UserVmSearch;
protected final Attribute _updateTimeAttr;
protected final UserVmDetailsDaoImpl _detailsDao = ComponentLocator.inject(UserVmDetailsDaoImpl.class);
@@ -323,18 +324,18 @@ public class UserVmDaoImpl extends GenericDaoBase implements Use
@Override
public List listByNetworkId(long networkId) {
- if (AccountDataCenterVirtualSearch == null) {
+ if (UserVmSearch == null) {
NicDao _nicDao = ComponentLocator.getLocator("management-server").getDao(NicDao.class);
SearchBuilder nicSearch = _nicDao.createSearchBuilder();
nicSearch.and("networkId", nicSearch.entity().getNetworkId(), SearchCriteria.Op.EQ);
nicSearch.and("ip4Address", nicSearch.entity().getIp4Address(), SearchCriteria.Op.NNULL);
- AccountDataCenterVirtualSearch = createSearchBuilder();
- AccountDataCenterVirtualSearch.join("nicSearch", nicSearch, AccountDataCenterVirtualSearch.entity().getId(), nicSearch.entity().getInstanceId(), JoinBuilder.JoinType.INNER);
- AccountDataCenterVirtualSearch.done();
+ UserVmSearch = createSearchBuilder();
+ UserVmSearch.join("nicSearch", nicSearch, UserVmSearch.entity().getId(), nicSearch.entity().getInstanceId(), JoinBuilder.JoinType.INNER);
+ UserVmSearch.done();
}
- SearchCriteria sc = AccountDataCenterVirtualSearch.create();
+ SearchCriteria sc = UserVmSearch.create();
sc.setJoinParameters("nicSearch", "networkId", networkId);
return listBy(sc);
diff --git a/ui/scripts/cloud.core.instance.js b/ui/scripts/cloud.core.instance.js
index a1a1530301d..6769f01ed59 100644
--- a/ui/scripts/cloud.core.instance.js
+++ b/ui/scripts/cloud.core.instance.js
@@ -174,12 +174,9 @@ function bindStartVMButton() {
inProcessText: "Starting Instance....",
asyncJobResponse: "startvirtualmachineresponse",
afterActionSeccessFn: function(json, $midmenuItem1, id) {
- var jsonObj = json.queryasyncjobresultresponse.jobresult.virtualmachine;
-
- vmToMidmenu(jsonObj, $midmenuItem1);
- if( ($("#right_panel_content #tab_content_details").length > 0)
- && ($("#right_panel_content #tab_content_details").data("jsonObj") != null )
- && (jsonObj.id == $("#right_panel_content #tab_content_details").data("jsonObj").id))
+ var jsonObj = json.queryasyncjobresultresponse.jobresult.virtualmachine;
+ vmToMidmenu(jsonObj, $midmenuItem1);
+ if(jsonObj.id.toString() == $("#right_panel_content #tab_content_details").find("#id").text())
vmToRightPanel($midmenuItem1);
}
}
@@ -225,10 +222,8 @@ function bindStopVMButton() {
afterActionSeccessFn: function(json, $midmenuItem1, id) {
var jsonObj = json.queryasyncjobresultresponse.jobresult.virtualmachine;
vmToMidmenu(jsonObj, $midmenuItem1);
- if( ($("#right_panel_content #tab_content_details").length > 0)
- && ($("#right_panel_content #tab_content_details").data("jsonObj") != null )
- && (jsonObj.id == $("#right_panel_content #tab_content_details").data("jsonObj").id))
- vmToRightPanel($midmenuItem1);
+ if(jsonObj.id.toString() == $("#right_panel_content #tab_content_details").find("#id").text())
+ vmToRightPanel($midmenuItem1);
}
}
@@ -273,10 +268,8 @@ function bindRebootVMButton() {
afterActionSeccessFn: function(json, $midmenuItem1, id) {
var jsonObj = json.queryasyncjobresultresponse.jobresult.virtualmachine;
vmToMidmenu(jsonObj, $midmenuItem1);
- if( ($("#right_panel_content #tab_content_details").length > 0)
- && ($("#right_panel_content #tab_content_details").data("jsonObj") != null )
- && (jsonObj.id == $("#right_panel_content #tab_content_details").data("jsonObj").id))
- vmToRightPanel($midmenuItem1);
+ if(jsonObj.id.toString() == $("#right_panel_content #tab_content_details").find("#id").text())
+ vmToRightPanel($midmenuItem1);
}
}
@@ -321,10 +314,8 @@ function bindDestroyVMButton() {
afterActionSeccessFn: function(json, $midmenuItem1, id) {
var jsonObj = json.queryasyncjobresultresponse.jobresult.virtualmachine;
vmToMidmenu(jsonObj, $midmenuItem1);
- if( ($("#right_panel_content #tab_content_details").length > 0)
- && ($("#right_panel_content #tab_content_details").data("jsonObj") != null )
- && (jsonObj.id == $("#right_panel_content #tab_content_details").data("jsonObj").id))
- vmToRightPanel($midmenuItem1);
+ if(jsonObj.id.toString() == $("#right_panel_content #tab_content_details").find("#id").text())
+ vmToRightPanel($midmenuItem1);
}
}
diff --git a/ui/scripts/cloud.core.js b/ui/scripts/cloud.core.js
index 216ba58839b..18f6a38acda 100644
--- a/ui/scripts/cloud.core.js
+++ b/ui/scripts/cloud.core.js
@@ -399,14 +399,14 @@ function doActionToMidMenu(id, apiInfo, apiCommand) {
$("body").stopTime(timerKey);
$midmenuItem1.find("#content").removeClass("inaction");
$midmenuItem1.find("#spinning_wheel").hide();
- hideDetailsTabActionSpinningWheel(id, inProcessText);
+ hideDetailsTabActionSpinningWheel(id, inProcessText, $midmenuItem1);
if (result.jobstatus == 1) { // Succeeded
$midmenuItem1.find("#info_icon").removeClass("error").show();
$midmenuItem1.data("afterActionInfo", (label + " action succeeded."));
afterActionSeccessFn(json, $midmenuItem1, id);
- } else if (result.jobstatus == 2) { // Failed
- $midmenuItem1.find("#info_icon").addClass("error").show();
- $midmenuItem1.data("afterActionInfo", (label + " action failed. Reason: " + fromdb(result.jobresult.errortext)));
+ } else if (result.jobstatus == 2) { // Failed
+ var errorMsg = label + " action failed. Reason: " + fromdb(result.jobresult.errortext);
+ handleErrorInMidMenu2(errorMsg, $midmenuItem1, id, inProcessText);
}
}
},
@@ -438,7 +438,7 @@ function doActionToMidMenu(id, apiInfo, apiCommand) {
$midmenuItem1.find("#spinning_wheel").hide();
$midmenuItem1.find("#info_icon").removeClass("error").show();
$midmenuItem1.data("afterActionInfo", (label + " action succeeded."));
- hideDetailsTabActionSpinningWheel(id, inProcessText);
+ hideDetailsTabActionSpinningWheel(id, inProcessText, $midmenuItem1);
afterActionSeccessFn(json, $midmenuItem1, id);
},
error: function(XMLHttpResponse) {
@@ -449,29 +449,34 @@ function doActionToMidMenu(id, apiInfo, apiCommand) {
//Sync job (end) *****
}
-function handleErrorInMidMenu(XMLHttpResponse, $midmenuItem1, id, inProcessText) {
- $midmenuItem1.find("#content").removeClass("inaction");
- $midmenuItem1.find("#spinning_wheel").hide();
- $midmenuItem1.find("#info_icon").addClass("error").show();
- $midmenuItem1.find("#first_row").text("Action failed");
- hideDetailsTabActionSpinningWheel(id, inProcessText);
-
+function handleErrorInMidMenu(XMLHttpResponse, $midmenuItem1, id, inProcessText) {
var errorMsg = "";
if(XMLHttpResponse.responseText != null & XMLHttpResponse.responseText.length > 0) {
errorMsg = parseXMLHttpResponse(XMLHttpResponse);
}
+ handleErrorInMidMenu2(errorMsg, $midmenuItem1, id, inProcessText);
+}
+
+function handleErrorInMidMenu2(errorMsg, $midmenuItem1, id, inProcessText) {
+ $midmenuItem1.find("#content").removeClass("inaction");
+ $midmenuItem1.find("#spinning_wheel").hide();
+ $midmenuItem1.find("#info_icon").addClass("error").show();
+ //$midmenuItem1.find("#first_row").text("Action failed");
+ $midmenuItem1.data("afterActionInfo", errorMsg);
+ hideDetailsTabActionSpinningWheel(id, inProcessText, $midmenuItem1);
+
if(errorMsg.length > 0)
$midmenuItem1.find("#second_row").text(fromdb(errorMsg));
else
$midmenuItem1.find("#second_row").html(" ");
}
-function hideDetailsTabActionSpinningWheel(id, inProcessText) {
+function hideDetailsTabActionSpinningWheel(id, inProcessText, $midmenuItem1) {
var $detailsTab = $("#right_panel_content #tab_content_details");
var jsonObj = $detailsTab.data("jsonObj");
var $spinningWheel = $detailsTab.find("#spinning_wheel");
- if(jsonObj != null && ("id" in jsonObj) && jsonObj.id == id && ($spinningWheel.find("#description").text() == inProcessText)) {
- $spinningWheel.hide();
+ if((id == $detailsTab.find("#id").text()) && (inProcessText == $spinningWheel.find("#description").text())) {
+ copyActionInfoFromMidMenuToRightPanel($midmenuItem1);
}
}
@@ -506,14 +511,17 @@ function copyActionInfoFromMidMenuToRightPanel($midmenuItem1) {
}
var $midMenuSpinningWheel = $midmenuItem1.find("#spinning_wheel");
- if($midMenuSpinningWheel.css("display") != "none") {
- var $detailsTabSpinningWheel = $("#right_panel_content #tab_content_details").find("#spinning_wheel");
+ var $detailsTabSpinningWheel = $("#right_panel_content #tab_content_details").find("#spinning_wheel");
+ if($midMenuSpinningWheel.css("display") != "none") {
if($detailsTabSpinningWheel.css("display") == "none") {
var inProcessText = $midMenuSpinningWheel.data("inProcessText");
$detailsTabSpinningWheel.find("#description").text(inProcessText);
$detailsTabSpinningWheel.show();
}
}
+ else {
+ $detailsTabSpinningWheel.hide();
+ }
}
//***** actions for middle menu (end) **************************************************************************
diff --git a/utils/.classpath b/utils/.classpath
index a2f59b44764..e1b97740fe8 100644
--- a/utils/.classpath
+++ b/utils/.classpath
@@ -1,13 +1,16 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+