The module allows you to offer your customers to buy and manage virtual KVM machines directly in the WHMCS panel.
The module allows your customers to manage KVM machines using the Proxmox panel. It allows you to manage virtually all functions available in Proxmox directly from the WHMCS panel without going to the Proxmox panel. This greatly simplifies and facilitates customer account management, improves customer satisfaction and reduces the number of support requests.
After installation, the module will fully manage the creation, edition, and suspension of KVM VM and interact with the WHMCS billing system, exchanging data needed for settlements with customers, activations or service blocking.
Thanks to the power of WHMCS, accounts are automatically checked, suspended when limits are exceeded and suspended when no payments are made. Customers have full knowledge of the status and details of the service directly from the WHMCS customer panel.
The module has been tested on the WHMCS version from 8+. We assume that the module should work without any problems on the older version of WHMCS 7, but we cannot guarantee it. You have 7 days to fully test the module for free.
The module, fully installed and correctly implemented in the system, offers the following functionalities.
You can acquire a free Development License of this module. This license grants you access to our software products, allowing you to explore and test them for your development and testing projects. It's an invaluable tool for developers and teams seeking to familiarize themselves with our products and engage in limited-scale development before committing to the purchase of commercial licenses.
Be the first to review PUQ Proxmox KVM provisioning module.
The best place to start if you need help with a specific product is to contact the developer. All WHMCS Marketplace developers have both a website and support URL listed.
A DNS, lifecycle and admin-UX release. Key goal: long-running operations (provisioning many DNS records, tearing down a service with large backups) must never time out the WHMCS request. Both Set DNS records and Terminate now run asynchronously in cron with live progress streamed to the cron output. Under the hood — full null-safety hardening across both modules for PHP 8.1/8.2 stability.
Native support for the PowerDNS Authoritative Server REST API as a third DNS provider (alongside Cloudflare and HestiaCP). Works out of the box with standard PowerDNS installations — configure server URL and api_key, the module takes care of the rest. Fully integrated with forward and reverse zones, automatic ensureTrailingDot / FQDN normalization, and PowerDNS-strict content formatting for PTR / CNAME / NS records.
The Set DNS records admin button used to call the Proxmox and DNS APIs synchronously — on a service with many reverse-DNS records it would exceed the PHP execution limit and fail with a blank error page. The button now queues the job by setting the VM status to set_dns_records and returns success instantly. The cron task picks it up on the next tick, runs DeleteDNSRecords + SetDNSRecords, and writes a full step-by-step log to the VM record.
Same treatment for service termination. When an admin clicks Terminate, the module sends a fire-and-forget "stop" request to Proxmox, sets vm_status = 'terminate', returns 'success' — and WHMCS marks the service Terminated immediately. The actual heavy work (graceful stop with polling, backups removal, DNS deletion, VM DELETE API call, DB cleanup) is done by cron.
Benefits:
The terminate flow previously used a fixed 15-second stop window which was insufficient for VMs with large memory footprints or QEMU guest-agent filesystem freeze. It now issues a single stop request and polls the remote status every 5 seconds for up to 120 seconds (graceful), then a 60-second force-stop window. Live progress is emitted every 15 seconds so admins see what's happening.
error_terminate status + Reset / Delete Record actionsWhen termination fails (for example, the Proxmox API DELETE call returns an error), the VM no longer silently falls back to remove. It's now marked error_terminate:
The Reset VM Status modal has been expanded with terminate (retry) and remove (force-mark) options, plus an embedded reference table explaining when to use each status. A new Delete Record button (trash icon) appears for rows in error_terminate / remove status — it removes the row from puqProxmoxKVM_vm_info only, with an explicit confirmation dialog warning that Proxmox state is not touched.
The standalone cron (php cron.php) now streams every individual step in real time with timestamps. During a deploy you can watch DNS records being created zone by zone, IP by IP, instead of waiting 60 seconds and seeing only the summary. During a terminate you see stop request sent, periodic still running, waited Xs / 120s heartbeats, each DNS deletion, the final VM deleted. Output is flushed after every line — nothing is buffered.
The DNS Zones page now shows three provider types (Cloudflare, HestiaCP, PowerDNS) with a single unified CRUD interface. Secret fields (API tokens, admin passwords, API keys) are no longer returned to the browser — the edit form shows (unchanged — enter new to replace) placeholders, and the save flow preserves the stored value if the field is left empty.
When configuring an IP Pool, the required reverse-DNS zone name for the prefix is now computed automatically and shown as a hint both in the add/edit modal and as a second line in the Addresses column of the pool list. For example, a 2001:db8::/120 pool shows:
2001:db8::2 - 2001:db8::50
rDNS zone: 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa
Admins no longer have to compute nibble reversals by hand — copy the value straight into the DNS Zones form. Both IPv4 (/8, /16, /24) and IPv6 (any nibble-aligned prefix) are supported; non-aligned prefixes show a "classless delegation required" hint.
A collection of DNS bugs fixed in one pass:
str_replace(':', '') which produced a garbage PTR for any compressed IPv6 address (e.g. 2001:db8::1 became 1.8.b.d.1.0.0.2.ip6.arpa instead of the correct 32-nibble form). Now uses inet_pton + bin2hex, correct for every IPv6 form./, regardless of how the admin types it.example.com.) now match correctly against record names.dns1 or only dns2 now correctly sets the VM's DNS server; previously only the dns1+dns2 combination worked reliably.DNS API failures (zone missing, provider down, auth error) never block deploy, change-package, or terminate. Each zone and each record is wrapped in individual try-catch and logged as a non-blocking event. The operation proceeds with the rest. A summary (forward_ok/err, rev_ok/err, per-zone messages) is written to the VM log and, when errors occurred, to the WHMCS module log as well.
localStorage and restore it on the next visit. Default is now "All" on first visit (used to be "Active").last_error_action / last_error_message are present in the last action log.$params['...'], $_GET['...'], and explode()[n] reads now use ?? default or bounds checks. Prevents TypeError: cannot access offset on null warnings on PHP 8.1/8.2 when Proxmox API responses or DB rows omit optional fields.isOk() helper, commented-out stubs (~40 lines total).json_decode results against non-JSON / empty responses.cleanupFirewall now distinguishes benign "IPSet does not exist" from real API errors (auth, 500) and logs the latter.
A stability and admin UX release on top of v3.0. Focused on making product configuration self-explanatory and hardening the cron against bad data.
The custom Module Settings UI no longer fails silently when something is wrong with the product's Server Group. Instead of a generic "No server found" message, the page now shows a contextual banner with an exact fix-it hint and highlights the affected fields (Node, OS Template, Storages):
Setup → Products/Services → Servers → Edit group.Fixed a regression where one service with a missing IP-pool entry or server address field could crash the entire processVirtualMachines cron run on PHP 8.0+. All assignments from server_address_list and IP pool data (netmask, gateway, DNS, bridge, VLAN) are now null-safe, so the cron continues processing the rest of the queue even if a single service has stale or incomplete network configuration.
GetStatistics() now resolves the VM's current Proxmox node before collecting RRD data and safely skips services whose remote node is not yet known (for example, services still in the deployment queue). Prevents spurious errors in the statistics cron.
Version 3.0 introduces a redesigned architecture, a dedicated addon module, and a broad range of new features.
Version 3.0 includes its own dedicated addon module, reducing reliance on the previous addon structure.
The VM deployment process now uses a step-by-step workflow.
Deploy flow:
Allocate IP -> DNS and clone -> Migrate to target node -> Set CPU and RAM -> Resize system disk -> Configure disk I/O -> Create additional disk -> Resize additional disk -> Configure additional disk I/O -> Configure network -> Configure firewall -> Configure cloud-init -> Start VM -> Verify running status and send email
Version 3.0 adds improved migration handling for cross-node deployment.
Package upgrades and downgrades now use the same step-based workflow.
Additional improvements:
Version 3.0 adds expanded firewall support for deployment and client self-service.
The cron system supports two operating modes.
All client area pages have been updated with a redesigned interface.
Warning:
Before updating, you must create a Proxmox API token and enter its details in the server settings.
Username: root@pam!your-token-id
Password: your token value
Module is coded ionCube v13
Supported php version:
Changelog:
Resell VPS & Cloud Dedicated Products from Liquid Web
Automate the sale of VPS servers & give your clients the ability to completely manage their VPS server inside of WHMCS, using the industry leading SolusVM control panel.