Showing posts with label vRO workflow. Show all posts
Showing posts with label vRO workflow. Show all posts

vRo script to delete snapshots of vms listed in text file

vRO script will read text file containing name of VMs, snapshots to be deleted.

To read the text file in vRO script, first of all you need to assign permission to path to which script can read text file. Task is quite simple, you need to append a line containing path along with permission to file named "js-io-rights.conf". Below are the steps.

Modify the js-io-rights.conf file:
  1. vi /etc/vco/app-server/js-io-rights.conf
  2. Press the i key on the keyboard
  3. Copy & paste the following line to the end file:
  4. +rwx /tmp
  5. Press the esc key on the keyboard
  6. Type in :wq! and press the Enter key
  7.  restart vRO server with command "service vco-server restart"
Below are the screenshots would be helpful to create workflow.










 
----------------------------------------Start code of script----------------------------------
var line,tempVM,i,vmname;
var myFile = new FileReader(Path);
myFile.open();
data = myFile.readAll();
var lines = new Array();
var fvms = new Array();
lines = data.split(/\r\n|\n\r/);
System.log(lines);
var vms = VcPlugin.getAllVirtualMachines();
for (line in lines )
{
 tempVM = lines[line];
 //System.log("2nd line " + tempVM);
 for (i in vms)
 {
  vmname = vms[i];
  //System.log(tempVM + " : " + vmname.name);
  if (tempVM.match(vmname.name))
  {
   System.log(tempVM + vms[i].name + " find");
   vm = vmname;
   //System.log(vm.snapshot);
   var allSnaps = new Array();
   var allParents;
   var snapshot = vm.snapshot;
   var rootSnapshotList = snapshot.rootSnapshotList;
   for each (var rsnap in rootSnapshotList)
   {
       getSnapshotsOfVM(rsnap);
   }
      for each (var snap in allSnaps)
   {
       System.log("VM Name: " + snap.vm.name);
          System.log("Snapshot Name: " + snap.name);
          System.log("Snapshot creation time: " + snap.createTime.toLocaleString());
          System.log("Snapshot is old, removing...");
    var task = snap.snapshot.removeSnapshot_Task(false,true);
    var actionResult = System.getModule("com.vmware.library.vc.basic").vim3WaitTaskEnd(task);
   }
  }
 }
}
function getSnapshotsOfVM(snapshotTree)
{
    allSnaps.push(snapshotTree);
    var childTrees = snapshotTree.childSnapshotList;
    if(childTrees != null) {
        for(var index in childTrees) {
            if(childTrees[index] != null) {
                getSnapshotsOfVM(childTrees[index]);
            }
        }
    }
}
 ----------------------------------------End code of script----------------------------------








Code has been modified by me as per mine requirement. It is taken from internet.



vRealize Orchestrator script for RV tool







-----------------------------Code of Script to Pull Information----------------------------


