March 24, 2017

ESX VM and Host Shutdown Script

#!/usr/bin/perl

# Get list of ALL VM's
# (\d{1,2})\s+([\w\d\-]+).*\n

$cmdvmlist = "vim-cmd vmsvc/getallvms";

# RegEX for running VM's
# ([\d]+\-[\w\d\s\.]+)\n\s+World ID:\s(\d+)

$cmdvmrunning = "esxcli vm process list";

$esxhost = "root\@192.168.1.26";

$vmlist = `ssh $esxhost $cmdvmlist`;

#print $vmlist;

# ([\d]+\-[\w\d\s\.]+)\n\s+World ID:\s(\d+)

my @shutdownorder;

$count=0;

print "VM Inventory on $esxhost\n";

while ($vmlist =~ /(\d{1,2})\s+([\w\d\-]+).*\n/g)
        {

        # Don't shutdown the VM running this script until last as it also controls APCUPSD

        if ($1 != 30)
                {
                $shutdownorder[$count] = $1;
                $shutdownordername[$count] = $2;
                $count++;
                }

        }

print "VMID\tName\n";

my $index;
for my $order (@shutdownorder) {
  print "$order \t $shutdownordername[$index++]\n";
}

# If shutdown argument is present, shutdown VM's

if ($ARGV[0] eq "shutdown")
        {
        open (my $fh, '>', "/tmp/esxhostscript");

        print "\nCreating Script for ESX Host\nUploading ";

        while (@shutdownorder)
                {
                $vm = shift(@shutdownorder);

                print $fh "vim-cmd vmsvc/power.shutdown $vm\n";
                }

        print $fh "shutdown +3\n";

        close $fh;

        # Copy script to ESX Host

        system("scp","/tmp/esxhostscript","root\@192.168.1.26:/tmp/esxhostscript");

        # Add Execute Permission

        system("ssh","root\@192.168.1.26","chmod +x /tmp/esxhostscript");

        # Execute Script

        system("ssh","root\@192.168.1.26","/tmp/esxhostscript");

        print "Waiting for VM's to shutdown\n";

        while (CheckRunning())
                {
                print ".";
                sleep 5;
                }
        print "\n\n";

        # SHUTDOWN NAS

        @nasshut1 = `ssh -p 9999 192.168.1.14 shutdown -h now`;
        @nasshut2 = `ssh -p 9999 192.168.1.24 shutdown -h now`;

        }

else
        {
        printf "shutdown argument not passed, no action taken\n"
        }


sub CheckRunning
        {

        $vmrun = `ssh $esxhost $cmdvmrunning`;

        while ($vmrun =~ /([\d]+\-[\w\d\s\.]+)\n\s+World ID:\s(\d+)/g)
                {
                if ($2 ne "91789")
                        {
                        return 1;
                        }
                }
        return 0;
        }

January 09, 2017

LetsEncrypt

apt-get install python-letsencrypt-apache

letsencrypt -w /var/lib/roundcube -d webmail.wjw.nz

/etc/letsencrypt/live/webmail.wjw.nz/fullchain.pem


September 13, 2016

Cleanly shutdown ESXi 6.0 / 6.5 and Synology NAS with APCUPSD and ESXCLI

I have this working now:

You will need the NAS' to be set to startup on power failure and have wakeonlan enabled.

1. Setup autologins for the root user to:
Generate Key on master - ssh-keygen -t rsa
Access the ESXi Host via SSH
/etc/ssh/keys-root/authorized_keys
Access the Synology NAS via SSH
/root/.ssh/authorized_keys

More info here: Login-to-synology-nas-with-ssh-keys

2. Create a script on the Linux host that:
Gets a list of all "Running VM's"
Creates a script on the ESXHost containing the commands to shutdown the VM's
Execute the ESX Script via SSH
Shutdown the Synology NAS

  VM Shutdown Script

3. Setup APCUPSD to:
Run the script on the local linux host to create the ESX Script
Shutdown the ESX Host via SSH (local VM will shutdown as part of this)

First of all we need a linux host with APCUPSD

Edit /etc/apcupsd/onbattery

Add:

#Shutdown running VM's
/usr/local/bin/ESX-shutdown-running.pl
#Shutdown NAS1
ssh -p 9999 192.168.1.24 shutdown -h
#Shutdown NAS2
ssh -p 9999 192.168.1.14 shutdown -h

