You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by we...@apache.org on 2013/10/30 15:25:33 UTC

[1/3] git commit: updated refs/heads/4.2 to 4b8d636

Updated Branches:
  refs/heads/4.2 d5cca46ae -> 4b8d636ce


CLOUDSTACK-4830: allow create account and user by domain admin


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/0d12e3eb
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/0d12e3eb
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/0d12e3eb

Branch: refs/heads/4.2
Commit: 0d12e3eb9d4fb0166fc553da7366f4da786daa14
Parents: d5cca46
Author: Wei Zhou <w....@leaseweb.com>
Authored: Wed Oct 30 15:11:59 2013 +0100
Committer: Wei Zhou <w....@leaseweb.com>
Committed: Wed Oct 30 15:11:59 2013 +0100

----------------------------------------------------------------------
 client/tomcatconf/commands.properties.in        | 10 ++++-----
 server/src/com/cloud/api/ApiDBUtils.java        | 10 ++++++++-
 .../com/cloud/api/query/QueryManagerImpl.java   |  4 ++--
 .../com/cloud/api/query/ViewResponseHelper.java |  6 +++++-
 ui/scripts/accounts.js                          | 22 ++++++++++++++++++--
 ui/scripts/sharedFunctions.js                   |  2 +-
 6 files changed, 42 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0d12e3eb/client/tomcatconf/commands.properties.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in
index 66223f5..a490680 100644
--- a/client/tomcatconf/commands.properties.in
+++ b/client/tomcatconf/commands.properties.in
@@ -19,9 +19,9 @@
 ### Please standardize naming conventions to camel-case (even for acronyms).
 
 ### Account commands
-createAccount=3
-deleteAccount=3
-updateAccount=3
+createAccount=7
+deleteAccount=7
+updateAccount=7
 disableAccount=7
 enableAccount=7
 lockAccount=7
@@ -29,8 +29,8 @@ listAccounts=15
 markDefaultZoneForAccount=1
 
 #### User commands