var i,j, vmName;
var contentMessage,logtxtDisk,logtxtNIC,logtxtNetwork;
content = "VM Name,HostName,Cluster,PowerState,RAM,CPU,Core,IP Address,OS \n";
vdiskcontent = "VM Name,vDisk,Path,Size,DataStore \n";
vNetwork = "VM Name,Type,Port group \n";
logtxtHNetwork = "Hostname,vNic,Driver,Address,DevID,PortID,CDP Info \n";
contentMessage = "Hi Team, <br> <br> PFA VMs report. <br> <br> Thanks<br> Manoj";
for ( i in clustername )
{
actionResult = System.getModule("com.vmware.library.vc.cluster").getAllVMsOfCluster(clustername[i]);
                for ( j in actionResult)
                {
                                vmName = actionResult[j].name;
                                var guest = actionResult[j].runtime;
                                var hostname = guest.host.name;
                                var cluster = (actionResult[j].runtime.host).parent;
                                logtext =  vmName + "," + hostname + "," + cluster.name + "," + actionResult[j].runtime.powerState.value + "," + actionResult[j].config.hardware.memoryMB + "," +  actionResult[j].config.hardware.numCPU + "," + actionResult[j].config.hardware.numCoresPerSocket + "," + actionResult[j].guest.ipAddress + "," + actionResult[j].guest.guestFullName + "\n";
                                content = content +  logtext ;
                                //Get Datastores
                                var datastoresProp = new Properties();
                                var diskSizes = new Array();
                                var devices = actionResult[j].config.hardware.device;
                                var l = 0;
                                for (var k in devices)
                                {
                                                if (devices[k] instanceof VcVirtualDisk)
                                                {
                                                                diskSizes[l++] = devices[k].capacityInKB / 1048576;
                                                                var vmdkSize = devices[k].capacityInKB / 1048576;
                                                                var datastore = devices[k].backing.datastore;
                                                                var vmdkName = devices[k].deviceInfo.label;
                                                                var vmdkFName = devices[k].backing.fileName;
                                                                logtxtDisk = vmName + "," + vmdkName + "," + "," + vmdkFName + "," + vmdkSize + "," + datastore.name + "\n";
                                                                vdiskcontent = vdiskcontent + logtxtDisk;                                           
                                                }
                                                if ( devices[k] instanceof VcVirtualVmxnet3)
                                                {
                                                                logtxtNIC = vmName + ",vmxnet3, " + devices[k].backing.deviceName + "\n";
                                                                vNetwork = vNetwork + logtxtNIC;
                                                }
                                                if ( devices[k] instanceof VcVirtualVmxnet2)
                                                {
                                                                logtxtNIC = vmName + ",vmxnet2, " + devices[k].backing.deviceName+ "\n";
                                                                vNetwork = vNetwork + logtxtNIC;
                                                }
                                                if ( devices[k] instanceof VcVirtualPCNet32)
                                                {
                                                                logtxtNIC = vmName + ",PCNet32, " + devices[k].backing.deviceName+ "\n";
                                                                vNetwork = vNetwork + logtxtNIC;
                                                }
                                                if ( devices[k] instanceof VcVirtualE1000)
                                                {
                                                                logtxtNIC = vmName + ",E1000, " + devices[k].backing.deviceName+ "\n";
                                                                vNetwork = vNetwork + logtxtNIC;
                                                }
                                }
                }
}
/*Start - Code to get DataStore and NAA id */
var vdatastoretxt, hostcount, naaid, hname_ds;
var datastore, datastores;
vdatastoretxt = "DataStore,HostCount,HostName,VM Count,URL,Type,MHA,UUID,NAAID \n";
datastores = System.getModule("com.vmware.library.vc.datastore").getAllDatastores();
for each ( datastore in datastores)
{
                try{
                System.log(datastore.name);
                var hosts_ds = datastore.host;
                hname_ds = " ";
                naaid = " ";
                for each (var host_ds in hosts_ds)
                {
                                hname_ds  =  host_ds.key.name + hname_ds;
                }
                if (hosts_ds.length != 0)
                {
                hostname = hosts_ds[0].key;
                for each (var mountedVolume in hostname.configManager.storageSystem.fileSystemVolumeInfo.mountInfo)
                {
                                for each( var volumeExtent in mountedVolume.volume.extent)
                                {
                                                if(mountedVolume.volume.name.match(datastore.name))
                                                {
                                                                var volumeMountinfo = mountedVolume.mountinfo;
                                                                System.log(volumeExtent.diskName);
                                                                naaid = volumeExtent.diskName + naaid;
                                                }             
                                }
                }
                }
                vdatastoretxt  = vdatastoretxt + datastore.name + "," + hosts_ds.length + "," + hname_ds +  "," + datastore.vm.length + "," + datastore.info.url + "," + datastore.summary.type + "," + datastore.summary.multipleHostAccess + "," + datastore.info.vmfs.uuid + "," + naaid + "\n";
                }
                catch (ex)
                {
                  throw "Error"
                }
}
/* End - Datastore & NAA id */

