josenk / vagrant-vmware-esxi

A Vagrant plugin that adds a vmware ESXi provider support.
GNU General Public License v3.0
414 stars 106 forks source link

vagrant-vmware-esxi plugin

This is a Vagrant plugin that adds a VMware ESXi provider support. This allows Vagrant to control and provision VMs directly on an ESXi hypervisor without a need for vCenter or VShpere. ESXi hypervisor is a free download from VMware!

https://www.vmware.com/go/get-free-esxi

Documentation:

Refer to the WIKI for documentation, examples and other information...

https://github.com/josenk/vagrant-vmware-esxi/wiki

Vagrant vs Terraform.

If you are using vagrant as a deployment tool (infra as code), you may want to consider a better tool: Terraform. Vagrant is better for development environments, while Terraform is better at managing infrastructure. Please give my Terraform plugin a try and give me some feedback. What you're trying to do, what's missing, what works, what doesn't work, etc...

https://www.vagrantup.com/intro/vs/terraform.html

https://github.com/josenk/terraform-provider-esxi https://github.com/josenk/vagrant-vmware-esxi

Features and Compatibility

Requirements

  1. This is a vagrant plugin, so you need vagrant installed... :-)
  2. This plugin requires ovftool from VMware. Download from VMware website. NOTE: ovftool installer for windows doesn't put ovftool.exe in your path. You can manually set your path, or install ovftool in the \HashiCorp\Vagrant\bin directory.

    https://www.vmware.com/support/developer/ovf/

  3. You MUST enable ssh access on your ESXi hypervisor.
    • Google 'How to enable ssh access on ESXi'
  4. The boxes must have open-vm-tools or vmware-tools installed to properly transition to the 'running' state.
  5. In general, you should know how to use vagrant, esxi and some networking...
  6. You will most likely need a DHCP server on your primary network if you are deploying public boxes.

Why this plugin?

Not everyone has vCenter / vSphere... vCenter cost $$$. ESXi is free! Using this plugin will allow you to use a central VMware ESXi host for your development needs. Using a centralized host will release the extra load on your local system (vs using KVM or Virtual Box).

How to install

Download and install Vagrant on your local system using instructions from https://vagrantup.com/downloads.html.

vagrant plugin install vagrant-vmware-esxi
vagrant plugin list
vagrant version