-createUser=3
-deleteUser=3
+createUser=7
+deleteUser=7
 updateUser=15
 listUsers=7
 lockUser=7

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0d12e3eb/server/src/com/cloud/api/ApiDBUtils.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java
index 2263c4d..70fa744 100755
--- a/server/src/com/cloud/api/ApiDBUtils.java
+++ b/server/src/com/cloud/api/ApiDBUtils.java
@@ -1473,7 +1473,15 @@ public class ApiDBUtils {
     }
 
     public static UserResponse newUserResponse(UserAccountJoinVO usr) {
-        return _userAccountJoinDao.newUserResponse(usr);
+        return newUserResponse(usr, null);
+    }
+    public static UserResponse newUserResponse(UserAccountJoinVO usr, Long domainId) {
+        UserResponse response = _userAccountJoinDao.newUserResponse(usr);
+        if (domainId != null && usr.getDomainId() != domainId)
+            response.setIsCallerChildDomain(true);
+        else
+            response.setIsCallerChildDomain(false);
+        return response;
     }
 
     public static UserAccountJoinVO newUserView(User usr){

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0d12e3eb/server/src/com/cloud/api/query/QueryManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java
index 305c065..66104b6 100644
--- a/server/src/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/com/cloud/api/query/QueryManagerImpl.java
@@ -336,8 +336,8 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
     public ListResponse<UserResponse> searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException {
         Pair<List<UserAccountJoinVO>, Integer> result = searchForUsersInternal(cmd);
         ListResponse<UserResponse> response = new ListResponse<UserResponse>();
-        List<UserResponse> userResponses = ViewResponseHelper.createUserResponse(result.first().toArray(
-                new UserAccountJoinVO[result.first().size()]));
+        List<UserResponse> userResponses = ViewResponseHelper.createUserResponse(UserContext.current().getCaller().getDomainId(), 
+                result.first().toArray(new UserAccountJoinVO[result.first().size()]));
         response.setResponses(userResponses, result.second());
         return response;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0d12e3eb/server/src/com/cloud/api/query/ViewResponseHelper.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/ViewResponseHelper.java b/server/src/com/cloud/api/query/ViewResponseHelper.java
index 1418795..f2901e1 100644
--- a/server/src/com/cloud/api/query/ViewResponseHelper.java
+++ b/server/src/com/cloud/api/query/ViewResponseHelper.java
@@ -81,9 +81,13 @@ public class ViewResponseHelper {
     public static final Logger s_logger = Logger.getLogger(ViewResponseHelper.class);
 
     public static List<UserResponse> createUserResponse(UserAccountJoinVO... users) {
+        return createUserResponse(null, users);
+    }
+
+    public static List<UserResponse> createUserResponse(Long domainId, UserAccountJoinVO... users) {
         List<UserResponse> respList = new ArrayList<UserResponse>();
         for (UserAccountJoinVO vt : users){
-            respList.add(ApiDBUtils.newUserResponse(vt));
+            respList.add(ApiDBUtils.newUserResponse(vt, domainId));
         }
         return respList;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0d12e3eb/ui/scripts/accounts.js
----------------------------------------------------------------------
diff --git a/ui/scripts/accounts.js b/ui/scripts/accounts.js
index 9ba3ebf..343557c 100644
--- a/ui/scripts/accounts.js
+++ b/ui/scripts/accounts.js
@@ -66,7 +66,7 @@
                         add: {
                             label: 'label.add.account',
                             preFilter: function(args) {
-                                if (isAdmin())
+                                if (isAdmin() || isDomainAdmin())
                                     return true;
                                 else
                                     return false;
@@ -1103,7 +1103,7 @@
                             label: 'label.add.user',
 
                             preFilter: function(args) {
-                                if (isAdmin())
+                                if (isAdmin() || isDomainAdmin())
                                     return true;
                                 else
                                     return false;
@@ -1602,6 +1602,16 @@
             }
             allowedActions.push("updateResourceCount");
         } else if (isDomainAdmin()) {
+            if (jsonObj.name != g_account) {
+                allowedActions.push("edit"); //updating networkdomain is allowed on any account, including system-generated default admin account
+                if (jsonObj.state == "enabled") {
+                    allowedActions.push("disable");
+                    allowedActions.push("lock");
+                } else if (jsonObj.state == "disabled" || jsonObj.state == "locked") {
+                    allowedActions.push("enable");
+                }
+                allowedActions.push("remove");
+            }
             allowedActions.push("updateResourceCount");
         }
         return allowedActions;
@@ -1627,6 +1637,14 @@
             }
         } else {
             if (isSelfOrChildDomainUser(jsonObj.username, jsonObj.accounttype, jsonObj.domainid, jsonObj.iscallerchilddomain)) {
+                if (isDomainAdmin() && jsonObj.username != g_username) {
+                    allowedActions.push("edit");
+                    if (jsonObj.state == "enabled")
+                        allowedActions.push("disable");
+                    if (jsonObj.state == "disabled")
+                        allowedActions.push("enable");
+                    allowedActions.push("remove");
+                }
                 allowedActions.push("changePassword");
                 allowedActions.push("generateKeys");
             }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0d12e3eb/ui/scripts/sharedFunctions.js
----------------------------------------------------------------------
diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js
index 358b26a..87255cb 100644
--- a/ui/scripts/sharedFunctions.js
+++ b/ui/scripts/sharedFunctions.js
@@ -750,7 +750,7 @@ var addGuestNetworkDialog = {
     function isSelfOrChildDomainUser(username, useraccounttype, userdomainid, iscallerchilddomain) {
         if (username == g_username) { //is self
             return true;
-        } else if (isDomainAdmin() && iscallerchilddomain && (useraccounttype == 0)) { //domain admin to user
+        } else if (isDomainAdmin() && !iscallerchilddomain && (useraccounttype == 0)) { //domain admin to user
             return true;
         } else if (isDomainAdmin() && iscallerchilddomain && (userdomainid != g_domainid)) { //domain admin to subdomain admin and user
             return true;


[2/3] git commit: updated refs/heads/4.2 to 4b8d636

Posted by we...@apache.org.
CLOUDSTACK-4831: allow create network by domain admin


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/46e4cfd3
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/46e4cfd3
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/46e4cfd3

Branch: refs/heads/4.2
Commit: 46e4cfd3c3c79e3bc3ec4a49c4ebae6c32240db3
Parents: 0d12e3e
Author: Wei Zhou <w....@leaseweb.com>
Authored: Wed Oct 30 15:12:32 2013 +0100
Committer: Wei Zhou <w....@leaseweb.com>
Committed: Wed Oct 30 15:12:32 2013 +0100

----------------------------------------------------------------------
 ui/scripts/network.js | 55 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 55 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/46e4cfd3/ui/scripts/network.js
----------------------------------------------------------------------
diff --git a/ui/scripts/network.js b/ui/scripts/network.js
index 53b78a6..8f548cd 100755
--- a/ui/scripts/network.js
+++ b/ui/scripts/network.js
@@ -542,6 +542,48 @@
                                     },
                                     networkDomain: {
                                         label: 'label.network.domain'
+                                    },
+                                    domain: {
+                                        label: 'label.domain',
+                                        select: function(args) {
+                                            var items = [];
+                                            $.ajax({
+                                                url: createURL("listDomains&listAll=true"),
+                                                dataType: "json",
+                                                async: false,
+                                                success: function(json) {
+                                                    var items = [];
+                                                    items.push({
+                                                        id: "",
+                                                        description: ""
+                                                    });
+                                                    var domainObjs = json.listdomainsresponse.domain;
+                                                    $(domainObjs).each(function() {
+                                                        items.push({
+                                                            id: this.id,
+                                                            description: this.path
+                                                        });
+                                                    });
+                                                    args.response.success({
+                                                        data: items
+                                                    });
+                                                }
+                                            });
+                                            args.$select.change(function() {
+                                                var $form = $(this).closest('form');
+                                                if ($(this).val() == "") {
+                                                    $form.find('.form-item[rel=account]').hide();
+                                                } else {
+                                                    $form.find('.form-item[rel=account]').css('display', 'inline-block');
+                                                }
+                                            });
+                                        },
+                                    },
+                                    account: {
+                                        label: 'label.account',
+                                        validation: {
+                                            required: true
+                                        },
                                     }
                                 }
                             },
@@ -581,6 +623,19 @@
                                     });
                                 }
 
+                                if (args.$form.find('.form-item[rel=domain]').css("display") != "none") {
+                                    if (args.data.domain != null && args.data.domain.length > 0) {
+                                        $.extend(dataObj, {
+                                            domainid: args.data.domain
+                                        });
+                                    }
+                                    if (args.data.account != null && args.data.account.length > 0) {
+                                        $.extend(dataObj, {
+                                            account: args.data.account
+                                        });
+                                    }
+                                }
+
                                 $.ajax({
                                     url: createURL('createNetwork'),
                                     data: dataObj,


[3/3] git commit: updated refs/heads/4.2 to 4b8d636

Posted by we...@apache.org.
remove unused file lock codes from LibvirtStorageAdaptor.java


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/4b8d636c
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/4b8d636c
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/4b8d636c

Branch: refs/heads/4.2
Commit: 4b8d636ce66fa8e4ed9cc56e44f4fa88e0e18cb8
Parents: 46e4cfd
Author: Wei Zhou <w....@leaseweb.com>
Authored: Wed Oct 30 15:13:14 2013 +0100
Committer: Wei Zhou <w....@leaseweb.com>
Committed: Wed Oct 30 15:13:14 2013 +0100

----------------------------------------------------------------------
 .../kvm/storage/LibvirtStorageAdaptor.java      | 36 --------------------
 1 file changed, 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4b8d636c/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
index 51e3363..0760e51 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java
@@ -20,13 +20,10 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.BufferedInputStream;
 import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 import java.util.Map;
-import java.util.HashMap;
 import org.apache.log4j.Logger;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.cloudstack.utils.qemu.QemuImg;
@@ -37,7 +34,6 @@ import org.libvirt.Connect;
 import org.libvirt.LibvirtException;
 import org.libvirt.Secret;
 import org.libvirt.StoragePool;
-import org.libvirt.StoragePoolInfo;
 import org.libvirt.StorageVol;
 import org.libvirt.StoragePoolInfo.StoragePoolState;
 import com.ceph.rados.Rados;
@@ -48,7 +44,6 @@ import com.ceph.rbd.RbdImage;
 import com.ceph.rbd.RbdException;
 import com.ceph.rbd.jna.RbdSnapInfo;
 
-import com.cloud.agent.api.ManageSnapshotCommand;
 import com.cloud.hypervisor.kvm.resource.LibvirtConnection;
 import com.cloud.hypervisor.kvm.resource.LibvirtSecretDef;
 import com.cloud.hypervisor.kvm.resource.LibvirtSecretDef.usage;
@@ -63,7 +58,6 @@ import com.cloud.exception.InternalErrorException;
 import com.cloud.storage.Storage.StoragePoolType;
 import com.cloud.storage.StorageLayer;
 import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.OutputInterpreter;
 import com.cloud.utils.script.Script;
 
 public class LibvirtStorageAdaptor implements StorageAdaptor {
@@ -72,8 +66,6 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
     private StorageLayer _storageLayer;
     private String _mountPoint = "/mnt";
     private String _manageSnapshotPath;
-    private String _lockfile = "KVMFILELOCK" + File.separator + ".lock";
-    private static final int ACQUIRE_GLOBAL_FILELOCK_TIMEOUT_FOR_KVM = 300; // 300 seconds
 
     private String rbdTemplateSnapName = "cloudstack-base-snap";
     private int rbdFeatures = (1<<0); /* Feature 1<<0 means layering in RBD format 2 */
@@ -1175,10 +1167,6 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
         return deleteStoragePool(pool.getUuid());
     }
 
-    // refreshPool and deleteVol are used to fix CLOUDSTACK-2729/CLOUDSTACK-2780
-    // They are caused by a libvirt bug (https://bugzilla.redhat.com/show_bug.cgi?id=977706)
-    // However, we also need to fix the issues in CloudStack source code.
-    // A file lock is used to prevent deleting a volume from a KVM storage pool when refresh it.
     private void refreshPool(StoragePool pool) throws LibvirtException {
         pool.refresh(0);
         return;
@@ -1188,28 +1176,4 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
         vol.delete(0);
     }
 
-    private boolean lock(String path, int wait) {
-        File lockFile = new File(path);
-        lockFile.getParentFile().mkdir();
-        boolean havelock = false;
-        try {
-            while (wait > 0) {
-                if (lockFile.createNewFile()) {
-                    havelock = true;
-                    break;
-                }
-                s_logger.debug("lockFile " + _lockfile + " already exists, waiting 1000 ms");
-                Thread.sleep(1000);
-                wait--;
-            }
-        } catch (IOException e) {
-        } catch (InterruptedException e) {
-        }
-        return havelock;
-    }
-
-    private void unlock(String path) {
-        File lockFile = new File(path);
-        lockFile.delete();
-    }
 }