use of com.cloud.hypervisor.vmware.manager.VmwareManager in project cloudstack by apache.
the class VmwareResource method executeInVR.
@Override
public ExecutionResult executeInVR(String routerIP, String script, String args, Duration timeout) {
Pair<Boolean, String> result;
//TODO: Password should be masked, cannot output to log directly
if (s_logger.isDebugEnabled()) {
s_logger.debug("Run command on VR: " + routerIP + ", script: " + script + " with args: " + args);
}
try {
VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
result = SshHelper.sshExecute(routerIP, DefaultDomRSshPort, "root", mgr.getSystemVMKeyFile(), null, "/opt/cloud/bin/" + script + " " + args, VRScripts.CONNECTION_TIMEOUT, VRScripts.CONNECTION_TIMEOUT, timeout);
} catch (Exception e) {
String msg = "Command failed due to " + VmwareHelper.getExceptionMessage(e);
s_logger.error(msg);
result = new Pair<Boolean, String>(false, msg);
}
if (s_logger.isDebugEnabled()) {
s_logger.debug(script + " execution result: " + result.first().toString());
}
return new ExecutionResult(result.first(), result.second());
}
use of com.cloud.hypervisor.vmware.manager.VmwareManager in project cloudstack by apache.
the class VmwareCleanupMaid method gcLeftOverVMs.
public static synchronized void gcLeftOverVMs(VmwareContext context) {
List<VmwareCleanupMaid> l = s_leftoverDummyVMs.get(context.getServerAddress());
VmwareManager mgr = context.getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
assert (mgr != null);
if (l != null && l.size() > 0) {
for (VmwareCleanupMaid cleanupMaid : l) {
try {
VirtualMachineMO vmMo = null;
if (cleanupMaid.getDatacenterMorValue() != null) {
DatacenterMO dcMo = new DatacenterMO(context, "Datacenter", cleanupMaid.getDatacenterMorValue());
vmMo = dcMo.findVm(cleanupMaid.getVmName());
} else {
assert (cleanupMaid.getHostMorValue() != null);
HostMO hostMo = new HostMO(context, "HostSystem", cleanupMaid.getHostMorValue());
ClusterMO clusterMo = new ClusterMO(context, hostMo.getHyperHostCluster());
vmMo = clusterMo.findVmOnHyperHost(cleanupMaid.getVmName());
}
if (vmMo != null) {
s_logger.info("Found left over dummy VM " + cleanupMaid.getVmName() + ", destroy it");
vmMo.destroy();
}
} catch (Throwable e) {
s_logger.warn("Unable to destroy left over dummy VM " + cleanupMaid.getVmName());
} finally {
// FIXME mgr.popCleanupCheckpoint(cleanupMaid.getCheckPoint());
}
}
l.clear();
}
}
use of com.cloud.hypervisor.vmware.manager.VmwareManager in project cloudstack by apache.
the class VmwareResource method getWorkerName.
@Override
@DB
public String getWorkerName(VmwareContext context, Command cmd, int workerSequence) {
VmwareManager mgr = context.getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
String vmName = mgr.composeWorkerName();
assert (cmd != null);
context.getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
// TODO: Fix this? cmd.setContextParam("checkpoint", String.valueOf(checkPointId));
return vmName;
}
use of com.cloud.hypervisor.vmware.manager.VmwareManager in project cloudstack by apache.
the class VmwareResource method createFileInVR.
@Override
public ExecutionResult createFileInVR(String routerIp, String filePath, String fileName, String content) {
VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
File keyFile = mgr.getSystemVMKeyFile();
try {
SshHelper.scpTo(routerIp, 3922, "root", keyFile, null, filePath, content.getBytes("UTF-8"), fileName, null);
} catch (Exception e) {
s_logger.warn("Fail to create file " + filePath + fileName + " in VR " + routerIp, e);
return new ExecutionResult(false, e.getMessage());
}
return new ExecutionResult(true, null);
}
use of com.cloud.hypervisor.vmware.manager.VmwareManager in project cloudstack by apache.
the class VmwareResource method configureVnc.
protected OptionValue[] configureVnc(OptionValue[] optionsToMerge, VmwareHypervisorHost hyperHost, String vmName, String vncPassword, String keyboardLayout) throws Exception {
VirtualMachineMO vmMo = hyperHost.findVmOnHyperHost(vmName);
VmwareManager mgr = hyperHost.getContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
if (!mgr.beginExclusiveOperation(600))
throw new Exception("Unable to begin exclusive operation, lock time out");
try {
int maxVncPorts = 64;
int vncPort = 0;
Random random = new Random();
HostMO vmOwnerHost = vmMo.getRunningHost();
ManagedObjectReference morParent = vmOwnerHost.getParentMor();
HashMap<String, Integer> portInfo;
if (morParent.getType().equalsIgnoreCase("ClusterComputeResource")) {
ClusterMO clusterMo = new ClusterMO(vmOwnerHost.getContext(), morParent);
portInfo = clusterMo.getVmVncPortsOnCluster();
} else {
portInfo = vmOwnerHost.getVmVncPortsOnHost();
}
// allocate first at 5900 - 5964 range
Collection<Integer> existingPorts = portInfo.values();
int val = random.nextInt(maxVncPorts);
int startVal = val;
do {
if (!existingPorts.contains(5900 + val)) {
vncPort = 5900 + val;
break;
}
val = (++val) % maxVncPorts;
} while (val != startVal);
if (vncPort == 0) {
s_logger.info("we've run out of range for ports between 5900-5964 for the cluster, we will try port range at 59000-60000");
Pair<Integer, Integer> additionalRange = mgr.getAddiionalVncPortRange();
maxVncPorts = additionalRange.second();
val = random.nextInt(maxVncPorts);
startVal = val;
do {
if (!existingPorts.contains(additionalRange.first() + val)) {
vncPort = additionalRange.first() + val;
break;
}
val = (++val) % maxVncPorts;
} while (val != startVal);
}
if (vncPort == 0) {
throw new Exception("Unable to find an available VNC port on host");
}
if (s_logger.isInfoEnabled()) {
s_logger.info("Configure VNC port for VM " + vmName + ", port: " + vncPort + ", host: " + vmOwnerHost.getHyperHostName());
}
return VmwareHelper.composeVncOptions(optionsToMerge, true, vncPassword, vncPort, keyboardLayout);
} finally {
try {
mgr.endExclusiveOperation();
} catch (Throwable e) {
assert (false);
s_logger.error("Unexpected exception ", e);
}
}
}
Aggregations