How to use and configure a Vagrantfile

  1. cd SOMEDIR
  2. vagrant init
  3. vi Vagrantfile # Replace the contents of Vagrantfile with the following example. Specify parameters to access your ESXi host, guest and local preferences.

    #
    #  Fully documented Vagrantfile available
    #  in the wiki:  https://github.com/josenk/vagrant-vmware-esxi/wiki
    Vagrant.configure('2') do |config|
    
    #  Box, Select any box created for VMware that is compatible with
    #    the ovftool.  To get maximum compatibility You should download
    #    and install the latest version of ovftool for your OS.
    #    https://www.vmware.com/support/developer/ovf/
    #
    #    If your box is stuck at 'Powered On', then most likely
    #    the box/vm doesn't have the vmware tools installed.
    #
    # Here are some of the MANY examples....
    config.vm.box = 'hashicorp/precise64'
    #config.vm.box = 'generic/centos7'
    #config.vm.box = 'generic/centos6'
    #config.vm.box = 'generic/fedora27'
    #config.vm.box = 'generic/freebsd11'
    #config.vm.box = 'generic/ubuntu1710'
    #config.vm.box = 'generic/debian9'
    #config.vm.box = 'steveant/CentOS-7.0-1406-Minimal-x64'
    #config.vm.box = 'geerlingguy/centos7'
    #config.vm.box = 'geerlingguy/ubuntu1604'
    #config.vm.box = 'laravel/homestead'
    #config.vm.box = 'puphpet/debian75-x64'
    
    #  Use rsync and NFS synced folders. (or use the option to disable them)
    #    https://www.vagrantup.com/docs/synced-folders/
    #config.vm.synced_folder('.', '/vagrant', type: 'rsync')
    config.vm.synced_folder('.', '/vagrant', type: 'nfs', disabled: true)
    
    #  Vagrant can configure additional network interfaces using a static IP or
    #  DHCP. Use public_network or private_network to manually set a static IP and
    #  optionally netmask.  ESXi doesn't use the concept of public or private
    #  networks so both are valid here.  The primary network interface is considered the
    #  "vagrant management" interface and cannot be changed and this plugin
    #  supports 10 NICS, so you can specify 9 entries here!
    #
    #  https://www.vagrantup.com/docs/networking/public_network.html
    #  https://www.vagrantup.com/docs/networking/private_network.html
    #
    #    *** Invalid settings could cause 'vagrant up' to fail ***
    #config.vm.network 'private_network', ip: '192.168.10.170', netmask: '255.255.255.0'
    #config.vm.network 'private_network', ip: '192.168.11.170'
    #config.vm.network 'public_network', ip: '192.168.12.170'
    
    #
    #  Provider (esxi) settings
    #
    config.vm.provider :vmware_esxi do |esxi|
    
    #  REQUIRED!  ESXi hostname/IP
    esxi.esxi_hostname = 'esxi'
    
    #  ESXi username
    esxi.esxi_username = 'root'
    
    #  IMPORTANT!  Set ESXi password.
    #    1) 'prompt:'
    #    2) 'file:'  or  'file:my_secret_file'
    #    3) 'env:'  or 'env:my_secret_env_var'
    #    4) 'key:'  or  key:~/.ssh/some_ssh_private_key'
    #    5) or esxi.esxi_password = 'my_esxi_password'
    #
    esxi.esxi_password = 'prompt:'
    
    #  SSH port.
    #esxi.esxi_hostport = 22
    
    #  HIGHLY RECOMMENDED!  ESXi Virtual Network
    #    You should specify an ESXi Virtual Network!  If it's not specified, the
    #    default is to use the first found.  You can specify up to 10 virtual
    #    networks using an array format.
    #esxi.esxi_virtual_network = ['VM Network','VM Network2','VM Network3','VM Network4']
    
    #  OPTIONAL.  Specify a Disk Store
    #esxi.esxi_disk_store = 'DS_001'
    
    #  OPTIONAL.  Resource Pool
    #     Vagrant will NOT create a Resource pool it for you.
    #esxi.esxi_resource_pool = '/Vagrant'
    
    #  Optional. Specify a VM to clone instead of uploading a box.
    #    Vagrant can use any stopped VM as the source 'box'.   The VM must be
    #    registered, stopped and must have the vagrant insecure ssh key installed.
    #    If the VM is stored in a resource pool, it must be specified.
    #    See wiki: https://github.com/josenk/vagrant-vmware-esxi/wiki/How-to-clone_from_vm
    #esxi.clone_from_vm = 'resource_pool/source_vm'
    
    #  OPTIONAL.  Guest VM name to use.
    #    The Default will be automatically generated.
    #esxi.guest_name = 'Custom-Guest-VM_Name'
    
    #  OPTIONAL.  When automatically naming VMs, use this prefix.
    #esxi.guest_name_prefix = 'V-'
    
    #  OPTIONAL.  Set the guest username login.  The default is 'vagrant'.
    #esxi.guest_username = 'vagrant'
    
    #  OPTIONAL.  Memory size override
    #esxi.guest_memsize = '2048'
    
    #  OPTIONAL.  Virtual CPUs override
    #esxi.guest_numvcpus = '2'
    
    #  OPTIONAL & RISKY.  Specify up to 10 MAC addresses
    #    The default is ovftool to automatically generate a MAC address.
    #    You can specify an array of MAC addresses using upper or lower case,
    #    separated by colons ':'.
    #esxi.guest_mac_address = ['00:50:56:aa:bb:cc', '00:50:56:01:01:01','00:50:56:02:02:02','00:50:56:BE:AF:01' ]
    
    #   OPTIONAL & RISKY.  Specify a guest_nic_type
    #     The validated list of guest_nic_types are 'e1000', 'e1000e', 'vmxnet',
    #     'vmxnet2', 'vmxnet3', 'Vlance', and 'Flexible'.
    #esxi.guest_nic_type = 'e1000'
    
    #  OPTIONAL. Specify a disk type.
    #    If unspecified, it will be set to 'thin'.  Otherwise, you can set to
    #    'thin', 'thick', or 'eagerzeroedthick'
    #esxi.guest_disk_type = 'thick'
    
    #  OPTIONAL. Boot disk size.
    #    If unspecified, the boot disk size will be the same as the original
    #    box.  You can specify a larger boot disk size in GB.  The extra disk space
    #    will NOT automatically be available to your OS.  You will need to
    #    create or modify partitions, LVM and/or filesystems.
    #esxi.guest_boot_disk_size = 50
    
    #  OPTIONAL.  Create additional storage for guests.
    #    You can specify an array of up to 13 virtual disk sizes (in GB) that you
    #    would like the provider to create once the guest has been created.  You
    #    can optionally specify the size and datastore using a hash.
    #esxi.guest_storage = [ 10, 20, { size: 30, datastore: 'datastore1' } ]
    
    #  OPTIONAL. specify snapshot options.
    #esxi.guest_snapshot_includememory = 'true'
    #esxi.guest_snapshot_quiesced = 'true'
    
    #  RISKY. guest_guestos
    #    https://github.com/josenk/vagrant-vmware-esxi/wiki/VMware-ESXi-6.5-guestOS-types
    #esxi.guest_guestos = 'centos-64'
    
    #  OPTIONAL. guest_virtualhw_version
    #    ESXi 6.7 supports these versions. 4,7,8,9,10,11,12,13 & 14.
    #esxi.guest_virtualhw_version = '9'
    
    #  OPTIONAL. Guest Autostart
    #    Guest VM will autostart when esxi host is booted. 'true' or 'false'(default)
    #esxi.guest_autostart = 'false'
    
    #  RISKY. guest_custom_vmx_settings
    #esxi.guest_custom_vmx_settings = [['vhv.enable','TRUE'], ['floppy0.present','TRUE']]
    
    #  OPTIONAL. local_lax
    #esxi.local_lax = 'true'
    
    #  OPTIONAL. Guest IP Caching
    #esxi.local_use_ip_cache = 'True'
    
    #  DANGEROUS!  Allow Overwrite
    #    If unspecified, the default is to produce an error if overwriting
    #    VMs and packages.
    #esxi.local_allow_overwrite = 'True'
    
    #  Advanced Users.
    #    If set to 'True', all WARNINGS will produce a FAILURE and Vagrant will stop.
    #esxi.local_failonwarning = 'True'
    
    #  Plugin debug output.
    #    Please send any bug reports with this debug output...
    #esxi.debug = 'true'
    
    end
    end

Basic usage

  1. vagrant up --provider=vmware_esxi
  2. To access the VM, use vagrant ssh
  3. To destroy the VM, use vagrant destroy
  4. Some other fun stuff you can do.
    • vagrant status
    • vagrant suspend
    • vagrant resume
    • vagrant ssh-config
    • vagrant snapshot push
    • vagrant snapshot list
    • vagrant snapshot-info # esxi provided plugin. Output snapshot information/tree.
    • vagrant snapshot pop
    • vagrant halt
    • vagrant provision
    • vagrant address # ESXi provided plugin. Output IP address of guest.

Known issues with vmware_esxi

Donations

I work very hard to produce a stable, well documented product. I appreciate any payments or donations for my efforts.

Version History

Feedback please!