You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ke...@apache.org on 2012/08/21 20:55:34 UTC
git commit: Commit for https://reviews.apache.org/r/6701/
Updated Branches:
refs/heads/master 93834ea6c -> 3113f32f2
Commit for https://reviews.apache.org/r/6701/
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/3113f32f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/3113f32f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/3113f32f
Branch: refs/heads/master
Commit: 3113f32f255c3a7e39cbd1d6055b11332d14ae1b
Parents: 93834ea
Author: Kelven Yang <ke...@citrix.com>
Authored: Tue Aug 21 11:55:06 2012 -0700
Committer: Kelven Yang <ke...@citrix.com>
Committed: Tue Aug 21 11:55:06 2012 -0700
----------------------------------------------------------------------
.../src/com/cloud/hypervisor/vmware/mo/HostMO.java | 60 +++++++++++++-
1 files changed, 55 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3113f32f/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostMO.java
----------------------------------------------------------------------
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostMO.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostMO.java
index fd30399..3557048 100755
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostMO.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostMO.java
@@ -59,6 +59,7 @@ import com.vmware.vim25.SelectionSpec;
import com.vmware.vim25.TraversalSpec;
import com.vmware.vim25.VirtualMachineConfigSpec;
import com.vmware.vim25.VirtualNicManagerNetConfig;
+import com.vmware.vim25.NasDatastoreInfo;
public class HostMO extends BaseMO implements VmwareHypervisorHost {
private static final Logger s_logger = Logger.getLogger(HostMO.class);
@@ -697,6 +698,39 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
return result;
}
+ public ManagedObjectReference getExistingDataStoreOnHost(boolean vmfsDatastore, String hostAddress,
+ int hostPort, String path, String uuid, HostDatastoreSystemMO hostDatastoreSystemMo) {
+ // First retrieve the list of Datastores on the host.
+ ManagedObjectReference[] morArray;
+ try {
+ morArray = hostDatastoreSystemMo.getDatastores();
+ } catch (Exception e) {
+ s_logger.info("Failed to retrieve list of Managed Object References");
+ return null;
+ }
+ // Next, get all the NAS datastores from this array of datastores.
+ if (morArray.length > 0) {
+ int i;
+ for (i = 0; i < morArray.length; i++) {
+ NasDatastoreInfo nasDS;
+ try {
+ nasDS = hostDatastoreSystemMo.getNasDatastoreInfo(morArray[i]);
+ if (nasDS != null) {
+ //DatastoreInfo info = (DatastoreInfo)_context.getServiceUtil().getDynamicProperty(morDatastore, "info");
+ if (nasDS.getNas().getRemoteHost().equalsIgnoreCase(hostAddress) &&
+ nasDS.getNas().getRemotePath().equalsIgnoreCase(path)) {
+ return morArray[i];
+ }
+ }
+ } catch (Exception e) {
+ s_logger.info("Encountered exception when retrieving nas datastore info");
+ return null;
+ }
+ }
+ }
+ return null;
+ }
+
@Override
public ManagedObjectReference mountDatastore(boolean vmfsDatastore, String poolHostAddress,
int poolHostPort, String poolPath, String poolUuid) throws Exception {
@@ -709,11 +743,27 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
ManagedObjectReference morDatastore = hostDatastoreSystemMo.findDatastore(poolUuid);
if(morDatastore == null) {
if(!vmfsDatastore) {
- morDatastore = hostDatastoreSystemMo.createNfsDatastore(
- poolHostAddress,
- poolHostPort,
- poolPath,
- poolUuid);
+ try {
+ morDatastore = hostDatastoreSystemMo.createNfsDatastore(
+ poolHostAddress,
+ poolHostPort,
+ poolPath,
+ poolUuid);
+ } catch (com.vmware.vim25.AlreadyExists e) {
+ s_logger.info("Creation of NFS datastore on vCenter failed since datastore already exists." +
+ " Details: vCenter API trace - mountDatastore(). target MOR: " + _mor.get_value() + ", vmfs: " +
+ vmfsDatastore + ", poolHost: " + poolHostAddress + ", poolHostPort: " + poolHostPort +
+ ", poolPath: " + poolPath + ", poolUuid: " + poolUuid);
+ // Retrieve the morDatastore and return it.
+ return (getExistingDataStoreOnHost(vmfsDatastore, poolHostAddress,
+ poolHostPort, poolPath, poolUuid, hostDatastoreSystemMo));
+ } catch (Exception e) {
+ s_logger.info("Creation of NFS datastore on vCenter failed. " +
+ " Details: vCenter API trace - mountDatastore(). target MOR: " + _mor.get_value() + ", vmfs: " +
+ vmfsDatastore + ", poolHost: " + poolHostAddress + ", poolHostPort: " + poolHostPort +
+ ", poolPath: " + poolPath + ", poolUuid: " + poolUuid + ". Exception mesg: " + e.getMessage());
+ throw new Exception("Creation of NFS datastore on vCenter failed.");
+ }
if(morDatastore == null) {
String msg = "Unable to create NFS datastore. host: " + poolHostAddress + ", port: "
+ poolHostPort + ", path: " + poolPath + ", uuid: " + poolUuid;