blob: 430eb6deffa37e9ba9c22b68e8af133052906050 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package com.cloud.hypervisor.vmware.mo;
import org.apache.log4j.Logger;
import com.vmware.vim25.CustomFieldDef;
import com.vmware.vim25.CustomFieldStringValue;
import com.vmware.vim25.ManagedObjectReference;
import com.cloud.hypervisor.vmware.util.VmwareContext;
public class BaseMO {
private static final Logger s_logger = Logger.getLogger(BaseMO.class);
protected VmwareContext _context;
protected ManagedObjectReference _mor;
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.setValue(morValue);
}
public VmwareContext getContext() {
return _context;
}
public ManagedObjectReference getMor() {
assert (_mor != null);
return _mor;
}
public ManagedObjectReference getParentMor() throws Exception {
return (ManagedObjectReference)_context.getVimClient().getDynamicProperty(_mor, "parent");
}
public String getName() throws Exception {
if (_name == null)
_name = (String)_context.getVimClient().getDynamicProperty(_mor, "name");
return _name;
}
public void unregisterVm() throws Exception {
_context.getService().unregisterVM(_mor);
}
public boolean destroy() throws Exception {
ManagedObjectReference morTask = _context.getService().destroyTask(_mor);
boolean result = _context.getVimClient().waitForTask(morTask);
if (result) {
_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().renameTask(_mor, newName);
boolean result = _context.getVimClient().waitForTask(morTask);
if (result) {
_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.getVimClient().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);
}
}