/* Start - Code to Pull Portgroup Information */
var pg_hosts,pg_hostname;
var portgroup,portgroups,vmNics,porttxt;
var promiscuous,ftransmit, macchange;
porttxt = "HostName,Portgroup,VLAN ID,vSwitch,Promiscuous,ForgedTransmits,MacChange,Policy \n";
for ( i in clustername )
{
pg_hosts = System.getModule("com.vmware.library.vc.cluster").getAllHostSystemsOfCluster(clustername[i]);
for each(pg_host in pg_hosts)
{
                pg_hostname = pg_host.name;
                System.log(pg_hostname);
                portgroups = pg_host.configManager.networkSystem.networkInfo.portgroup;
                for each (portgroup in portgroups)
                {
                                if(portgroup.spec.policy.security.allowPromiscuous == "TRUE")
                                {
                                                promiscuous = "True";
                                }
                                else
                                {
                                                promiscuous = "False";
                                }
                                if((portgroup.spec.policy.security.forgedTransmits) = "TRUE")
                                {
                                                ftransmit = "True";
                                }
                                else
                                {
                                                ftransmit = "False";
                                }
                                if((portgroup.spec.policy.security.macChanges) = "TRUE")
                                {
                                                macchng = "True";
                                }
                                else
                                {
                                                macchng = "False";
                                }
                                porttxt = porttxt + pg_hostname + "," + portgroup.spec.name + "," + portgroup.spec.vlanId + "," + portgroup.spec.vswitchName + "," + promiscuous + "," + ftransmit + "," + macchng + "," + portgroup.spec.policy.nicTeaming.policy + "\n";
                System.log(porttxt);
                }
}
}
/* End - Code to Pull Portgroup Information */

/* Start - Code to pull Network information of Host */
var txtNetwork = ";";
var nw_hosts,nw_host,pNic,pnicInfos,pnicInfo,nic,network,networks;
for ( i in clustername )
{
                nw_hosts = System.getModule("com.vmware.library.vc.cluster").getAllHostSystemsOfCluster(clustername[i]);
                for each(nw_host in nw_hosts)
                {
                                pNic = nw_host.configManager.networkSystem.networkInfo.pnic;
                                pnicInfos = nw_host.configManager.networkSystem.queryNetworkHint();
                                for each (pnicInfo in pnicInfos)
                                {
                                                if(pnicInfo.connectedSwitchPort)
                                                {
                                                                for each (nic in pNic)
                                                                {
                                                                                if( nic.device == pnicInfo.device)
                                                                                {
                                                                                                networks = pnicInfo.subnet;
                                                                                                for each ( network in networks)
                                                                                                {
                                                                                                                txtNetwork = network.ipSubnet + "(VLAN:" +  network.vlanId + ")" + txtNetwork;
                                                                                                }
                                                                                                logtxtHNetwork = logtxtHNetwork + nw_host.name + "," + pnicInfo.device +  "," + nic.driver + "," + pnicInfo.connectedSwitchPort.address +  "," + pnicInfo.connectedSwitchPort.devId + "," + pnicInfo.connectedSwitchPort.portId +  "," + txtNetwork + "\n";
                                                                                }
                                                                }
                                                }
                                                else
                                                {
                                                                logtxtHNetwork = logtxtHNetwork + nw_host.name + "," + pnicInfo.device +  ",No Information,No Information,No Information,No Information,No Information \n";
                                                }
                                }
                }
}
/* End - Code to pull Network information of Host */

var message = new EmailMessage();
// Override default settings if and only if input parameter is set
if ( smtpHost != null && smtpHost.length > 0 ){
    message.smtpHost = smtpHost;
}
if ( smtpPort != null && smtpPort > 0 ){
    message.smtpPort = smtpPort;
}
if ( fromName != null && fromName.length > 0){
    message.fromName = fromName;
}
if ( fromAddress != null && fromAddress.length > 0){
    message.fromAddress = fromAddress;
}
message.toAddress = toAddress;
message.subject = subject;
message.ccAddress = ccAddress;
message.addMimePart(contentMessage,"text/html; charset=UTF-8");
//Create Attachment
var fileAttachment = new MimeAttachment();
fileAttachment.name = "vmsReport.csv";
fileAttachment.content = content;
message.addMimePart(fileAttachment,"application/zip");// charset=UTF-8");
fileAttachment.name = "vDiskReport.csv";
fileAttachment.content = vdiskcontent;
message.addMimePart(fileAttachment,"application/zip");// charset=UTF-8");
fileAttachment.name = "vNetwork.csv";
fileAttachment.content = vNetwork;
message.addMimePart(fileAttachment,"application/zip");// charset=UTF-8");
fileAttachment.name = "vDatastore.csv";
fileAttachment.content = vdatastoretxt;
message.addMimePart(fileAttachment,"application/zip");// charset=UTF-8");
fileAttachment.name = "vPortgroup.csv";
fileAttachment.content = porttxt;
message.addMimePart(fileAttachment,"application/zip");// charset=UTF-8");
fileAttachment.name = "vHostNetwork.csv";
fileAttachment.content = logtxtHNetwork;
message.addMimePart(fileAttachment,"application/zip");// charset=UTF-8");

