Skip to content

Announcing the Packer Plugin for VMware Desktop Hypervisors v2.0.0 Release

I'm incredibly excited to announce the v2.0.0 release of vmware/packer-plugin-vmware.

This isn't just an incremental update; it's the culmination of months of dedicated effort to refactor, modernize, and refocus the plugin for the future.

Additionally, this is the first release of the plugin after the transfer of the project to Broadcom under the vmware GitHub organization.

🚀 Redefining the Plugin's Mission

The first and most significant change is a decision to refine the plugin's focus. Moving forward, the plugin will exclusively target the VMware Desktop Hypervisors: VMware Fusion Pro and VMware Workstation Pro.

For a long time, the plugin carried the maintenance burden of supporting VMware ESX. While this was useful in the past, the ecosystem has evolved. Broadcom provides the feature-rich Packer Plugin for VMware vSphere vmware/packer-plugin-vsphere which is purpose-built for vSphere environments. Continuing to maintain parallel ESX support in this plugin created a confusing user experience as well as split or duplicated development focus. By removing it, efforts will be dedicated to creating the best possible plugin experience for the desktop hypervisor user base.

Similarly, support is removed for the Workstation Player which has reached end-of-availability.

This sharpened focus is the bedrock upon which the release is built, enabling a more stable, feature-rich, and maintainable plugin.

Enhancements

The release will introduces some highly requested features that unlock new and more efficient workflows.

But first, I want to call out two particular enhancements that are breaking changes for some configurations:

  1. Network Adapter Types: The network_adapter_type must be provided based on the guest operating system and CPU architecture of the host operating system for the desktop hypervisor based on allowed network adapter types (vmxnet3, e1000e, and e1000). The default for e1000 has been removed.
  2. Tools Upload: If using the tools_upload_flavor configuration, you must include tools_mode = upload.

Cloning from OVF/OVA Templates

One of the most exciting new features is the ability to clone virtual machines directly from .ovf and .ova files. This leverages VMware's ovftool under the hood and complements the existing vmx-based cloning. Instead of starting every build from a bare OS installation, you can now use pre-built appliances or templates exported from vSphere as your base. This is a game-changer for teams looking to standardize on a common image artifact that can be used across different environments, dramatically speeding up build times.

A More Reliable tools_mode: attach

This method continues to support the previous upload methods but also supports an attach mode to mount the VMware Tools ISO directly to the virtual machine's CD-ROM drive, presenting it as a physical device. This approach is far more stable and universal ensuring the VMware Tools ISO can be efficiently made available to the guest operating system when you need them.

Modernizing the go-vnc Library

One of the most critical under-the-hood changes was addressing a key dependency. The plugin's ability to send keystrokes and interact with the VM console relied on the mitchellh/go-vnc library. Unfortunately, this library was archived and no longer receiving updates, posing a significant risk of incompatibility with modern Go versions and the desktop hypervisors.

I took on the task of developing the drop-in replacement tenthirtyam/go-vnc library. This involved modernizing the codebase, updating its APIs, and committing to its long-term maintenance. By replacing the deprecated dependency with this new, actively maintained version, it ensures the plugin remains stable, secure, and compatible with the Go ecosystem for years to come.

A Healthier Codebase for a Better Future

Beyond the major features, a massive effort went into improving the overall health of the codebase.

  • Explicit Configuration: Ambiguity is the enemy of automation. I've removed deprecated fields like ssh_skip_request_pty and now require the usb_version to be set explicitly when a USB controller is enabled. These changes make your Packer templates clearer and your builds more predictable.
  • Code Standardization: I've replaced countless "magic strings" with shared constants, centralized configuration defaults, and improved input validation across the board. This not only prevents typos and bugs but also makes the codebase easier for future contributors to navigate.
  • Dependency Currency: The plugin dependencies continue to be updated, ensuring you benefit from the latest security and performance improvements in the platform.

Thank you for your continued support and feedback.

For list of all commits, please refer to the following: https://github.com/vmware/packer-plugin-vmware/compare/v1.2.0...v2.0.0

Disclaimer

This is not an official VMware by Broadcom document. This is a personal blog post. The information is provided as-is with no warranties and confers no rights. It is not intended to replace official documentation. Please, refer to official documentation for the most up-to-date information.