You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by al...@apache.org on 2014/01/17 00:49:24 UTC
git commit: updated refs/heads/master to bd79fb3
Updated Branches:
refs/heads/master 07f73ec05 -> bd79fb33a
CLOUDSTACK-5870: API support for retrieving user data
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/bd79fb33
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/bd79fb33
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/bd79fb33
Branch: refs/heads/master
Commit: bd79fb33a6978a9dbe7933bcda1579238da4bb27
Parents: 07f73ec
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Thu Jan 16 15:31:01 2014 -0800
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Thu Jan 16 15:31:18 2014 -0800
----------------------------------------------------------------------
api/src/com/cloud/vm/UserVmService.java | 8 +++
.../api/command/admin/vm/GetVMUserDataCmd.java | 63 ++++++++++++++++++++
.../api/response/VMUserDataResponse.java | 26 ++++++++
client/tomcatconf/commands.properties.in | 1 +
.../com/cloud/server/ManagementServerImpl.java | 2 +
server/src/com/cloud/vm/UserVmManagerImpl.java | 12 ++++
6 files changed, 112 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bd79fb33/api/src/com/cloud/vm/UserVmService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/vm/UserVmService.java b/api/src/com/cloud/vm/UserVmService.java
index e02573d..51a8fdf 100755
--- a/api/src/com/cloud/vm/UserVmService.java
+++ b/api/src/com/cloud/vm/UserVmService.java
@@ -461,4 +461,12 @@ public interface UserVmService {
UserVm expungeVm(long vmId) throws ResourceUnavailableException, ConcurrentOperationException;
+ /**
+ * Finds and returns an encrypted password for a VM.
+ *
+ * @param userVmId
+ * @return Base64 encoded userdata
+ */
+ String getVmUserData(long vmId);
+
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bd79fb33/api/src/org/apache/cloudstack/api/command/admin/vm/GetVMUserDataCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/GetVMUserDataCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/GetVMUserDataCmd.java
new file mode 100644
index 0000000..b02dc11
--- /dev/null
+++ b/api/src/org/apache/cloudstack/api/command/admin/vm/GetVMUserDataCmd.java
@@ -0,0 +1,63 @@
+package org.apache.cloudstack.api.command.admin.vm;
+
+import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.BaseCmd;
+import org.apache.cloudstack.api.Parameter;
+import org.apache.cloudstack.api.response.UserVmResponse;
+import org.apache.cloudstack.api.response.VMUserDataResponse;
+import org.apache.log4j.Logger;
+
+import com.cloud.user.Account;
+import com.cloud.uservm.UserVm;
+
+@APICommand(name = "getVirtualMachineUserData", description = "Returns user data associated with the VM", responseObject = VMUserDataResponse.class, since = "4.4")
+public class GetVMUserDataCmd extends BaseCmd {
+ public static final Logger s_logger = Logger.getLogger(GetVMUserDataCmd.class);
+ private static final String s_name = "getvirtualmachineuserdataresponse";
+
+ /////////////////////////////////////////////////////
+ //////////////// API parameters /////////////////////
+ /////////////////////////////////////////////////////
+
+ @Parameter(name = ApiConstants.VIRTUAL_MACHINE_ID, type = CommandType.UUID, entityType = UserVmResponse.class, required = true, description = "The ID of the virtual machine")
+ private Long vmId;
+
+ /////////////////////////////////////////////////////
+ /////////////////// Accessors ///////////////////////
+ /////////////////////////////////////////////////////
+
+ public long getId() {
+ return vmId;
+ }
+
+ /////////////////////////////////////////////////////
+ /////////////// API Implementation///////////////////
+ /////////////////////////////////////////////////////
+
+ @Override
+ public void execute() {
+ String userData = _userVmService.getVmUserData(getId());
+ VMUserDataResponse resp = new VMUserDataResponse();
+ resp.setVmId(_entityMgr.findById(UserVm.class, getId()).getUuid());
+ resp.setUserData(userData);
+ resp.setObjectName("virtualmachineuserdata");
+ resp.setResponseName(getCommandName());
+ this.setResponseObject(resp);
+ }
+
+ @Override
+ public long getEntityOwnerId() {
+ UserVm userVm = _entityMgr.findById(UserVm.class, getId());
+ if (userVm != null) {
+ return userVm.getAccountId();
+ }
+
+ return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked
+ }
+
+ @Override
+ public String getCommandName() {
+ return s_name;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bd79fb33/api/src/org/apache/cloudstack/api/response/VMUserDataResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/VMUserDataResponse.java b/api/src/org/apache/cloudstack/api/response/VMUserDataResponse.java
new file mode 100644
index 0000000..dacf656
--- /dev/null
+++ b/api/src/org/apache/cloudstack/api/response/VMUserDataResponse.java
@@ -0,0 +1,26 @@
+package org.apache.cloudstack.api.response;
+
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.BaseResponse;
+
+import com.cloud.serializer.Param;
+import com.google.gson.annotations.SerializedName;
+
+public class VMUserDataResponse extends BaseResponse {
+ @SerializedName(ApiConstants.VIRTUAL_MACHINE_ID)
+ @Param(description = "the ID of the virtual machine")
+ private String vmId;
+
+ @SerializedName(ApiConstants.USER_DATA)
+ @Param(description = "Base 64 encoded VM user data")
+ private String userData;
+
+ public void setUserData(String userData) {
+ this.userData = userData;
+ }
+
+ public void setVmId(String vmId) {
+ this.vmId = vmId;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bd79fb33/client/tomcatconf/commands.properties.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in
index c5ac7fd..4f38c31 100644
--- a/client/tomcatconf/commands.properties.in
+++ b/client/tomcatconf/commands.properties.in
@@ -72,6 +72,7 @@ migrateVirtualMachine=1
migrateVirtualMachineWithVolume=1
recoverVirtualMachine=7
expungeVirtualMachine=7
+getVirtualMachineUserData=15
#### snapshot commands
createSnapshot=15
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bd79fb33/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java
index 59767f3..bbb31cf 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -198,6 +198,7 @@ import org.apache.cloudstack.api.command.admin.vlan.ListVlanIpRangesCmd;
import org.apache.cloudstack.api.command.admin.vlan.ReleasePublicIpRangeCmd;
import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd;
import org.apache.cloudstack.api.command.admin.vm.ExpungeVMCmd;
+import org.apache.cloudstack.api.command.admin.vm.GetVMUserDataCmd;
import org.apache.cloudstack.api.command.admin.vm.MigrateVMCmd;
import org.apache.cloudstack.api.command.admin.vm.MigrateVirtualMachineWithVolumeCmd;
import org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd;
@@ -2854,6 +2855,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
cmdList.add(GenerateAlertCmd.class);
cmdList.add(ListOvsElementsCmd.class);
cmdList.add(ConfigureOvsElementCmd.class);
+ cmdList.add(GetVMUserDataCmd.class);
return cmdList;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bd79fb33/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java
index f57e1b4..fc0ec0e 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -4806,4 +4806,16 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
public ConfigKey<?>[] getConfigKeys() {
return new ConfigKey<?>[] {EnableDynamicallyScaleVm};
}
+
+ @Override
+ public String getVmUserData(long vmId) {
+ UserVmVO vm = _vmDao.findById(vmId);
+ if (vm == null) {
+ throw new InvalidParameterValueException("Unable to find virual machine with id " + vmId);
+ }
+
+ //check permissions
+ _accountMgr.checkAccess(CallContext.current().getCallingAccount(), null, true, vm);
+ return vm.getUserData();
+ }
}