System.log( "sending mail to host: " + message.bccAddress + ":" + message.smtpPort + " with user:" + message.username + ", from:" + message.fromAddress + ", to:" + message.toAddress );
message.sendMessage();

-----------------------------------------End of Script Code----------------------------------



Limit of Scripts:
1. Scsi bus sharing
2. RDM Info.

You are welcome to modify the script.






SnapShot report of Linux/Windows server using vRealize Orchestrator

This is my first vRealize Orchestrator script to pull the information of snapshots of virtual machine x hours old.










Once you are done with attibutes and input/output parameters, time to write script.

----------------------------------Code to pull snapshot report-------------------------------
ar now = new Date();

var now_minus_hours = new Date();
now_minus_hours.setHours(now.getHours() - max_hours);
var i, logtext, contentMessage ;
System.log("Listing snapshots, older than: "+ now_minus_hours);
var vms = System.getModule("com.vmware.library.vc.vm.os").getAllLinuxVMs() ;
content = "VM Name,Power State,Snapshot Name \n";
var outStr = "";
contentMessage = "Hi Team, <br> <br> PFA snapshot status of Linux servers. <br> <br> Thanks<br> Manoj";
for (i in vms)
{
                var vm = vms[i];
                if(vm.snapshot)
                {
                                var allSnaps = new Array();
                                var allParents;
                                var snapshot = vm.snapshot;
                                var Power = vm.runtime.powerState.value;
                                var rootSnapshotList = snapshot.rootSnapshotList;
                                for each (var rsnap in rootSnapshotList)
                                {
                                getSnapshotsOfVM(rsnap);
                                }
                for each (var snap in allSnaps)
                                {
                                if(snap.createTime < now_minus_hours)
                                                {
                                                                //System.log("VM Name: " + snap.vm.name + " Snapshot Name: " + snap.name + " Snapshot creation time: " + snap.createTime.toLocaleString());
                                                                logtext = snap.vm.name + "," + Power + "," + snap.name + "\n";
                                                                content = content +  logtext ;
                                                }
                                }

     }
}

function getSnapshotsOfVM(snapshotTree)
{
    allSnaps.push(snapshotTree);
    var childTrees = snapshotTree.childSnapshotList;
    if(childTrees != null) {
        for(var index in childTrees) {
            if(childTrees[index] != null) {
                getSnapshotsOfVM(childTrees[index]);
            }
        }
    }
}

var message = new EmailMessage();
// Override default settings if and only if input parameter is set
if ( smtpHost != null && smtpHost.length > 0 ){
    message.smtpHost = smtpHost;
}
if ( smtpPort != null && smtpPort > 0 ){
    message.smtpPort = smtpPort;
}
if ( fromName != null && fromName.length > 0){
    message.fromName = fromName;
}
if ( fromAddress != null && fromAddress.length > 0){
    message.fromAddress = fromAddress;
}
message.toAddress = toAddress;
message.subject = subject;
message.ccAddress = ccAddress;
message.addMimePart(contentMessage,"text/html; charset=UTF-8");
//Create Attachment
var fileAttachment = new MimeAttachment();
fileAttachment.name = "SnapShot_Linux.csv";
fileAttachment.content = content;
message.addMimePart(fileAttachment,"application/json; charset=UTF-8");
System.log( "sending mail to host: " + message.bccAddress + ":" + message.smtpPort + " with user:" + message.username + ", from:" + message.fromAddress + ", to:" + message.toAddress );
message.sendMessage();

-------------------------------End Code to pull snapshot report-----------------------------

Please replace below line if you want to pull snapshot report of Windows servers.

var vms = System.getModule("com.vmware.library.vc.vm.os").getAllWindowsVMs() ;

Blow is written since long time, you are welcome to comment here.