mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-03 04:12:31 +01:00
139 lines
4.1 KiB
Java
139 lines
4.1 KiB
Java
/**
|
|
* Copyright (C) 2011 Cloud.com, Inc. All rights reserved.
|
|
*/
|
|
|
|
package com.cloud.hypervisor.vmware.mo;
|
|
|
|
import org.apache.log4j.Logger;
|
|
|
|
import com.cloud.hypervisor.vmware.util.VmwareContext;
|
|
import com.vmware.vim25.CustomFieldDef;
|
|
import com.vmware.vim25.CustomFieldStringValue;
|
|
import com.vmware.vim25.ManagedObjectReference;
|
|
|
|
public class BaseMO {
|
|
private static final Logger s_logger = Logger.getLogger(BaseMO.class);
|
|
|
|
protected VmwareContext _context;
|
|
protected ManagedObjectReference _mor;
|
|
|
|
// cached name for the vCenter managed entity object
|
|
private String _name;
|
|
|
|
public BaseMO(VmwareContext context, ManagedObjectReference mor) {
|
|
assert(context != null);
|
|
|
|
_context = context;
|
|
_mor = mor;
|
|
}
|
|
|
|
public BaseMO(VmwareContext context, String morType, String morValue) {
|
|
assert(context != null);
|
|
assert(morType != null);
|
|
assert(morValue != null);
|
|
|
|
_context = context;
|
|
_mor = new ManagedObjectReference();
|
|
_mor.setType(morType);
|
|
_mor.set_value(morValue);
|
|
}
|
|
|
|
public VmwareContext getContext() {
|
|
return _context;
|
|
}
|
|
|
|
public ManagedObjectReference getMor() {
|
|
assert(_mor != null);
|
|
return _mor;
|
|
}
|
|
|
|
public ManagedObjectReference getParentMor() throws Exception {
|
|
return (ManagedObjectReference)_context.getServiceUtil().getDynamicProperty(_mor, "parent");
|
|
}
|
|
|
|
public String getName() throws Exception {
|
|
if(_name == null)
|
|
_name = (String)_context.getServiceUtil().getDynamicProperty(_mor, "name");
|
|
|
|
return _name;
|
|
}
|
|
|
|
public boolean destroy() throws Exception {
|
|
ManagedObjectReference morTask = _context.getService().destroy_Task(_mor);
|
|
|
|
String result = _context.getServiceUtil().waitForTask(morTask);
|
|
if(result.equals("sucess")) {
|
|
_context.waitForTaskProgressDone(morTask);
|
|
return true;
|
|
} else {
|
|
s_logger.error("VMware destroy_Task failed due to " + TaskMO.getTaskFailureInfo(_context, morTask));
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public void reload() throws Exception {
|
|
_context.getService().reload(_mor);
|
|
}
|
|
|
|
public boolean rename(String newName) throws Exception {
|
|
ManagedObjectReference morTask = _context.getService().rename_Task(_mor, newName);
|
|
|
|
String result = _context.getServiceUtil().waitForTask(morTask);
|
|
if(result.equals("sucess")) {
|
|
_context.waitForTaskProgressDone(morTask);
|
|
return true;
|
|
} else {
|
|
s_logger.error("VMware rename_Task failed due to " + TaskMO.getTaskFailureInfo(_context, morTask));
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public void setCustomFieldValue(String fieldName, String value) throws Exception {
|
|
CustomFieldsManagerMO cfmMo = new CustomFieldsManagerMO(_context,
|
|
_context.getServiceContent().getCustomFieldsManager());
|
|
|
|
int key = getCustomFieldKey(fieldName);
|
|
if(key == 0) {
|
|
try {
|
|
CustomFieldDef field = cfmMo.addCustomerFieldDef(fieldName, getMor().getType(), null, null);
|
|
key = field.getKey();
|
|
} catch (Exception e) {
|
|
// assuming the exception is caused by concurrent operation from other places
|
|
// so we retieve the key again
|
|
key = getCustomFieldKey(fieldName);
|
|
}
|
|
}
|
|
|
|
if(key == 0)
|
|
throw new Exception("Unable to setup custom field facility");
|
|
|
|
cfmMo.setField(getMor(), key, value);
|
|
}
|
|
|
|
public String getCustomFieldValue(String fieldName) throws Exception {
|
|
int key = getCustomFieldKey(fieldName);
|
|
if(key == 0)
|
|
return null;
|
|
|
|
CustomFieldStringValue cfValue = (CustomFieldStringValue)_context.getServiceUtil().getDynamicProperty(getMor(),
|
|
String.format("value[%d]", key));
|
|
if(cfValue != null)
|
|
return cfValue.getValue();
|
|
|
|
return null;
|
|
}
|
|
|
|
public int getCustomFieldKey(String fieldName) throws Exception {
|
|
return getCustomFieldKey(getMor().getType(), fieldName);
|
|
}
|
|
|
|
public int getCustomFieldKey(String morType, String fieldName) throws Exception {
|
|
assert(morType != null);
|
|
|
|
CustomFieldsManagerMO cfmMo = new CustomFieldsManagerMO(_context,
|
|
_context.getServiceContent().getCustomFieldsManager());
|
|
|
|
return cfmMo.getCustomFieldKey(morType, fieldName);
|
|
}
|
|
}
|