User Tools

Site Tools


vrealize:code:drsonoff

How to turn DRS On/off for a VM

DRS might cause problems if it moved a VM during deployment, this script will be able to turn DRS to disabled/enabled or back to default settings.

 
function VerifyDRSEnabled(ClusterName)
{
	var T = ClusterName.configurationEx;
 
	var x = T.drsConfig;
 
        // Check if DRS is enabled, AND individual VM's can override DRS
	if (x.enabled == true && x.enableVmBehaviorOverrides == true)
	{
		return true;
	}
	return false;
}
 
function SetVMToManual(VM)
{
    var drsVmConfigSpec = new VcClusterDrsVmConfigSpec();
 
    drsVmConfigSpec.operation = VcArrayUpdateOperation.add;
    drsVmConfigSpec.info = new VcClusterDrsVmConfigInfo();
    drsVmConfigSpec.info.key = VM;
    drsVmConfigSpec.info.enabled = true;		// false = Disabled
    drsVmConfigSpec.info.behavior = VcDrsBehavior.manual
 
    var VcClusterDrsVmConfigSpecArray = new Array() ;  
    VcClusterDrsVmConfigSpecArray.push(drsVmConfigSpec);  	
    var clusterConfigSpec = new VcClusterConfigSpecEx();
    clusterConfigSpec.drsVmConfigSpec = VcClusterDrsVmConfigSpecArray
 
    System.log("Setting DRS setting for vm : " + VM.name + " on cluster " + Cluster.name+" to manual.");
    var task = Cluster.reconfigureComputeResource_Task(clusterConfigSpec, true);
    return task;
 
}
 
function SetVMToDefault(VM)
{
	var myVM = new VcManagedObjectReference();
	myVM.type = "VirtualMachine";
	myVM.value = VM.id;
 
	var drsVmConfigSpec = new VcClusterDrsVmConfigSpec();					  
	drsVmConfigSpec.operation = VcArrayUpdateOperation.remove;
	drsVmConfigSpec.removeKey = myVM;
 
	var ClusterDrsVmConfigSpecArray = new Array();  
	ClusterDrsVmConfigSpecArray.push(drsVmConfigSpec)
	var clusterConfigSpec = new VcClusterConfigSpecEx();
	clusterConfigSpec.drsVmConfigSpec = ClusterDrsVmConfigSpecArray
 
	System.log("Restoring defualt DRS setting for vm : " + VM.name + " on cluster " + Cluster.name);
	var task = Cluster.reconfigureComputeResource_Task(clusterConfigSpec, true);
	return task;
}
 
 
function GetVMByName(Name)
{
	var vms = Server.findAllForType("VC:VirtualMachine","xpath:name='"+Name+"'");
	if (vms != null)
	{
         	return vms[0];
    	}
	return null;
}
 
 
// Start of Script
var VM =GetVMByName(VMName);
 
if (VM != null)
{
	// Get Cluster of VM.
	var Cluster = VM.runtime.host.parent;
	if (VerifyDRSEnabled(Cluster) == true)
	{
		if (State == true)
		{
			var Task = SetVMToManual(VM);
		}
		else
		{
			var Task = SetVMToDefault(VM);
		}
                // Add Check for Task was sucessful here...
	}
	else
	{
		// The Vcenter does not run in DSR mode
	}
}
vrealize/code/drsonoff.txt ยท Last modified: 2018/11/28 23:27 by admin