Merge branch 'master' of ssh://git.cloud.com/var/lib/git/cloudstack-oss

This commit is contained in:
will 2010-10-20 18:30:08 -07:00
commit f58e15d009
12 changed files with 152 additions and 79 deletions

View File

@ -394,7 +394,7 @@ def checkIscsi(session, args):
rdevpath = rdevpath.replace(".", "")
rdevpath = rdevpath.replace("/", "")
rdevpath = "/block/" + rdevpath
cmd = ["scsi_id", "-g", "-s", rdevpath ]
cmd = ["scsi_id", "-g", "-u", "-s", rdevpath ]
txt = util.pread2(cmd)
txt = txt.replace("\n", "")
if scsiid == txt:

View File

@ -961,6 +961,7 @@ public class NetworkManagerImpl implements NetworkManager {
instanceIds.add(instanceIdParam);
}
// FIXME: We should probably lock the load balancer here to prevent multiple updates...
LoadBalancerVO loadBalancer = _loadBalancerDao.findById(loadBalancerId);
if (loadBalancer == null) {
throw new InvalidParameterValueException("Failed to assign to load balancer " + loadBalancerId + ", the load balancer was not found.");
@ -995,9 +996,12 @@ public class NetworkManagerImpl implements NetworkManager {
}
}
List<Long> finalInstanceIds = new ArrayList<Long>();
for (Long instanceId : instanceIds) {
if (mappedInstanceIds.contains(instanceId)) {
continue;
} else {
finalInstanceIds.add(instanceId);
}
UserVmVO userVm = _vmDao.findById(instanceId);
@ -1125,6 +1129,14 @@ public class NetworkManagerImpl implements NetworkManager {
}
if ((updatedRules != null) && (updatedRules.size() == firewallRulesToApply.size())) {
// flag the instances as mapped to the load balancer
for (Long addedInstanceId : finalInstanceIds) {
LoadBalancerVMMapVO mappedVM = new LoadBalancerVMMapVO(loadBalancerId, addedInstanceId);
_loadBalancerVMMapDao.persist(mappedVM);
}
/* We used to add these instances as pending when the API command is received on the server, and once they were applied,
* the pending status was removed. In the 2.2 API framework, this is no longer done and instead the new mappings just
* need to be persisted
List<LoadBalancerVMMapVO> pendingMappedVMs = _loadBalancerVMMapDao.listByLoadBalancerId(loadBalancerId, true);
for (LoadBalancerVMMapVO pendingMappedVM : pendingMappedVMs) {
if (instanceIds.contains(pendingMappedVM.getInstanceId())) {
@ -1133,6 +1145,7 @@ public class NetworkManagerImpl implements NetworkManager {
_loadBalancerVMMapDao.update(pendingMappedVM.getId(), pendingMappedVMForUpdate);
}
}
*/
for (FirewallRuleVO updatedRule : updatedRules) {
if (updatedRule.getId() == null) {

View File

@ -5115,27 +5115,46 @@ public class ManagementServerImpl implements ManagementServer {
accountId = account.getId();
}
Filter searchFilter = new Filter(SnapshotVO.class, "created", false, cmd.getStartIndex(), cmd.getPageSizeVal());
SearchCriteria<SnapshotVO> sc = _snapshotDao.createSearchCriteria();
Object name = cmd.getSnapshotName();
Object id = cmd.getId();
Object keyword = cmd.getKeyword();
Object snapshotTypeStr = cmd.getSnapshotType();
String interval = cmd.getIntervalType();
sc.addAnd("status", SearchCriteria.Op.EQ, Snapshot.Status.BackedUp);
Filter searchFilter = new Filter(SnapshotVO.class, "created", false, cmd.getStartIndex(), cmd.getPageSizeVal());
SearchBuilder<SnapshotVO> sb = _snapshotDao.createSearchBuilder();
sb.and("status", sb.entity().getStatus(), SearchCriteria.Op.EQ);
sb.and("volumeId", sb.entity().getVolumeId(), SearchCriteria.Op.EQ);
sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE);
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
sb.and("accountId", sb.entity().getAccountId(), SearchCriteria.Op.EQ);
sb.and("snapshotTypeEQ", sb.entity().getSnapshotType(), SearchCriteria.Op.EQ);
sb.and("snapshotTypeNEQ", sb.entity().getSnapshotType(), SearchCriteria.Op.NEQ);
if ((accountId == null) && (domainId != null)) {
// if accountId isn't specified, we can do a domain match for the admin case
SearchBuilder<AccountVO> accountSearch = _accountDao.createSearchBuilder();
sb.join("accountSearch", accountSearch, sb.entity().getAccountId(), accountSearch.entity().getId(), JoinType.INNER);
SearchBuilder<DomainVO> domainSearch = _domainDao.createSearchBuilder();
domainSearch.and("path", domainSearch.entity().getPath(), SearchCriteria.Op.LIKE);
accountSearch.join("domainSearch", domainSearch, accountSearch.entity().getDomainId(), domainSearch.entity().getId(), JoinType.INNER);
}
SearchCriteria<SnapshotVO> sc = sb.create();
sc.setParameters("status", Snapshot.Status.BackedUp);
if (volumeId != null) {
sc.addAnd("volumeId", SearchCriteria.Op.EQ, volumeId);
sc.setParameters("volumeId", volumeId);
}
if (name != null) {
sc.addAnd("name", SearchCriteria.Op.LIKE, "%" + name + "%");
sc.setParameters("name", "%" + name + "%");
}
if (id != null) {
sc.addAnd("id", SearchCriteria.Op.EQ, id);
sc.setParameters("id", SearchCriteria.Op.EQ, id);
}
if (keyword != null) {
@ -5144,9 +5163,13 @@ public class ManagementServerImpl implements ManagementServer {
sc.addAnd("name", SearchCriteria.Op.SC, ssc);
}
if (accountId != null) {
sc.addAnd("accountId", SearchCriteria.Op.EQ, accountId);
sc.setParameters("accountId", accountId);
} else if (domainId != null) {
DomainVO domain = _domainDao.findById((Long)domainId);
SearchCriteria joinSearch = sc.getJoin("accountSearch");
joinSearch.setJoinParameters("domainSearch", "path", domain.getPath() + "%");
}
if (snapshotTypeStr != null) {
@ -5154,10 +5177,10 @@ public class ManagementServerImpl implements ManagementServer {
if (snapshotType == null) {
throw new InvalidParameterValueException("Unsupported snapshot type " + snapshotTypeStr);
}
sc.addAnd("snapshotType", SearchCriteria.Op.EQ, snapshotType.ordinal());
sc.setParameters("snapshotTypeEQ", snapshotType.ordinal());
} else {
// Show only MANUAL and RECURRING snapshot types
sc.addAnd("snapshotType", SearchCriteria.Op.NEQ, Snapshot.SnapshotType.TEMPLATE.ordinal());
sc.setParameters("snapshotTypeNEQ", Snapshot.SnapshotType.TEMPLATE.ordinal());
}
return _snapshotDao.search(sc, searchFilter);

View File

@ -42,7 +42,7 @@ a:link, a:visited {
}
a:visited {
a:hover {
text-decoration:underline;
}
@ -1479,11 +1479,11 @@ a:visited {
}
.leftmenu_arrows_firstlevel_open {
width:9px;
height:9px;
width:14px;
height:12px;
float:right;
margin:2px 4px 0 0;
background:url(../images/leftmenu_openarrow.png) no-repeat top left;
margin:0 4px 0 0;
background:url(../images/leftmenu_maindownarrow.png) no-repeat top left;
padding:0;
}
@ -3324,7 +3324,7 @@ a:hover.search_button {
border:1px solid #999;
position:absolute;
top:5px;
left:8px;
left:20px;
margin:0;
padding:0 0 10px 0;
}
@ -3338,6 +3338,34 @@ a:hover.search_button {
padding:0;
}
.networkswitch_infodropdown_actionbox {
width:192px;
height:auto;
float:left;
margin:5px 0 0 0;
display:inline;
padding:0;
}
.networkswitch_infodropdown_actionbox a {
float:right;
color:#2c8bbc;
font-size:10px;
font-weight:normal;
text-align:left;
margin:0 7px 0 0;
padding:0;
text-decoration:none;
}
.networkswitch_infodropdown_actionbox a:link, .networkswitch_infodropdown_actionbox a:visited {
text-decoration:none;
}
.networkswitch_infodropdown_actionbox a:hover {
text-decoration:underline;
}
.networkswitch_infodropdown_textbox li{
width:180px;
height:auto;
@ -3365,7 +3393,7 @@ a:hover.search_button {
height:15px;
float:left;
background:url(../images/networkswitch_infoicon.gif) no-repeat top left;
margin:-12px 0 0 20px;
margin:-12px 0 0 10px;
display:inline;
padding:0;
cursor:pointer;
@ -3431,7 +3459,7 @@ a:hover.search_button {
width:45px;
height:21px;
float:left;
margin:-22px 0 0 38px;
margin:-22px 0 0 29px;
padding:0;
}
@ -3447,15 +3475,15 @@ a:hover.search_button {
width:12px;
height:12px;
float:left;
background:url(../images/search_closeicon.gif) no-repeat top left;
margin:-22px 0 0 10px;
background:url(../images/search_closeicon_hover.gif) no-repeat top left;
margin:0 0 0 0;
padding:0;
cursor:hand;
cursor:pointer;
}
.networkswitch_closeicon{
background:url(../images/search_closeicon_hover.gif) no-repeat top left;
.networkswitch_closeicon:hover{
background:url(../images/search_closeicon.gif) no-repeat top left;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 588 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 379 B

After

Width:  |  Height:  |  Size: 375 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -686,9 +686,9 @@ long milliseconds = new Date().getTime();
<div class="leftmenu_content" id="header">
<div class="leftmenu_thirdindent">
<div class="leftmenu_arrows expanded_close" id="zone_arrow">
</div>
Zone: <strong><span id="zone_name"></span></strong>
</div>
<span id="zone_name_label">Zone: </span>
<span id="zone_name"></span>
</div>
</div>
<div id="zone_content" style="display: none">
@ -710,9 +710,9 @@ long milliseconds = new Date().getTime();
<div class="leftmenu_content" id="header">
<div class="leftmenu_fourthindent">
<div class="leftmenu_arrows expanded_close" id="pod_arrow">
</div>
Pod: <strong><span id="pod_name"></span></strong>
</div>
<span id="pod_name_label">Pod: </span>
<span id="pod_name"></span>
</div>
</div>
<div id="pod_content" style="display: none">
@ -732,9 +732,9 @@ long milliseconds = new Date().getTime();
<div class="leftmenu_content" id="header">
<div class="leftmenu_fifthindent">
<div class="leftmenu_arrows white_nonexpanded_close" id="cluster_arrow">
</div>
Cluster: <strong><span id="cluster_name"></span></strong>
</div>
<span id="cluster_name_label">Cluster: </span>
<span id="cluster_name"></span>
</div>
</div>
<div id="cluster_content">
@ -752,9 +752,9 @@ long milliseconds = new Date().getTime();
<div class="leftmenu_content" id="header">
<div class="leftmenu_fourthindent">
<div class="leftmenu_arrows white_nonexpanded_close" id="systemvm_arrow">
</div>
System VM: <strong><span id="systemvm_name"></span></strong>
</div>
<span id="systemvm_name_label">System VM: </span>
<span id="systemvm_name"></span>
</div>
</div>
</div>
@ -762,18 +762,18 @@ long milliseconds = new Date().getTime();
<!-- SystemVM Template (end) -->
<!-- domain tree node template (begin) -->
<div id="domain_tree_node_template" style="display:none">
<div class="leftmenu_domainindent" style="margin-left: 30px;">
<div id="domain_title_container" class="leftmenu_content">
<div class="tree_levels">
<div class="leftmenu_domainindent" id="domain_indent">
<div class="leftmenu_arrows expanded_close" id="domain_expand_icon">
</div>
<div id="domain_name" class="tree_links">
Domain Name</div>
</div>
<span id="domain_name">
Domain Name</span>
</div>
</div>
<div id="domain_children_container" style="display: none">
</div>
</div>
</div>
<!-- domain tree node template (end) -->
<!-- ***** templates (end) *************************************************************************************************-->

View File

@ -982,10 +982,14 @@
<!-- Direct VLAN Template (begin) -->
<div class="networkswitch_vlanpanel" id="direct_vlan_template" style="display: none;">
<div class="networkswitch_vlanconnect">
<div class="networkswitch_closeicon"></div>
<div class="networkswitch_vlan_infoicon">
</div>
<div class="networkswitch_infodropdown" style="display:none;">
<div class="networkswitch_infodropdown_actionbox">
<a href="#">Close</a>
</div>
<ul class="networkswitch_infodropdown_textbox">
<li><div class="networkswitch_infodropdown_textbox_label">Zone</div>: NC </li>
<li><div class="networkswitch_infodropdown_textbox_label">Network Type</div>: Root</li>

View File

@ -20,24 +20,7 @@
var $selectedDomainTreeNode;
function afterLoadDomainJSP() {
//testing code
/*
$("#leftmenu_domain_tree").empty();
var $newNode01 = $("#domain_tree_node_template").clone();
$newNode01.find("#domain_name").text("01")
var $newNode02 = $("#domain_tree_node_template").clone();
$newNode02.find("#domain_name").text("02")
var $newNode03 = $("#domain_tree_node_template").clone();
$newNode03.find("#domain_name").text("03");
$("#leftmenu_domain_tree").append($newNode01.show());
$newNode01.find("#domain_children_container").append($newNode02.show());
$newNode01.find("#domain_children_container").show();
$newNode02.find("#domain_children_container").append($newNode03.show());
$newNode02.find("#domain_children_container").show();
*/
function afterLoadDomainJSP() {
var defaultRootDomainId = g_domainid;
var defaultRootLevel = 0;
var childParentMap = {}; //map childDomainId to parentDomainId
@ -53,7 +36,8 @@ function afterLoadDomainJSP() {
childParentMap[json.id] = json.parentdomainid; //map childDomainId to parentDomainId
domainIdNameMap[json.id] = json.name; //map domainId to domainName
var template = $treenodeTemplate.clone(true);
var template = $treenodeTemplate.clone(true);
template.find("#domain_indent").css("marginLeft", (30*(level+1)));
template.attr("id", "domain_"+json.id);
template.data("jsonObj", json).data("domainLevel", level);
template.find("#domain_title_container").attr("id", "domain_title_container_"+json.id);
@ -74,7 +58,7 @@ function afterLoadDomainJSP() {
if (domains != null && domains.length > 0) {
for (var i = 0; i < domains.length; i++) {
drawNode(domains[i], level, container);
if(domains[i].haschild=="true")
if(domains[i].haschild == true)
drawTree(domains[i].id, (level+1), $("#domain_children_container_"+domains[i].id));
}
}

View File

@ -72,38 +72,48 @@ function buildZoneTree() {
}
break;
case "zone_name_label":
case "zone_name":
selectLeftMenu(target.parent().parent().parent());
var jsonObj = target.data("jsonObj");
selectTreeNodeInLeftMenu(target.parent().parent().parent());
var jsonObj = target.parent().parent().parent().parent().data("jsonObj");
showPage($("#zone_page"), jsonObj);
hideMiddleMenu();
zoneJsonToRightPanel(jsonObj);
break;
case "pod_name_label" :
case "pod_name" :
selectLeftMenu(target.parent().parent().parent());
var jsonObj = target.data("jsonObj");
selectTreeNodeInLeftMenu(target.parent().parent().parent());
var jsonObj = target.parent().parent().parent().parent().data("jsonObj");
showPage($("#pod_page"), jsonObj);
hideMiddleMenu();
showMiddleMenu();
podJsonToDetailsTab(jsonObj);
break;
var podId = jsonObj.id;
$("#midmenu_container").empty();
listMidMenuItems2(("listHosts&type=Routing&podid="+podId), "listhostsresponse", "host", hostToMidmenu, hostToRigntPanel, hostGetMidmenuId, true);
listMidMenuItems2(("listStoragePools&podid="+podId), "liststoragepoolsresponse", "storagepool", primarystorageToMidmenu, primarystorageToRigntPanel, primarystorageGetMidmenuId, false);
break;
case "cluster_name_label" :
case "cluster_name" :
selectLeftMenu(target.parent().parent().parent());
var jsonObj = target.data("jsonObj");
selectTreeNodeInLeftMenu(target.parent().parent().parent());
var jsonObj = target.parent().parent().parent().parent().data("jsonObj");
showPage($("#cluster_page"), jsonObj);
showMiddleMenu();
clusterJsonToDetailsTab(jsonObj);
var clusterId = jsonObj.id;
$("#midmenu_container").empty();
listMidMenuItems2(("listHosts&clusterid="+clusterId), "listhostsresponse", "host", hostToMidmenu, hostToRigntPanel, hostGetMidmenuId, true);
listMidMenuItems2(("listHosts&type=Routing&clusterid="+clusterId), "listhostsresponse", "host", hostToMidmenu, hostToRigntPanel, hostGetMidmenuId, true);
listMidMenuItems2(("listStoragePools&clusterid="+clusterId), "liststoragepoolsresponse", "storagepool", primarystorageToMidmenu, primarystorageToRigntPanel, primarystorageGetMidmenuId, false);
break;
case "systemvm_name_label" :
case "systemvm_name" :
selectLeftMenu(target.parent().parent().parent());
var jsonObj = target.data("jsonObj");
selectTreeNodeInLeftMenu(target.parent().parent().parent());
var jsonObj = target.parent().parent().parent().parent().data("jsonObj");
showPage($("#systemvm_page"), jsonObj);
hideMiddleMenu();
systemvmJsonToDetailsTab(jsonObj);
@ -117,9 +127,17 @@ function buildZoneTree() {
//***** build zone tree (end) *************************************************************************************************
}
function selectTreeNodeInLeftMenu($menuToSelect, expandable) {
if($selectedLeftMenu != null)
$selectedLeftMenu.removeClass("selected");
$menuToSelect.addClass("selected");
$selectedLeftMenu = $menuToSelect;
}
function zoneJSONToTreeNode(json, $zoneNode) {
var zoneid = json.id;
$zoneNode.attr("id", "zone_" + zoneid);
$zoneNode.data("jsonObj", json);
$zoneNode.data("id", zoneid).data("name", fromdb(json.name));
var zoneName = $zoneNode.find("#zone_name").text(fromdb(json.name));
zoneName.data("jsonObj", json);
@ -162,7 +180,8 @@ function zoneJSONToTreeNode(json, $zoneNode) {
function podJSONToTreeNode(json, $podNode) {
var podid = json.id;
$podNode.attr("id", "pod_" + podid);
$podNode.attr("id", "pod_" + podid);
$podNode.data("jsonObj", json);
$podNode.data("id", podid).data("name", fromdb(json.name));
var podName = $podNode.find("#pod_name").text(fromdb(json.name));
@ -189,6 +208,7 @@ function podJSONToTreeNode(json, $podNode) {
function systemvmJSONToTreeNode(json, $systemvmNode) {
var systemvmid = json.id;
$systemvmNode.attr("id", "systemvm_"+systemvmid);
$systemvmNode.data("jsonObj", json);
$systemvmNode.data("id", systemvmid).data("name", json.name);
var systeymvmName = $systemvmNode.find("#systemvm_name").text(json.name);
systeymvmName.data("jsonObj", json);
@ -196,6 +216,7 @@ function systemvmJSONToTreeNode(json, $systemvmNode) {
function clusterJSONToTreeNode(json, $clusterNode) {
$clusterNode.attr("id", "cluster_"+json.id);
$clusterNode.data("jsonObj", json);
$clusterNode.data("id", json.id).data("name", fromdb(json.name));
var clusterName = $clusterNode.find("#cluster_name").text(fromdb(json.name));
clusterName.data("jsonObj", json);

View File

@ -945,7 +945,7 @@ function showNetworkingTab(p_domainId, p_account) {
for (var i = 0; i < instances.length; i++) {
var vmName = getVmName(instances[i].name, instances[i].displayname);
html = $("<option value='" + instances[i].id + "'>" + vmName + "</option>")
html.data("vmPrivateIp", instances[i].privateip).data("vmName", vmName);
html.data("vmPrivateIp", instances[i].ipaddress).data("vmName", vmName);
vmSelect.append(html);
}
} else {
@ -989,8 +989,8 @@ function showNetworkingTab(p_domainId, p_account) {
data: createURL("command=createLoadBalancerRule&response=json"+array1.join("")),
dataType: "json",
success: function(json) {
var items = json.createloadbalancerruleresponse.loadbalancerrule;
loadBalancerJsonToTemplate(items[0],template);
var items = json.createloadbalancerruleresponse;
loadBalancerJsonToTemplate(items,template);
loadingImg.hide();
rowContainer.show();
refreshCreateLoadBalancerRow();