Also to get things going again if it comes off battery:

Edit /etc/apcupsd/offbattery

# ssh -p 9999 192.168.1.24 shutdown -h
wakeonlan 00:11:32:39:87:25
# ssh -p 9999 192.168.1.14 shutdown -h
wakeonlan 00:11:32:38:E8:EF
# Reboot ESX Host, for me this is better than just autostarting the shutdown
# VM's as the storage doesnt always reconnect correctly.
ssh 192.168.1.26 reboot


-----------------

Notes..

esxcli --sessionfile /root/esxhost  network ip interface list
esxcli --sessionfile /root/esxhost vm process list

esxcli vm process kill -t [soft,hard,force] -w WorldNumber


September 11, 2016

Installing VMware CLI Tools on Linux

Download the 6.0 CLI tools from:

https://my.vmware.com/web/vmware/details?downloadGroup=VCLI600&productId=491

Download Apache 1.3.0 Source for SOAP

wget https://www.apache.org/dist/etch/1.3.0/apache-etch-1.3.0-src.tar.gz

tar -xvf apache-etch-1.3.0-src.tar.gz

Install the following via CPAN:

SOAP-Lite, Version 1.20 - install PHRED/SOAP-Lite-1.20.tar.gz
ExtUtils::MakeMaker, Version: 6.96 - install BINGOS/ExtUtils-MakeMaker-6.96.tar.gz
Module::Build, Version: 0.4205 - install LEONT/Module-Build-0.4205.tar.gz
Net::FTP, Version: 2.77 - install GBARR/libnet-1.22.tar.gz
LWP, Version: 5.837 - install GAAS/libwww-perl-5.837.tar.gz
LWP::Protocol::https 5.805 or newer - install MSCHILLI/LWP-Protocol-https-6.06.tar.gz
Socket6  0.23 or newer - install UMEMOTO/Socket6-0.28.tar.gz


August 18, 2016

ESXi 6.0 / Synology / iSCSI & NFS Notes

https://miketabor.com/setup-nfs-on-synology-nas-for-vmware-esxi-lab/

https://www.synology.com/en-global/knowledgebase/DSM/tutorial/Virtualization/How_to_set_up_Synology_NAS_as_VMware_server_datastore

https://www.synology.com/en-us/support/download/DS1515+

esxcli software vib install -v /vmfs/volumes/3c3e0416-6b44bd28-1208-001b211b1f56/patch/esx-nfsplugin.vib --no-sig-check

reboot
esxcli software vib list | more


https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1014165

ESXi 6.0 / Synology / iSCSI & NFS Notes

https://miketabor.com/setup-nfs-on-synology-nas-for-vmware-esxi-lab/

https://www.synology.com/en-global/knowledgebase/DSM/tutorial/Virtualization/How_to_set_up_Synology_NAS_as_VMware_server_datastore

https://www.synology.com/en-us/support/download/DS1515+

esxcli software vib install -v /vmfs/volumes/3c3e0416-6b44bd28-1208-001b211b1f56/patch/esx-nfsplugin.vib --no-sig-check

reboot
esxcli software vib list | more


https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1014165

ESXi 6 does not mount iSCSI VMFS datastore after reboot

First reboot after upgrading to ESXi6.0 from 5.5 caused my iSCSI datastore to fail.

Storage adapter was still there

The device was still mounted under "Storage"

Errors in the logs showed:

2016-08-17T05:25:54.411Z cpu1:34670 opID=ca3ef949)WARNING: FSAts: 1498: Denying reservation access on an ATS-only vol 'NAS-ESX-VM-DATA'
2016-08-17T05:25:54.411Z cpu1:34670 opID=ca3ef949)WARNING: HBX: 2227: ATS-Only VMFS volume 'NAS-ESX-VM-DATA' is not mounted. This host does not support ATS, or ATS initialization failed.
2016-08-17T05:25:54.411Z cpu1:34670 opID=ca3ef949)WARNING: HBX: 2240: Failed to initialize VMFS distributed locking on volume 577dfaa1-39238aee-2aa5-f46d0475f288: Not supported

After a lot of googling, changing the following advanced settings

DataMover.HardwareAcceleratedMove = 0  
DataMover.HardwareAcceleratedInit = 0
VMFS3.HardwareAcceleratedLocking = 0
and then rebooting the host resolved the issue