[{"content":"","heading":"","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/","section":"docs","summary":"","title":"FAQ"},{"content":"","heading":"FAQ","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#faq","section":"docs","summary":"","title":""},{"content":"","heading":"General","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#general","section":"docs","summary":"","title":""},{"content":"A rewrite of Cloudmin around libvirt, the standard Linux API for managing virtual machines. It manages QEMU/KVM guests on a Linux host from inside Webmin, and adds images, templates, jobs, permissions, consoles, snapshots, clones and backups on top of libvirt. See What is Cloudmin 10.","heading":"What is Cloudmin 10?","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#what-is-cloudmin-10","section":"docs","summary":"","title":""},{"content":"Not yet. It is in development, and the installer uses the unstable channel. The feature status page lists what is implemented and what is still planned.","heading":"Is Cloudmin 10 released?","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#is-cloudmin-10-released","section":"docs","summary":"","title":""},{"content":"Cloudmin 10 supports KVM through libvirt first. Xen is planned through libvirt’s libxl driver once KVM is stable, and Cloudmin 9 remains available and maintained for Xen users until then. OpenVZ, LXC, VServer, Zones, Docker, Podman, Citrix, EC2, GCE and the other provider screens are not carried forward. Containers can run inside Cloudmin virtual machines; the rest belongs to other products.","heading":"What happened to Xen, OpenVZ, Docker and the cloud providers?","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#what-happened-to-xen-openvz-docker-and-the-cloud-providers","section":"docs","summary":"","title":""},{"content":"Not by a package upgrade, on purpose. Existing KVM installations will be imported by an explicit tool with a report for each virtual machine, cutover and rollback. That tool is planned and not available yet. Install Cloudmin 10 on a fresh host.","heading":"Can I upgrade a Cloudmin 9 host to Cloudmin 10?","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#can-i-upgrade-a-cloudmin-9-host-to-cloudmin-10","section":"docs","summary":"","title":""},{"content":"Cloudmin GPL manages one host with an unlimited number of virtual machines. Cloudmin Pro adds custom guest setup scripts, Google Cloud Storage, Azure, Backblaze B2, Dropbox and Google Drive backup destinations and image capture today. Managing multiple hosts from one place is planned for Cloudmin Connect GPL and Pro, separate fleet products. See Professional Features.","heading":"How do GPL and Pro differ?","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#how-do-gpl-and-pro-differ","section":"docs","summary":"","title":""},{"content":"No. Libvirt stores the virtual hardware, network and storage configuration, so standard tools keep working on the same machines. Cloudmin adds ownership, jobs, images and consoles around it. Changes made outside Cloudmin are picked up from libvirt; Cloudmin’s own records such as managed SSH keys are only cleaned up when a virtual machine is deleted through Cloudmin.","heading":"Does Cloudmin replace virsh or virt-manager?","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#does-cloudmin-replace-virsh-or-virt-manager","section":"docs","summary":"","title":""},{"content":"","heading":"Installation","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#installation","section":"docs","summary":"","title":""},{"content":"Rocky Linux 10, AlmaLinux 10, Debian 13 and Ubuntu 26.04, on x86-64 or ARM64 with KVM available. See OS Support.","heading":"Which hosts are supported?","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#which-hosts-are-supported","section":"docs","summary":"","title":""},{"content":"No. Run the installer on a freshly installed supported OS. It installs the distribution’s hypervisor packages, Webmin and Cloudmin, and configures them through Cloudmin-Config.","heading":"Should I install libvirt, QEMU or Webmin first?","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#should-i-install-libvirt-qemu-or-webmin-first","section":"docs","summary":"","title":""},{"content":"Yes, when nested virtualization is enabled and /dev/kvm works in the guest. The installer boots a small isolated KVM appliance before reporting success, so a host without working KVM fails early with a clear message.","heading":"Can I install inside a virtual machine?","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#can-i-install-inside-a-virtual-machine","section":"docs","summary":"","title":""},{"content":"It creates a persistent NAT network for guests and does not touch the host’s management interface. Bridging a physical interface is a separate, confirmed step on the Networking page with automatic rollback. See Virtual networks and bridges.","heading":"Does the installer change my network?","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#does-the-installer-change-my-network","section":"docs","summary":"","title":""},{"content":"","heading":"Virtual machines","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#virtual-machines","section":"docs","summary":"","title":""},{"content":"Catalogue cloud images for AlmaLinux, Alpine, Arch, CentOS Stream, Debian, Fedora, openSUSE, Rocky Linux and Ubuntu, your own QCOW2 or raw disk images from a URL, an upload or a host file, and installer ISOs. See Image Manager.","heading":"Which images can I use?","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#which-images-can-i-use","section":"docs","summary":"","title":""},{"content":"No. Names do not need DNS records. Templates can require a fully qualified guest hostname, and the Virtualmin templates always do, because Virtualmin needs one.","heading":"Do virtual machine names need to be fully qualified domain names?","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#do-virtual-machine-names-need-to-be-fully-qualified-domain-names","section":"docs","summary":"","title":""},{"content":"Cloud images are configured through cloud-init with the account, password or SSH keys, and DHCP or static addressing you choose. Cloudmin does not mount and rewrite guest filesystems during normal creation. Installer ISOs are set up through the graphical console instead.","heading":"How does Cloudmin set the guest password and network?","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#how-does-cloudmin-set-the-guest-password-and-network","section":"docs","summary":"","title":""},{"content":"Yes. Choose a Virtualmin GPL or Pro template. See Virtualmin templates.","heading":"Can I install Virtualmin inside a guest automatically?","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#can-i-install-virtualmin-inside-a-guest-automatically","section":"docs","summary":"","title":""},{"content":"Creation is a durable job. On failure it removes the resources it created and reports any cleanup that still needs attention, so it can be retried. Interrupted jobs are recovered when a host administrator next opens Cloudmin.","heading":"What happens if creation fails halfway?","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#what-happens-if-creation-fails-halfway","section":"docs","summary":"","title":""},{"content":"","heading":"Access and security","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#access-and-security","section":"docs","summary":"","title":""},{"content":"Yes. Set Host administrator? to No for that Webmin user and assign the guests they may see, with separate grants for power controls, forced power controls, consoles, SSH terminals and password resets. See How to delegate access.","heading":"Can I give a user access to one virtual machine only?","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#can-i-give-a-user-access-to-one-virtual-machine-only","section":"docs","summary":"","title":""},{"content":"Webmin, Cloudmin’s page handlers, the CLI, the status collector and the controller jobs run as root and make the libvirt changes. Downloads, host-file reads, checksum checks, disk inspection, SSH key validation, cloud-init seed generation, consoles and terminal relays run without root in systemd-managed workers. See Privilege separation.","heading":"What runs as root?","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#what-runs-as-root","section":"docs","summary":"","title":""},{"content":"Use the security@ address at virtualmin.com rather than the public forum or issue tracker.","heading":"Where do I report a security issue?","pageTitle":"FAQ","permalink":"https://cloudmin.com/docs/faq/#where-do-i-report-a-security-issue","section":"docs","summary":"","title":""},{"content":"Cloudmin runs on top of Webmin and manages virtual machines through libvirt, so it needs a Linux host with KVM, systemd and the distribution’s libvirt and QEMU packages. The automated installer and the host configuration are tested on a small set of current systems.","heading":"","pageTitle":"OS Support","permalink":"https://cloudmin.com/docs/os-support/","section":"docs","summary":"","title":"OS Support"},{"content":"Cloudmin 10 installs on these hosts, on x86-64 or ARM64, with CPU virtualization extensions enabled and a working /dev/kvm:","heading":"Supported host systems","pageTitle":"OS Support","permalink":"https://cloudmin.com/docs/os-support/#supported-host-systems","section":"docs","summary":"","title":""},{"content":"Rocky Linux 10 on x86_64 and aarch64 AlmaLinux 10 on x86_64 and aarch64 Rocky Linux and AlmaLinux also use EPEL and CRB for dependencies, which the installer enables.","heading":"Enterprise Linux and derivatives","pageTitle":"OS Support","permalink":"https://cloudmin.com/docs/os-support/#enterprise-linux-and-derivatives","section":"docs","summary":"","title":""},{"content":"Debian 13 on amd64 and arm64 Ubuntu 26.04 LTS on amd64 and arm64 Debian supplies the Perl libvirt bindings in main; Ubuntu supplies them in universe, which the installer enables.\nAll hypervisor packages come from the distribution. Debian 13 and Ubuntu 26.04 use their stock monolithic libvirtd until modular packages become available; Cloudmin-Config prefers modular libvirt when virtqemud is installed.","heading":"Debian Linux and derivatives","pageTitle":"OS Support","permalink":"https://cloudmin.com/docs/os-support/#debian-linux-and-derivatives","section":"docs","summary":"","title":""},{"content":"Nested virtualization. Installing inside UTM, VMware, KVM or another hypervisor works when nested KVM is enabled. The installer boots a temporary isolated KVM appliance before reporting success; a host where that boot fails is not reported as ready. Ubuntu 26.04 on ARM64 under nested virtualization. A boot failure has been reproduced with Ubuntu kernel 7.0.0-34 under Apple/UTM nested virtualization. A physical AMD x86-64 host with the same kernel passes. Use a Rocky Linux 10 or Debian 13 host in that environment, or retry after kernel or hypervisor updates. Physical ARM64 hosts remain untested.","heading":"Notes on specific environments","pageTitle":"OS Support","permalink":"https://cloudmin.com/docs/os-support/#notes-on-specific-environments","section":"docs","summary":"","title":""},{"content":"The host matrix does not limit guest choices. The image catalogue offers AlmaLinux, Alpine, Arch, CentOS Stream, Debian, Fedora, openSUSE, Rocky Linux and Ubuntu cloud images for the host architecture, and you can import your own QCOW2 or raw images or installer ISOs. Cloud images need cloud-init for account and network setup; custom images without catalogue metadata are inspected read-only with libguestfs. Installer ISO support is experimental: Alpine ARM64 has passed a full installation, and other installers still need testing.","heading":"Guest operating systems","pageTitle":"OS Support","permalink":"https://cloudmin.com/docs/os-support/#guest-operating-systems","section":"docs","summary":"","title":""},{"content":"Cloudmin 9 remains available and maintained for Xen users, including installer and critical compatibility fixes. Its end-of-support policy is not decided yet. Xen support in Cloudmin 10 is planned through libvirt after the KVM release is stable, with no date set.","heading":"Cloudmin 9","pageTitle":"OS Support","permalink":"https://cloudmin.com/docs/os-support/#cloudmin-9","section":"docs","summary":"","title":""},{"content":"Cloudmin GPL manages the host it runs on, with an unlimited number of virtual machines. Cloudmin Pro adds features for that host. Cloudmin Connect GPL and Pro are separate planned products for managing a fleet of Cloudmin hosts.\nGPL and Pro share the same API, libvirt adapter and UI. Pro implementations install under server-manager/pro. Security fixes, safe cold migration, data export and restore are never Pro-only.","heading":"","pageTitle":"Professional Features","permalink":"https://cloudmin.com/docs/professional-features/","section":"docs","summary":"","title":"Professional Features"},{"content":"","heading":"Available host features","pageTitle":"Professional Features","permalink":"https://cloudmin.com/docs/professional-features/#available-host-features","section":"docs","summary":"","title":""},{"content":"Pro Preparation and final setup scripts run inside a new guest, before and after its software installation. Scripts can be entered directly or read from an allowed host file. Guest packages and Virtualmin GPL/Pro installation remain available in Cloudmin GPL. See Templates and plans.","heading":"Custom setup scripts","pageTitle":"Professional Features","permalink":"https://cloudmin.com/docs/professional-features/#setup-scripts","section":"docs","summary":"","title":""},{"content":"Pro Google Cloud Storage, Azure Blob Storage, Backblaze B2, Dropbox and Google Drive transfers use Virtualmin’s provider helpers. Local directories, mounted storage, SSH and S3-compatible backups remain in GPL, including schedules, retention, live backups and restore. Real-account transfer tests for the Pro providers are still pending. See Backups and restore.","heading":"Cloud backup destinations","pageTitle":"Professional Features","permalink":"https://cloudmin.com/docs/professional-features/#cloud-backups","section":"docs","summary":"","title":""},{"content":"Pro Capture an existing Linux guest’s virtio system disk as a standalone QCOW2 image, using live snapshot or clean-shutdown preparation. New machines receive fresh identities and login settings. Importing and using existing images remain in GPL. See Creating images from virtual machines.\nEverything else currently implemented remains in GPL, including ordinary Webmin permissions, per-machine grants, read-only access, consoles, networking, storage, snapshots, clones, CLI and API access. Virtualmin Pro guest templates do not require Cloudmin Pro.","heading":"Create Image","pageTitle":"Professional Features","permalink":"https://cloudmin.com/docs/professional-features/#image-capture","section":"docs","summary":"","title":""},{"content":"GPL shows Pro controls in context, disabled and marked with a Pro badge. Module Configuration → Host connection and overview → Show Pro features overview? can hide these previews. Hiding advertising does not change permissions or unlock features; the server also refuses Pro operations without the package.\nTemplates saved with scripts remain readable after Pro is removed. Their script controls become read-only, and creation refuses those scripts. An administrator can explicitly clear both saved scripts when editing the template. Other template edits preserve them.","heading":"Pro previews in GPL","pageTitle":"Professional Features","permalink":"https://cloudmin.com/docs/professional-features/#pro-previews-in-gpl","section":"docs","summary":"","title":""},{"content":"All Connect features below are Planned . They are not available in the current host module.\nProduct Scope Features Cloudmin GPL One host, unlimited virtual machines Existing host management, packages, Virtualmin installation, backups and Webmin access grants Cloudmin Pro One host Custom scripts, cloud backup providers and image capture; projects, quotas, self-service creation, usage tracking and automation credentials Planned Cloudmin Connect GPL A fleet, with host and fleet VM limits to be decided Host registration, combined inventory and search, consoles, terminals, basic resource views, safe cold moves and host backup/restore actions Planned Cloudmin Connect Pro Fleet operations Live migration, evacuation, placement, failover, controller availability, disaster recovery, fleet policy and automation Planned Connect Pro also plans SSO, enforced two-factor authentication, fleet roles, audit retention and SIEM integration, backup policies and test restores, alerts, capacity reports, chargeback, scoped fleet tokens, bulk actions, approvals, maintenance windows, Terraform integration, shared storage and networking, security groups, white-labeling and priority support. Delivery is incremental: Connect GPL and cold moves first, Pro live migration next, automatic failover last. Each migration combination must be tested. Automatic failover requires controller quorum and verified fencing to prevent two hosts starting the same guest disks.","heading":"Planned products","pageTitle":"Professional Features","permalink":"https://cloudmin.com/docs/professional-features/#planned-products","section":"docs","summary":"","title":""},{"content":"Connect GPL will count registered compute hosts and all virtual machines on them, including machines created locally. A controller with no guests will not count as a compute host; a controller that also runs guests will. Pro hosts count too.\nExceeding a Connect GPL limit will restrict new registrations, creation and moves through Connect. Existing machines will remain visible and available for monitoring, recovery and restore. Local Cloudmin GPL will retain unlimited virtual machines. Exact limits and prices are not final.\nCloudmin Pro and Cloudmin Connect Pro are separate purchases. Buying one does not unlock the other’s features. Commercial bundles may offer discounts without merging these entitlements.\nVirtualmin Connect is a separate planned Webmin module for managing Virtualmin servers and replacing Cloudmin Services. Its edition split, counting rules and commercial bundles remain undecided.","heading":"Connect limits and purchases","pageTitle":"Professional Features","permalink":"https://cloudmin.com/docs/professional-features/#connect-limits-and-purchases","section":"docs","summary":"","title":""},{"content":"Cloudmin Pro licenses are sold through the Virtualmin shop. Cloudmin 10 licensing and Connect prices are not final. The current Pro extensions do not contact a license server.","heading":"Licensing","pageTitle":"Professional Features","permalink":"https://cloudmin.com/docs/professional-features/#licensing","section":"docs","summary":"","title":""},{"content":"Virtualmin Pro licensing is separate from Cloudmin. Its guest template asks for a license serial and key per virtual machine, keeps them out of templates and cloud-init seed disks, and removes them from the job record once the guest has accepted them. Clones and captured images replace Pro credentials with a placeholder, so each copy needs its own license or a manual downgrade to GPL.","heading":"Virtualmin Pro inside guests","pageTitle":"Professional Features","permalink":"https://cloudmin.com/docs/professional-features/#virtualmin-pro-inside-guests","section":"docs","summary":"","title":""},{"content":"Cloudmin 10 is developed in the open and is not released yet. This page lists what works today and what is still planned, so the rest of the documentation can be read in context. Items marked Planned are design targets, not available features.","heading":"","pageTitle":"Feature Status and Roadmap","permalink":"https://cloudmin.com/docs/roadmap/","section":"docs","summary":"","title":"Feature Status and Roadmap"},{"content":"","heading":"Implemented","pageTitle":"Feature Status and Roadmap","permalink":"https://cloudmin.com/docs/roadmap/#implemented","section":"docs","summary":"","title":""},{"content":"Automated installer for Rocky Linux 10, AlmaLinux 10, Debian 13 and Ubuntu 26.04 on x86-64 and ARM64, with repository setup, package groups, managed swap and a readiness report. Cloudmin-Config prepares KVM, modular or monolithic libvirt, a default storage pool, a persistent NAT network, EFI firmware, Webmin, nftables and Fail2ban, and boots an isolated KVM appliance to verify the host. Host readiness checks with actionable errors, shown on the overview. Direct libvirt discovery through Sys::Virt, without parsing virsh output.","heading":"Host","pageTitle":"Feature Status and Roadmap","permalink":"https://cloudmin.com/docs/roadmap/#host","section":"docs","summary":"","title":""},{"content":"Catalogue of AlmaLinux, Alpine, Arch, CentOS Stream, Debian, Fedora, openSUSE, Rocky Linux and Ubuntu cloud images for the host architecture, verified against the publishers’ SHA-256 or SHA-512 checksums. Background imports from HTTPS URLs, browser uploads and host files into directory, filesystem and NFS pools, with progress pages, batch downloads, bulk deletion and custom catalogue entries. Installer ISOs, with an empty system disk and the ISO in a read-only CD/DVD drive. Experimental. Image capture from an existing Linux guest, in Cloudmin Pro.","heading":"Images","pageTitle":"Feature Status and Roadmap","permalink":"https://cloudmin.com/docs/roadmap/#images","section":"docs","summary":"","title":""},{"content":"Creation from cloud images or ISOs with firmware selection, independent disks and recoverable jobs; cloud-init account setup, SSH keys, DHCP or static IPv4 and IPv6 including on-link gateways. Machine templates and resource plans, including Default Template, Default Plan and Virtualmin GPL and Pro templates. Guest packages and Virtualmin GPL/Pro installation run inside the guest after cloud-init. Preparation and final setup scripts require Cloudmin Pro. Pro Power controls, pause and resume, confirmed hard reset, autostart, live CPU and balloon memory changes, offline resource maximums and boot settings. Disk and network interface changes, disk growth, ISO insertion and ejection, and deletion with explicit disk selection and shared-storage checks. Guest password reset through the QEMU Guest Agent. Disk snapshots with creation, restore, deletion, per-machine history, a host overview and guest-agent preparation. Full clones from stopped or running guests with fresh identities, or unchanged copies left stopped. Full backups and restore with hourly to yearly schedules and retention, to local, SSH and S3 destinations, plus cloud destinations in Pro.","heading":"Virtual machines","pageTitle":"Feature Status and Roadmap","permalink":"https://cloudmin.com/docs/roadmap/#virtual-machines","section":"docs","summary":"","title":""},{"content":"Browser SSH terminals with pinned host keys, host-managed per-guest keys, remembered ports and optional automatic connection. Serial consoles with recorded output replay and graphical VNC consoles that work during boot. Guest Webmin through the host’s Servers Index proxy for Virtualmin guests behind NAT, root-only and behind a trust warning. Delegation of individual virtual machines to Webmin users with separate grants; read-only mode blocks changes and consoles. Live status over authenticated WebSockets: power state, guest agent, SSH reachability, resource usage and guest filesystem usage.","heading":"Access","pageTitle":"Feature Status and Roadmap","permalink":"https://cloudmin.com/docs/roadmap/#access","section":"docs","summary":"","title":""},{"content":"NAT, routed and isolated virtual networks, and guided host bridge creation through NetworkManager, Netplan or ifupdown with connectivity confirmation and automatic rollback. Storage pool and volume inventory; directory, filesystem and NFS pools for creation, cloning, backups and imports; registered LVM volume groups and thin pools for creation, cloning, backups, restore and native snapshots, with raw guest disks.","heading":"Networking and storage","pageTitle":"Feature Status and Roadmap","permalink":"https://cloudmin.com/docs/roadmap/#networking-and-storage","section":"docs","summary":"","title":""},{"content":"Durable jobs with reservations, progress, cancellation and recovery after a controller restart. One versioned JSON API shared by the UI, the api.pl command line and remote clients. Isolated systemd workers without root for downloads, inspection, seeds, consoles and relays. Compatibility wrappers for frame-based themes and older Cloudmin function names.","heading":"Platform","pageTitle":"Feature Status and Roadmap","permalink":"https://cloudmin.com/docs/roadmap/#platform","section":"docs","summary":"","title":""},{"content":"","heading":"Planned","pageTitle":"Feature Status and Roadmap","permalink":"https://cloudmin.com/docs/roadmap/#planned","section":"docs","summary":"","title":""},{"content":"Clean-install validation across the full host matrix, including physical ARM64. Planned One fully tested shared storage path, such as NFS on every supported host. Planned VLAN tags on guest interfaces and anti-spoofing through libvirt network filters. Planned Scheduled snapshots. Planned Adopting guests defined outside Cloudmin. Planned Machine-readable API schema and generated API documentation. Planned Catalogue signature verification, an update schedule and an end-of-life policy. Planned Legacy Cloudmin 9 KVM import with a per-machine report, cutover and rollback. Planned A stable Cloudmin 10 package repository. Planned","heading":"First supported release","pageTitle":"Feature Status and Roadmap","permalink":"https://cloudmin.com/docs/roadmap/#first-supported-release","section":"docs","summary":"","title":""},{"content":"Projects, quotas, self-service creation, usage tracking and automation credentials. Planned","heading":"Cloudmin Pro","pageTitle":"Feature Status and Roadmap","permalink":"https://cloudmin.com/docs/roadmap/#cloudmin-pro","section":"docs","summary":"","title":""},{"content":"Cloudmin Connect is a separate planned fleet product. GPL will add host registration, combined inventory and search, consoles and terminals, resource views, safe cold moves and host backup/restore actions. It will have host and fleet VM limits; the numbers are not decided. Existing guests remain visible and recoverable after a limit is exceeded. Planned","heading":"Cloudmin Connect GPL","pageTitle":"Feature Status and Roadmap","permalink":"https://cloudmin.com/docs/roadmap/#cloudmin-connect-gpl","section":"docs","summary":"","title":""},{"content":"Live migration, evacuation and placement for tested host/storage combinations. Planned Controller quorum, verified fencing, automatic failover and disaster recovery. Failover must never start a second owner of the same disks. Planned Fleet backup policies, test restores, monitoring, alerting and capacity reports. Planned SSO, enforced two-factor authentication, fleet roles, audit retention and SIEM integration. Planned Scoped tokens, bulk actions, approvals, maintenance windows, Terraform, fleet storage and networking, security groups, chargeback and white-labeling. Planned Deliver Connect GPL and cold moves first, Pro live migration next, and automatic failover last. Hosts remain standalone libvirt systems; Connect does not require Corosync on every host. Cloudmin Pro and Connect Pro remain separate purchases. See Professional features for the edition rules.","heading":"Cloudmin Connect Pro","pageTitle":"Feature Status and Roadmap","permalink":"https://cloudmin.com/docs/roadmap/#cloudmin-connect-pro","section":"docs","summary":"","title":""},{"content":"Xen through libvirt’s libxl driver. Planned Managed iSCSI/SAN and Ceph RBD storage. Planned Prometheus metrics and external logs. Planned Declarative fleet deployment, hooks and autoscaling from snapshot clones. Planned S3-compatible object storage, hosted databases and load balancers. Planned Virtualmin Connect, the optional Webmin module that replaces Cloudmin Services for Virtualmin fleet management. Planned","heading":"After the base is stable","pageTitle":"Feature Status and Roadmap","permalink":"https://cloudmin.com/docs/roadmap/#after-the-base-is-stable","section":"docs","summary":"","title":""},{"content":"Containers and Kubernetes, public cloud providers, microVM or sandbox products, mail relay and OS upgrade services, and raw QEMU launch code are outside Cloudmin 10. Containers can run inside Cloudmin virtual machines.","heading":"Not planned","pageTitle":"Feature Status and Roadmap","permalink":"https://cloudmin.com/docs/roadmap/#not-planned","section":"docs","summary":"","title":""},{"content":"Stage Content Status 0. Contracts and evidence Resources, job states, API conventions, host matrix, legacy fixtures, Cloudmin 9 policy Partly done: resource model and host matrix defined; legacy fixtures and testing on every supported host still pending 1. Installable foundation Installer, meta-packages, Cloudmin-Config, libvirt adapter, readiness checks Implemented; clean installs on every supported host not yet verified 2. First complete virtual machine Image manager; create, start, console, stop, delete Implemented; not yet tested on every supported host 3. Single-host management Settings, disks, NICs, storage pools, networks, snapshots, clones, backups, audit Implemented; public cloud account tests pending 4. Cloudmin Connect and Pro tenancy Connect GPL: registration and cold moves. Connect Pro: live migration, then fenced failover. Host Pro: projects, quotas, credentials Pending 5. Legacy import and preview Repeatable migration tests across file, LVM, NFS and adopted block storage; user preview Pending 6. KVM release, Xen evaluation Release gates, documentation, then Xen fixtures Pending","heading":"Delivery plan","pageTitle":"Feature Status and Roadmap","permalink":"https://cloudmin.com/docs/roadmap/#delivery-plan","section":"docs","summary":"","title":""},{"content":"Cloudmin 10 ships when a supported clean OS reaches a running virtual machine without undocumented shell edits; every installer step is idempotent and tested; a supported legacy KVM guest imports without copying its disk; no failed import or migration can leave two startable owners of one disk set; create, backup, restore, clone and migration jobs survive controller restarts at tested interruption points; unsupported combinations fail in preflight with useful errors; the image catalogue has an owner and process; unit, libvirt integration and installer tests run automatically; the API and CLI are documented and covered by compatibility tests; and every supported UI workflow is documented here.","heading":"Release gates","pageTitle":"Feature Status and Roadmap","permalink":"https://cloudmin.com/docs/roadmap/#release-gates","section":"docs","summary":"","title":""},{"content":"Open System → Settings → License Manager to view, recheck, replace or deregister a Cloudmin Pro license. GPL does not require a license. Host administrators can change licenses; read-only users can view their status.","heading":"","pageTitle":"License Manager","permalink":"https://cloudmin.com/docs/getting-started/license-manager/","section":"docs","summary":"","title":"License Manager"},{"content":"Renew through your Virtualmin account, then select Recheck License. To use another license, enter its serial number and key. Cloudmin validates the replacement before saving it and updating existing Cloudmin package repository credentials. Credentials are stored in /etc/cloudmin-license. Administrators who can change the license can see its saved key; read-only users cannot.","heading":"Renewing or changing a license","pageTitle":"License Manager","permalink":"https://cloudmin.com/docs/getting-started/license-manager/#renewing-or-changing-a-license","section":"docs","summary":"","title":""},{"content":"Deregister License asks for confirmation, then removes this host’s saved license and repository credentials. Pro updates and new changes through Cloudmin require a license again. Existing machines, scheduled backups and accepted jobs keep running. This does not cancel your subscription or immediately remove the host from the license server’s count.","heading":"Deregistering a license","pageTitle":"License Manager","permalink":"https://cloudmin.com/docs/getting-started/license-manager/#deregistering-a-license","section":"docs","summary":"","title":""},{"content":"An expired license allows changes for seven days after the licensed date ends in UTC. When the server reports use on too many hosts, there are 21 days to finish the migration or assign separate licenses. Rechecking does not restart either period.\nChecks use https://www.virtualmin.com/api/license/client with product=cloudmin. The license must belong to Cloudmin; Virtualmin licenses are rejected. The server reports the expiry date, host allowance and host use. Migration grace starts when this host first observes use above that allowance.\nIf verification fails, the last verified license can remain usable for up to 21 days. An earlier expiry or migration deadline still applies. Check the host clock and HTTPS connectivity, then recheck the license. Missing or invalid cached state requires successful verification.","heading":"Grace periods","pageTitle":"License Manager","permalink":"https://cloudmin.com/docs/getting-started/license-manager/#grace-periods","section":"docs","summary":"","title":""},{"content":"Cloudmin blocks new changes through the web interface, API and CLI. Existing machines and services keep running. Inventory, guest connections, accepted jobs, scheduled backups and recovery remain available. Forms and buttons stay available under their normal permissions. Submitting a blocked change opens an error page with instructions for restoring access. License Manager remains available throughout.","heading":"After grace ends","pageTitle":"License Manager","permalink":"https://cloudmin.com/docs/getting-started/license-manager/#after-grace-ends","section":"docs","summary":"","title":""},{"content":"cloudmin get-license cloudmin check-license cloudmin change-license --serial 12345 --key-file /root/cloudmin-key cloudmin deregister-license --yes Keep the key in a private file, or use --key-file - to read standard input. See the command reference for details.","heading":"Command line","pageTitle":"License Manager","permalink":"https://cloudmin.com/docs/getting-started/license-manager/#command-line","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"Automated Installation","permalink":"https://cloudmin.com/docs/installation/automated/","section":"docs","summary":"","title":"Automated Installation"},{"content":"A freshly installed supported OS with CPU virtualization extensions and a working /dev/kvm Enough memory for the host plus the guests you plan to run; the installer can add managed swap Local disk space for images and guest disks, or an NFS mount you intend to use as a pool A fully qualified host name if you plan to install Virtualmin inside guests and reach them by name","heading":"Recommended host specifications","pageTitle":"Automated Installation","permalink":"https://cloudmin.com/docs/installation/automated/#recommended-host-specifications","section":"docs","summary":"","title":""},{"content":"Install Cloudmin with the automated cloudmin-install.sh script. It is the only supported installation method; there is no manual package walkthrough yet. If you haven’t already, read the Download page first, as it covers the steps most installations need.\nDevelopment channel\nThere is no Cloudmin 10 stable repository yet. The installer uses the unstable channel. Expect changes between builds.","heading":"Installation","pageTitle":"Automated Installation","permalink":"https://cloudmin.com/docs/installation/automated/#installation","section":"docs","summary":"","title":""},{"content":"Download the script to the host and run it as root, using the toggles to add the flags that match your setup:\ncopy sudo sh cloudmin-install.sh Managed swap No swap Or download and run it in one step:\ncopy sudo sh -c \"$(curl -fsSL https://download.cloudmin.dev/cloudmin-install.sh)\" Managed swap No swap The script configures the Cloudmin repository, installs the package groups, then runs Cloudmin-Config, which completes the host configuration and checks readiness. It shows the installation plan, including any swap change, and asks for confirmation unless --yes is given. Logs are kept privately in /root by default.","heading":"Running the install script","pageTitle":"Automated Installation","permalink":"https://cloudmin.com/docs/installation/automated/#running-the-install-script","section":"docs","summary":"","title":""},{"content":"Usage: cloudmin-install.sh [options] --hostname|-n name Set a fully qualified host name --no-package-updates|-x Skip the initial distribution upgrade --extra package[,package...] Install additional distribution packages --include plugin[,plugin...] Include optional configuration plugins --exclude plugin[,plugin...] Exclude plugins (required dependencies cannot be excluded) --setup|-s Configure repositories only --swap|-S size Managed swap size: MiB, K, M, G (or KB/MB/GB) --swap-only Change swap without installing Cloudmin --no-swap|-ns Leave swap unchanged --log-dir directory Directory for the installation log --yes|-y Accept the installation or swap plan --verbose|-v Show debug messages --version|-V Show installer version --help|-h Show this help","heading":"Install script options","pageTitle":"Automated Installation","permalink":"https://cloudmin.com/docs/installation/automated/#install-script-options","section":"docs","summary":"","title":""},{"content":"Without a size, the installer chooses swap from available memory, existing swap and disk space. --swap 4G sets a size, --no-swap leaves swap alone, and --swap 0 removes only installer-managed swap. The managed paths are /swap.vm and, on Btrfs, /swap.virtualmin/swapfile; unrelated swap is never removed. --swap-only changes swap on an already installed host without installing packages or configuring repositories.","heading":"Swap","pageTitle":"Automated Installation","permalink":"https://cloudmin.com/docs/installation/automated/#swap","section":"docs","summary":"","title":""},{"content":"Cloudmin does not install or configure BIND or Postfix; no DNS or mail server is needed to run virtual machines. Install additional services separately and configure them through Webmin. All shipped configuration plugins run by default. Use --exclude to skip a plugin unless another plugin requires it; the final readiness check is required.","heading":"Optional services","pageTitle":"Automated Installation","permalink":"https://cloudmin.com/docs/installation/automated/#optional-services","section":"docs","summary":"","title":""},{"content":"Packages. On Rocky Linux and AlmaLinux, CRB and EPEL are enabled and the cloudmincore and cloudmin-kvm groups are installed. On Debian and Ubuntu, cloudmin-core and the native cloudmin-kvm-stack meta package are installed, with Ubuntu universe enabled for the Perl virtualization bindings. Dependencies install in one transaction; failures stop the installer. Configuration history. Etckeeper tracks changes in /etc. Rocky Linux and AlmaLinux need initialization and a daily timer; Debian and Ubuntu packages handle their own setup. Existing history is preserved. Libvirt. Modular daemons are preferred when virtqemud is installed, otherwise the stock libvirtd is used. The selected services and sockets are enabled at boot so guests, networks and pools marked for autostart come back after a reboot. An incomplete modular installation fails rather than falling back to libvirtd; the QEMU, network and storage units must all be present. An idle daemon may exit while its listening sockets remain available. An active monolithic installation is never switched to modular automatically; follow libvirt’s migration steps first. Storage and network. A default storage pool is prepared and tested with a volume creation and deletion. A persistent default NAT network is created after checking host routes, without touching the management interface. Firmware. Packaged EFI firmware is verified so UEFI guests can be created. Security. Webmin, nftables and Fail2ban are configured through Webmin’s APIs. SELinux stays enforcing. Readiness. Before reporting success, Cloudmin-Config boots a temporary isolated KVM inspection appliance with a three-minute timeout and a 2 GiB memory limit. A failed boot stops the installation and shows the end of the configuration log; already installed packages are not rolled back. The installer requires Cloudmin-Config 10.0.0 or newer, a Webmin with the systemd get_unit_state API, and the matching Cloudmin module, DEB meta packages and RPM groups. These are published together.","heading":"What the installer configures","pageTitle":"Automated Installation","permalink":"https://cloudmin.com/docs/installation/automated/#what-the-installer-configures","section":"docs","summary":"","title":""},{"content":"Log in to Webmin at https://your-hostname:10000 and open Cloudmin. The overview shows host details and any failed requirements. Continue with Your first virtual machine.","heading":"After installation","pageTitle":"Automated Installation","permalink":"https://cloudmin.com/docs/installation/automated/#after-installation","section":"docs","summary":"","title":""},{"content":"Nested virtualization. Enable nested KVM in the outer hypervisor. The appliance boot check fails otherwise. Ubuntu 26.04 ARM64 under UTM. A kernel boot failure has been reproduced in that environment; see OS Support. Repository problems. Run cloudmin-install.sh --setup --yes to configure repositories and their prerequisites again without reinstalling. Readiness failures after installation. The Cloudmin overview lists failed requirements with the capability that is missing and how to fix it. See Host requirements.","heading":"Troubleshooting","pageTitle":"Automated Installation","permalink":"https://cloudmin.com/docs/installation/automated/#troubleshooting","section":"docs","summary":"","title":""},{"content":"The installer satisfies these requirements on a supported host. This page explains what they are, so readiness failures and optional features make sense.","heading":"","pageTitle":"Host Requirements","permalink":"https://cloudmin.com/docs/installation/host-requirements/","section":"docs","summary":"","title":"Host Requirements"},{"content":"KVM. CPU virtualization extensions enabled in firmware and a working /dev/kvm. Inside another hypervisor, nested virtualization must be enabled. Installation readiness boots a real isolated KVM appliance rather than only checking that /dev/kvm exists. systemd 247 or later with systemd-run and working nss-systemd user lookup. Cloudmin’s isolated workers and console relays depend on it; if a worker cannot start with its restrictions, the operation fails rather than running the tool as root. libvirt and QEMU from the distribution, with the Perl Sys::Virt bindings. Cloudmin connects as root to the system connection (qemu:///system). Distribution socket permissions are kept. Rocky Linux and AlmaLinux also use EPEL for dependencies; Debian supplies libsys-virt-perl in main and Ubuntu in universe. Webmin at the version released with Cloudmin 10. Cloudmin uses Webmin’s authentication, permissions, UI widgets and HTTP APIs, and development installations need current Webmin sources for widgets such as ui_action_button and grouped image choices. EFI firmware packages for UEFI guests, and the system CA certificate bundle for catalogue downloads.","heading":"Core","pageTitle":"Host Requirements","permalink":"https://cloudmin.com/docs/installation/host-requirements/#core","section":"docs","summary":"","title":""},{"content":"Feature Requires Custom cloud image inspection libguestfs and its Perl bindings, YAML::XS Cloning and prepared clones libguestfs, its Perl bindings, bsdtar, YAML::XS; access to /dev/kvm through the kvm group and the running kernel and modules for the appliance Image capture (Pro) libguestfs, its Perl bindings, YAML::XS 0.69 or later, bsdtar SSH terminal Webmin’s Terminal module, Net::WebSocket::Server, OpenSSH, Python 3 Graphical and serial consoles Webmin’s Terminal module, Net::WebSocket::Server, Python 3; a VNC display for the graphical console Serial output recording virtlogd with stdio_handler = \"logd\", a positive max_size and 1–32 backups Host bridges on ifupdown bridge-utils Backup archives qemu-img, Python 3 The root controller supplies a private kernel copy to each libguestfs worker; host kernel permissions stay unchanged.","heading":"Optional tools","pageTitle":"Host Requirements","permalink":"https://cloudmin.com/docs/installation/host-requirements/#optional-tools","section":"docs","summary":"","title":""},{"content":"The Cloudmin overview shows host details and requirements. Healthy details can be hidden in Module Configuration, but failed requirements are always shown to host administrators. Each failed check names the missing capability and how to fix it. Checks include the libvirt connection and daemon layout, KVM availability, the default pool and NAT network, firmware, worker isolation, and the tools above.","heading":"Readiness checks","pageTitle":"Host Requirements","permalink":"https://cloudmin.com/docs/installation/host-requirements/#readiness-checks","section":"docs","summary":"","title":""},{"content":"Settings are grouped by purpose: host connection and overview, virtual machine lists and details, creation, remote connections, backups, snapshots, images, networking and storage. Choose a category to edit its settings. These settings apply to all Cloudmin users on the host without changing their permissions or the data collected.\nYou can set the libvirt connection URI, bridge confirmation timeout, maximum image file size, default SSH authentication method, remembered Remote Access tab, automatic SSH connection, Webmin connection warning, pre-generated passwords and host-managed SSH keys. Edit creation defaults in System Settings → Machine Templates and Resource Plans; administrators can override them on the creation form without changing the saved presets or existing virtual machines. Creation checks host capacity, available space and image requirements.\nChoose columns for virtual machines, imported images, the image catalogue, networks, storage pools and volumes, backups, backup schedules and the host snapshot list. Names always remain visible. Virtual machine and imported image states, backup schedule status and snapshot history position also remain visible.\nChoose which sections start expanded on creation and backup forms and virtual machine detail pages. Advanced image import options and healthy host details can also start open. Failed host requirements are always shown to host administrators. Collapsed sections can still be opened on the page.\nImages, networking and storage remember the last selected tab by default, separately for each Webmin user. Links to a specific tab override the saved choice. With this setting off, images opens the imported image list; networking and storage open their overviews. Read-only users can use saved choices but cannot update them.\nImage settings choose a default import pool and whether the catalogue shows the host architecture or all architectures. By default, pool selection is automatic and only the host architecture is shown. An unavailable preferred pool falls back to automatic selection. Snapshot notes appear in each virtual machine’s history by default; hiding them does not delete them.","heading":"Module Configuration","pageTitle":"Host Requirements","permalink":"https://cloudmin.com/docs/installation/host-requirements/#module-configuration","section":"docs","summary":"","title":""},{"content":"Cloudmin does not change cloud-init’s host configuration, does not create public IP addresses, and does not configure the guest OS beyond what cloud-init and the optional guest setup scripts do. Unsupported custom interface configurations stay under Webmin’s Network Configuration module.","heading":"What is not managed","pageTitle":"Host Requirements","permalink":"https://cloudmin.com/docs/installation/host-requirements/#what-is-not-managed","section":"docs","summary":"","title":""},{"content":"Cloudmin 10 is a rewrite of Cloudmin around libvirt, the standard Linux API for managing virtual machines. It supports QEMU/KVM and runs as a module inside Webmin, using Webmin’s authentication, navigation, permissions and UI widgets.\nThe goal is simple: install Cloudmin on a supported Linux system, choose or supply an image, and get a safe, manageable KVM virtual machine without manual host setup. Cloudmin is useful on its own and integrates with Virtualmin for people who run hosting inside their guests.","heading":"","pageTitle":"What Is Cloudmin 10","permalink":"https://cloudmin.com/docs/getting-started/what-is-cloudmin-10/","section":"docs","summary":"","title":"What Is Cloudmin 10"},{"content":"Libvirt is the only management layer. Cloudmin does not build raw QEMU command lines or scrape virsh output. Libvirt stores the virtual hardware, network and storage configuration, so virsh, virt-manager and Cockpit keep working on the same machines. KVM first. Xen comes later through libvirt’s libxl driver once KVM is stable. Cloudmin 9 stays available and maintained for Xen users until then. A short default path. Install, pick an image, create a virtual machine. Firmware, machine type, extra disks and NICs live under advanced settings. One shared core for GPL and Pro. Pro adds features on top; it is not a second copy of the application. Virtualmin fleet management moves out. Cloudmin Services is not carried forward; an optional Webmin module, Virtualmin Connect, is planned to replace it. No provider clutter. Docker, Podman, LXC, OpenVZ, VServer, Zones, Citrix, EC2, GCE and similar screens are removed. Explicit import. Existing KVM installations will be imported by a tool with a per-machine report, cutover and rollback, never by a package upgrade. That tool is still planned.","heading":"What changed from Cloudmin 9","pageTitle":"What Is Cloudmin 10","permalink":"https://cloudmin.com/docs/getting-started/what-is-cloudmin-10/#what-changed-from-cloudmin-9","section":"docs","summary":"","title":""},{"content":"Web UI cloudmin CLI External clients Versioned controller API Roles, inventory, jobs, policy, audit libvirt domains, networks, storage pools QEMU/KVM The Cloudmin backend runs within Webmin. Virtual machine creation, power controls and management use a versioned API shared by the UI, the command line and external clients. Long operations such as image imports, creation, cloning, backups and restores run as background jobs with progress, resource reservations, cancellation at safe points and recovery after a restart. A small SQLite database holds only these job records and short-lived password hashes; everything else keeps Webmin’s file-based configuration and audit log.\nDownloads, host-file reads, checksum checks, disk inspection, SSH key validation, cloud-init seed generation, consoles and terminal relays run as separate processes without root privileges, each in a systemd unit with a temporary user ID. See Privilege separation.","heading":"How it works","pageTitle":"What Is Cloudmin 10","permalink":"https://cloudmin.com/docs/getting-started/what-is-cloudmin-10/#how-it-works","section":"docs","summary":"","title":""},{"content":"Images from a verified catalogue, URLs, uploads and host files, plus installer ISOs Virtual machine creation from templates and plans with cloud-init accounts and networking Virtualmin GPL and Pro installation inside new guests, with progress on the host Power controls, live CPU and memory changes, disks, NICs, boot settings and media Disk snapshots, full clones and full backups with restore and schedules SSH terminals, serial and graphical consoles, and guest Webmin through the host NAT, routed and isolated networks and guided host bridges Storage pools on directories, NFS and LVM volume groups, with volume inventory Delegated access per virtual machine and live status in the browser See the feature status page for what is planned, including Cloudmin Connect for multiple hosts, Cloudmin 9 import and Xen.","heading":"What it manages today","pageTitle":"What Is Cloudmin 10","permalink":"https://cloudmin.com/docs/getting-started/what-is-cloudmin-10/#what-it-manages-today","section":"docs","summary":"","title":""},{"content":"Cloudmin GPL manages one host with an unlimited number of virtual machines. Cloudmin Pro currently adds custom guest setup scripts, cloud backup destinations and image capture, with tenancy planned. Multi-host placement, live migration and failover are planned for Cloudmin Connect, a separate product. See Professional Features.","heading":"Editions","pageTitle":"What Is Cloudmin 10","permalink":"https://cloudmin.com/docs/getting-started/what-is-cloudmin-10/#editions","section":"docs","summary":"","title":""},{"content":"Download and install Cloudmin on a supported host Create your first virtual machine Delegate access to other Webmin users","heading":"Next steps","pageTitle":"What Is Cloudmin 10","permalink":"https://cloudmin.com/docs/getting-started/what-is-cloudmin-10/#next-steps","section":"docs","summary":"","title":""},{"content":"This guide walks through creating a KVM virtual machine from a cloud image on a freshly installed Cloudmin host.","heading":"","pageTitle":"How to Create a Virtual Machine","permalink":"https://cloudmin.com/docs/getting-started/how-to-create-a-virtual-machine/","section":"docs","summary":"","title":"How to Create a Virtual Machine"},{"content":"Log in to Webmin as a host administrator and open Cloudmin. The overview shows the host checks; fix any failed requirement first. Nothing else is needed: the installer already prepared a default storage pool, a NAT network and the EFI firmware, and the image catalogue is built in.","heading":"Before you start","pageTitle":"How to Create a Virtual Machine","permalink":"https://cloudmin.com/docs/getting-started/how-to-create-a-virtual-machine/#before-you-start","section":"docs","summary":"","title":""},{"content":"Open Create Virtual Machine\nClick Create Virtual Machine in the Cloudmin menu. The form is based on Virtualmin’s Create Virtual Server page: the first section is open and the rest start collapsed.\nEnter the details\nGive the virtual machine a name. Names do not need to be domain names or have DNS records. The guest hostname defaults to the name; tick the checkbox below the name to set a separate hostname. Choose a template and a plan. The built-in Default Template selects Rocky Linux 10 for the host architecture, and Default Plan gives 2 CPUs, 2 GiB of memory and a 20 GiB disk (1 CPU on a one-CPU host).\nSet the login\nSupply the initial password or SSH public keys required by the selected login method. Cloud images configure the account through cloud-init. By default Cloudmin also creates a separate host-managed SSH key for the browser terminal; Module Configuration controls this.\nReview the summary\nA summary below the selectors shows the image, any download still needed, CPU, memory, disk size, network, addressing mode and software. It updates when you change a preset or edit a field.\nAdjust sections if needed\nImage and storage, Resources, Access, Software, Network and Boot options hold the editable template and plan settings. Change the image, pool, network, addressing (DHCP or static IPv4 and IPv6, including a /32 address with an on-link gateway), guest packages and scripts, firmware or autostart here. Manual changes keep the selected preset.\nClick Create Virtual Machine\nCreation returns a job immediately and shows its progress. If the catalogue image has not been downloaded yet, the job downloads and verifies it first and caches it for later use. Cloudmin chooses the machine type, UEFI or BIOS, and the disk bus from the host and image settings, and gives the guest its own writable disk so the source image stays reusable.\nOpen the guest\nWhen the job completes, the virtual machine page shows live power state, guest agent status, SSH reachability, addresses and resource usage. Use Remote Access for the SSH terminal, serial console or graphical console. The serial console shows boot output; the graphical console works even before the guest has a network.","heading":"Create the virtual machine","pageTitle":"How to Create a Virtual Machine","permalink":"https://cloudmin.com/docs/getting-started/how-to-create-a-virtual-machine/#create-the-virtual-machine","section":"docs","summary":"","title":""},{"content":"The job removes the resources it created and reports any cleanup that still needs attention, so you can retry. Guest setup failures, such as a failed script or installer, keep the virtual machine and point at the log inside the guest.","heading":"If creation fails","pageTitle":"How to Create a Virtual Machine","permalink":"https://cloudmin.com/docs/getting-started/how-to-create-a-virtual-machine/#if-creation-fails","section":"docs","summary":"","title":""},{"content":"To install an operating system from an ISO instead of a cloud image, choose Installer ISO as the source. Cloudmin creates an empty system disk and attaches the ISO in a read-only CD/DVD drive. Complete the installation through the graphical console, then eject the ISO or set the system disk as the first boot device. See Installer ISOs.","heading":"Installer ISOs","pageTitle":"How to Create a Virtual Machine","permalink":"https://cloudmin.com/docs/getting-started/how-to-create-a-virtual-machine/#installer-isos","section":"docs","summary":"","title":""},{"content":"Choose a Virtualmin GPL or Pro template to install a complete hosting stack inside the new guest. Virtualmin requires a fully qualified hostname, a fresh supported cloud image, at least 2048 MiB of memory for a full installation (1024 MiB for minimal) and 20 GiB of disk. See Virtualmin templates.","heading":"Virtualmin guests","pageTitle":"How to Create a Virtual Machine","permalink":"https://cloudmin.com/docs/getting-started/how-to-create-a-virtual-machine/#virtualmin-guests","section":"docs","summary":"","title":""},{"content":"The same creation runs through api.pl on the host or the HTTP API with a signed token. See Virtual machine API.","heading":"From the command line or API","pageTitle":"How to Create a Virtual Machine","permalink":"https://cloudmin.com/docs/getting-started/how-to-create-a-virtual-machine/#from-the-command-line-or-api","section":"docs","summary":"","title":""},{"content":"Cloudmin uses Webmin users and module permissions. A host administrator sees and manages everything; a delegated user sees only the virtual machines assigned to them, with the actions you grant.","heading":"","pageTitle":"How to Delegate Access","permalink":"https://cloudmin.com/docs/getting-started/how-to-delegate-access/","section":"docs","summary":"","title":"How to Delegate Access"},{"content":"Granting the Cloudmin module to a Webmin user gives host administrator access by default, and existing users without saved Cloudmin permissions keep it. Creation, cloning, hardware editing, deletion, snapshots, backups, jobs, images, storage, networking and Module Configuration all require a host administrator.","heading":"Host administrators","pageTitle":"How to Delegate Access","permalink":"https://cloudmin.com/docs/getting-started/how-to-delegate-access/#host-administrators","section":"docs","summary":"","title":""},{"content":"Open Webmin → Webmin Users, select the user or group, and open the Cloudmin module permissions. Set Host administrator? to No. Select the virtual machines the user may view. Assignments use UUIDs, so renaming a guest does not change access. Without assignments, the user sees no virtual machines. Grant the actions the user may perform on those guests. Each is a separate permission: ordinary power controls (start, shutdown, reboot, suspend, resume, autostart); forced power controls (hard reset and forced power off); the graphical and serial consoles; the SSH terminal; guest password resets through the guest agent. Assignment alone allows viewing details and live status. Changes and connections need their explicit grants, and Webmin’s read-only mode blocks them even when granted. Webmin’s safe and negative permission defaults grant no virtual machine access.","heading":"Assigning virtual machines to a user","pageTitle":"How to Delegate Access","permalink":"https://cloudmin.com/docs/getting-started/how-to-delegate-access/#assigning-virtual-machines-to-a-user","section":"docs","summary":"","title":""},{"content":"The virtual machine details page with power state, guest agent, SSH reachability, addresses, disks, filesystems and transfer rates The permitted power controls and Remote Access tabs The password reset form, which requires a running guest with a responding QEMU Guest Agent and never stores the password The same actions through the API with their own token, limited to their assigned UUIDs Live status connections recheck permissions every 15 seconds and reload the page when they change. Console and terminal supervisors check every five seconds and close sessions when access is revoked.","heading":"What delegated users get","pageTitle":"How to Delegate Access","permalink":"https://cloudmin.com/docs/getting-started/how-to-delegate-access/#what-delegated-users-get","section":"docs","summary":"","title":""},{"content":"The Webmin tab in Remote Access, which opens a Virtualmin guest through the host’s Servers Index proxy, is available only to the host’s root Webmin login and needs Servers Index permissions as well. Other users with creation permission can create virtual machines, but registration is skipped and their Remote Access page has no Webmin tab. See Webmin access.","heading":"Guest Webmin through the host","pageTitle":"How to Delegate Access","permalink":"https://cloudmin.com/docs/getting-started/how-to-delegate-access/#guest-webmin-through-the-host","section":"docs","summary":"","title":""},{"content":"Give delegated users only the other Webmin modules they need: Cloudmin permissions cannot restrict host access granted through another module or through SSH. Delegation covers existing virtual machines; self-service creation, project ownership and quotas are Planned for Cloudmin Pro.","heading":"Limits","pageTitle":"How to Delegate Access","permalink":"https://cloudmin.com/docs/getting-started/how-to-delegate-access/#limits","section":"docs","summary":"","title":""},{"content":"Machine templates and resource plans are the presets behind the creation form. A template saves image, storage, network, guest access, software and boot defaults. A plan saves CPU, memory and system disk size. Both fill the form, where administrators can still change every value for one creation.","heading":"","pageTitle":"Templates and Plans","permalink":"https://cloudmin.com/docs/virtual-machines/templates-and-plans/","section":"docs","summary":"","title":"Templates and Plans"},{"content":"Both pages are under System Settings in the Cloudmin menu. The template editor uses a section selector with Previous, Next and Save and Next controls; resource plans use a collapsible Basic plan details section. Both use Webmin’s standard form widgets, Webmin configuration files, host access controls, form tokens, locking and audit logging. Reading presets never creates configuration files.","heading":"Where to find them","pageTitle":"Templates and Plans","permalink":"https://cloudmin.com/docs/virtual-machines/templates-and-plans/#where-to-find-them","section":"docs","summary":"","title":""},{"content":"Cloudmin ships Default Template, four Virtualmin templates (GPL and Pro, each with Apache or Nginx) and Default Plan. Default Template selects Rocky Linux 10 for the host architecture. Default Plan supplies 2 CPUs, 2 GiB of memory and a 20 GiB disk; on a one-CPU host it uses 1 CPU. The Virtualmin templates use a full installation by default; minimal installation remains available.\nAll presets can be edited or copied. Default Template and Default Plan cannot be deleted. Virtualmin and custom templates can be deleted when no existing virtual machine or pending creation uses them; deleted built-in templates stay removed.","heading":"Built-in presets","pageTitle":"Templates and Plans","permalink":"https://cloudmin.com/docs/virtual-machines/templates-and-plans/#built-in-presets","section":"docs","summary":"","title":""},{"content":"Basic settings including the name, description and Require fully qualified hostname. Custom templates can require it independently of their name or software; Virtualmin templates always do. The rule applies to cloud images, not ISO installers. Image and storage: the source image, which can be a catalogue entry not downloaded yet, the installation source and the destination pool. Access: the initial username, the authentication method (password, SSH keys or both) and SSH keys. Network: the libvirt network or host bridge, DHCP or static addressing, gateways and DNS. Software: packages and Virtualmin installation options, including whether to add the guest to the host’s Webmin Servers Index. Preparation and final setup scripts require Cloudmin Pro. Pro Boot options: firmware, whether to start after creation and autostart. Scripts can be disabled, entered directly or read from a host file. Host file access follows Webmin’s global file permissions and configured Unix user. Templates store the paths; creation jobs copy the contents before allocating resources, and scripts run only inside the guest.","heading":"Template sections","pageTitle":"Templates and Plans","permalink":"https://cloudmin.com/docs/virtual-machines/templates-and-plans/#template-sections","section":"docs","summary":"","title":""},{"content":"Supplied descriptions explain the shipped settings. Changing a built-in template’s name or settings clears its supplied description; custom descriptions are preserved. Built-in Virtualmin template names update on save to match the edition, web server and PostgreSQL option, with a numeric suffix for duplicates. Manually renamed and copied templates keep their custom names, and Default Template is never renamed automatically.\nTemplate descriptions are hidden on the creation page by default. Show template description? in Module Configuration can display nonempty descriptions always, or only when they differ from the template name.","heading":"Descriptions and names","pageTitle":"Templates and Plans","permalink":"https://cloudmin.com/docs/virtual-machines/templates-and-plans/#descriptions-and-names","section":"docs","summary":"","title":""},{"content":"The creation form always selects a template and a plan; API callers select them explicitly. Editing a preset affects future forms; existing virtual machines and submitted jobs keep their settings. Manual field changes keep the selected preset, and deleting a custom default selects the built-in default again. Module Configuration retains the display, password generation and managed SSH key preferences, which do not add fields to the form.\nTemplates store settings, not prepared disk images. To create machines from a prepared disk instead, use cloning or, in Cloudmin Pro, capture an image and select it in a template.\nCustom preparation and final setup scripts require Cloudmin Pro. Pro Packages and Virtualmin installation remain available in GPL, including the Virtualmin Pro templates. Virtualmin Pro itself needs a separate guest license.\nGPL shows script controls as disabled previews unless Pro advertising is hidden in Module Configuration. Existing saved scripts remain visible and read-only. Clear both scripts explicitly when saving a template to use it without Pro; other edits preserve them, and creation refuses active scripts without the Pro package.","heading":"How presets apply","pageTitle":"Templates and Plans","permalink":"https://cloudmin.com/docs/virtual-machines/templates-and-plans/#how-presets-apply","section":"docs","summary":"","title":""},{"content":"The Software section of a template or creation request can install packages, run scripts and install Virtualmin inside a new guest. Cloudmin tracks the work from the host and keeps the virtual machine if setup fails.","heading":"","pageTitle":"Virtualmin Templates and Guest Software","permalink":"https://cloudmin.com/docs/virtual-machines/virtualmin-templates/","section":"docs","summary":"","title":"Virtualmin Templates and Guest Software"},{"content":"Guest setup requires a cloud image and Start after creation. After cloud-init finishes, a dormant helper service inside the guest runs as root in this order: the preparation script, package installation, the optional Virtualmin installation, and the final setup script. Scripts use /bin/sh -e and can switch users for application work. A failed or interrupted step stops without repeating scripts and keeps the virtual machine, with the error naming the log location inside the guest.\nCloudmin connects to the guest over SSH with the host-managed key and verifies the guest’s SSH host key through the guest agent channel before sending any credentials. Progress appears in the creation job while other guests continue disk operations. Guest software setup requires managed virtual machine SSH keys to be enabled in Module Configuration.","heading":"Guest software setup","pageTitle":"Virtualmin Templates and Guest Software","permalink":"https://cloudmin.com/docs/virtual-machines/virtualmin-templates/#guest-software-setup","section":"docs","summary":"","title":""},{"content":"Cloudmin ships Virtualmin GPL and Pro templates with Apache or Nginx. They run the official Virtualmin installer inside a fresh guest with options matching the installer’s command builder:\nBundle: LAMP (Apache) or LEMP (Nginx) Type: full or minimal installation PostgreSQL: optionally installed alongside MariaDB Hostname SSL: request a certificate for the guest hostname Add to host’s Webmin Servers Index: register the guest for the embedded Webmin view, on by default Virtualmin needs a fully qualified guest hostname, a fresh supported cloud image, Internet access, at least 2048 MiB of memory for a full installation or 1024 MiB for minimal, and a 20 GiB disk. The creation form shows the installation phases: waiting for guest setup, downloading the installer, installing, then configuring Webmin access through the host.\nWhen the installation completes, the job links to the guest’s Webmin through the host, or directly to https://hostname:10000/ when registration was turned off.","heading":"Virtualmin templates","pageTitle":"Virtualmin Templates and Guest Software","permalink":"https://cloudmin.com/docs/virtual-machines/virtualmin-templates/#virtualmin-templates","section":"docs","summary":"","title":""},{"content":"Pro credentials are supplied for each creation request. They never enter templates, cloud-init seed disks, review responses or public job records, and they are removed from the job record once the guest has accepted them. Clones and captured images replace the Pro license and repository credentials with a placeholder before boot, so each copy needs its own license or a manual downgrade to GPL; the source license stays unchanged.","heading":"Virtualmin Pro licenses","pageTitle":"Virtualmin Templates and Guest Software","permalink":"https://cloudmin.com/docs/virtual-machines/virtualmin-templates/#virtualmin-pro-licenses","section":"docs","summary":"","title":""},{"content":"After Virtualmin installation, Cloudmin saves the initial guest username and password in the host’s protected Servers Index configuration, with private permissions and excluded from Webmin’s file-change and undo logs. The setup job deletes its copy of the password when setup ends. If no password was saved, Servers Index asks for the guest login and remembers it for the browser session.\nOnly the host’s root Webmin login can register guests or use the Webmin tab. Creations by other users skip registration. If registration fails, the virtual machine remains usable and the progress page shows a warning; choose Open embedded Webmin on the Webmin tab to retry. See Webmin access for the trust model.","heading":"Webmin Servers Index registration","pageTitle":"Virtualmin Templates and Guest Software","permalink":"https://cloudmin.com/docs/virtual-machines/virtualmin-templates/#webmin-servers-index-registration","section":"docs","summary":"","title":""},{"content":"Package-only and script-only setups need no Virtualmin resources and work with any supported cloud image. Use them to install an agent, join a configuration management system or seed an application. Scripts run only inside the guest and can read the initial username from CLOUDMIN_GUEST_USER.","heading":"Packages and scripts without Virtualmin","pageTitle":"Virtualmin Templates and Guest Software","permalink":"https://cloudmin.com/docs/virtual-machines/virtualmin-templates/#packages-and-scripts-without-virtualmin","section":"docs","summary":"","title":""},{"content":"Select a virtual machine from the guest selector to open its details, actions and Remote Access above the host-wide navigation links. Everything below is also available through the API and command line.","heading":"","pageTitle":"Managing Virtual Machines","permalink":"https://cloudmin.com/docs/virtual-machines/managing-virtual-machines/","section":"docs","summary":"","title":"Managing Virtual Machines"},{"content":"The details page shows power state, guest agent status, SSH reachability, addresses, individual disks, guest filesystems, network interfaces, and disk and network transfer rates. Power state and inventory update through libvirt events over an authenticated WebSocket; browsers do not poll. CPU usage is normalized to the assigned CPUs, and memory usage comes from ten-second balloon reports and excludes reclaimable cache. Filesystem usage and guest OS details require the QEMU Guest Agent and refresh about once a minute.\nPower state, guest-agent health, SSH reachability and application health are separate signals. A responding agent does not mean guest setup has finished, and an SSH banner does not mean the first boot is complete.\nThe overview totals writable data-disk capacity and mounted filesystem usage, excluding read-only media and cloud-init disks. Host disk-image allocation is not guest filesystem usage. When usage is unavailable or stale, summaries show the known capacity alone. Host administrators also see counts of active image imports and unfinished virtual machine jobs from all users.\nOne host collector shares status results among viewers. Each browser receives an initial snapshot and later changes over an authenticated WebSocket, with session and module permissions checked on connection and while it remains open. Hidden tabs keep their connection but pause updates and guest checks. The collector exits about a minute after its last subscriber leaves; it uses Perl and Webmin’s WebSocket proxy, without a Node.js service.\nVisible detail and connection pages share guest-agent and SSH-banner probes because SSH has no libvirt readiness event. Checks back off from five to thirty seconds when SSH responds; the overview does not probe SSH for every guest. Visible pages also share one nonblocking libvirt resource batch every ten seconds. New guests enable ten-second balloon reports; the collector enables them for existing running guests without changing their RAM allocation or saved definition. Host process RSS is not a substitute for guest memory usage.\nFilesystem and guest OS checks run in one worker, at most once per second across the host and normally once per minute for each guest. Libvirt events can trigger an earlier refresh; all viewers share the results.","heading":"Details and live status","pageTitle":"Managing Virtual Machines","permalink":"https://cloudmin.com/docs/virtual-machines/managing-virtual-machines/#details-and-live-status","section":"docs","summary":"","title":""},{"content":"Start, shutdown, reboot, suspend, resume and autostart are the ordinary power controls. Hard reset and forced power off are abrupt and require confirmation and a separate permission. Live ISO insertion and ejection work on running guests.","heading":"Power controls","pageTitle":"Managing Virtual Machines","permalink":"https://cloudmin.com/docs/virtual-machines/managing-virtual-machines/#power-controls","section":"docs","summary":"","title":""},{"content":"CPU count and balloon memory can be adjusted on a running virtual machine. Offline settings cover the resource maximums, boot order and firmware. The page explains when a change needs the guest shut down and what still has to be done inside the guest, such as growing a filesystem after a disk was enlarged.","heading":"Resources","pageTitle":"Managing Virtual Machines","permalink":"https://cloudmin.com/docs/virtual-machines/managing-virtual-machines/#resources","section":"docs","summary":"","title":""},{"content":"Add extra disks, grow existing disks, attach or detach volumes, and change the CD/DVD media. New disks are QCOW2 files in directory, filesystem and NFS pools, or raw logical volumes in LVM and LVM-thin pools; LVM disks grow only while the machine is shut down. Free-space checks run before every disk operation. Deleting a virtual machine asks which disks to remove, checks shared storage, and recovers an interrupted deletion the next time a host administrator opens Cloudmin.","heading":"Disks and media","pageTitle":"Managing Virtual Machines","permalink":"https://cloudmin.com/docs/virtual-machines/managing-virtual-machines/#disks-and-media","section":"docs","summary":"","title":""},{"content":"Add, change or remove NICs on a stopped guest, choosing a libvirt network or a host bridge. Cloudmin checks for duplicate MACs, duplicate managed addresses and missing networks before allocating resources.","heading":"Network interfaces","pageTitle":"Managing Virtual Machines","permalink":"https://cloudmin.com/docs/virtual-machines/managing-virtual-machines/#network-interfaces","section":"docs","summary":"","title":""},{"content":"Reset Password on Edit Virtual Machine changes an existing guest account through the QEMU Guest Agent. The form is always available to permitted users; saving requires a running virtual machine with a responding agent. Passwords are not stored in jobs or logs, and SSH authentication settings stay unchanged.","heading":"Guest password reset","pageTitle":"Managing Virtual Machines","permalink":"https://cloudmin.com/docs/virtual-machines/managing-virtual-machines/#guest-password-reset","section":"docs","summary":"","title":""},{"content":"Snapshots save a disk state you can restore or delete later. Cloning copies a guest into an independent machine with a fresh identity. Backups write a full archive to local, SSH, S3 or Pro cloud destinations and restore it later. Create Image (Pro) turns a guest’s system disk into a reusable image.","heading":"Snapshots, clones, backups and images","pageTitle":"Managing Virtual Machines","permalink":"https://cloudmin.com/docs/virtual-machines/managing-virtual-machines/#snapshots-clones-backups-and-images","section":"docs","summary":"","title":""},{"content":"Creation, cloning, backups, restores, captures and offline hardware changes run as jobs. The progress page shows each step, the error if one fails, and whether cleanup is pending. Jobs reserve the virtual machine they work on, so conflicting operations wait. Unfinished jobs are recovered when a host administrator with write access visits Cloudmin; read-only and delegated visits never resume jobs.","heading":"Jobs","pageTitle":"Managing Virtual Machines","permalink":"https://cloudmin.com/docs/virtual-machines/managing-virtual-machines/#jobs","section":"docs","summary":"","title":""},{"content":"Libvirt is the source of truth, so machines changed or created with virsh or virt-manager appear in Cloudmin. Deleting a guest with external tools does not run Cloudmin’s cleanup: remove its managed SSH key, serial logs and Servers Index entry separately in that case. Adopting guests defined outside Cloudmin with full management is Planned .","heading":"Changes made outside Cloudmin","pageTitle":"Managing Virtual Machines","permalink":"https://cloudmin.com/docs/virtual-machines/managing-virtual-machines/#changes-made-outside-cloudmin","section":"docs","summary":"","title":""},{"content":"Besides cloud images, Cloudmin can create a virtual machine that boots an installer ISO so you can install an operating system the traditional way.\nExperimental\nInstaller ISO support is experimental. Alpine 3.24.2 ARM64 has passed a full installation and boot with the ISO ejected. Other installers still need testing.","heading":"","pageTitle":"Installer ISOs","permalink":"https://cloudmin.com/docs/virtual-machines/installer-iso/","section":"docs","summary":"","title":"Installer ISOs"},{"content":"Open Image Manager and import the ISO from an HTTPS URL, a browser upload or a file on the host. Imports accept installer ISOs alongside standalone QCOW2 and raw disk images. A host-file import must be readable without root; use a browser upload for a private file.","heading":"Import the ISO","pageTitle":"Installer ISOs","permalink":"https://cloudmin.com/docs/virtual-machines/installer-iso/#import-the-iso","section":"docs","summary":"","title":""},{"content":"Open Create Virtual Machine and choose Installer ISO as the installation source in Image and storage. Pick the imported ISO. Cloudmin creates an empty system disk of the plan’s size and attaches the ISO in a read-only CD/DVD drive. Choose the firmware. UEFI is used where the host and image settings call for it; BIOS remains available for installers that need it. Create the machine. Cloud-init, the guest account settings and the managed SSH key are not used for ISO installations; access is configured inside the guest by the installer. Templates can require a fully qualified hostname, but that rule applies to cloud images only.","heading":"Create the virtual machine","pageTitle":"Installer ISOs","permalink":"https://cloudmin.com/docs/virtual-machines/installer-iso/#create-the-virtual-machine","section":"docs","summary":"","title":""},{"content":"Open Remote Access → Graphical console to use the installer’s screen, keyboard and mouse. The console works during boot and without guest networking, and Webmin authenticates the connection without exposing a VNC password or port. When the installation finishes, eject the ISO from the virtual machine’s media controls or set the system disk as the first boot device, then reboot the guest.","heading":"Install the OS","pageTitle":"Installer ISOs","permalink":"https://cloudmin.com/docs/virtual-machines/installer-iso/#install-the-os","section":"docs","summary":"","title":""},{"content":"Install the QEMU Guest Agent inside the guest to get filesystem usage, guest OS details, password resets and live cloning support. Configure the guest’s serial port for a login prompt or boot output if you want to use the serial console. Cloudmin does not inspect ISO contents or configure the installed system.","heading":"After installation","pageTitle":"Installer ISOs","permalink":"https://cloudmin.com/docs/virtual-machines/installer-iso/#after-installation","section":"docs","summary":"","title":""},{"content":"Cloning copies a virtual machine’s private writable disks into a new, independent machine. Choose Clone virtual machine from a guest’s action menu or Clone Virtual Machine on Edit Virtual Machine.","heading":"","pageTitle":"Cloning","permalink":"https://cloudmin.com/docs/virtual-machines/cloning/","section":"docs","summary":"","title":"Cloning"},{"content":"Cloning works into directory, filesystem, NFS, LVM and LVM-thin pools; copies placed in an LVM pool become raw logical volumes. It requires libguestfs and its Perl bindings, bsdtar, and exactly one Linux installation that libguestfs can inspect. Prepared clones also require YAML::XS, enabled cloud-init inside the guest and one network interface.","heading":"Requirements","pageTitle":"Cloning","permalink":"https://cloudmin.com/docs/virtual-machines/cloning/#requirements","section":"docs","summary":"","title":""},{"content":"A stopped source is copied directly. For a running source, Cloudmin uses the guest agent to freeze filesystem writes, takes a temporary snapshot, thaws the source and copies the stable disks. File disks use an atomic external overlay that is merged back afterwards; LVM disks use native snapshots with a brief guest pause, and writes stay on the original volumes. A running source with both file and LVM writable disks needs a clean shutdown instead. The alternative for any source is a clean shutdown followed by copying and a restart. Filesystem freezing does not guarantee database consistency; stop databases or use their own tools for a consistent copy.\nBoth the source UUID and the destination name are reserved while the job runs. Cancellation and interrupted-job recovery restore the source before releasing either reservation. File and ordinary LVM pools need room for the full disk capacities and temporary snapshots, while thin pools allocate space as data is copied; these are included in the free-space checks, and output disks are checked for backing links before use.","heading":"Stopped and running sources","pageTitle":"Cloning","permalink":"https://cloudmin.com/docs/virtual-machines/cloning/#stopped-and-running-sources","section":"docs","summary":"","title":""},{"content":"Prepared clone (new identity). Cloudmin resets the copied guest offline and supplies a new cloud-init seed before boot. A libguestfs task with networking disabled clears the machine ID, SSH host keys, DHCP leases, random seed and the cloud-init cache. The clone receives a new UUID, MAC addresses, console password, host ID and the access, network, boot and hostname settings you choose on the clone form, which reuses the creation form without installation media or software setup.\nFor Virtualmin guests, Cloudmin also updates Virtualmin’s management hostname, the Postfix hostname references and the management TLS certificate. Hosted domains and their certificates stay unchanged; application settings that use the source IP address still need review.\nKeep guest settings and leave stopped. The copy preserves the machine ID, host keys, hostname, addresses and account credentials, and is left stopped with autostart disabled, so you can change its identity yourself before starting it beside the source.\nBoth modes assign a new host ID and replace Virtualmin Pro license and repository credentials with a placeholder before boot, using Virtualmin’s offline license API without contacting a server. The administrator must acknowledge that the clone needs a separate Pro license or a manual downgrade to GPL. The source license stays unchanged.","heading":"Clone modes","pageTitle":"Cloning","permalink":"https://cloudmin.com/docs/virtual-machines/cloning/#clone-modes","section":"docs","summary":"","title":""},{"content":"UEFI variables can be copied from a stopped source and are stored in a file pool, even when the clone’s disks go to an LVM pool. Live cloning defaults to fresh variables, which do not preserve the source’s firmware boot entries. Passthrough devices, TPMs, shared folders, persistent memory and external device state cannot be copied; the clone and snapshot checks reject such guests. Linked copies and cross-host cloning are outside this implementation.","heading":"Firmware and devices","pageTitle":"Cloning","permalink":"https://cloudmin.com/docs/virtual-machines/cloning/#firmware-and-devices","section":"docs","summary":"","title":""},{"content":"Snapshots keep a restore point on the same machine instead of creating a new one. Backups use the same source preparation and recovery but preserve guest identity. Create Image (Pro) captures one system disk as a reusable image. Autoscaling from snapshot clones with pre and post hooks is Planned .","heading":"Related features","pageTitle":"Cloning","permalink":"https://cloudmin.com/docs/virtual-machines/cloning/#related-features","section":"docs","summary":"","title":""},{"content":"Disk snapshots save the state of a virtual machine’s disks so you can return to it later. Open Snapshots from a guest’s menu for its history, or the host overview to see snapshots across all virtual machines.","heading":"","pageTitle":"Snapshots","permalink":"https://cloudmin.com/docs/virtual-machines/snapshots/","section":"docs","summary":"","title":"Snapshots"},{"content":"Snapshots cover private raw or QCOW2 file disks and managed LVM disks. On a running guest, Cloudmin asks the QEMU Guest Agent to freeze filesystem writes before the snapshot and thaws it afterwards, so the copy is filesystem-consistent. When the agent is not available you can choose an explicit clean shutdown first, or take an unprepared snapshot of the running disks. Filesystem freezing does not guarantee database consistency.\nFile disks get an external QCOW2 overlay managed through libvirt: new writes go to the overlay and the saved layer stays unchanged. LVM disks get a native snapshot volume instead: writes stay on the original logical volume, and Cloudmin pauses the guest briefly while the snapshot is created. A live LVM snapshot needs a disk cache mode that keeps no unflushed writes; disks created by Cloudmin use direct I/O. Classic LVM snapshots reserve room for a full disk’s changes in the volume group, while thin snapshots share their thin pool, so watch thin-pool data and metadata usage. One snapshot cannot mix file and LVM disks.\nSnapshots are not supported for guests with shared folders, passthrough devices, TPMs or persistent memory, because their state cannot be captured; the check rejects them before any change is made. Up to 20 snapshots can be kept per machine, and snapshot history blocks disk attachment, removal and growth until it is removed.","heading":"Creating a snapshot","pageTitle":"Snapshots","permalink":"https://cloudmin.com/docs/virtual-machines/snapshots/#creating-a-snapshot","section":"docs","summary":"","title":""},{"content":"Restore returns the disks to the saved state. Restoring an LVM snapshot copies the saved data back into the original logical volumes while the machine is stopped, and needs temporary space under /var/tmp for the largest disk’s full capacity plus 256 MiB. Delete merges a file snapshot’s overlay back into the disk and removes an LVM snapshot’s saved volumes; either way the current disk contents stay. Remove LVM snapshots before deleting a virtual machine. Both run as jobs with the usual reservations and recovery, and both respect the host’s disk-work queue so they do not race with clones or backups.","heading":"Restoring and deleting","pageTitle":"Snapshots","permalink":"https://cloudmin.com/docs/virtual-machines/snapshots/#restoring-and-deleting","section":"docs","summary":"","title":""},{"content":"Scheduled snapshots and retention policies are Planned . Until then, use scheduled backups for unattended protection.","heading":"Planned","pageTitle":"Snapshots","permalink":"https://cloudmin.com/docs/virtual-machines/snapshots/#planned","section":"docs","summary":"","title":""},{"content":"Image Manager holds the disk images that virtual machines are created from: catalogue cloud images, your own imports and installer ISOs. Importing an image does not create a virtual machine; use Create Virtual Machine to choose a catalogue image or an existing import.","heading":"","pageTitle":"Image Manager","permalink":"https://cloudmin.com/docs/images/image-manager/","section":"docs","summary":"","title":"Image Manager"},{"content":"The built-in catalogue lists cloud images of AlmaLinux, Alpine, Arch, CentOS Stream, Debian, Fedora, openSUSE, Rocky Linux and Ubuntu for the host’s architecture. Each entry records a stable ID, name, operating system, architecture, disk format, download size, minimum disk capacity, firmware and guest capabilities, release and support dates, and source URL. Catalogue downloads use HTTPS and are verified against the publisher’s SHA-256 or SHA-512 checksum manifest before import. Detached signature verification is Planned .\nYou can add custom catalogue entries with their own URL and optional SHA-256 checksum, and choose which columns the catalogue and import lists show in Module Configuration.","heading":"The catalogue","pageTitle":"Image Manager","permalink":"https://cloudmin.com/docs/images/image-manager/#the-catalogue","section":"docs","summary":"","title":""},{"content":"Imports use Webmin’s HTTP APIs, qemu-img and the system’s Sys::Virt Perl bindings. Downloads require the system CA certificate bundle.\nImages can be downloaded from an HTTPS URL, uploaded from the browser or read from a file already on the host, into libvirt directory, filesystem and NFS pools. LVM pools cannot hold images; machines created in an LVM pool still take their image from a file pool. Imports accept standalone QCOW2 and raw disk images and installer ISOs; linked and encrypted QCOW2 images are rejected. Available space in temporary storage and the destination pool limits the size, and Module Configuration can set a maximum file size.\nDownloads and imports run in the background with progress pages and batch operations. Temporary files are private, existing volumes are never overwritten, and a failed import removes the volume it created and reports any cleanup failure. A host-file import must be readable without root; use a browser upload for a private file.","heading":"Importing images","pageTitle":"Image Manager","permalink":"https://cloudmin.com/docs/images/image-manager/#importing-images","section":"docs","summary":"","title":""},{"content":"Templates can select a catalogue image before it is downloaded. A creation job reuses a verified copy or starts, or joins, an import in the destination pool before allocating guest disks. Downloads expose byte progress and do not hold the disk-work lock. Cancelling the creation leaves the shared import running; Image Manager can cancel it separately. Cached assets are reused without automatically refreshing rolling publisher URLs.\nCloudmin checks cloud image compatibility automatically. Custom cloud images without catalogue metadata are inspected read-only with libguestfs, its Perl bindings and YAML::XS.","heading":"Images during creation","pageTitle":"Image Manager","permalink":"https://cloudmin.com/docs/images/image-manager/#images-during-creation","section":"docs","summary":"","title":""},{"content":"Images can be deleted individually or in bulk. Cloudmin checks that no volume still uses an image as a backing file before removing it, refreshing pools so entries removed outside libvirt do not block the check.","heading":"Deleting images","pageTitle":"Image Manager","permalink":"https://cloudmin.com/docs/images/image-manager/#deleting-images","section":"docs","summary":"","title":""},{"content":"With Cloudmin Pro, Create Image captures one Linux system disk of an existing guest as a standalone image in Image Manager. See Creating images from virtual machines.","heading":"Captured images","pageTitle":"Image Manager","permalink":"https://cloudmin.com/docs/images/image-manager/#captured-images","section":"docs","summary":"","title":""},{"content":"Pro Create Image turns an existing virtual machine’s system disk into a reusable image in Image Manager. It is part of the Cloudmin Pro extension; the shared module rejects capture when the extension is absent, including direct API requests.","heading":"","pageTitle":"Creating Images from Virtual Machines","permalink":"https://cloudmin.com/docs/images/creating-images-from-virtual-machines/","section":"docs","summary":"","title":"Creating Images from Virtual Machines"},{"content":"Choose Create image from a guest’s action menu or Create Image on Edit Virtual Machine. Enter an image name and a destination file pool (directory, filesystem or NFS), choose whether to remove login credentials for all local accounts, then choose whether to keep the source running with guest-agent preparation or shut it down cleanly before copying. Capture reuses the clone preparation, recovery and isolated guest preparation code, and requires libguestfs with its Perl bindings, YAML::XS 0.69 or later and bsdtar on the host. Host administrator access is required, and read-only sessions cannot submit a capture.","heading":"Capturing an image","pageTitle":"Creating Images from Virtual Machines","permalink":"https://cloudmin.com/docs/images/creating-images-from-virtual-machines/#capturing-an-image","section":"docs","summary":"","title":""},{"content":"Capture supports one writable Linux system disk using virtio, with working cloud-init and an installation libguestfs can inspect. Cloudmin seed disks are omitted. Additional writable disks, attached installation media and read-only data disks are rejected, as are devices whose state cannot be copied, such as TPMs.","heading":"Supported sources","pageTitle":"Creating Images from Virtual Machines","permalink":"https://cloudmin.com/docs/images/creating-images-from-virtual-machines/#supported-sources","section":"docs","summary":"","title":""},{"content":"The result is a standalone QCOW2 image, also when the source disk is an LVM logical volume. Capture resets machine identity and cloud-init state, removes cloud-init logs, and replaces copied Virtualmin Pro license credentials with a placeholder. Remove login credentials? defaults to Yes: it clears password hashes, SSH credentials and default shell histories for all local accounts. No preserves those login credentials. Accounts, permissions, applications, data and other secrets remain, so captured images must stay private.\nVirtual machines created from a captured image receive fresh host IDs, SSH host keys and access settings before boot, through the same prepared-clone path. Templates can select captured images like any other import.","heading":"What the image contains","pageTitle":"Creating Images from Virtual Machines","permalink":"https://cloudmin.com/docs/images/creating-images-from-virtual-machines/#what-the-image-contains","section":"docs","summary":"","title":""},{"content":"Cloning for a one-off copy with a fresh identity Image Manager for catalogue and imported images","heading":"Related","pageTitle":"Creating Images from Virtual Machines","permalink":"https://cloudmin.com/docs/images/creating-images-from-virtual-machines/#related","section":"docs","summary":"","title":""},{"content":"Open Remote Access → SSH terminal on a running virtual machine to connect from your browser using its host-managed key or a guest password. The terminal requires Webmin’s Terminal module, Net::WebSocket::Server, OpenSSH, Python 3 and systemd with systemd-run.","heading":"","pageTitle":"SSH Terminal","permalink":"https://cloudmin.com/docs/remote-access/ssh-terminal/","section":"docs","summary":"","title":"SSH Terminal"},{"content":"The connection form offers the guest’s current IP addresses, the SSH port, the username and the authentication method. The default username comes from the virtual machine’s creation settings when available, and the SSH service card shows whether SSH answers on the saved port before you connect. Choose the host SSH key created for this virtual machine or password login; passwords are typed into the terminal and are never saved or logged by Cloudmin.\nOn first use, the terminal asks you to confirm the guest’s SSH host key. Cloudmin remembers it for your Webmin account and that virtual machine, and blocks the connection if it changes.","heading":"Connecting","pageTitle":"SSH Terminal","permalink":"https://cloudmin.com/docs/remote-access/ssh-terminal/#connecting","section":"docs","summary":"","title":""},{"content":"SSH defaults to port 22. After a successful login, Cloudmin saves that virtual machine’s port as the default for all Webmin users and for status checks. If the guest’s SSH port changes, enter the new port and log in once to save it. Failed logins leave the saved port unchanged.\nTurn on Connect automatically when opening the SSH tab? in Module Configuration to skip the form. It is off by default. Each Webmin user has separate saved login settings for each virtual machine; automatic connection uses the saved port, username and authentication method, or the form defaults on first use. You still enter passwords and confirm host keys in the terminal. Failed or unfinished attempts return to the form and pause automatic connection until a login succeeds. Connection settings above the terminal opens the form at any time.","heading":"Saved ports and automatic connection","pageTitle":"SSH Terminal","permalink":"https://cloudmin.com/docs/remote-access/ssh-terminal/#saved-ports-and-automatic-connection","section":"docs","summary":"","title":""},{"content":"By default, new virtual machines receive a separate host login key, added to the initial guest account through cloud-init. Module Configuration controls key creation and the terminal’s default authentication method; existing virtual machines are unchanged. Private keys stay in vm-ssh-keys under Cloudmin’s private module data directory with mode 0600, the terminal receives only its selected virtual machine’s key through systemd credentials, and the key is removed on creation rollback or when Cloudmin deletes the guest through its libvirt adapter. Deleting a guest with external tools does not run this cleanup; remove its saved key separately. These preferences do not add fields to the creation form.","heading":"Host-managed keys","pageTitle":"SSH Terminal","permalink":"https://cloudmin.com/docs/remote-access/ssh-terminal/#host-managed-keys","section":"docs","summary":"","title":""},{"content":"The browser relay and the SSH client run without root on the host, inside a systemd unit with a temporary user, no capabilities and no access to Webmin’s credential files. A root supervisor authorizes each connection, rechecks the session’s terminal permission every five seconds and stops the SSH process when you leave the page or the permission is revoked. Read-only Webmin accounts cannot open terminals.","heading":"How it runs","pageTitle":"SSH Terminal","permalink":"https://cloudmin.com/docs/remote-access/ssh-terminal/#how-it-runs","section":"docs","summary":"","title":""},{"content":"Remote Access reopens your last selected tab, including when you open another virtual machine, with a separate choice for each Webmin user. Remember the last remote connection tab? is on by default in Module Configuration; links to a specific tab always override it, and an unavailable tab falls back to an allowed one.","heading":"Remembered tabs","pageTitle":"SSH Terminal","permalink":"https://cloudmin.com/docs/remote-access/ssh-terminal/#remembered-tabs","section":"docs","summary":"","title":""},{"content":"The serial and graphical consoles reach a local virtual machine without a guest network, SSH service or guest agent. Both require the virtual machine’s console permission, a local libvirt connection, Webmin’s Terminal module, Net::WebSocket::Server, Python 3 and systemd with systemd-run.","heading":"","pageTitle":"Serial and Graphical Consoles","permalink":"https://cloudmin.com/docs/remote-access/consoles/","section":"docs","summary":"","title":"Serial and Graphical Consoles"},{"content":"Remote Access → Graphical console shows the guest’s screen and lets you use its keyboard and mouse, including during boot and OS installation. It requires a VNC display on the guest. Webmin authenticates the connection and libvirt opens the display directly, so VNC passwords stay on the host and no public VNC port is needed. Use Fullscreen for a larger view and the keyboard menu to send shortcuts such as Ctrl+Alt+Delete or Ctrl+Alt+F1; their effect depends on the guest. Select the tab again after a connection closes.\nClick inside the console and use Command + and Command - on macOS, or Ctrl + and Ctrl - on Linux, to scale the guest’s screen; Command 0 or Ctrl 0 restores the fitted view. Scaling keeps the guest’s proportions and does not change its resolution. Authentic Theme saves the zoom for your account.\nCloudmin ships the console client, layout and noVNC library, without noVNC’s separate application UI. Both consoles work with frame-based and SPA themes.","heading":"Graphical console","pageTitle":"Serial and Graphical Consoles","permalink":"https://cloudmin.com/docs/remote-access/consoles/#graphical-console","section":"docs","summary":"","title":""},{"content":"Serial console connects through libvirt to the guest’s PTY console or serial port, using the same permissions and non-root WebSocket relay as the graphical console; a root supervisor forwards bytes between the libvirt stream and the relay. New Cloudmin virtual machines have a serial port, but the guest OS must send boot output or a login prompt to it; Cloudmin does not configure that. Log in with a guest account and password; the managed SSH key is not used here.\nOnly one connection can use the serial port at a time. Close an existing connection before opening another, and leaving the page releases the port. An interrupted connection clears within about a minute, abandoned startup expires after 15 seconds, and both consoles close after 60 seconds without a browser response while protocol pings keep an idle connected session alive.\nZoom in the serial console changes the text size. Resizing the browser does not send new dimensions to the guest; if text wraps incorrectly, run stty rows 24 cols 80 inside the guest with the dimensions you need.","heading":"Serial console","pageTitle":"Serial and Graphical Consoles","permalink":"https://cloudmin.com/docs/remote-access/consoles/#serial-console","section":"docs","summary":"","title":""},{"content":"Cloudmin enables libvirt serial logging on supported ports when creating a virtual machine or starting one that is fully stopped; a guest reboot or resume from a managed save does not enable it. Serial connections replay up to 64 KiB of recent output without sending keystrokes, which can show the existing login prompt or a partly typed command. The limited history may not fully restore a full-screen application.\nLogs are private to root on the host at /var/log/libvirt/qemu/cloudmin-\u003cUUID\u003e-serial.log and contain all serial output, including echoed commands. Native virtlogd rotation defaults to 2 MiB per file with three backups, about 8 MiB per virtual machine. Each cold start clears the previous recording, and deleting the virtual machine through Cloudmin removes its logs. Cloudmin preserves custom console logs; its own recording requires stdio_handler = \"logd\", a positive max_size and 1–32 backups.\nGuests without managed logging still show live output. If the console is blank, press Enter only when it is safe to submit any pending input.","heading":"Recorded output","pageTitle":"Serial and Graphical Consoles","permalink":"https://cloudmin.com/docs/remote-access/consoles/#recorded-output","section":"docs","summary":"","title":""},{"content":"The Webmin tab in Remote Access opens a Virtualmin guest’s Webmin from the host, either directly in a new tab or embedded through the host’s Webmin Servers Index proxy. The embedded view works for guests on private NAT networks that your browser cannot reach.","heading":"","pageTitle":"Webmin Access","permalink":"https://cloudmin.com/docs/remote-access/webmin-access/","section":"docs","summary":"","title":"Webmin Access"},{"content":"Only the host’s root Webmin login can register guests or use the Webmin tab, and Servers Index permissions apply on top, including read-only restrictions. Other users with creation permission can create virtual machines, but registration is skipped and their Remote Access page has no Webmin tab.","heading":"Who can use it","pageTitle":"Webmin Access","permalink":"https://cloudmin.com/docs/remote-access/webmin-access/#who-can-use-it","section":"docs","summary":"","title":""},{"content":"By default the tab shows a trust warning and two choices:\nOpen directly in new tab opens the guest’s own HTTPS address. Sign in with a guest Webmin account. Private addresses may be unreachable from your browser. Direct access uses neither the host proxy nor its saved login. Open embedded Webmin uses the host’s Servers Index proxy and signs in with the saved guest login. The embedded view replaces the choices, supports fullscreen, and follows the host’s light or dark palette and navigation color without changing the guest’s saved theme preferences. Clicking the Webmin tab again returns to the choices. To open registered guests in the embedded view immediately, set Show Webmin connection choices and a trust warning? to No in Module Configuration. Use it only when every registered virtual machine is fully trusted; changed IP addresses still require confirmation.","heading":"Connection choices","pageTitle":"Webmin Access","permalink":"https://cloudmin.com/docs/remote-access/webmin-access/#connection-choices","section":"docs","summary":"","title":""},{"content":"Use the proxy only for fully trusted guests. The proxied pages share the host’s browser origin and your host session, so a compromised guest can use its Webmin pages to compromise the host and other virtual machines. Opening the proxy in another tab does not isolate it either.","heading":"Trust warning","pageTitle":"Webmin Access","permalink":"https://cloudmin.com/docs/remote-access/webmin-access/#trust-warning","section":"docs","summary":"","title":""},{"content":"Virtualmin templates enable Add to host’s Webmin Servers Index by default; turn it off in the template’s Software section to skip registration. After Virtualmin installation, Cloudmin saves the initial guest username and password in the host’s protected Servers Index configuration. The setup job deletes its copy of the password when setup ends, and Cloudmin excludes its changes to these login files from Webmin’s file-change and undo logs. Registration needs no extra guest account or SSH connection.\nIf no password was saved, for example when the guest was created with SSH keys only, Servers Index asks for the guest login and remembers it for the browser session. If the guest password changes later, update the saved login in the host’s Webmin Servers Index module.\nIf registration fails, the virtual machine remains usable and the progress page shows a warning. Choose Open embedded Webmin to retry after setup finishes; the same button registers an older or unregistered Virtualmin guest.","heading":"Registration","pageTitle":"Webmin Access","permalink":"https://cloudmin.com/docs/remote-access/webmin-access/#registration","section":"docs","summary":"","title":""},{"content":"When the guest’s saved IP changes, an orange alert shows the old and new addresses and whether the new one matches the host’s static configuration for the guest or a DHCP lease for its MAC address. Addresses reported only by the guest agent or ARP are marked unverified. Confirm the address before opening the proxy; the saved entry is not changed until you do.\nCloudmin removes its Servers Index entry when it deletes the virtual machine.","heading":"Address changes","pageTitle":"Webmin Access","permalink":"https://cloudmin.com/docs/remote-access/webmin-access/#address-changes","section":"docs","summary":"","title":""},{"content":"Open Networking to see libvirt networks, host bridges, their addressing and the virtual machines attached to each. Cloudmin uses libvirt to manage virtual networks and guest interfaces, and Webmin’s network backends to create host bridges.","heading":"","pageTitle":"Virtual Networks and Bridges","permalink":"https://cloudmin.com/docs/networking/virtual-networks-and-bridges/","section":"docs","summary":"","title":"Virtual Networks and Bridges"},{"content":"The installer creates a persistent default NAT network after checking host routes, without changing the host’s management interface. On the Networking page you can create more NAT, routed and isolated networks. Networks referenced by stopped or running guests are protected from deletion.\nVirtual machine creation offers active libvirt networks and existing host bridges. It checks for duplicate MACs, duplicate managed addresses and missing networks before allocating resources. Cloud-init configures DHCP or static IPv4 and IPv6 inside the guest, including on-link gateway routes and /32 addresses, so guests on bridged or routed networks with provider-assigned addresses need no hand-editing after creation.","heading":"Virtual networks","pageTitle":"Virtual Networks and Bridges","permalink":"https://cloudmin.com/docs/networking/virtual-networks-and-bridges/#virtual-networks","section":"docs","summary":"","title":""},{"content":"A bridge lets guests join the upstream network and receive addresses from it. Each guest still needs a usable address from that network, and public access also depends on the upstream router, provider and firewall; creating a bridge does not allocate public IP addresses or configure the guest OS.\nGuided bridge creation supports NetworkManager, Netplan and Debian ifupdown (which needs bridge-utils). Cloudmin reviews the selected standalone Ethernet interface, moves its saved addressing, routes and DNS to the new bridge, backs up the affected files and starts an independent systemd recovery timer before applying the change. You must confirm that the connection still works within the timeout, three minutes by default and two to fifteen minutes in Module Configuration. Unconfirmed changes are restored after the timeout, and also before networking starts after a reboot. Other host and virtual machine changes wait while a confirmation is pending. The timeout includes time spent applying the change. Changing it does not extend a pending transaction or disable recovery, including after a reboot.\nFor ifupdown, the interface must have an inet stanza, which may use manual on an IPv6-only host. If cloud-init regenerates the host’s Netplan files at boot, update its network configuration or disable its network rendering before converting the interface; otherwise it can restore the old port addresses after confirmation. Cloudmin does not change cloud-init’s host configuration. Unsupported custom interface configurations stay under Webmin’s Network Configuration module, and you should avoid editing the same host configuration elsewhere while a bridge change awaits confirmation.\nUse Remove Bridge on an unused, persistent host bridge with one Ethernet port to move its current addresses, routes and DNS back to that port. Removal uses the same confirmation timer as creation; without confirmation, Cloudmin restores the bridge. First detach virtual machines, including stopped ones, from the bridge and its port, and update virtual networks that use either device. Multiple ports, dependent VLANs or macvlans, and unsupported custom settings require Webmin Network Configuration. Removal is also available through the CLI and API.\nOn Netplan hosts, Cloudmin keeps the DHCP client identity and requests the current IPv4 lease when moving settings between Ethernet and a bridge. During recovery, it requests the original address if restoring the files gives it a different lease. The DHCP server can still assign another address; use a DHCP reservation or static address to keep the host address stable.","heading":"Host bridges","pageTitle":"Virtual Networks and Bridges","permalink":"https://cloudmin.com/docs/networking/virtual-networks-and-bridges/#host-bridges","section":"docs","summary":"","title":""},{"content":"Offline management can add, change and remove NICs on a stopped virtual machine, attaching them to any network or bridge. The networking page and the details page show each interface’s MAC, source and discovered addresses.","heading":"Guest interfaces","pageTitle":"Virtual Networks and Bridges","permalink":"https://cloudmin.com/docs/networking/virtual-networks-and-bridges/#guest-interfaces","section":"docs","summary":"","title":""},{"content":"VLAN tags on guest interfaces for tenant isolation Planned Anti-spoofing through libvirt network filters Planned","heading":"Planned","pageTitle":"Virtual Networks and Bridges","permalink":"https://cloudmin.com/docs/networking/virtual-networks-and-bridges/#planned","section":"docs","summary":"","title":""},{"content":"Storage in Cloudmin is a set of named libvirt pools. Storage lists each pool with its type, state, capacity, free space and volumes, and Module Configuration chooses the columns shown for pools and volumes.","heading":"","pageTitle":"Storage Pools","permalink":"https://cloudmin.com/docs/storage/storage-pools/","section":"docs","summary":"","title":"Storage Pools"},{"content":"The installer prepares a default directory pool and tests it with a volume creation and deletion. Virtual machine creation, extra disks, cloning, snapshots, backups and restore work with directory, filesystem and NFS pools, using QCOW2 or raw files, and with LVM and LVM-thin pools, using raw logical volumes. Imported images, installation media, captured images and copied UEFI variable files always live in a file pool, so keep at least one directory, filesystem or NFS pool active. Mount NFS storage before using it as a pool, and mount remote storage before using a directory on it as a backup destination.\nPools differ in what they can do. Cloudmin checks free space before every disk operation, including full disk capacities and temporary snapshots during clones and backups, and checks output volumes for backing links before using them. Libvirt caches directory entries, so Cloudmin refreshes pools before checks that depend on removed files.","heading":"Supported pools today","pageTitle":"Storage Pools","permalink":"https://cloudmin.com/docs/storage/storage-pools/#supported-pools-today","section":"docs","summary":"","title":""},{"content":"Create Storage Pool on the Storage page registers a directory or an existing LVM volume group. A missing directory is created if its parent exists, and existing files and permissions are preserved. Registering a volume group does not format or erase its disks, and each thin pool in the group appears as a separate storage destination. Use Webmin’s Logical Volume Management module to create and extend volume groups and thin pools. New pools start immediately, and the start-at-boot choice is saved with the registration.","heading":"Creating pools","pageTitle":"Storage Pools","permalink":"https://cloudmin.com/docs/storage/storage-pools/#creating-pools","section":"docs","summary":"","title":""},{"content":"LVM disks reserve their full capacity and are zeroed before use, so a new disk never exposes data from an earlier volume. LVM-thin disks allocate space as the guest writes, so their combined capacity can exceed the pool’s physical space. The pool card shows data and metadata usage; extend the thin pool before either fills, because running out stops guest disk writes. Cloudmin refuses new allocation at 95% data usage or 90% metadata usage, and thin pools must have block zeroing enabled.\nShut down a virtual machine before growing one of its LVM disks; file disks can grow while the guest runs. Converting an image into a logical volume needs free space for a private temporary copy. Native LVM snapshots are described on the Snapshots page.","heading":"LVM and LVM-thin pools","pageTitle":"Storage Pools","permalink":"https://cloudmin.com/docs/storage/storage-pools/#lvm-and-lvm-thin-pools","section":"docs","summary":"","title":""},{"content":"Each virtual machine gets a separate writable disk so the source image stays reusable. Extra disks can be added, grown, attached and detached from the virtual machine’s hardware page, and deletion asks which disks to remove with shared-storage checks. Cloud-init seed disks and read-only media are excluded from the usage summaries on the overview, which total writable data-disk capacity and mounted guest filesystem usage rather than equating host allocation with guest usage.\nUnused files in local directory pools and unused logical volumes can be deleted from the Storage page after a review step. Host mounts, swap, snapshot volumes and volumes still referenced by a machine, an image or another volume are protected.","heading":"Volumes","pageTitle":"Storage Pools","permalink":"https://cloudmin.com/docs/storage/storage-pools/#volumes","section":"docs","summary":"","title":""},{"content":"Unregister Pool removes a directory or parent LVM pool from libvirt after checking for references. Files, logical volumes, volume groups and thin pools remain intact. References from stopped guests, snapshots, imported images or backing disks block removal, as do pending operations and unreadable ownership records. Thin destinations cannot be unregistered separately.\nStop and Unregister on the confirmation page stops an active pool before removing its registration. For LVM, this deactivates every logical volume in the group, including thin volumes. Host mounts, swap, open volumes and external device dependencies block the operation. Data is preserved; register the group again to use it in Cloudmin.","heading":"Removing a registration","pageTitle":"Storage Pools","permalink":"https://cloudmin.com/docs/storage/storage-pools/#removing-a-registration","section":"docs","summary":"","title":""},{"content":"The command-line reference covers list-pools, list-volumes, list-volume-groups, create-pool, directory pool lifecycle controls, delete-volume and unregister-pool. Removal commands accept --review to show owners and any refusal reason, and require --yes to proceed. They recheck ownership and the reviewed identity before changing storage. Use unregister-pool --pool NAME --stop --review to inspect removal of an active pool, then replace --review with --yes to apply it.\nThe same operations are available through the JSON API. Reads require host access. Changes and reviews also require manage access, a signed token and a writable session. These operations finish synchronously.","heading":"API and CLI","pageTitle":"Storage Pools","permalink":"https://cloudmin.com/docs/storage/storage-pools/#api-and-cli","section":"docs","summary":"","title":""},{"content":"Local directory pools with QCOW2 or raw volumes (available) Registered LVM volume groups and their thin pools, with raw guest disks, offline growth and native snapshots (available) NFS shared pools (available for imports, creation, cloning and image capture; not yet tested on every supported host and architecture) Safe adoption of existing iSCSI and SAN volumes Planned Managed iSCSI/SAN and Ceph RBD Planned Pools of other types can be defined with libvirt’s own tools; Cloudmin lists active and inactive registrations. A setup UI that discovers candidates, validates every host and shows which operations a pool supports is Planned .","heading":"Support order","pageTitle":"Storage Pools","permalink":"https://cloudmin.com/docs/storage/storage-pools/#support-order","section":"docs","summary":"","title":""},{"content":"Open Backups and Restore from the Cloudmin menu, or choose Back up virtual machines from a machine’s actions. Each selected machine gets a separate full archive whose filename includes the guest name, the UTC date and the job ID.","heading":"","pageTitle":"Backups and Restore","permalink":"https://cloudmin.com/docs/backup-and-migration/backups-and-restore/","section":"docs","summary":"","title":"Backups and Restore"},{"content":"A full backup archives the virtual machine’s managed disks, whether QCOW2 or raw files or LVM logical volumes, its libvirt definition, UEFI variables for firmware-backed guests and a manifest with checksums. Backups use the same source preparation and recovery as cloning: a stopped source is archived directly, and a running source is frozen through the guest agent and snapshotted, through temporary overlays for file disks or native snapshots with a brief pause for LVM disks, or shut down cleanly if you prefer. A running source with both file and LVM disks needs the clean shutdown. Unlike clones, backups preserve the guest identity and license credentials.\nManual and scheduled backups share the host’s disk-work queue, so only one backup or other queued disk operation runs at a time. Backups pass data through several copies on the way to the destination, so temporary space on the host matters; the page shows the space needed.","heading":"What a backup contains","pageTitle":"Backups and Restore","permalink":"https://cloudmin.com/docs/backup-and-migration/backups-and-restore/#what-a-backup-contains","section":"docs","summary":"","title":""},{"content":"Local destinations are private directories, including mounted NFS storage. Cloudmin creates a missing backup directory with private permissions. SSH destinations use SFTP with host key trust: the first connection scans the server’s key and asks you to approve its fingerprint, and later connections require the trusted key. Password and key authentication are supported. S3 destinations work with Amazon S3 and compatible services. Pro Google Cloud Storage, Azure Blob Storage, Backblaze B2, Dropbox and Google Drive transfers come with the Cloudmin Pro extension and use Virtualmin’s provider helpers. Real-account transfer tests for these providers are still pending. Provider credentials belong in the backup destination settings. Password fields stay empty on edit and keep the saved secret unless you enter a new one.","heading":"Destinations","pageTitle":"Backups and Restore","permalink":"https://cloudmin.com/docs/backup-and-migration/backups-and-restore/#destinations","section":"docs","summary":"","title":""},{"content":"Schedules run hourly, daily, weekly, monthly or yearly with a retention count. Cloudmin inspects destinations to apply retention and to list archives for restore, and an hourly inspection cleanup keeps the cache tidy. Scheduled backups appear as jobs like manual ones.","heading":"Schedules and retention","pageTitle":"Backups and Restore","permalink":"https://cloudmin.com/docs/backup-and-migration/backups-and-restore/#schedules-and-retention","section":"docs","summary":"","title":""},{"content":"Restore verifies the archive before asking for confirmation. It replaces a missing machine with its original identity and refuses to overwrite an existing name or UUID. The restored machine is left stopped with automatic startup disabled, and keeps the hostname, machine ID, host ID, MAC addresses, guest network files, passwords, SSH keys and license files. Restore does not deregister Virtualmin Pro or contact its license service. Use cloning to create another machine with a new identity.\nChoose an active directory, filesystem, NFS, LVM or LVM-thin pool for the restored disks. Disks restored into an LVM pool become raw logical volumes. File and ordinary LVM pools need room for the disks’ full capacities plus a margin, while thin pools allocate space as data is restored; local staging also needs space for downloading, extracting and inspecting the archive. UEFI variables are always restored into a file pool.","heading":"Restore","pageTitle":"Backups and Restore","permalink":"https://cloudmin.com/docs/backup-and-migration/backups-and-restore/#restore","section":"docs","summary":"","title":""},{"content":"Backup, backup inspection and restore are API actions with the same job model as creation, so they can be driven from api.pl or remote clients. See Virtual machine API.","heading":"API and CLI","pageTitle":"Backups and Restore","permalink":"https://cloudmin.com/docs/backup-and-migration/backups-and-restore/#api-and-cli","section":"docs","summary":"","title":""},{"content":"Scheduled snapshots as a lighter alternative to full backups Planned Fleet backup policy across hosts in Cloudmin Connect Pro Planned","heading":"Planned","pageTitle":"Backups and Restore","permalink":"https://cloudmin.com/docs/backup-and-migration/backups-and-restore/#planned","section":"docs","summary":"","title":""},{"content":"Planned feature\nThe legacy import tool described here is a design target and is not available yet. Cloudmin 10 does not upgrade a Cloudmin 9 host in place, and a package upgrade never imports existing virtual machines.","heading":"","pageTitle":"Migrating from Cloudmin 9","permalink":"https://cloudmin.com/docs/backup-and-migration/migrating-from-cloudmin-9/","section":"docs","summary":"","title":"Migrating from Cloudmin 9"},{"content":"Cloudmin 10 breaks internal compatibility with Cloudmin 9 on purpose, but it must not break user data. Existing KVM installations get a visible, tested import and rollback path, and Cloudmin 9 stays available and maintained for Xen users while the KVM line matures.","heading":"Why import is explicit","pageTitle":"Migrating from Cloudmin 9","permalink":"https://cloudmin.com/docs/backup-and-migration/migrating-from-cloudmin-9/#why-import-is-explicit","section":"docs","summary":"","title":""},{"content":"The importer is a separate tool, never a package side effect:\ncloudmin migrate --scan reads the old configuration without changing it and backs up the legacy controller state. It inventories Servers Index records, flat files, running QEMU processes, boot scripts, disks, LVM volumes, iSCSI mappings, bridges, MACs, IPs, console settings, schedules, owners and image references. It produces a report for each virtual machine: Result Meaning Ready Cloudmin can import the virtual machine safely. Review Import is possible, but the administrator must confirm a choice. Blocked Part of the old configuration cannot be translated safely. For each ready virtual machine it generates and validates a libvirt definition without starting it, stops the old virtual machine, disables only its exact legacy start-up entry, defines and starts it through libvirt, runs health checks, and commits only when they pass. If anything fails it undefines the new domain and restores the legacy boot entry. The importer preserves the UUID where known, the name, MACs, disk paths and formats, boot order, CPU, memory, firmware, network attachments and autostart. It reuses disks in place when safe and does not copy old SSH or Webmin passwords. Unsupported QEMU options block with an explanation.","heading":"The planned importer Planned","pageTitle":"Migrating from Cloudmin 9","permalink":"https://cloudmin.com/docs/backup-and-migration/migrating-from-cloudmin-9/#the-planned-importer-hahahugoshortcode15s1hbhb","section":"docs","summary":"","title":""},{"content":"Install Cloudmin 10 on a fresh supported host and create new virtual machines there. Keep Cloudmin 9 hosts running; installer and critical compatibility fixes continue on a maintenance branch. Guests defined in libvirt by other tools appear in Cloudmin 10’s inventory; full adoption with Cloudmin management is Planned .","heading":"What you can do today","pageTitle":"Migrating from Cloudmin 9","permalink":"https://cloudmin.com/docs/backup-and-migration/migrating-from-cloudmin-9/#what-you-can-do-today","section":"docs","summary":"","title":""},{"content":"Cloudmin Services from Cloudmin 9 is not carried forward. Virtualmin Connect, an optional Webmin module, is Planned to replace it: shared DNS, database, spam and virus services become remote-server settings in Virtualmin, and Connect distributes settings and policy, enforces per-owner quotas and the cross-server subdomain check, and keeps the server list, monitoring and provisioning log. A one-time script to migrate owners, limits and provisioning history from a Cloudmin 9 master is part of that plan.","heading":"Cloudmin Services and Virtualmin fleets","pageTitle":"Migrating from Cloudmin 9","permalink":"https://cloudmin.com/docs/backup-and-migration/migrating-from-cloudmin-9/#cloudmin-services-and-virtualmin-fleets","section":"docs","summary":"","title":""},{"content":"The web interface, the command line and remote clients share one versioned API for virtual machine creation, power controls, management, cloning, backups, restore and host storage. The UI calls it internally; api.cgi exposes it over HTTP. The cloudmin command uses the same API on the host.","heading":"","pageTitle":"Virtual Machine API and CLI","permalink":"https://cloudmin.com/docs/development/virtual-machine-api/","section":"docs","summary":"","title":"Virtual Machine API and CLI"},{"content":"Send a JSON object or form fields with an action. Responses are JSON with version: 1 and either result or error. Always check the error field: Webmin’s CGI server returns HTTP 200 for JSON responses. Actions that make changes require POST and a signed token returned by the options action, which also lists the images, pools, networks, templates and plans available to the caller.\nHTTP clients must pass Webmin’s referer check: send a Referer from the same Webmin origin, or use the supported User-Agent: Webmin API convention. Webmin authentication and Cloudmin module permissions apply. Delegated users can call options and use the permitted power and password reset actions on their assigned virtual machine UUIDs.","heading":"Requests and responses","pageTitle":"Virtual Machine API and CLI","permalink":"https://cloudmin.com/docs/development/virtual-machine-api/#requests-and-responses","section":"docs","summary":"","title":""},{"content":"Action Purpose machines List visible virtual machines or read one by name or UUID options Available images, pools, networks, templates, plans and a form token review Validate a creation request without creating anything; stores only a private password hash for reuse create Create a virtual machine; repeated submissions of one attempt return the same job status, list Read a job or the caller’s recent jobs start, shutdown, reboot, suspend, resume, reset, force_off, autostart Power controls; abrupt actions need confirm reset_password Change a guest account through the guest agent update, add_disk, grow_disk, attach_disk, detach_disk, delete_disk, delete and related actions Offline and live hardware management clone Full clone with a new identity or an unchanged stopped copy backup, backup_inspect, restore Full backups and restore snapshot_create, snapshot_restore, snapshot_delete Disk snapshots capture_image Image capture, with the Cloudmin Pro extension Passwords and license credentials are removed from input before anything is logged or rendered. Review stores a password hash privately for one day, bound to the token, attempt ID, Webmin user and initial username, so a following create can omit password. Responses never contain passwords or hashes.","heading":"Actions","pageTitle":"Virtual Machine API and CLI","permalink":"https://cloudmin.com/docs/development/virtual-machine-api/#actions","section":"docs","summary":"","title":""},{"content":"license returns public license status and accepts GET without a token. check_license refreshes it; change_license takes serial and license_key; deregister_license removes saved license and repository credentials and requires confirm=1. All license actions require host access. Writes also require POST, a signed token and a writable session. These repair actions remain available when licensing blocks new changes. See License Manager for grace periods and the operations that continue after expiry.","heading":"Host license","pageTitle":"Virtual Machine API and CLI","permalink":"https://cloudmin.com/docs/development/virtual-machine-api/#host-license","section":"docs","summary":"","title":""},{"content":"storage returns active and inactive pools, volumes, ownership information, revisions and unregistered LVM groups. It requires host access and allows GET without a token. The following synchronous actions also require manage access, POST, a signed token and a writable session:\nAction Purpose register_pool Register a directory or an existing LVM volume group pool_start, pool_stop, pool_autostart Change a directory pool’s state or boot policy using its current revision volume_review, delete_volume Review ownership, then delete one unused volume with its revision and confirm=1 pool_review, unregister_pool Review references, then remove a directory or parent LVM registration with its revision and confirm=1 API pool selectors are UUIDs; volume selectors are exact names within a pool. CLI pool selectors also accept unambiguous names. Unregistration keeps all data. An active pool requires stop=1 in both pool_review and unregister_pool; the review reports stop_required. For LVM this deactivates the whole volume group after checking host use and dependencies. The default stop=0 refuses active pools. See Storage Pools and the command-line reference for usage and limits.","heading":"Host storage","pageTitle":"Virtual Machine API and CLI","permalink":"https://cloudmin.com/docs/development/virtual-machine-api/#host-storage","section":"docs","summary":"","title":""},{"content":"A creation request names the virtual machine and selects an image or catalogue entry, install_source (cloud or iso), pool, network, cpus, memory_mib, disk_gib, the initial username, auth_type (password, keys or both) with password or ssh_keys, address_mode (dhcp or static) with ipv4, ipv6, gateway4, gateway6 and dns, firmware, start, autostart, an optional hostname and mac, and a template and plan. Software fields are software (none, virtualmin-gpl or virtualmin-pro), virtualmin_bundle, virtualmin_type, virtualmin_postgres, virtualmin_ssl, webmin_register, packages, and the before and after scripts with their modes and paths. Pro creations also take virtualmin_serial and virtualmin_key on each request.","heading":"Creation request fields","pageTitle":"Virtual Machine API and CLI","permalink":"https://cloudmin.com/docs/development/virtual-machine-api/#creation-request-fields","section":"docs","summary":"","title":""},{"content":"Creation, cloning, backups, restores, captures and hardware changes return a job immediately. A job record carries its state, phase, events, error, cleanup status and, for Virtualmin installations, the URL to open when it completes. Jobs reserve the resources they touch, can be cancelled at safe points, and recover after a controller restart. Job records never expose private request fields.","heading":"Jobs","pageTitle":"Virtual Machine API and CLI","permalink":"https://cloudmin.com/docs/development/virtual-machine-api/#jobs","section":"docs","summary":"","title":""},{"content":"Run cloudmin as root on the Cloudmin host. Commands such as cloudmin list-systems, cloudmin create-system and cloudmin backup-systems share the API’s validation and recovery. Lists use tables by default; add --multiline for details or --json for scripts. Jobs are followed unless --no-wait is supplied.\nSee the command-line reference for all commands and examples, or run cloudmin help COMMAND. The raw JSON entry points remain available as api.pl and cloudmin api ACTION.","heading":"Command line","pageTitle":"Virtual Machine API and CLI","permalink":"https://cloudmin.com/docs/development/virtual-machine-api/#command-line","section":"docs","summary":"","title":""},{"content":"A machine-readable API schema and generated reference documentation Planned Revocable API credentials limited to individual actions, and automation credentials for projects Planned","heading":"Planned","pageTitle":"Virtual Machine API and CLI","permalink":"https://cloudmin.com/docs/development/virtual-machine-api/#planned","section":"docs","summary":"","title":""},{"content":"Run cloudmin as root on the Cloudmin host. Lists use tables by default; --multiline shows details. --json returns an object with command, status and data fields; data holds the API result. Success exits 0, operation failures exit 1, and usage errors exit 2.\nCommands wait for jobs by default; --no-wait returns the job ID immediately. Passwords and license credentials are read from files or standard input.\nEach command has its own page with syntax, options and examples. cloudmin help COMMAND shows the same text on the host, and cloudmin COMMAND --help shows the syntax alone.","heading":"","pageTitle":"Command Line API","permalink":"https://cloudmin.com/docs/development/command-line/","section":"docs","summary":"","title":"Command Line API"},{"content":"list-systems: Lists the virtual machines on this host. get-system: Shows a virtual machine and its saved settings. start-system: Starts a stopped virtual machine. shutdown-system: Shuts down a virtual machine cleanly. reboot-system: Requests a guest operating system reboot. pause-system: Pauses a running virtual machine. unpause-system: Resumes a paused virtual machine. restart-system: Shuts down and starts with the saved settings. reset-system: Resets virtual hardware immediately. poweroff-system: Powers off immediately without a clean shutdown. modify-system: Changes saved resources, boot settings or automatic startup. passwd-system: Changes an existing guest account password through its agent. create-system: Creates a virtual machine from a cloud image or installer ISO. clone-system: Copies a virtual machine to independent disks. delete-system: Deletes a virtual machine and only the selected disk targets.","heading":"Virtual machines","pageTitle":"Command Line API","permalink":"https://cloudmin.com/docs/development/command-line/#virtual-machines","section":"docs","summary":"","title":""},{"content":"list-disks: Lists a virtual machine’s disks and removable drives. create-disk: Creates and attaches a disk. attach-disk: Attaches an unused storage volume. detach-disk: Detaches a disk while keeping its data. delete-disk: Detaches and permanently deletes one disk. resize-disk: Grows a disk to the specified total capacity. insert-media: Inserts an ISO in an existing CD/DVD drive. eject-media: Ejects media without removing the drive. list-interfaces: Lists a virtual machine’s network interfaces. add-interface: Adds a virtio network interface. modify-interface: Changes an interface’s network, link or bandwidth. delete-interface: Removes a network interface.","heading":"Disks and interfaces","pageTitle":"Command Line API","permalink":"https://cloudmin.com/docs/development/command-line/#disks-and-interfaces","section":"docs","summary":"","title":""},{"content":"list-snapshots: Lists snapshots for the host or one virtual machine. create-snapshot: Creates a disk snapshot. restore-snapshot: Restores a saved snapshot. delete-snapshot: Deletes a snapshot while keeping current disk data.","heading":"Snapshots","pageTitle":"Command Line API","permalink":"https://cloudmin.com/docs/development/command-line/#snapshots","section":"docs","summary":"","title":""},{"content":"list-backups: Lists completed backup archives. backup-systems: Creates a full backup of one virtual machine. inspect-backup: Verifies a backup archive before restoring it. restore-systems: Restores an inspected backup with its original identity.","heading":"Backups","pageTitle":"Command Line API","permalink":"https://cloudmin.com/docs/development/command-line/#backups","section":"docs","summary":"","title":""},{"content":"list-images: Lists imported and catalogue images. list-networks: Lists usable virtual networks and host bridges. get-host: Shows host capabilities. create-image: Creates a reusable image from a virtual machine (Cloudmin Pro).","heading":"Host and images","pageTitle":"Command Line API","permalink":"https://cloudmin.com/docs/development/command-line/#host-and-images","section":"docs","summary":"","title":""},{"content":"list-jobs: Lists recent and unfinished jobs. get-job: Shows a job’s current progress. cancel-job: Requests cancellation at the next safe point. recover-job: Resumes interrupted work or retries cleanup. discard-job: Keeps completed disk growth and discards the remaining failed edits.","heading":"Jobs","pageTitle":"Command Line API","permalink":"https://cloudmin.com/docs/development/command-line/#jobs","section":"docs","summary":"","title":""},{"content":"list-pools: Lists active and inactive storage pools. list-volumes: Lists storage volumes and their owners. list-volume-groups: Lists LVM volume groups available for registration. create-pool: Registers a directory or an existing LVM volume group. start-pool: Starts a directory pool. stop-pool: Stops a directory pool without deleting its files. set-pool-autostart: Changes whether a directory pool starts at boot. delete-volume: Deletes an unused storage volume after a review. unregister-pool: Removes a pool registration and keeps its data.","heading":"Host storage","pageTitle":"Command Line API","permalink":"https://cloudmin.com/docs/development/command-line/#host-storage","section":"docs","summary":"","title":""},{"content":"list-bridges: Lists host bridges outside libvirt-managed networks. get-bridge-status: Shows the current bridge transaction. remove-bridge: Moves the bridge’s network settings back to its Ethernet port. confirm-bridge: Keeps the new network settings after checking connectivity. rollback-bridge: Requests recovery of the previous network settings.","heading":"Host bridges","pageTitle":"Command Line API","permalink":"https://cloudmin.com/docs/development/command-line/#host-bridges","section":"docs","summary":"","title":""},{"content":"get-license: Shows the Cloudmin license status. check-license: Rechecks the Cloudmin license with the license server. change-license: Validates and saves a Cloudmin Pro license. deregister-license: Removes this host’s Cloudmin license.","heading":"License Manager","pageTitle":"Command Line API","permalink":"https://cloudmin.com/docs/development/command-line/#license-manager","section":"docs","summary":"","title":""},{"content":"api: Runs the raw JSON API with a request on standard input.","heading":"Raw API","pageTitle":"Command Line API","permalink":"https://cloudmin.com/docs/development/command-line/#raw-api","section":"docs","summary":"","title":""},{"content":"Cloudmin’s page handlers run as root, like other Webmin modules, but the risky work does not. Image and provisioning tools, consoles and relays run as separate processes without root privileges, even when the administrator is logged into Webmin as root.","heading":"","pageTitle":"Privilege Separation","permalink":"https://cloudmin.com/docs/development/privilege-separation/","section":"docs","summary":"","title":"Privilege Separation"},{"content":"Webmin, Cloudmin’s CGI scripts, the command line, the status collector and the controller jobs. They use normal Webmin initialization, authentication and permission checks, validate form tokens and input, record progress and make the libvirt changes. The module never installs host packages from a page request; cloudmin-install and Cloudmin-Config prepare the host.","heading":"What runs as root","pageTitle":"Privilege Separation","permalink":"https://cloudmin.com/docs/development/privilege-separation/#what-runs-as-root","section":"docs","summary":"","title":""},{"content":"Downloads, host-file reads, checksum checks, disk inspection, SSH key validation, cloud-init seed generation, clone preparation, backup archive handling and transfers, guest software monitoring, and the console and terminal relays. Systemd assigns each task a temporary user ID through DynamicUser and releases it when the task stops; no permanent account is created.\nEach worker starts as a fresh Perl or Python process without inheriting Webmin’s memory, environment, open files or libvirt connections. It has private files, no Linux capabilities, a read-only view of the system, and no access to Webmin’s credential files or libvirt control sockets. Download and size-lookup tasks receive Webmin’s outgoing proxy settings, including proxy credentials when configured, in a private request file. Host-file reads, compatibility inspection, key validation and seed generation also have no host network access.\nLibguestfs workers receive a private kernel copy from the root controller, so host kernel permissions stay unchanged, and need access to /dev/kvm through the kvm group. Installation readiness boots a real isolated KVM appliance the same way.","heading":"What runs without root","pageTitle":"Privilege Separation","permalink":"https://cloudmin.com/docs/development/privilege-separation/#what-runs-without-root","section":"docs","summary":"","title":""},{"content":"A root supervisor prepares each console or terminal connection, checks the session’s permission, hands the relay only its prepared sockets and private credentials, and handles cleanup. The relay speaks WebSocket to the browser and SSH or VNC to the guest; the SSH client runs inside the relay’s unit with the guest’s pinned host key and the selected managed key delivered as a systemd credential. The supervisor rechecks the session’s grant every five seconds and closes the connection when it is revoked. Serial consoles forward bytes between the libvirt stream in the supervisor and the relay, keeping the management connection out of the relay.","heading":"Interactive relays","pageTitle":"Privilege Separation","permalink":"https://cloudmin.com/docs/development/privilege-separation/#interactive-relays","section":"docs","summary":"","title":""},{"content":"Cloudmin’s root process checks permissions and input before applying network changes through libvirt and Webmin’s network backends. Task workers cannot change host networking. Cloudmin does not need passt or slirp4netns.","heading":"Networking privileges","pageTitle":"Privilege Separation","permalink":"https://cloudmin.com/docs/development/privilege-separation/#networking-privileges","section":"docs","summary":"","title":""},{"content":"Workers require systemd 247 or later, systemd-run and working nss-systemd user lookup. If a worker cannot start with these restrictions, the operation fails; it never falls back to running the tools as root. A host-file import must be readable without root; use a browser upload for a private file. This design does not change the host to qemu:///session or replace its existing virtual networks.","heading":"Requirements and limits","pageTitle":"Privilege Separation","permalink":"https://cloudmin.com/docs/development/privilege-separation/#requirements-and-limits","section":"docs","summary":"","title":""},{"content":"Guest passwords are hashed for cloud-init and the hash is removed from the job record when creation finishes. Virtualmin Pro credentials are removed once the guest accepts them. Console passwords, Servers Index logins and backup destination secrets are kept out of job logs, process arguments, audit records and Webmin’s file-change logs. Managed SSH private keys stay in Cloudmin’s private module data directory with mode 0600.","heading":"Secrets","pageTitle":"Privilege Separation","permalink":"https://cloudmin.com/docs/development/privilege-separation/#secrets","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"list-systems","permalink":"https://cloudmin.com/docs/development/api-programs/list-systems/","section":"docs","summary":"","title":"list-systems"},{"content":"cloudmin list-systems [--multiline | --json] [--name-only | --id-only] [--name name]* [--id uuid]* [--state running|stopped|paused] [--template ID|name] [--plan ID|name] With no filters, lists the virtual machines visible to the caller, ordered by name. The default table shows each machine’s name, power state, CPU count, memory allocation and known IP addresses.\nUse --name or --id to select exact names or UUIDs. Repeat either option to select several machines. Multiple values of the same option are alternatives; different filters must all match. For example, two --name options with --state running show only the named machines that are running. An empty result means no machines matched.\n--state accepts running, stopped or paused. --template and --plan accept an existing preset’s ID or unambiguous name and match the recorded creation preset. They do not compare the machine’s current settings with the preset.\nUse --multiline to see details including UUID, disk capacity and automatic startup. A disk capacity that could not be measured is unknown, not zero. --json returns structured data for scripts. --name-only and --id-only print one name or UUID per line, without a heading.\ncloudmin list-systems cloudmin list-systems --state running --multiline cloudmin list-systems --name web.example.com --name db.example.com \\ --id-only cloudmin list-systems --plan \"Default Plan\" --json Options:\n--name name: Exact virtual machine name. --id uuid: Exact virtual machine UUID. --state running|stopped|paused: Power state. --template ID|name: Template ID or name. --plan ID|name: Plan ID or name.","heading":"Lists the virtual machines on this host","pageTitle":"list-systems","permalink":"https://cloudmin.com/docs/development/api-programs/list-systems/#lists-the-virtual-machines-on-this-host","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"get-system","permalink":"https://cloudmin.com/docs/development/api-programs/get-system/","section":"docs","summary":"","title":"get-system"},{"content":"cloudmin get-system [--multiline | --json] (--name name | --id uuid) Select one virtual machine with --name or --id. The result combines its inventory summary with its saved configuration, including resources, disks, network interfaces and boot settings. Use list-systems to find its name or UUID.\nFor a running machine, the result also includes running resource settings and any differences from the saved settings. Pending changes take effect after a full shutdown and start; an operating system reboot may not apply them. Use restart-system to perform that full restart.\n--multiline expands nested details, and --json returns the complete structured result. For a shorter view of attached devices, use list-disks or list-interfaces. This command reads settings once; it does not monitor changes.\ncloudmin get-system --name guest.example.com --multiline cloudmin get-system --id MACHINE_UUID --json Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name.","heading":"Shows a virtual machine and its saved settings","pageTitle":"get-system","permalink":"https://cloudmin.com/docs/development/api-programs/get-system/#shows-a-virtual-machine-and-its-saved-settings","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"start-system","permalink":"https://cloudmin.com/docs/development/api-programs/start-system/","section":"docs","summary":"","title":"start-system"},{"content":"cloudmin start-system [--multiline | --json] [--no-wait] (--name name | --id uuid) Select a stopped virtual machine with --name or --id. It starts with its saved hardware configuration, applying settings that were waiting for the next start. This command does not change whether the machine starts automatically when the host boots; use modify-system --autostart yes for that.\nBy default, waits up to two minutes for the host to report the machine running. That state does not mean the guest operating system, network, cloud-init or software installation is ready. --no-wait returns once the start request is accepted. It does not return a background job ID.\nUse unpause-system for a paused machine. An unfinished operation can prevent starting a guest; check list-jobs before repeating a refused request.\ncloudmin start-system --name guest.example.com cloudmin start-system --id MACHINE_UUID --no-wait Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name.","heading":"Starts a stopped virtual machine","pageTitle":"start-system","permalink":"https://cloudmin.com/docs/development/api-programs/start-system/#starts-a-stopped-virtual-machine","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"shutdown-system","permalink":"https://cloudmin.com/docs/development/api-programs/shutdown-system/","section":"docs","summary":"","title":"shutdown-system"},{"content":"cloudmin shutdown-system [--multiline | --json] [--no-wait] (--name name | --id uuid) Requests a clean shutdown of the machine selected by --name or --id. The guest operating system must respond to the shutdown request. Its disks, saved hardware settings and automatic startup setting are retained.\nBy default, waits up to two minutes for the host to report the machine stopped. A timeout fails the command but does not cancel the shutdown request: the guest can still stop later. Cloudmin never turns a timed-out clean shutdown into a forced power-off.\n--no-wait returns after the request is accepted. Use get-system or list-systems to check the state later. Use restart-system for a clean shutdown followed by a start, or poweroff-system --yes when a forced stop is necessary.\ncloudmin shutdown-system --name guest.example.com cloudmin shutdown-system --id MACHINE_UUID --no-wait Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name.","heading":"Shuts down a virtual machine cleanly","pageTitle":"shutdown-system","permalink":"https://cloudmin.com/docs/development/api-programs/shutdown-system/#shuts-down-a-virtual-machine-cleanly","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"reboot-system","permalink":"https://cloudmin.com/docs/development/api-programs/reboot-system/","section":"docs","summary":"","title":"reboot-system"},{"content":"cloudmin reboot-system [--multiline | --json] (--name name | --id uuid) Requests an operating system reboot of the running machine selected by --name or --id. This is a clean reboot request; the guest must respond to it. The command returns when libvirt accepts the request, without waiting for the guest to reboot or its services to become ready.\nAn operating system reboot does not guarantee that pending CPU, memory or boot configuration changes take effect. Use restart-system for a complete shutdown and start with the saved hardware configuration. Use reset-system only when an immediate hardware reset is intended.\ncloudmin reboot-system --name guest.example.com cloudmin reboot-system --id MACHINE_UUID --json Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name.","heading":"Requests a guest operating system reboot","pageTitle":"reboot-system","permalink":"https://cloudmin.com/docs/development/api-programs/reboot-system/#requests-a-guest-operating-system-reboot","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"pause-system","permalink":"https://cloudmin.com/docs/development/api-programs/pause-system/","section":"docs","summary":"","title":"pause-system"},{"content":"cloudmin pause-system [--multiline | --json] [--no-wait] (--name name | --id uuid) Pauses execution of a running machine selected by --name or --id. Its memory and virtual devices remain allocated on the host. This is not a saved state on disk and does not survive stopping the machine or shutting down the host.\nThe guest cannot process requests while paused. Network connections and application operations may time out. Resume execution with unpause-system; use shutdown-system when the goal is to stop the operating system cleanly and release its resources.\nBy default, waits for the paused state. --no-wait returns as soon as the pause request is accepted. Neither form creates a background job.\ncloudmin pause-system --name guest.example.com cloudmin pause-system --id MACHINE_UUID --no-wait Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name.","heading":"Pauses a running virtual machine","pageTitle":"pause-system","permalink":"https://cloudmin.com/docs/development/api-programs/pause-system/#pauses-a-running-virtual-machine","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"unpause-system","permalink":"https://cloudmin.com/docs/development/api-programs/unpause-system/","section":"docs","summary":"","title":"unpause-system"},{"content":"cloudmin unpause-system [--multiline | --json] [--no-wait] (--name name | --id uuid) Resumes execution of a paused machine selected by --name or --id, using its existing memory and running hardware state. It does not boot the operating system again or apply settings saved for the next start.\nBy default, waits for the host to report the machine running. --no-wait returns after the resume request is accepted. Applications may need to reconnect after the pause, so a running state does not prove that all services have recovered.\nUse start-system for a stopped machine. list-systems --state paused finds machines that can be resumed.\ncloudmin unpause-system --name guest.example.com cloudmin unpause-system --id MACHINE_UUID --no-wait Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name.","heading":"Resumes a paused virtual machine","pageTitle":"unpause-system","permalink":"https://cloudmin.com/docs/development/api-programs/unpause-system/#resumes-a-paused-virtual-machine","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"restart-system","permalink":"https://cloudmin.com/docs/development/api-programs/restart-system/","section":"docs","summary":"","title":"restart-system"},{"content":"cloudmin restart-system [--multiline | --json] [--no-wait] (--name name | --id uuid) Performs a full shutdown and start of the machine selected by --name or --id. Use this to apply saved CPU, memory or boot settings that get-system shows as pending. A guest operating system reboot alone may leave those changes pending.\nThe operation runs as a background job. If the machine is running, the worker requests a clean shutdown and waits up to two minutes. A timeout fails the job without forcing the guest off or starting it again. A delayed guest shutdown may still finish after the job reports failure.\nBy default, waits for the job to finish. --no-wait returns its ID for later inspection with get-job. Success means the machine has been started with its saved configuration; it does not wait for guest applications to become ready.\ncloudmin restart-system --name guest.example.com cloudmin restart-system --id MACHINE_UUID --no-wait Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name.","heading":"Shuts down and starts with the saved settings","pageTitle":"restart-system","permalink":"https://cloudmin.com/docs/development/api-programs/restart-system/#shuts-down-and-starts-with-the-saved-settings","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"reset-system","permalink":"https://cloudmin.com/docs/development/api-programs/reset-system/","section":"docs","summary":"","title":"reset-system"},{"content":"cloudmin reset-system [--multiline | --json] (--name name | --id uuid) --yes Immediately resets the virtual hardware of the machine selected by --name or --id. The guest has no opportunity to stop applications or flush pending writes. Unsaved data can be lost. --yes is required to confirm this operation.\nUse reboot-system for a clean operating system reboot. A hardware reset does not guarantee that pending saved hardware changes are applied; use a full shutdown and start for those changes.\nThe command returns when the reset is accepted, without waiting for the operating system or services to become ready. It does not delete the machine or its disks.\ncloudmin reset-system --name guest.example.com --yes Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name. --yes: Confirm this operation.","heading":"Resets virtual hardware immediately","pageTitle":"reset-system","permalink":"https://cloudmin.com/docs/development/api-programs/reset-system/#resets-virtual-hardware-immediately","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"poweroff-system","permalink":"https://cloudmin.com/docs/development/api-programs/poweroff-system/","section":"docs","summary":"","title":"poweroff-system"},{"content":"cloudmin poweroff-system [--multiline | --json] [--no-wait] (--name name | --id uuid) --yes Immediately stops the machine selected by --name or --id, without asking the guest operating system to shut down. Unsaved data can be lost. --yes is required. Use shutdown-system when the guest can shut down cleanly.\nThe machine definition, disks and automatic startup setting are retained. Use start-system to start the machine again.\nBy default, waits for the host to report the machine stopped. --no-wait returns after the forced stop is accepted. This is a power operation, not a background job.\ncloudmin poweroff-system --name guest.example.com --yes cloudmin poweroff-system --id MACHINE_UUID --yes --no-wait Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name. --yes: Confirm this operation.","heading":"Powers off immediately without a clean shutdown","pageTitle":"poweroff-system","permalink":"https://cloudmin.com/docs/development/api-programs/poweroff-system/#powers-off-immediately-without-a-clean-shutdown","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"modify-system","permalink":"https://cloudmin.com/docs/development/api-programs/modify-system/","section":"docs","summary":"","title":"modify-system"},{"content":"cloudmin modify-system [--multiline | --json] [--no-wait] (--name name | --id uuid) [--autostart yes|no] [--boot value] [--bootmenu yes|no] [--changes-file file|-] [--cpu-limit number] [--cpus number] [--desc value] [--enable-live] [--memory size] [--memory-limit size] Changes selected settings of the machine identified by --name or --id. Omitted fields keep their existing values. The command reads the current configuration revision before submitting the update, so a conflicting concurrent edit can still cause the request to fail.\nResources and boot settings --cpus and --memory set the allocation. --cpu-limit and --memory-limit set the maximum CPU count and memory, not CPU usage or scheduling limits. Bare memory values use MiB; 4G means 4 GiB.\nSupported CPU and memory allocation changes can apply while the guest runs. Allocation changes outside its running limits, changes to resource maximums, and boot settings are saved for the next full shutdown and start. If a supported live change fails, the command reports the error. Check get-system --multiline for running values and pending changes, then use restart-system when needed. Adding CPUs or adjusting memory through ballooning also requires guest support.\n--boot disk:vda selects a disk as the first boot device; --boot nic:MAC selects a network interface. This replaces the saved boot order. --bootmenu yes enables the firmware boot menu. Use list-disks and list-interfaces to find device identifiers.\nPreparing for live changes --enable-live requires a stopped guest. It adds CPU slots, spare device ports and a CD drive for later changes while preserving the current allocation. The command does not shut a running guest down automatically.\nCombined hardware edits --changes-file reads a JSON array of up to 128 disk or interface edits. Each entry uses an API action and its fields, for example grow_disk with target and disk_gib. An existing device can be changed only once in the array. Disk deletion requires the separate delete-disk command.\nThe whole request is validated before any changes, but disk growth cannot be undone if a later step fails. Use get-job and recover-job for an interrupted update. When its safety checks pass, discard-job keeps completed growth and releases the machine for further edits.\nAutomatic startup and completion --autostart yes starts the machine when the host boots; --autostart no disables that behavior. If combined with hardware edits, it is changed only after their job succeeds. With --no-wait, submit automatic startup as a separate command.\nThe command waits for hardware edits by default. --no-wait returns the job ID. Use --json for the job record, including any fields saved for the next start.\ncloudmin modify-system --name guest.example.com --memory 4G --cpus 2 cloudmin modify-system --name guest.example.com --boot disk:vda \\ --bootmenu yes cloudmin modify-system --name guest.example.com --autostart yes cloudmin modify-system --id MACHINE_UUID --changes-file \\ /root/hardware-edits.json Options:\n--autostart yes|no: Start when the host boots. --boot value: First boot device: disk:TARGET or nic:MAC. --bootmenu yes|no: Enable the firmware boot menu. --changes-file file|-: JSON array of hardware edits. --cpu-limit number: Maximum CPUs. --cpus number: Number of CPUs. --desc value: Description. --enable-live: Add CPU slots, spare device ports and a CD drive while stopped. --id uuid: Source virtual machine UUID. --memory size: Memory allocation; bare values use MiB. --memory-limit size: Maximum memory; bare values use MiB. --name name: Source virtual machine name.","heading":"Changes saved resources, boot settings or automatic startup","pageTitle":"modify-system","permalink":"https://cloudmin.com/docs/development/api-programs/modify-system/#changes-saved-resources-boot-settings-or-automatic-startup","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"passwd-system","permalink":"https://cloudmin.com/docs/development/api-programs/passwd-system/","section":"docs","summary":"","title":"passwd-system"},{"content":"cloudmin passwd-system [--multiline | --json] (--name name | --id uuid) --password-file file|- --user value Changes the login password of an existing account inside the machine selected by --name or --id. --user names the guest account, not a Webmin user. The machine must be running with a responding QEMU guest agent. This command cannot create an account or reset a password in a stopped guest.\n--password-file reads the new password from a regular UTF-8 text file. --password-file - reads it from standard input. One final newline is removed. Keep password files private; the password itself is never a command-line argument or part of the public result.\nThe command returns after the agent accepts the change. It does not change SSH authentication policy, unlock other login methods or replace authorized SSH keys. For example, changing a password does not enable SSH password login if the guest disables it.\ncloudmin passwd-system --name guest.example.com --user cloudmin \\ --password-file /root/guest-password cloudmin passwd-system --id MACHINE_UUID --user cloudmin --password-file \\ - \u003c /root/guest-password Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name. --password-file file|-: Password file, or - for stdin. --user value: Existing guest account.","heading":"Changes an existing guest account password through its agent","pageTitle":"passwd-system","permalink":"https://cloudmin.com/docs/development/api-programs/passwd-system/#changes-an-existing-guest-account-password-through-its-agent","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"create-system","permalink":"https://cloudmin.com/docs/development/api-programs/create-system/","section":"docs","summary":"","title":"create-system"},{"content":"cloudmin create-system [--multiline | --json] [--no-wait] [--address-mode dhcp|static] [--after-script-file file|-] [--after-script-mode none|file|inline] [--after-script-path value] [--auth-type keys|password|both] [--autostart | --no-autostart] [--before-script-file file|-] [--before-script-mode none|file|inline] [--before-script-path value] [--cpus number] [--desc value] [--disk size] [--dns value] [--firmware auto|efi|bios] [--gateway4 value] [--gateway6 value] [--host-ssh-key | --no-host-ssh-key] [--hostname value] [--image ID|name] [--install-source cloud|iso] [--ipv4 value] [--ipv6 value] [--license-file file|-] [--license-serial-file file|-] [--mac value] [--memory size] --name value [--network ID|name] [--packages value] [--password-file file|-] [--plan ID|name] [--pool ID|name] [--require-fqdn | --no-require-fqdn] [--review] [--software none|virtualmin-gpl|virtualmin-pro] [--ssh-key value]* [--ssh-keys-file file|-] [--start | --no-start] [--template ID|name] [--username value] [--virtualmin-bundle LAMP|LEMP] [--virtualmin-postgres | --no-virtualmin-postgres] [--virtualmin-ssl | --no-virtualmin-ssl] [--virtualmin-type full|mini] [--webmin-register | --no-webmin-register] Creates a new virtual machine named by --name. This name must be unused on the host. The operation runs as a background job; by default the command waits for creation and any selected software setup to finish. --no-wait returns the job ID instead.\nImage, storage and resources Use list-images, list-pools and list-networks to find available choices. Image, pool, template and plan options accept an ID or an unambiguous name. A catalogue image uses an ID such as catalogue:IMAGE_ID; Cloudmin downloads or reuses it as needed. --pool selects the destination for the new disk, not the image’s existing location.\n--template supplies creation defaults and --plan supplies resource defaults. They are used only when explicitly selected. Command-line fields override their defaults, except that a template’s required fully qualified hostname cannot be disabled. If you omit a required setting without a preset that supplies it, validation reports the missing value.\n--cpus sets the CPU count. Bare --memory values are MiB, and bare --disk values are GiB; 2G and 20G are also accepted. --disk sets the total disk capacity and cannot be smaller than the image requires.\nGuest access and networking For a cloud image, --username names the initial administrator. --auth-type keys requires SSH public keys, supplied with repeatable --ssh-key options or --ssh-keys-file. Use --auth-type password with --password-file, or both with both password and keys. A password filename of - reads standard input. Do not pass a password as a command argument.\n--hostname defaults to the new machine’s name. Use a fully qualified hostname when installing Virtualmin. --network selects a virtual network or bridge:NAME; it does not create that network. --address-mode dhcp uses automatic addressing. For static, supply addresses with prefixes, gateways where needed and --dns as a quoted list of server addresses. These settings configure the new guest through cloud-init.\nPower and firmware The new machine starts by default, including when a template is selected. Use --no-start to leave it stopped. --autostart and --no-autostart control startup when the host boots. --firmware auto, efi or bios must be compatible with the selected image and host.\nFor an installer ISO, use --install-source iso and select an ISO image. Cloudmin creates an empty disk and attaches the installer. Complete operating system installation through the console; cloud-image account setup and automatic software installation do not apply to this mode.\nSoftware and scripts --packages accepts a quoted, space-separated package list. --software virtualmin-gpl or virtualmin-pro installs Virtualmin after initial cloud-init setup. --virtualmin-bundle LAMP selects Apache, and LEMP selects Nginx; --virtualmin-type full or mini chooses the installation size. Virtualmin Pro also requires --license-serial-file and --license-file for its own license credentials.\nWhen Enable Virtualmin installation? is disabled in Module Configuration, both review and creation reject requests to install Virtualmin. Templates that select Virtualmin directly or inherit it from Default Template are also blocked, even if the command overrides --software. Re-enable the setting to use them.\nThis setting does not affect package installation or setup scripts. Jobs submitted before it changed keep their settings.\nPreparation and final setup scripts require Cloudmin Pro. --before-script-file or --after-script-file reads script contents; the corresponding --before-script-path or --after-script-path selects a file on the Cloudmin host. The scripts execute inside the guest as root, before package installation or after successful setup. Explicit script mode none clears an inherited script. Selecting guest software or scripts requires starting the guest.\nReview and results --review validates the request and shows its resolved settings without creating a virtual machine. Omit that flag to submit the same settings for creation. A successful review does not reserve the name or resources against later changes.\n--json returns the final job record, or the initial record with --no-wait. If the command loses its connection or times out while waiting, check list-jobs and get-job before submitting another creation. A software setup failure can leave the created machine available for inspection.\ncloudmin create-system --name guest.example.com --template \\ \"Default Template\" --plan \"Default Plan\" --auth-type keys \\ --ssh-keys-file /root/guest-public-keys --review cloudmin create-system --name guest.example.com --template \\ \"Default Template\" --plan \"Default Plan\" --auth-type keys \\ --ssh-keys-file /root/guest-public-keys cloudmin create-system --name installer.example.com --install-source iso \\ --image INSTALLER_IMAGE_ID --pool default --network default --cpus 2 \\ --memory 2G --disk 20G Options:\n--address-mode dhcp|static: Guest address configuration. --after-script-file file|-: Read guest script contents from a file. --after-script-mode none|file|inline: Guest script source (Cloudmin Pro). --after-script-path value: Guest script file on the Cloudmin host. --auth-type keys|password|both: Initial login authentication. --autostart | --no-autostart: Start when the host boots. --before-script-file file|-: Read guest script contents from a file. --before-script-mode none|file|inline: Guest script source (Cloudmin Pro). --before-script-path value: Guest script file on the Cloudmin host. --cpus number: Number of CPUs. --desc value: Description. --disk size: Total disk capacity; bare values use GiB. --dns value: Space- or comma-separated DNS servers. --firmware auto|efi|bios: Guest firmware. --gateway4 value: IPv4 gateway. --gateway6 value: IPv6 gateway. --host-ssh-key | --no-host-ssh-key: Create a managed host SSH key for the guest. --hostname value: Guest hostname; defaults to its name. --image ID|name: Imported or catalogue image ID or name. --install-source cloud|iso: Cloud image or installer ISO. --ipv4 value: Static IPv4 address with prefix. --ipv6 value: Static IPv6 address with prefix. --license-file file|-: Virtualmin Pro license key file, or - for stdin. --license-serial-file file|-: Virtualmin Pro serial file, or - for stdin. --mac value: Guest MAC address; omitted generates one. --memory size: Memory allocation; bare values use MiB. --name value: New virtual machine name. --network ID|name: Network key, UUID or name, or bridge:name. --packages value: Space-separated guest packages. --password-file file|-: Password file, or - for stdin. --plan ID|name: Plan ID or name. --pool ID|name: Destination storage pool ID or name. --require-fqdn | --no-require-fqdn: Require a fully qualified hostname. --review: Validate without creating. --software none|virtualmin-gpl|virtualmin-pro: Software to install. --ssh-key value: SSH public key; repeat for more keys. --ssh-keys-file file|-: File containing SSH public keys. --start | --no-start: Start after creation. --template ID|name: Template ID or name. --username value: Initial guest administrator account. --virtualmin-bundle LAMP|LEMP: Apache or Nginx stack. --virtualmin-postgres | --no-virtualmin-postgres: Install PostgreSQL. --virtualmin-ssl | --no-virtualmin-ssl: Request a hostname certificate. --virtualmin-type full|mini: Virtualmin installation size. --webmin-register | --no-webmin-register: Register the guest in the host Servers Index.","heading":"Creates a virtual machine from a cloud image or installer ISO","pageTitle":"create-system","permalink":"https://cloudmin.com/docs/development/api-programs/create-system/#creates-a-virtual-machine-from-a-cloud-image-or-installer-iso","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"clone-system","permalink":"https://cloudmin.com/docs/development/api-programs/clone-system/","section":"docs","summary":"","title":"clone-system"},{"content":"cloudmin clone-system [--multiline | --json] [--no-wait] (--name name | --id uuid) [--address-mode dhcp|static] [--auth-type keys|password|both] [--autostart | --no-autostart] [--confirm-license] [--confirm-unchanged] [--cpus number] [--desc value] [--disk size] [--dns value] [--gateway4 value] [--gateway6 value] [--host-ssh-key | --no-host-ssh-key] [--hostname value] [--ipv4 value] [--ipv6 value] [--mac value] [--memory size] [--mode prepared|unchanged] [--network ID|name] --new-name value [--nvram-mode fresh|copy] [--password-file file|-] [--plan ID|name] [--pool ID|name] [--require-fqdn | --no-require-fqdn] [--shutdown] [--ssh-key value]* [--ssh-keys-file file|-] [--start | --no-start] [--template ID|name] [--username value] Select the source with --name or --id, and give the destination an unused --new-name. Writable disks are copied to independent volumes with no backing files. The copy includes the source’s applications and data.\nPrepared and unchanged copies The default --mode prepared configures a new guest identity, hostname, network and administrator access before boot. It requires one inspectable Linux installation, enabled cloud-init and one network interface. Supply the new login settings with --username, --auth-type and the password or public-key file options.\n--mode unchanged retains guest settings and login credentials, but still resets the host ID and removes copied Virtualmin Pro credentials. It requires --confirm-unchanged and must remain stopped with automatic startup disabled. Review its network and access settings before starting it alongside the source.\nBoth modes require libguestfs with its Perl bindings and bsdtar on the host. Prepared cloning also needs YAML::XS. A source with Virtualmin Pro requires --confirm-license: copied license credentials are removed, and the clone needs its own license or a manual downgrade to GPL. The source’s credentials are unchanged.\nResources and source preparation Without explicit presets, the clone uses the source’s CPU count, memory, first-disk capacity, pool and network. --pool changes the destination pool. --disk can enlarge the first disk but cannot shrink it. A selected plan supplies resource defaults; a template supplies access, network and boot defaults. Template software installation and scripts are not run on the clone.\nA running source needs a responding guest agent for a filesystem freeze and temporary snapshot. Alternatively, --shutdown stops it cleanly for copying and restarts it afterward. A source that was already stopped stays stopped. Allow storage for independent disk copies and temporary source disk growth.\nFor UEFI, --nvram-mode fresh creates new firmware variables. copy preserves them from a stopped source or requires --shutdown. The default is fresh variables when copying a running source without shutdown, and copied variables otherwise.\nCompletion Without a preset or explicit startup options, the clone stays stopped and automatic startup is disabled. Use --start for a prepared clone you want to boot after copying. An unchanged copy cannot start automatically.\nThe command waits for the job by default. --no-wait returns its ID. If copying or cleanup fails, use get-job and recover-job so Cloudmin can finish restoring the source and remove incomplete copies before releasing their reservations.\ncloudmin clone-system --name source.example.com --new-name \\ copy.example.com --auth-type keys --ssh-keys-file \\ /root/guest-public-keys --no-start cloudmin clone-system --id MACHINE_UUID --new-name spare.example.com \\ --mode unchanged --confirm-unchanged --no-start --no-autostart \\ --shutdown Options:\n--address-mode dhcp|static: Guest address configuration. --auth-type keys|password|both: Initial login authentication. --autostart | --no-autostart: Start when the host boots. --confirm-license: Acknowledge copied Virtualmin Pro credentials will be removed. --confirm-unchanged: Acknowledge that guest settings and credentials are retained. --cpus number: Number of CPUs. --desc value: Description. --disk size: Total disk capacity; bare values use GiB. --dns value: Space- or comma-separated DNS servers. --gateway4 value: IPv4 gateway. --gateway6 value: IPv6 gateway. --host-ssh-key | --no-host-ssh-key: Create a managed host SSH key for the guest. --hostname value: Guest hostname; defaults to its name. --id uuid: Source virtual machine UUID. --ipv4 value: Static IPv4 address with prefix. --ipv6 value: Static IPv6 address with prefix. --mac value: Guest MAC address; omitted generates one. --memory size: Memory allocation; bare values use MiB. --mode prepared|unchanged: Prepare a new identity or keep guest settings. --name name: Source virtual machine name. --network ID|name: Network key, UUID or name, or bridge:name. --new-name value: Destination virtual machine name. --nvram-mode fresh|copy: Create fresh firmware variables or copy them. --password-file file|-: Password file, or - for stdin. --plan ID|name: Plan ID or name. --pool ID|name: Destination storage pool ID or name. --require-fqdn | --no-require-fqdn: Require a fully qualified hostname. --shutdown: Cleanly stop the source while copying and restart it afterward. --ssh-key value: SSH public key; repeat for more keys. --ssh-keys-file file|-: File containing SSH public keys. --start | --no-start: Start after creation. --template ID|name: Template ID or name. --username value: Initial guest administrator account.","heading":"Copies a virtual machine to independent disks","pageTitle":"clone-system","permalink":"https://cloudmin.com/docs/development/api-programs/clone-system/#copies-a-virtual-machine-to-independent-disks","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"delete-system","permalink":"https://cloudmin.com/docs/development/api-programs/delete-system/","section":"docs","summary":"","title":"delete-system"},{"content":"cloudmin delete-system [--multiline | --json] [--no-wait] (--name name | --id uuid) [--disk value]* [--shutdown] --yes Removes the definition of the machine selected by --name or --id. --yes is required. Disk deletion is a separate choice: with no --disk options, every disk is kept, including the cloud-init seed. Repeat --disk with attached target names such as vda to permanently delete only those disks. Use list-disks to inspect the targets first.\nA running machine requires --shutdown. If any writable disk is being kept, Cloudmin requests a clean shutdown and waits up to two minutes. If every writable disk is selected for deletion, it powers the machine off immediately. A failed or timed-out stop leaves the definition and disks intact; a delayed clean shutdown may still finish.\nRemove native LVM snapshots before deleting the machine. Removing the machine also removes its libvirt snapshot and checkpoint metadata, firmware variable store and Cloudmin-managed SSH keys. Kept disks retain their backing chains, but the deleted machine’s snapshot list is no longer available. Selected disks’ private snapshot layers are deleted; shared layers and imported images remain protected.\nDeletion runs as a job. The command waits for completion by default; --no-wait returns the job ID. Recovery can finish an interrupted deletion but cannot restore deleted data. Kept disks can be transferred or reattached, but they do not preserve the machine definition. Use a backup to preserve the complete machine.\ncloudmin delete-system --name guest.example.com --yes cloudmin delete-system --name guest.example.com --shutdown --disk vda \\ --disk vdb --yes Options:\n--disk value: Attached disk target to delete; repeat for more disks. --id uuid: Source virtual machine UUID. --name name: Source virtual machine name. --shutdown: Permit stopping a running guest. --yes: Confirm this operation.","heading":"Deletes a virtual machine and only the selected disk targets","pageTitle":"delete-system","permalink":"https://cloudmin.com/docs/development/api-programs/delete-system/#deletes-a-virtual-machine-and-only-the-selected-disk-targets","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"list-disks","permalink":"https://cloudmin.com/docs/development/api-programs/list-disks/","section":"docs","summary":"","title":"list-disks"},{"content":"cloudmin list-disks [--multiline | --json] [--name-only | --id-only] (--name name | --id uuid) Lists saved disk and removable-drive attachments for the machine selected by --name or --id. The default table shows the target, device type, role, format and path. Use it to distinguish writable disks, cloud-init seed media and CD/DVD drives before changing storage.\n--target in disk commands refers to a guest device such as vda or sda, not a pool volume name, image ID or host path. --multiline or --json includes available volume details. --name-only and --id-only both print attachment targets, one per line.\nThis command shows storage attached to this machine. list-images lists reusable creation images instead. It does not inspect filesystems inside the guest.\ncloudmin list-disks --name guest.example.com --multiline cloudmin list-disks --id MACHINE_UUID --id-only Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name.","heading":"Lists a virtual machine’s disks and removable drives","pageTitle":"list-disks","permalink":"https://cloudmin.com/docs/development/api-programs/list-disks/#lists-a-virtual-machines-disks-and-removable-drives","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"create-disk","permalink":"https://cloudmin.com/docs/development/api-programs/create-disk/","section":"docs","summary":"","title":"create-disk"},{"content":"cloudmin create-disk [--multiline | --json] [--no-wait] (--name name | --id uuid) [--disk size] [--image ID|name] --pool ID|name Creates a disk in --pool and attaches it to the machine selected by --name or --id. Specify --disk for an empty disk, or --image for an independent copy of a ready imported image. File pools use QCOW2; LVM and LVM-thin pools use raw logical volumes. Catalogue entries must be imported before they can be used as additional disks.\n--disk is the total capacity, in GiB when no suffix is given. With an image, omitting it keeps the image’s capacity; a larger value grows the copy, and a smaller value is rejected. The copied disk has no dependency on the original image.\nSupported running guests can receive the disk live. A guest may still need to discover, partition, format and mount it. Existing snapshots or backup checkpoints can prevent adding disks. The command waits for the hardware job by default; --no-wait returns its ID. Use list-disks afterward to find the assigned target.\ncloudmin create-disk --name guest.example.com --pool default --disk 50G cloudmin create-disk --id MACHINE_UUID --pool default --image \\ IMPORTED_IMAGE_ID Options:\n--disk size: Total disk capacity; bare values use GiB. --id uuid: Source virtual machine UUID. --image ID|name: Imported or catalogue image ID or name. --name name: Source virtual machine name. --pool ID|name: Destination storage pool ID or name.","heading":"Creates and attaches a disk","pageTitle":"create-disk","permalink":"https://cloudmin.com/docs/development/api-programs/create-disk/#creates-and-attaches-a-disk","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"attach-disk","permalink":"https://cloudmin.com/docs/development/api-programs/attach-disk/","section":"docs","summary":"","title":"attach-disk"},{"content":"cloudmin attach-disk [--multiline | --json] [--no-wait] (--name name | --id uuid) --pool ID|name --volume value Attaches an existing unused volume to the machine selected by --name or --id. --pool identifies its storage pool, and --volume is the volume’s name inside that pool, not a host filesystem path. Use this when reusing a disk kept by detach-disk or machine deletion.\nThe volume must be a supported raw or QCOW2 disk and pass ownership and dependency checks. Cloudmin protects imported images and disks referenced by other machines or storage. To create a separate copy of an imported image, use create-disk --image instead.\nSupported running guests can receive the attachment live; Cloudmin does not mount or reconfigure filesystems inside the guest. Snapshots or checkpoints may block this change. The command waits for the hardware job unless --no-wait is supplied. list-disks shows the new target after completion.\ncloudmin attach-disk --name guest.example.com --pool default --volume \\ data.qcow2 Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name. --pool ID|name: Destination storage pool ID or name. --volume value: Volume name in the pool.","heading":"Attaches an unused storage volume","pageTitle":"attach-disk","permalink":"https://cloudmin.com/docs/development/api-programs/attach-disk/#attaches-an-unused-storage-volume","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"detach-disk","permalink":"https://cloudmin.com/docs/development/api-programs/detach-disk/","section":"docs","summary":"","title":"detach-disk"},{"content":"cloudmin detach-disk [--multiline | --json] [--no-wait] (--name name | --id uuid) --target value Removes an attachment from the machine selected by --name or --id while keeping the storage volume and its data. --target is an attached device name from list-disks, such as vdb. This is different from delete-disk, which also removes the volume permanently.\nBefore detaching a disk in use, stop the guest applications using it and unmount it. For live removal, Cloudmin waits for the device to disappear from libvirt’s running definition before updating the saved configuration. If the guest does not acknowledge removal, the job can fail and require recovery.\nSnapshots, checkpoints and unsupported devices can prevent detachment. The command waits for the job by default; --no-wait returns its ID. Use attach-disk with the original pool and volume name to attach the kept disk again.\ncloudmin detach-disk --name guest.example.com --target vdb Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name. --target value: Attached disk target.","heading":"Detaches a disk while keeping its data","pageTitle":"detach-disk","permalink":"https://cloudmin.com/docs/development/api-programs/detach-disk/#detaches-a-disk-while-keeping-its-data","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"delete-disk","permalink":"https://cloudmin.com/docs/development/api-programs/delete-disk/","section":"docs","summary":"","title":"delete-disk"},{"content":"cloudmin delete-disk [--multiline | --json] [--no-wait] (--name name | --id uuid) --target value --yes Detaches and permanently deletes one managed disk from the machine selected by --name or --id. --target must be an attached disk target from list-disks. --yes confirms deletion. Other disks and the machine itself are retained.\nUse detach-disk when the data should be kept. Deletion cannot be undone by job recovery. Imported images, shared disks and disks with protected dependencies are refused. Snapshot or checkpoint history can also block the operation.\nThe operation runs as a job. By default, the command waits for completion; --no-wait returns its ID. If deletion is interrupted after detachment, use recover-job to let Cloudmin verify and finish removal of the same volume. This operation cannot be included in modify-system --changes-file.\ncloudmin delete-disk --name guest.example.com --target vdb --yes Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name. --target value: Attached disk target. --yes: Confirm this operation.","heading":"Detaches and permanently deletes one disk","pageTitle":"delete-disk","permalink":"https://cloudmin.com/docs/development/api-programs/delete-disk/#detaches-and-permanently-deletes-one-disk","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"resize-disk","permalink":"https://cloudmin.com/docs/development/api-programs/resize-disk/","section":"docs","summary":"","title":"resize-disk"},{"content":"cloudmin resize-disk [--multiline | --json] [--no-wait] (--name name | --id uuid) --disk size --target value Grows an attached disk on the machine selected by --name or --id. --target identifies the disk, and --disk is its new total capacity, not the amount to add. Bare sizes are GiB; for example, --disk 50G makes the disk 50 GiB.\nShrinking is not supported. Snapshots, checkpoints, shared storage or unsupported disk types can block growth. File disks can grow through libvirt while the guest runs. LVM and LVM-thin disks require the guest to be shut down first.\nThis changes virtual disk capacity only. Expand partitions, logical volumes and filesystems inside the guest separately. Completed growth cannot be rolled back, including when a later part of a job fails. The command waits for the job by default; --no-wait returns its ID.\ncloudmin resize-disk --name guest.example.com --target vda --disk 50G Options:\n--disk size: Total disk capacity; bare values use GiB. --id uuid: Source virtual machine UUID. --name name: Source virtual machine name. --target value: Attached disk target.","heading":"Grows a disk to the specified total capacity","pageTitle":"resize-disk","permalink":"https://cloudmin.com/docs/development/api-programs/resize-disk/#grows-a-disk-to-the-specified-total-capacity","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"insert-media","permalink":"https://cloudmin.com/docs/development/api-programs/insert-media/","section":"docs","summary":"","title":"insert-media"},{"content":"cloudmin insert-media [--multiline | --json] [--no-wait] (--name name | --id uuid) --pool ID|name --target value --volume value Inserts an ISO volume into an existing CD/DVD drive on the machine selected by --name or --id. Find the drive target with list-disks, then supply that --target, the --pool containing the ISO and its --volume name. The volume name is not an image ID or a host path.\nThis changes the drive’s media; it does not create a drive, install an operating system or change boot order. For a stopped machine without a CD drive, modify-system --enable-live can add one. Set the desired boot device separately with modify-system --boot.\nSupported guests can change media while running. The command waits for the hardware job unless --no-wait is supplied. Use eject-media to remove the media without deleting its storage volume.\ncloudmin insert-media --name guest.example.com --target sda --pool \\ default --volume installer.iso Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name. --pool ID|name: Destination storage pool ID or name. --target value: CD/DVD target. --volume value: ISO volume name.","heading":"Inserts an ISO in an existing CD/DVD drive","pageTitle":"insert-media","permalink":"https://cloudmin.com/docs/development/api-programs/insert-media/#inserts-an-iso-in-an-existing-cddvd-drive","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"eject-media","permalink":"https://cloudmin.com/docs/development/api-programs/eject-media/","section":"docs","summary":"","title":"eject-media"},{"content":"cloudmin eject-media [--multiline | --json] [--no-wait] (--name name | --id uuid) --target value Ejects the media from the CD/DVD target on the machine selected by --name or --id. Find the target with list-disks. The drive stays attached, and the ISO volume remains in its storage pool for later use.\nThis does not detach a writable disk or change the saved boot order. Supported guests can eject media while running. The command waits for the hardware job by default; --no-wait returns the job ID.\ncloudmin eject-media --name guest.example.com --target sda Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name. --target value: CD/DVD target.","heading":"Ejects media without removing the drive","pageTitle":"eject-media","permalink":"https://cloudmin.com/docs/development/api-programs/eject-media/#ejects-media-without-removing-the-drive","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"list-interfaces","permalink":"https://cloudmin.com/docs/development/api-programs/list-interfaces/","section":"docs","summary":"","title":"list-interfaces"},{"content":"cloudmin list-interfaces [--multiline | --json] [--name-only | --id-only] (--name name | --id uuid) Lists saved network interfaces for the machine selected by --name or --id. The default table shows each MAC address, source type, network or bridge, device model and link state. --multiline and --json include available bandwidth and other interface settings.\nInterface commands identify an existing interface by its MAC address, not a guest name such as eth0. --name-only and --id-only therefore both print MAC addresses. Use list-networks to find network choices for adding or moving an interface.\nThese are virtual hardware settings. They do not show or rewrite the guest operating system’s complete network configuration.\ncloudmin list-interfaces --name guest.example.com --multiline cloudmin list-interfaces --id MACHINE_UUID --id-only Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name.","heading":"Lists a virtual machine’s network interfaces","pageTitle":"list-interfaces","permalink":"https://cloudmin.com/docs/development/api-programs/list-interfaces/#lists-a-virtual-machines-network-interfaces","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"add-interface","permalink":"https://cloudmin.com/docs/development/api-programs/add-interface/","section":"docs","summary":"","title":"add-interface"},{"content":"cloudmin add-interface [--multiline | --json] [--no-wait] (--name name | --id uuid) [--mac value] --network ID|name Adds a virtio network interface to the machine selected by --name or --id. --network selects an available virtual network or host bridge from list-networks. It accepts a network key, UUID, unambiguous name or bridge:NAME.\nCloudmin generates a MAC address unless --mac supplies one. The new interface can be attached live when the guest and host support it. The guest may need network configuration for the new device; this command does not rewrite its cloud-init seed or assign an IP address inside it.\nThe command waits for the job by default. --no-wait returns its ID. Use list-interfaces afterward to find the new MAC address and source.\ncloudmin add-interface --name guest.example.com --network default cloudmin add-interface --id MACHINE_UUID --network bridge:br0 Options:\n--id uuid: Source virtual machine UUID. --mac value: Guest MAC address; omitted generates one. --name name: Source virtual machine name. --network ID|name: Network key, UUID or name, or bridge:name.","heading":"Adds a virtio network interface","pageTitle":"add-interface","permalink":"https://cloudmin.com/docs/development/api-programs/add-interface/#adds-a-virtio-network-interface","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"modify-interface","permalink":"https://cloudmin.com/docs/development/api-programs/modify-interface/","section":"docs","summary":"","title":"modify-interface"},{"content":"cloudmin modify-interface [--multiline | --json] [--no-wait] (--name name | --id uuid) [--inbound-kib number] [--link up|down] --mac value [--network ID|name] [--outbound-kib number] Changes the interface identified by --mac on the machine selected by --name or --id. Find the MAC address with list-interfaces. Omitted fields keep their current values; --mac selects the interface and does not change its address.\n--network moves the interface to another available virtual network or host bridge. --link down disconnects its virtual link while retaining the interface; --link up reconnects it. Network changes can interrupt the guest’s connection and may require new addressing inside the guest. Cloudmin does not rewrite guest networking or its cloud-init seed.\n--inbound-kib and --outbound-kib set average bandwidth limits in KiB per second, not kilobits. A value of zero removes that direction’s limit. Live support depends on the interface and network backend.\nThe command waits for the hardware job by default; --no-wait returns its ID. This command does not change the interface model or MAC address.\ncloudmin modify-interface --name guest.example.com --mac \\ 52:54:00:12:34:56 --network bridge:br0 cloudmin modify-interface --name guest.example.com --mac \\ 52:54:00:12:34:56 --inbound-kib 10240 --outbound-kib 10240 Options:\n--id uuid: Source virtual machine UUID. --inbound-kib number: Inbound average KiB/s; zero removes the limit. --link up|down: Interface link state. --mac value: Guest MAC address; omitted generates one. --name name: Source virtual machine name. --network ID|name: Network key, UUID or name, or bridge:name. --outbound-kib number: Outbound average KiB/s; zero removes the limit.","heading":"Changes an interface’s network, link or bandwidth","pageTitle":"modify-interface","permalink":"https://cloudmin.com/docs/development/api-programs/modify-interface/#changes-an-interfaces-network-link-or-bandwidth","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"delete-interface","permalink":"https://cloudmin.com/docs/development/api-programs/delete-interface/","section":"docs","summary":"","title":"delete-interface"},{"content":"cloudmin delete-interface [--multiline | --json] [--no-wait] (--name name | --id uuid) --mac value Removes the interface identified by --mac from the machine selected by --name or --id. Use list-interfaces to find its MAC address. This removes the virtual device; it does not delete the host network or bridge.\nRemoving an interface can disconnect the guest, including an SSH session using that interface. To disconnect it temporarily while keeping its configuration, use modify-interface --link down instead. Guest network configuration is not rewritten automatically.\nSupported devices can be removed live. The command waits for the hardware job unless --no-wait is supplied. If live removal fails or is interrupted, inspect the job before retrying; the guest may acknowledge the removal later.\ncloudmin delete-interface --name guest.example.com --mac 52:54:00:12:34:56 Options:\n--id uuid: Source virtual machine UUID. --mac value: Guest MAC address; omitted generates one. --name name: Source virtual machine name.","heading":"Removes a network interface","pageTitle":"delete-interface","permalink":"https://cloudmin.com/docs/development/api-programs/delete-interface/#removes-a-network-interface","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"list-snapshots","permalink":"https://cloudmin.com/docs/development/api-programs/list-snapshots/","section":"docs","summary":"","title":"list-snapshots"},{"content":"cloudmin list-snapshots [--multiline | --json] [--name-only | --id-only] [--name name | --id uuid] With no machine selector, lists snapshots across the host. Supply --name or --id to limit the list to one virtual machine. --id is the machine UUID; a restore point’s own identifier is passed as --snapshot to restore or delete commands.\nThe default table shows snapshot ID, machine, label, state and creation time. --multiline or --json provides detailed records. --id-only and --name-only both print snapshot IDs, since labels need not be unique.\nCloudmin can show externally created snapshots, but it may not support restoring or deleting them. Cloudmin-managed snapshots contain disk state and saved hardware configuration, not running memory. They remain on the host’s storage and do not replace backups stored elsewhere.\ncloudmin list-snapshots cloudmin list-snapshots --name guest.example.com --multiline cloudmin list-snapshots --id MACHINE_UUID --id-only Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name.","heading":"Lists snapshots for the host or one virtual machine","pageTitle":"list-snapshots","permalink":"https://cloudmin.com/docs/development/api-programs/list-snapshots/#lists-snapshots-for-the-host-or-one-virtual-machine","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"create-snapshot","permalink":"https://cloudmin.com/docs/development/api-programs/create-snapshot/","section":"docs","summary":"","title":"create-snapshot"},{"content":"cloudmin create-snapshot [--multiline | --json] [--no-wait] (--name name | --id uuid) [--desc value] --label value [--mode prepared|unprepared] [--restart] [--shutdown] Creates a disk restore point for the machine selected by --name or --id. --label is required; --desc adds an optional description. The label describes the restore point, while its generated ID is used for later restore and deletion.\nThe default --mode prepared uses the guest agent to freeze filesystems briefly when the machine is running. --shutdown permits a clean shutdown when the agent is unavailable. It does not force a shutdown when agent preparation is available. A stopped guest does not need an agent. Add --restart to start the machine after a successful snapshot if it was stopped for the operation.\n--mode unprepared captures a running guest’s disks without freezing filesystems. The captured data is crash-consistent: applications may need recovery when it is restored, as they would after a sudden power loss. Neither mode saves running memory or external services. Filesystem freezing does not replace application-specific backup steps.\nSnapshots support private raw or QCOW2 files and managed LVM disks. A snapshot cannot mix file and LVM disks. Cloudmin limits managed restore points to 20 per machine. Snapshot history restricts disk attachment, removal and growth until that history is removed.\nLive LVM snapshots briefly pause the guest and require direct I/O or synchronous disk caching. Disks created by Cloudmin use direct I/O. Standard LVM snapshots reserve space for a full disk’s changes, while thin snapshots share their pool. Restoring an LVM snapshot requires temporary space under /var/tmp for the largest disk’s full capacity plus 256 MiB.\nThe command waits for the job by default; --no-wait returns its ID. Find the completed restore point with list-snapshots. Snapshot layers use the same storage as the guest, so maintain separate backups for host or disk failure.\ncloudmin create-snapshot --name guest.example.com --label before-upgrade cloudmin create-snapshot --id MACHINE_UUID --label maintenance \\ --shutdown --restart Options:\n--desc value: Description. --id uuid: Source virtual machine UUID. --label value: Snapshot label. --mode prepared|unprepared: Snapshot preparation mode. --name name: Source virtual machine name. --restart: Start after success. --shutdown: Permit clean shutdown if the guest agent is unavailable.","heading":"Creates a disk snapshot","pageTitle":"create-snapshot","permalink":"https://cloudmin.com/docs/development/api-programs/create-snapshot/#creates-a-disk-snapshot","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"restore-snapshot","permalink":"https://cloudmin.com/docs/development/api-programs/restore-snapshot/","section":"docs","summary":"","title":"restore-snapshot"},{"content":"cloudmin restore-snapshot [--multiline | --json] [--no-wait] (--name name | --id uuid) [--restart] [--shutdown] --snapshot value --yes Restores the machine selected by --name or --id to the restore point identified by --snapshot. Use list-snapshots to obtain that ID. --yes confirms replacing current disk contents and saved hardware settings with the snapshot’s state.\nThe machine must be stopped, or --shutdown must permit a clean shutdown first. Add --restart to start it after a successful restore. Without that flag, it remains stopped. A failed clean shutdown does not become a forced power-off.\nThe restore does not resume the old running memory state. Changes made after the restore point can be lost, including files and application data. Other restore points are retained, but only supported Cloudmin-managed history can be restored.\nThe command waits for the background job by default. --no-wait returns its ID. After success, inspect the guest and its applications before treating the restored service as ready.\ncloudmin restore-snapshot --name guest.example.com --snapshot \\ SNAPSHOT_ID --yes cloudmin restore-snapshot --id MACHINE_UUID --snapshot SNAPSHOT_ID \\ --shutdown --restart --yes Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name. --restart: Start after restoring. --shutdown: Permit clean shutdown before restoring. --snapshot value: Snapshot ID. --yes: Confirm this operation.","heading":"Restores a saved snapshot","pageTitle":"restore-snapshot","permalink":"https://cloudmin.com/docs/development/api-programs/restore-snapshot/#restores-a-saved-snapshot","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"delete-snapshot","permalink":"https://cloudmin.com/docs/development/api-programs/delete-snapshot/","section":"docs","summary":"","title":"delete-snapshot"},{"content":"cloudmin delete-snapshot [--multiline | --json] [--no-wait] (--name name | --id uuid) --snapshot value --yes Removes the restore point identified by --snapshot from the machine selected by --name or --id. --yes is required. Use list-snapshots to select the snapshot ID, rather than its label.\nDeleting a file snapshot merges its disk layers. Deleting an LVM snapshot removes its saved volumes. Both preserve the machine’s current disk contents and hardware settings. The selected restore point is no longer available afterward.\nHistory dependencies can prevent deletion, and external snapshot history cannot be changed through this command. Merges may take time and require free space. The command waits for the job unless --no-wait is supplied. If a merge is interrupted, use get-job and recover-job; deleting layer files by hand can damage the remaining disk chain.\ncloudmin delete-snapshot --name guest.example.com --snapshot SNAPSHOT_ID \\ --yes Options:\n--id uuid: Source virtual machine UUID. --name name: Source virtual machine name. --snapshot value: Snapshot ID. --yes: Confirm this operation.","heading":"Deletes a snapshot while keeping current disk data","pageTitle":"delete-snapshot","permalink":"https://cloudmin.com/docs/development/api-programs/delete-snapshot/#deletes-a-snapshot-while-keeping-current-disk-data","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"list-backups","permalink":"https://cloudmin.com/docs/development/api-programs/list-backups/","section":"docs","summary":"","title":"list-backups"},{"content":"cloudmin list-backups [--multiline | --json] [--name-only | --id-only] Lists completed backup archives recorded by this Cloudmin host. The table includes backup job ID, source machine name, creation time, archive size and destination. Use the ID with inspect-backup --backup before restoring.\nThis is the local backup inventory, not a scan of every destination. An archive removed outside Cloudmin can still have a record here; inspection verifies that it is available and usable. Backups created on another host can be inspected by supplying their destination and filename directly.\n--multiline and --json show detailed records without destination credentials. --name-only prints source machine names, which can repeat across backups. --id-only prints backup job IDs, not virtual machine UUIDs.\ncloudmin list-backups --multiline cloudmin list-backups --id-only","heading":"Lists completed backup archives","pageTitle":"list-backups","permalink":"https://cloudmin.com/docs/development/api-programs/list-backups/#lists-completed-backup-archives","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"backup-systems","permalink":"https://cloudmin.com/docs/development/api-programs/backup-systems/","section":"docs","summary":"","title":"backup-systems"},{"content":"cloudmin backup-systems [--multiline | --json] [--no-wait] (--name name | --id uuid) [--compression | --no-compression] [--dest-access-file file|-] [--dest-account value] [--dest-bucket value] [--dest-ca-file value] [--dest-endpoint value] [--dest-host value] [--dest-key-file value] --dest-mode local|ssh|s3|gcs|azure|bb|dropbox|drive [--dest-password-file file|-] --dest-path value [--dest-port number] [--dest-project value] [--dest-refresh-token-file file|-] [--dest-region value] [--dest-secret-file file|-] [--dest-session-token-file file|-] [--dest-subscription value] [--dest-user value] [--shutdown] Creates one complete virtual machine backup per command. Select the machine with --name or --id. The archive includes writable disks, the saved hardware definition and supported firmware state. It retains the guest’s identity and login settings for restoration.\nGuest preparation and storage A running guest normally needs a responding agent to freeze filesystems while Cloudmin takes a temporary snapshot. --shutdown instead stops it cleanly for copying and restarts it afterward. A source that was already stopped stays stopped. Temporary file snapshot layers are merged back before completion; temporary LVM snapshots are removed.\n--compression enables gzip; the default is an uncompressed archive. Allow space for disk copies, archive staging and temporary growth on the source. A filesystem-consistent backup does not coordinate transactions with other machines or replace application-specific backup steps.\nLocal and SSH destinations --dest-mode local writes to the absolute directory given by --dest-path. A mounted NFS or other network filesystem can be used as a local destination; mount and check it before starting the backup.\n--dest-mode ssh transfers by SFTP. Supply --dest-host, --dest-user, an absolute --dest-path, and either --dest-password-file or --dest-key-file. The SSH port defaults to 22. A key option gives the path of a private key on the Cloudmin host; password options read the contents of a file. Unknown or changed server host keys must first be approved in Cloudmin’s backup form.\nS3 destinations --dest-mode s3 uses --dest-bucket for the bucket and --dest-path for an object prefix. Supply the access key ID with --dest-access-file and the secret key with --dest-secret-file. Temporary credentials also use --dest-session-token-file.\n--dest-region selects the region. --dest-endpoint selects an S3-compatible HTTPS endpoint; it must not include credentials or a path. --dest-ca-file supplies a CA bundle when needed. Supply provider credentials through the file options; the backup does not use the host’s cloud login settings.\nAdditional cloud destinations Cloudmin Pro also supports gcs, azure, bb, dropbox and drive. For Google Cloud Storage, Google Drive and Dropbox, the access and secret files contain the OAuth client ID or app key and client secret. Supply --dest-refresh-token-file as well. Google Cloud Storage uses a bucket and object prefix; Drive and Dropbox use --dest-path as the folder.\nFor Azure, --dest-account is the storage account, --dest-secret-file supplies its storage key, and --dest-bucket is the container. For Backblaze B2, --dest-access-file supplies the application key ID and --dest-secret-file supplies the application key; also select the bucket. Object stores use --dest-path as the prefix within that bucket or container.\nProgress and recovery The command waits for the job by default. --no-wait returns its ID, and --json returns the final job record, or the initial record with --no-wait, without progress text. Completed backups appear in list-backups. If copying or transfer fails, inspect the job and use recover-job when cleanup is pending to finish restoring the source.\ncloudmin backup-systems --name guest.example.com --dest-mode local \\ --dest-path /srv/backups --compression cloudmin backup-systems --name guest.example.com --dest-mode ssh \\ --dest-host backup.example.com --dest-user backup --dest-path \\ /srv/backups --dest-key-file /root/backup-key cloudmin backup-systems --id MACHINE_UUID --dest-mode s3 --dest-bucket \\ example-backups --dest-path cloudmin --dest-access-file \\ /root/s3-access --dest-secret-file /root/s3-secret --no-wait Options:\n--compression | --no-compression: Compress the archive with gzip. --dest-access-file file|-: Destination access file, or - for stdin. --dest-account value: Backup destination account. --dest-bucket value: Backup destination bucket. --dest-ca-file value: Backup destination ca-file. --dest-endpoint value: Backup destination endpoint. --dest-host value: Backup destination host. --dest-key-file value: Backup destination key-file. --dest-mode local|ssh|s3|gcs|azure|bb|dropbox|drive: Backup destination mode. --dest-password-file file|-: Destination password file, or - for stdin. --dest-path value: Backup destination path. --dest-port number: Backup destination port. --dest-project value: Backup destination project. --dest-refresh-token-file file|-: Destination refresh-token file, or - for stdin. --dest-region value: Backup destination region. --dest-secret-file file|-: Destination secret file, or - for stdin. --dest-session-token-file file|-: Destination session-token file, or - for stdin. --dest-subscription value: Backup destination subscription. --dest-user value: Backup destination user. --id uuid: Source virtual machine UUID. --name name: Source virtual machine name. --shutdown: Stop cleanly while copying and restart afterward.","heading":"Creates a full backup of one virtual machine","pageTitle":"backup-systems","permalink":"https://cloudmin.com/docs/development/api-programs/backup-systems/#creates-a-full-backup-of-one-virtual-machine","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"inspect-backup","permalink":"https://cloudmin.com/docs/development/api-programs/inspect-backup/","section":"docs","summary":"","title":"inspect-backup"},{"content":"cloudmin inspect-backup [--multiline | --json] [--no-wait] [--backup value] [--dest-access-file file|-] [--dest-account value] [--dest-bucket value] [--dest-ca-file value] [--dest-endpoint value] [--dest-host value] [--dest-key-file value] [--dest-mode local|ssh|s3|gcs|azure|bb|dropbox|drive] [--dest-password-file file|-] [--dest-path value] [--dest-port number] [--dest-project value] [--dest-refresh-token-file file|-] [--dest-region value] [--dest-secret-file file|-] [--dest-session-token-file file|-] [--dest-subscription value] [--dest-user value] [--filename value] Retrieves and verifies a backup before restoration. --backup selects a backup job ID from list-backups and uses its saved destination. To inspect an archive that is not in this host’s inventory, supply destination options and --filename instead. The filename is the archive’s name within the destination, not the destination directory itself.\nThe destination fields have the same meaning as in backup-systems, including credential files and SSH host-key approval. Supported archives are the complete backup files produced by Cloudmin, including gzip-compressed archives.\nInspection checks the manifest, checksums, disk information and saved machine definition. It does not create or start a virtual machine. The archive is downloaded or staged locally, so sufficient temporary space is required.\nBy default, waits for the inspection job. --no-wait returns its ID for get-job. Pass the completed inspection job ID, not the original backup ID, to restore-systems --inspection. Inspection downloads expire after one day; inspect the archive again if the staged copy is no longer available.\ncloudmin inspect-backup --backup BACKUP_JOB_ID --json cloudmin inspect-backup --dest-mode local --dest-path /srv/backups \\ --filename guest.tar.gz Options:\n--backup value: Backup job ID from the local inventory. --dest-access-file file|-: Destination access file, or - for stdin. --dest-account value: Backup destination account. --dest-bucket value: Backup destination bucket. --dest-ca-file value: Backup destination ca-file. --dest-endpoint value: Backup destination endpoint. --dest-host value: Backup destination host. --dest-key-file value: Backup destination key-file. --dest-mode local|ssh|s3|gcs|azure|bb|dropbox|drive: Backup destination mode. --dest-password-file file|-: Destination password file, or - for stdin. --dest-path value: Backup destination path. --dest-port number: Backup destination port. --dest-project value: Backup destination project. --dest-refresh-token-file file|-: Destination refresh-token file, or - for stdin. --dest-region value: Backup destination region. --dest-secret-file file|-: Destination secret file, or - for stdin. --dest-session-token-file file|-: Destination session-token file, or - for stdin. --dest-subscription value: Backup destination subscription. --dest-user value: Backup destination user. --filename value: Archive filename in the destination.","heading":"Verifies a backup archive before restoring it","pageTitle":"inspect-backup","permalink":"https://cloudmin.com/docs/development/api-programs/inspect-backup/#verifies-a-backup-archive-before-restoring-it","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"restore-systems","permalink":"https://cloudmin.com/docs/development/api-programs/restore-systems/","section":"docs","summary":"","title":"restore-systems"},{"content":"cloudmin restore-systems [--multiline | --json] [--no-wait] --inspection value --pool ID|name --yes Restores one backup that has already completed inspect-backup. --inspection is the inspection job ID, and --pool selects the destination storage pool. --yes confirms restoring the archived machine and disks.\nRestoration preserves the original machine name, UUID, MAC addresses, guest credentials and supported firmware state. It refuses a conflicting existing name or UUID even if that machine is stopped. This command is for recovering a machine; use clone-system when you need another machine with a new identity.\nThe destination host must support the archive’s architecture, firmware and saved network sources. Ensure those networks and bridges are available and that the pool has enough space. The restored machine is left stopped with automatic startup disabled, so its configuration can be checked before it joins the network.\nThe command waits for the restore job by default. --no-wait returns its ID. After success, use get-system, then start-system when ready. If restoration or cleanup is interrupted, inspect the job and use recover-job rather than submitting duplicate restores.\ncloudmin restore-systems --inspection INSPECTION_JOB_ID --pool default \\ --yes cloudmin restore-systems --inspection INSPECTION_JOB_ID --pool default \\ --yes --no-wait Options:\n--inspection value: Completed inspection job ID. --pool ID|name: Destination storage pool ID or name. --yes: Confirm this operation.","heading":"Restores an inspected backup with its original identity","pageTitle":"restore-systems","permalink":"https://cloudmin.com/docs/development/api-programs/restore-systems/#restores-an-inspected-backup-with-its-original-identity","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"list-images","permalink":"https://cloudmin.com/docs/development/api-programs/list-images/","section":"docs","summary":"","title":"list-images"},{"content":"cloudmin list-images [--multiline | --json] [--name-only | --id-only] Lists ready imported images and available catalogue images that can be selected for machine creation. The default table shows ID, name and format. --multiline or --json includes the available image metadata and compatibility information.\nImported images use their stored image ID. Catalogue entries use catalogue:IMAGE_ID; create-system downloads or reuses the selected catalogue image as part of creation. An unambiguous display name is also accepted by image-selection options, but use the ID when names are duplicated.\n--name-only prints display names and --id-only prints selectable IDs. Catalogue entries can appear before their images are downloaded. Additional disks created with create-disk --image need a ready imported image, while create-system can use either source.\ncloudmin list-images --multiline cloudmin list-images --id-only cloudmin list-images --json","heading":"Lists imported and catalogue images","pageTitle":"list-images","permalink":"https://cloudmin.com/docs/development/api-programs/list-images/#lists-imported-and-catalogue-images","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"list-networks","permalink":"https://cloudmin.com/docs/development/api-programs/list-networks/","section":"docs","summary":"","title":"list-networks"},{"content":"cloudmin list-networks [--multiline | --json] [--name-only | --id-only] Lists available virtual networks and host bridges that Cloudmin offers for guest network interfaces. The default table shows a selection key, name, type and forwarding mode. Use it before create-system, add-interface or modify-interface.\nA libvirt network key has the form network:UUID; a host bridge uses bridge:NAME. --id-only prints these selection keys, not just bare UUIDs. --name-only prints display names. Network options also accept a UUID or an unambiguous name.\n--multiline and --json show additional reported network details. Selecting a network connects an interface to its existing configuration; this command does not create networks, configure host bridges or assign addresses inside an existing guest.\ncloudmin list-networks --multiline cloudmin list-networks --id-only","heading":"Lists usable virtual networks and host bridges","pageTitle":"list-networks","permalink":"https://cloudmin.com/docs/development/api-programs/list-networks/#lists-usable-virtual-networks-and-host-bridges","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"get-host","permalink":"https://cloudmin.com/docs/development/api-programs/get-host/","section":"docs","summary":"","title":"get-host"},{"content":"cloudmin get-host [--multiline | --json] Shows host capabilities reported by Cloudmin, including relevant virtualization and image-handling support. Use this to check the host side of a creation or management requirement before choosing guest settings.\n--multiline expands the capability fields, and --json returns structured data for scripts.\nUse list-pools, list-networks and list-images for selectable resources. cloudmin api options returns the complete raw options response, including templates and plans, when a script needs those choices.\ncloudmin get-host --multiline cloudmin get-host --json","heading":"Shows host capabilities","pageTitle":"get-host","permalink":"https://cloudmin.com/docs/development/api-programs/get-host/#shows-host-capabilities","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"create-image","permalink":"https://cloudmin.com/docs/development/api-programs/create-image/","section":"docs","summary":"","title":"create-image"},{"content":"cloudmin create-image [--multiline | --json] [--no-wait] (--name name | --id uuid) [--clean-credentials yes|no] --image-name value --pool ID|name [--shutdown] Captures a reusable image from the machine selected by --name or --id. --image-name names the new image and --pool selects its storage pool. This operation requires Cloudmin Pro. Use backup-systems instead to preserve a complete machine for restoration.\nSource requirements The source must have a supported Linux installation with enabled cloud-init and one writable system disk. Detach installation media and additional read-only data disks first; Cloudmin’s own seed disk is omitted automatically. Unsupported devices or disk layouts are rejected before capture.\nA running source needs a responding guest agent for a filesystem freeze and temporary snapshot. Alternatively, --shutdown stops it cleanly while copying and restarts it afterward. A source that was already stopped stays stopped. Cleanup changes are made to the independent image copy, not the source disk.\nAccount cleanup --clean-credentials yes is the default. It removes password hashes, SSH credentials and default shell history files for all local accounts in the image, including root. Accounts, ownership, permissions and application data remain. --clean-credentials no retains those login credentials and histories.\nCustom history locations, application credentials and other secrets are not all discoverable, so review the image before sharing it. New-machine creation configures its selected administrator’s access separately.\nIdentity and licensing Regardless of account cleanup, Cloudmin resets cloud-init state, machine and host IDs, SSH host keys and cached network identity on the copy. Each new machine receives its own identity and network settings. Copied Virtualmin Pro license credentials are also removed locally without contacting license servers; each new machine needs its own license or a manual downgrade to GPL.\nResult The image retains the source disk’s capacity, so new machines need a disk at least that large. The command waits for the capture job by default; --no-wait returns its ID. On success, the image appears in list-images and can be selected by create-system.\nIf capture is interrupted, inspect the job and use recover-job when needed to finish restoring the source and cleaning up incomplete output.\ncloudmin create-image --name source.example.com --image-name base-server \\ --pool default cloudmin create-image --id MACHINE_UUID --image-name private-copy --pool \\ default --clean-credentials no --shutdown Options:\n--clean-credentials yes|no: Remove all local accounts’ login credentials; defaults to yes. --id uuid: Source virtual machine UUID. --image-name value: New image name. --name name: Source virtual machine name. --pool ID|name: Destination storage pool ID or name. --shutdown: Stop cleanly while copying and restart afterward.","heading":"Creates a reusable image from a virtual machine (Cloudmin Pro)","pageTitle":"create-image","permalink":"https://cloudmin.com/docs/development/api-programs/create-image/#creates-a-reusable-image-from-a-virtual-machine-cloudmin-pro","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"list-jobs","permalink":"https://cloudmin.com/docs/development/api-programs/list-jobs/","section":"docs","summary":"","title":"list-jobs"},{"content":"cloudmin list-jobs [--multiline | --json] [--name-only | --id-only] Lists recent and unfinished jobs recorded by Cloudmin. Jobs include creation, software setup, hardware changes, cloning, snapshots, image capture and backup operations. The default table shows ID, name, operation, state and phase.\nUse --multiline for details, or --json for scripts. Results exclude private requests, credentials and recovery backups. --id-only prints job IDs for later get-job, cancel-job or recover-job calls. --name-only prints job names, which need not be unique.\nAn unfinished job can reserve a machine or storage resource and block another change. Check its phase, error and cleanup status before resubmitting an operation. Leaving a terminal or timing out while waiting does not cancel a worker.\ncloudmin list-jobs cloudmin list-jobs --multiline cloudmin list-jobs --id-only","heading":"Lists recent and unfinished jobs","pageTitle":"list-jobs","permalink":"https://cloudmin.com/docs/development/api-programs/list-jobs/#lists-recent-and-unfinished-jobs","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"get-job","permalink":"https://cloudmin.com/docs/development/api-programs/get-job/","section":"docs","summary":"","title":"get-job"},{"content":"cloudmin get-job [--multiline | --json] --job value Reads the current public record for --job. This is a job ID returned by a submitted operation or list-jobs, not a virtual machine UUID. It reports state, phase, recorded events, errors and available cleanup information.\nThe command reads once and returns; it does not keep following the worker. Use it after submitting an operation with --no-wait or after losing a terminal connection. --multiline expands details, while --json is suitable for polling from a script.\nA successful status read does not itself mean the underlying job succeeded. Check the returned job state and error. A failed or cancelled job with cleanup pending may still hold resources; recover-job can retry that cleanup. For bridge changes, use get-bridge-status instead.\ncloudmin get-job --job JOB_ID --multiline cloudmin get-job --job JOB_ID --json Options:\n--job value: Job ID.","heading":"Shows a job’s current progress","pageTitle":"get-job","permalink":"https://cloudmin.com/docs/development/api-programs/get-job/#shows-a-jobs-current-progress","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"cancel-job","permalink":"https://cloudmin.com/docs/development/api-programs/cancel-job/","section":"docs","summary":"","title":"cancel-job"},{"content":"cloudmin cancel-job [--multiline | --json] [--no-wait] [--cleanup] --job value [--yes] Requests cancellation of the unfinished job identified by --job. Cancellation takes effect at a safe point in the worker; it is not an immediate process kill. Copying and backup operations may need to restore source disk state before releasing their reservations.\nStarted hardware changes cannot be cancelled after their first write. If such a change fails, use recover-job. Completed, failed or already cancelled jobs cannot receive a new cancellation request.\nDuring guest software setup, ordinary cancellation leaves the created machine and changes already made inside it. --cleanup --yes explicitly requests removal of an eligible unfinished creation and its owned resources. This is not a general command for deleting a completed virtual machine.\nBy default, waits for cancellation and any cleanup. --no-wait returns immediately. Inspect the job afterward; a cancellation request is not proof that cleanup has finished. recover-job retries pending cleanup if the worker could not complete it.\ncloudmin cancel-job --job JOB_ID cloudmin cancel-job --job JOB_ID --cleanup --yes Options:\n--cleanup: Also remove an unfinished creation; requires –yes. --job value: Job ID. --yes: Confirm this operation.","heading":"Requests cancellation at the next safe point","pageTitle":"cancel-job","permalink":"https://cloudmin.com/docs/development/api-programs/cancel-job/#requests-cancellation-at-the-next-safe-point","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"recover-job","permalink":"https://cloudmin.com/docs/development/api-programs/recover-job/","section":"docs","summary":"","title":"recover-job"},{"content":"cloudmin recover-job [--multiline | --json] [--no-wait] --job value Reattaches or restarts work for the job identified by --job, including retrying cleanup marked as pending. It uses the original job’s recorded operation and resource identities rather than submitting a new request.\nThe result depends on the operation. Recovery can finish an interrupted hardware write, restore a source after copying, or remove incomplete creation resources. It checks the recorded state before proceeding and refuses unrelated changes. It cannot shrink a disk back after growth or recover data that was permanently deleted.\nA failed job without pending cleanup is not automatically retried as a fresh operation. Likewise, recovery is not a way to rerun completed guest setup scripts. Inspect get-job --multiline for the failure and cleanup state first.\nBy default, waits until work or cleanup finishes. --no-wait returns immediately. Successful cleanup can leave the original job failed or cancelled with no cleanup pending; that records the original outcome while releasing its resources.\ncloudmin recover-job --job JOB_ID cloudmin recover-job --job JOB_ID --no-wait Options:\n--job value: Job ID.","heading":"Resumes interrupted work or retries cleanup","pageTitle":"recover-job","permalink":"https://cloudmin.com/docs/development/api-programs/recover-job/#resumes-interrupted-work-or-retries-cleanup","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"discard-job","permalink":"https://cloudmin.com/docs/development/api-programs/discard-job/","section":"docs","summary":"","title":"discard-job"},{"content":"cloudmin discard-job [--multiline | --json] --job value Abandons the remaining edits of an eligible failed settings-update job while keeping disk growth that already completed. --job identifies that update. Use this only when you want to stop recovery of the remaining edits; recover-job attempts to finish them instead.\nCloudmin first checks that the original hardware definition is unchanged. It removes new disks allocated by the job only after verifying their identity and that nothing uses them. Completed disk growth remains because it cannot be undone safely.\nWhen those checks pass, the job releases its reservation so the machine can be edited again. Conflicting changes or uncertain ownership block the operation. This command does not delete job history, cancel an active worker or undo other operations.\ncloudmin discard-job --job JOB_ID Options:\n--job value: Job ID.","heading":"Keeps completed disk growth and discards the remaining failed edits","pageTitle":"discard-job","permalink":"https://cloudmin.com/docs/development/api-programs/discard-job/#keeps-completed-disk-growth-and-discards-the-remaining-failed-edits","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"list-pools","permalink":"https://cloudmin.com/docs/development/api-programs/list-pools/","section":"docs","summary":"","title":"list-pools"},{"content":"cloudmin list-pools [--multiline | --json] [--name-only | --id-only] Lists all registered storage pools, including stopped pools and LVM-thin destinations. The table shows each pool’s name, UUID, backend, active state and available space. Free space is unavailable for inactive pools.\nUse --multiline for pool settings, volumes and references, or --json for the full records. --name-only and --id-only print one name or UUID per line. Creating a virtual machine requires an active pool with a supported backend.\ncloudmin list-pools cloudmin list-pools --json","heading":"Lists active and inactive storage pools","pageTitle":"list-pools","permalink":"https://cloudmin.com/docs/development/api-programs/list-pools/#lists-active-and-inactive-storage-pools","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"list-volumes","permalink":"https://cloudmin.com/docs/development/api-programs/list-volumes/","section":"docs","summary":"","title":"list-volumes"},{"content":"cloudmin list-volumes [--multiline | --json] [--name-only | --id-only] [--pool ID|name] Lists volumes from active storage pools, with their pool, capacity, allocated space and owners. --pool accepts a UUID or a name that identifies exactly one pool, including LVM-thin destinations such as guests/thin. Omit it to list volumes across pools. Stopped pools cannot report their volumes.\n--multiline and --json include ownership records and any reason deletion is blocked. A stopped virtual machine, imported image, snapshot or dependent disk can keep a volume in use. Cloudmin also blocks deletion when it cannot check these references. Listing volumes does not change storage.\ncloudmin list-volumes --pool guests/thin cloudmin list-volumes --json Options:\n--pool ID|name: Pool ID or unambiguous name.","heading":"Lists storage volumes and their owners","pageTitle":"list-volumes","permalink":"https://cloudmin.com/docs/development/api-programs/list-volumes/#lists-storage-volumes-and-their-owners","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"list-volume-groups","permalink":"https://cloudmin.com/docs/development/api-programs/list-volume-groups/","section":"docs","summary":"","title":"list-volume-groups"},{"content":"cloudmin list-volume-groups [--multiline | --json] [--name-only | --id-only] Lists existing local LVM volume groups that have no libvirt registration. Groups already registered are excluded even when their pool is stopped. Thin pools appear as storage destinations after their parent group is registered.\nCreate and extend groups with Webmin’s Logical Volume Management module or the LVM tools. This command lists groups without allocating or formatting disks. If discovery fails, it reports an error.\ncloudmin list-volume-groups","heading":"Lists LVM volume groups available for registration","pageTitle":"list-volume-groups","permalink":"https://cloudmin.com/docs/development/api-programs/list-volume-groups/#lists-lvm-volume-groups-available-for-registration","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"create-pool","permalink":"https://cloudmin.com/docs/development/api-programs/create-pool/","section":"docs","summary":"","title":"create-pool"},{"content":"cloudmin create-pool [--multiline | --json] [--autostart | --no-autostart] [--group value] --name value [--path value] Registers a storage destination and starts it immediately. Supply a unique --name and exactly one of --path or --group. Directory paths must be absolute, have an existing parent and not overlap another pool. A missing directory is created; existing files and permissions are preserved.\n--group names an existing LVM volume group. Registration does not format disks or create logical volumes. Its thin pools become separate destinations, named POOL/THIN_POOL. Startup with the host is enabled by default; use --no-autostart to disable it.\nThe command finishes before returning and shows the new pool record with --json. Running it again with the same name or volume group reports a duplicate registration.\ncloudmin create-pool --name extra --path /var/lib/libvirt/extra cloudmin create-pool --name guests --group vg_guests --no-autostart Options:\n--autostart | --no-autostart: Start the pool at host boot; defaults to enabled. --group value: Existing LVM volume group; cannot be used with –path. --name value: New pool name. --path value: Absolute directory path; cannot be used with –group.","heading":"Registers a directory or an existing LVM volume group","pageTitle":"create-pool","permalink":"https://cloudmin.com/docs/development/api-programs/create-pool/#registers-a-directory-or-an-existing-lvm-volume-group","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"start-pool","permalink":"https://cloudmin.com/docs/development/api-programs/start-pool/","section":"docs","summary":"","title":"start-pool"},{"content":"cloudmin start-pool [--multiline | --json] --pool ID|name Starts a stopped local directory pool with a saved registration. --pool accepts its UUID or a name that identifies exactly one pool. This includes pools unavailable for machine creation. The command reads the pool’s revision before starting it. If its settings change in the meantime, run the command again.\nStarting does not create or format the directory or change its start-at-boot setting. This command does not start LVM pools.\ncloudmin start-pool --pool extra Options:\n--pool ID|name: Pool ID or unambiguous name.","heading":"Starts a directory pool","pageTitle":"start-pool","permalink":"https://cloudmin.com/docs/development/api-programs/start-pool/#starts-a-directory-pool","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"stop-pool","permalink":"https://cloudmin.com/docs/development/api-programs/stop-pool/","section":"docs","summary":"","title":"stop-pool"},{"content":"cloudmin stop-pool [--multiline | --json] --pool ID|name Stops a local directory pool while keeping its saved registration and all files. Stop virtual machines using the pool and finish or cancel pending operations and image imports first. Start the pool again before using it for new storage operations.\nThe command checks the current revision and finishes before returning. It does not stop LVM pools. Use unregister-pool --stop to stop an unused LVM pool and remove its registration after checking for host and guest use.\ncloudmin stop-pool --pool extra Options:\n--pool ID|name: Pool ID or unambiguous name.","heading":"Stops a directory pool without deleting its files","pageTitle":"stop-pool","permalink":"https://cloudmin.com/docs/development/api-programs/stop-pool/#stops-a-directory-pool-without-deleting-its-files","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"set-pool-autostart","permalink":"https://cloudmin.com/docs/development/api-programs/set-pool-autostart/","section":"docs","summary":"","title":"set-pool-autostart"},{"content":"cloudmin set-pool-autostart [--multiline | --json] --enabled yes|no --pool ID|name Changes whether a local directory pool with a saved registration starts with the host. Supply --pool as a UUID or unambiguous name and --enabled yes or --enabled no. This setting does not immediately start or stop the pool.\nThe command reads and checks the current revision before saving. LVM registrations receive their start-at-boot setting during create-pool; this command manages directory pools only.\ncloudmin set-pool-autostart --pool extra --enabled no Options:\n--enabled yes|no: Whether to start at host boot. --pool ID|name: Pool ID or unambiguous name.","heading":"Changes whether a directory pool starts at boot","pageTitle":"set-pool-autostart","permalink":"https://cloudmin.com/docs/development/api-programs/set-pool-autostart/#changes-whether-a-directory-pool-starts-at-boot","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"delete-volume","permalink":"https://cloudmin.com/docs/development/api-programs/delete-volume/","section":"docs","summary":"","title":"delete-volume"},{"content":"cloudmin delete-volume [--multiline | --json] (--review | --yes) --pool ID|name --volume value Permanently deletes one unused volume from an active local directory or LVM destination. Supply --pool and the exact --volume name. --review shows owners and any refusal reason without changing anything or requiring --yes.\nDeletion requires --yes. The command reviews the volume, then sends its revision for a final check under the host storage lock. A replaced volume, new reference or pending operation prevents deletion. Host mounts, swap and Cloudmin snapshots also block deletion. Deleting the volume destroys its data and cannot be undone.\nThe command finishes before returning. To delete several volumes, run it separately for each volume and check each result before continuing.\ncloudmin delete-volume --pool guests/thin --volume unused.raw --review cloudmin delete-volume --pool guests/thin --volume unused.raw --yes Options:\n--pool ID|name: Pool ID or unambiguous name. --review: Show owners and any reason deletion is blocked. --volume value: Exact volume name. --yes: Confirm this operation.","heading":"Deletes an unused storage volume after a review","pageTitle":"delete-volume","permalink":"https://cloudmin.com/docs/development/api-programs/delete-volume/#deletes-an-unused-storage-volume-after-a-review","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"unregister-pool","permalink":"https://cloudmin.com/docs/development/api-programs/unregister-pool/","section":"docs","summary":"","title":"unregister-pool"},{"content":"cloudmin unregister-pool [--multiline | --json] (--review | --yes) --pool ID|name [--stop] Removes the saved libvirt registration for a local directory or LVM pool. Files, logical volumes, volume groups and thin pools are preserved. Supply the parent pool’s UUID or unambiguous name with --pool. LVM-thin destinations cannot be unregistered separately.\n--review shows references and any reason removal is blocked without requiring --yes. Removing the registration requires --yes and repeats the revision and reference checks. References from running or stopped guests, images, snapshots and dependent disks block removal, as do pending operations. Other inactive pools may need to be started so their references can be checked.\nAn active pool requires --stop. For LVM, stopping deactivates every logical volume in the group, including thin volumes. Cloudmin refuses to stop the group if its volumes are mounted, used as swap, open, or used by other block devices outside the group. Register the group again to use it in Cloudmin.\nUse --stop --review to review both steps without changing storage. --stop --yes repeats the checks under the host lock, stops the pool and removes its registration. Without --stop, the pool must already be inactive.\nIf the volume group no longer exists, Cloudmin can remove its inactive registration after checking for references. It must be able to read the LVM inventory and confirm that the group is absent. An active pool or a failed inventory read still blocks removal.\nA failed stop keeps the registration. If stopping succeeds but removing the registration fails, the error says the pool is stopped. Review it again before retrying.\ncloudmin unregister-pool --pool extra --review cloudmin unregister-pool --pool extra --yes cloudmin unregister-pool --pool guests --stop --review cloudmin unregister-pool --pool guests --stop --yes Options:\n--pool ID|name: Directory or parent LVM pool ID or name. --review: Show references and any reason unregistration is blocked. --stop: Stop the unused pool first; LVM deactivates the whole volume group. --yes: Confirm this operation.","heading":"Removes a pool registration and keeps its data","pageTitle":"unregister-pool","permalink":"https://cloudmin.com/docs/development/api-programs/unregister-pool/#removes-a-pool-registration-and-keeps-its-data","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"list-bridges","permalink":"https://cloudmin.com/docs/development/api-programs/list-bridges/","section":"docs","summary":"","title":"list-bridges"},{"content":"cloudmin list-bridges [--multiline | --json] [--name-only | --id-only] Lists host bridges outside libvirt-managed virtual networks. These bridges connect guests to the host’s existing network. Libvirt-managed NAT or routed bridges belong to their virtual networks and are not removal targets here.\nThe default table shows each bridge’s name, whether it is active, its addresses and its ports. --multiline and --json include saved-configuration and dependency details. --name-only and --id-only both print bridge names, such as br0.\nUse remove-bridge --review to see whether a bridge can be removed and what settings would move to its Ethernet port. Active or recent bridge transactions are inspected separately with get-bridge-status.\ncloudmin list-bridges --multiline cloudmin list-bridges --name-only","heading":"Lists host bridges outside libvirt-managed networks","pageTitle":"list-bridges","permalink":"https://cloudmin.com/docs/development/api-programs/list-bridges/#lists-host-bridges-outside-libvirt-managed-networks","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"get-bridge-status","permalink":"https://cloudmin.com/docs/development/api-programs/get-bridge-status/","section":"docs","summary":"","title":"get-bridge-status"},{"content":"cloudmin get-bridge-status [--multiline | --json] [--id value] Shows the current host bridge transaction, including its state and available confirmation or recovery information. Without --id, selects the current transaction. With --id, requires that specific transaction so a stale script does not act on a newer change.\nThe transaction ID is returned by bridge changes; it is not the bridge name or a normal background job ID. The result can be empty when there is no transaction. --json returns structured status for scripts, and --multiline expands human-readable details.\nUse this after a connection interruption or remove-bridge --no-wait. A change awaiting confirmation must be kept with confirm-bridge before its deadline, or it is automatically rolled back. Private recovery files are not included in the response.\ncloudmin get-bridge-status --multiline cloudmin get-bridge-status --id TRANSACTION_ID --json Options:\n--id value: Transaction ID; omitted selects the current transaction.","heading":"Shows the current bridge transaction","pageTitle":"get-bridge-status","permalink":"https://cloudmin.com/docs/development/api-programs/get-bridge-status/#shows-the-current-bridge-transaction","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"remove-bridge","permalink":"https://cloudmin.com/docs/development/api-programs/remove-bridge/","section":"docs","summary":"","title":"remove-bridge"},{"content":"cloudmin remove-bridge [--multiline | --json] [--no-wait] --name value [--review] Removes an unused, saved host bridge with one supported Ethernet port. --name is the bridge name from list-bridges, not a virtual machine name. The bridge’s current addresses, routes and DNS settings move back to its Ethernet port.\nCloudmin supports bridge removal with NetworkManager, Netplan and Debian ifupdown. It refuses unsupported layouts, bridges used by virtual machines or virtual networks, and VLANs or macvlans attached to the bridge or its port. A virtual machine can block removal even when stopped.\n--review checks the bridge and shows the plan without applying network changes. Without that flag, the command checks it again and starts the change. Applying settings can interrupt SSH if the bridge carries the host connection. The recovery worker continues on the host even if that connection drops.\nBy default, waits until the change needs confirmation or has finished. --no-wait returns the initial transaction record instead. The command never confirms automatically. Check the transaction with get-bridge-status, verify connectivity, and use confirm-bridge --id before its deadline to keep the new settings. Otherwise Cloudmin restores the previous settings. rollback-bridge requests that restoration immediately.\ncloudmin remove-bridge --name br0 --review cloudmin remove-bridge --name br0 Options:\n--name value: Host bridge name. --review: Show the removal plan without applying it.","heading":"Moves the bridge’s network settings back to its Ethernet port","pageTitle":"remove-bridge","permalink":"https://cloudmin.com/docs/development/api-programs/remove-bridge/#moves-the-bridges-network-settings-back-to-its-ethernet-port","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"confirm-bridge","permalink":"https://cloudmin.com/docs/development/api-programs/confirm-bridge/","section":"docs","summary":"","title":"confirm-bridge"},{"content":"cloudmin confirm-bridge [--multiline | --json] --id value Keeps the new network settings for the pending bridge transaction identified by --id. Use the transaction ID returned by the change or get-bridge-status, not the bridge name. The transaction must still be awaiting confirmation and within its deadline.\nConfirm only after reconnecting and checking the host’s network access. Cloudmin performs its connectivity checks before accepting confirmation. A confirmed change no longer rolls back automatically when the original deadline passes.\nTo reject the change, use rollback-bridge. Once it is confirmed, that rollback command is not a general undo operation for the completed change.\ncloudmin confirm-bridge --id TRANSACTION_ID Options:\n--id value: Bridge transaction ID.","heading":"Keeps the new network settings after checking connectivity","pageTitle":"confirm-bridge","permalink":"https://cloudmin.com/docs/development/api-programs/confirm-bridge/#keeps-the-new-network-settings-after-checking-connectivity","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"rollback-bridge","permalink":"https://cloudmin.com/docs/development/api-programs/rollback-bridge/","section":"docs","summary":"","title":"rollback-bridge"},{"content":"cloudmin rollback-bridge [--multiline | --json] [--no-wait] --id value Requests restoration of the previous network settings for the bridge transaction identified by --id. Use the transaction ID from get-bridge-status. The transaction must still allow recovery; this is not an undo command for an already confirmed change.\nRecovery runs on the host and can interrupt the SSH connection again as addresses move back. By default, the command waits for the transaction’s recovery result. --no-wait returns immediately; check get-bridge-status after reconnecting.\nA timed-out unconfirmed change also starts automatic recovery. If recovery reports an error, inspect its status and resolve the error before submitting another bridge change.\ncloudmin rollback-bridge --id TRANSACTION_ID cloudmin rollback-bridge --id TRANSACTION_ID --no-wait Options:\n--id value: Bridge transaction ID.","heading":"Requests recovery of the previous network settings","pageTitle":"rollback-bridge","permalink":"https://cloudmin.com/docs/development/api-programs/rollback-bridge/#requests-recovery-of-the-previous-network-settings","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"get-license","permalink":"https://cloudmin.com/docs/development/api-programs/get-license/","section":"docs","summary":"","title":"get-license"},{"content":"cloudmin get-license [--multiline | --json] Shows the Cloudmin license status, expiry and any grace deadline. The license key is never returned. GPL does not require a license.\ncloudmin get-license","heading":"Shows the Cloudmin license status","pageTitle":"get-license","permalink":"https://cloudmin.com/docs/development/api-programs/get-license/#shows-the-cloudmin-license-status","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"check-license","permalink":"https://cloudmin.com/docs/development/api-programs/check-license/","section":"docs","summary":"","title":"check-license"},{"content":"cloudmin check-license [--multiline | --json] Checks the saved license with www.virtualmin.com. Use this after renewal or after fixing a connection problem. This command remains available when license restrictions block other changes.\ncloudmin check-license","heading":"Rechecks the Cloudmin license with the license server","pageTitle":"check-license","permalink":"https://cloudmin.com/docs/development/api-programs/check-license/#rechecks-the-cloudmin-license-with-the-license-server","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"change-license","permalink":"https://cloudmin.com/docs/development/api-programs/change-license/","section":"docs","summary":"","title":"change-license"},{"content":"cloudmin change-license [--multiline | --json] --key-file file|- --serial value Checks a new Cloudmin Pro license before saving it. Read the key from a private file or standard input. Failed validation leaves the current license in place.\ncloudmin change-license --serial 12345 --key-file /root/cloudmin-key Expiry grace lasts seven days after the expiry date ends in UTC. Migration grace lasts 21 days from when this host first detects use on too many hosts. A failed check allows up to 21 days from the last successful check, without extending expiry or migration deadlines. Existing machines, accepted jobs, scheduled backups, job recovery and network rollback keep working when new changes are blocked.\nOptions:\n--key-file file|-: License key file, or - for stdin. --serial value: Cloudmin license serial number.","heading":"Validates and saves a Cloudmin Pro license","pageTitle":"change-license","permalink":"https://cloudmin.com/docs/development/api-programs/change-license/#validates-and-saves-a-cloudmin-pro-license","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"deregister-license","permalink":"https://cloudmin.com/docs/development/api-programs/deregister-license/","section":"docs","summary":"","title":"deregister-license"},{"content":"cloudmin deregister-license [--multiline | --json] --yes Removes this host’s saved license and repository credentials. Running machines, scheduled backups and accepted jobs continue. Pro updates and new changes through Cloudmin require a license again. Deregistration does not cancel your subscription or immediately remove the host from the license server’s count.\ncloudmin deregister-license --yes Options:\n--yes: Confirm this operation.","heading":"Removes this host’s Cloudmin license","pageTitle":"deregister-license","permalink":"https://cloudmin.com/docs/development/api-programs/deregister-license/#removes-this-hosts-cloudmin-license","section":"docs","summary":"","title":""},{"content":"","heading":"","pageTitle":"api","permalink":"https://cloudmin.com/docs/development/api-programs/api/","section":"docs","summary":"","title":"api"},{"content":"cloudmin api [action] \u003c request.json Runs the raw JSON API entry point. Use cloudmin api ACTION with a JSON request object on standard input. This is useful for API fields that have no named-command option or for clients that already construct API requests. With no action, it returns options.\nThe raw response is a JSON object with version and result fields. Named commands use command, status and data instead. Raw errors are written to standard error and exit 1. Do not add named-command output flags such as --json or --multiline.\noptions, list, backups, bridges and storage need no request body. machines accepts an optional exact name or UUID selector and otherwise lists the visible inventory. Other actions take a JSON object with their documented fields. The root entry point supplies a form token when omitted, but callers remain responsible for other required fields such as revisions and confirmations.\nRaw requests return their initial result without waiting for a job to finish. Use the returned job ID with get-job or the raw status action. When retrying a job submission, reuse the same request, token and attempt value so the API can return the existing job. A new named command generates a new token and submits a separate request.\nUse the virtual machine API reference for action-specific JSON fields. For example, the selector file below can contain {\"id\":\"guest.example.com\"}, and the status request file can contain {\"job\":\"JOB_ID\"}. A request file is often easier to review than a long shell-quoted object. Keep files containing passwords or provider credentials private.\ncloudmin api options cloudmin api machines \u003c /root/machine-selector.json cloudmin api status \u003c /root/job-request.json","heading":"Runs the raw JSON API with a request on standard input","pageTitle":"api","permalink":"https://cloudmin.com/docs/development/api-programs/api/#runs-the-raw-json-api-with-a-request-on-standard-input","section":"docs","summary":"","title":""},{"content":"Origin Cloudmin is made by Cloudmin LLC, the company that also sells Virtualmin Pro and our other commercial products. Our team is behind Webmin, the world\u0026rsquo;s most popular web-based Linux and UNIX system administration tool, and Virtualmin, started by Jamie Cameron and Joe Cooper in 2005. Cloudmin was announced in 2009 as a management interface for virtual machines and cloud infrastructure, built on Webmin like the rest of our products.\nHistory The first Cloudmin generations managed Xen, KVM, OpenVZ, Solaris Zones and several public cloud providers through their own tooling and raw hypervisor processes. Over the years hosting providers and system administrators used it to run fleets of virtual machines and to provision Virtualmin servers at scale.\nCloudmin 10 is a rewrite of the product around libvirt. It manages QEMU/KVM through the standard Linux virtualization API instead of custom process management, keeps virtual hardware definitions where other tools can see them, and rebuilds images, jobs, consoles, snapshots, clones and backups on a shared core for the free and professional editions. Cloudmin 9 stays available for Xen users while the KVM line matures.\nFacts Cloudmin GPL is free software and manages one host with an unlimited number of virtual machines. Cloudmin Pro adds features for people who build services at scale. Both editions share one code base, one API and one command line. Virtualmin remains a separate product, with its own GPL and Pro editions. Cloudmin is developed in the open alongside Webmin and Virtualmin, and the Virtualmin community forum is where its users and developers meet.\nUs In short, we are a small team, with Eric Andreychek joining in 2008 and Ilia Rostovtsev (a.k.a. Ilia Ross) in 2014, trying to tackle really big problems in hosting and virtualization management.\n","heading":"","pageTitle":"About","permalink":"https://cloudmin.com/about/","section":"","summary":"Origin Cloudmin is made by Cloudmin LLC, the company that also sells Virtualmin Pro and our other commercial products. Our team is behind Webmin, the world’s most popular web-based Linux and UNIX system administration tool, and Virtualmin, started by Jamie Cameron and Joe Cooper in 2005. Cloudmin was announced in 2009 as a management interface for virtual machines and cloud infrastructure, built on Webmin like the rest of our products.\nHistory The first Cloudmin generations managed Xen, KVM, OpenVZ, Solaris Zones and several public cloud providers through their own tooling and raw hypervisor processes. Over the years hosting providers and system administrators used it to run fleets of virtual machines and to provision Virtualmin servers at scale.","title":"About"},{"content":"Cloudmin 10.0 is a rewrite of Cloudmin around libvirt. It supports QEMU/KVM and replaces the previous hypervisor backends. Existing Cloudmin 9 hosts are not upgraded in place; install on a fresh supported host and see the feature status page for what is still planned, including the Cloudmin 9 import tool.\nAdd a libvirt-based core that manages QEMU/KVM through Sys::Virt, keeping libvirt as the source of truth so virsh, virt-manager and Cockpit keep working on the same machines Add an automated installer for Rocky Linux 10, AlmaLinux 10, Debian 13 and Ubuntu 26.04 on x86-64 and ARM64, with repository setup, package groups, managed swap and a readiness report Add Cloudmin-Config host preparation for modular or monolithic libvirt, a default storage pool, a persistent NAT network, EFI firmware, nftables and Fail2ban, verified by booting an isolated KVM appliance before reporting success Add host readiness checks with actionable errors on the overview Add an image catalogue of AlmaLinux, Alpine, Arch, CentOS Stream, Debian, Fedora, openSUSE, Rocky Linux and Ubuntu cloud images for the host architecture, verified against the publishers\u0026rsquo; checksums Add Image Manager with background imports from HTTPS URLs, browser uploads and host files into directory, filesystem and NFS pools, batch downloads, progress pages, bulk deletion and custom catalogue entries Add virtual machine creation from cloud images or installer ISOs with firmware selection, independent disks and recoverable jobs Add cloud-init account setup with passwords or SSH keys, and DHCP or static IPv4 and IPv6 networking including on-link gateways and /32 addresses Add machine templates and resource plans that fill the creation form, with built-in Default Template, Default Plan and Virtualmin GPL and Pro templates for Apache or Nginx Add guest packages in GPL and custom preparation and final setup scripts in Cloudmin Pro, running inside new guests after cloud-init with or without Virtualmin Add Virtualmin installation inside new guests with progress on the host, per-machine Pro license credentials kept out of templates and seeds, and automatic registration in the host\u0026rsquo;s Webmin Servers Index Add live CPU and balloon memory adjustment, offline resource maximums, boot settings, disk and network interface changes, disk growth, and live ISO insertion and ejection Add pause, resume, confirmed hard reset, autostart control and virtual machine deletion with explicit disk selection, shared-storage checks and recovery of interrupted operations Add guest password reset through the QEMU Guest Agent with its own permission and no password stored in jobs or logs Add disk snapshots with creation, restore, deletion, per-machine history, a host overview, guest-agent preparation and an optional clean shutdown Add full cloning from stopped or running guests with fresh identities, Virtualmin hostname and management certificate updates, Pro license placeholders, and unchanged copies left stopped Add full backups and restore with hourly to yearly schedules and retention, to local, SSH and S3 destinations, with Google Cloud Storage, Azure Blob Storage, Backblaze B2, Dropbox and Google Drive destinations in Cloudmin Pro Add image capture of an existing Linux guest\u0026rsquo;s system disk into Image Manager in Cloudmin Pro Add browser SSH terminals with pinned host keys, host-managed per-guest login keys, remembered ports and optional automatic connection Add serial consoles with recorded output replay and graphical VNC consoles that work during boot and without a guest network, with fullscreen, zoom and guest keyboard shortcuts Add embedded guest Webmin through the host\u0026rsquo;s Servers Index proxy for Virtualmin guests behind NAT, limited to the host\u0026rsquo;s root login, behind a trust warning and with confirmation of changed guest addresses Add NAT, routed and isolated virtual networks, and guided host bridge creation through NetworkManager, Netplan or ifupdown with connectivity confirmation and automatic rollback Add storage pool and volume inventory with free-space checks before every disk operation Add LVM and LVM-thin storage pools registered from existing volume groups, with raw guest disks, offline growth, native snapshots, clones, backups and restore Add delegation of individual virtual machines to Webmin users with separate grants for power controls, forced power controls, consoles, SSH terminals and password resets, enforced by read-only mode and rechecked on open connections Add live status over authenticated WebSockets for power state, guest agent, SSH reachability, resource usage and guest filesystem usage, without browser polling Add a versioned JSON API shared by the web interface, the api.pl command line and remote clients, with signed requests and audit logging Add durable jobs with resource reservations, progress, cancellation at safe points and recovery after a controller restart for creation, cloning, backups, restores, captures and hardware changes Add isolated systemd workers without root privileges for downloads, host-file reads, checksum checks, disk inspection, SSH key validation, cloud-init seeds, consoles and terminal relays Add Module Configuration options for list columns, initially expanded sections, remembered Remote Access tabs, automatic SSH connection and the Webmin connection warning Add compatibility wrappers so frame-based themes and older Cloudmin function names keep working Change Virtualmin fleet management to move out of Cloudmin; Cloudmin Services is not carried forward and the optional Virtualmin Connect module is planned to replace it Remove Xen, OpenVZ, LXC, VServer, Zones, Docker, Citrix, EC2, GCE and other provider screens; Xen returns through libvirt after the KVM release, and Cloudmin 9 remains maintained for Xen users Remove raw QEMU process management and virsh output parsing Feature status and roadmap ","heading":"","pageTitle":"Cloudmin 10.0 released","permalink":"https://cloudmin.com/changelog/cloudmin-10.0-released/","section":"changelog","summary":"Cloudmin 10.0 is a rewrite of Cloudmin around libvirt. It supports QEMU/KVM and replaces the previous hypervisor backends. Existing Cloudmin 9 hosts are not upgraded in place; install on a fresh supported host and see the feature status page for what is still planned, including the Cloudmin 9 import tool.\nAdd a libvirt-based core that manages QEMU/KVM through Sys::Virt, keeping libvirt as the source of truth so virsh, virt-manager and Cockpit keep working on the same machines Add an automated installer for Rocky Linux 10, AlmaLinux 10, Debian 13 and Ubuntu 26.04 on x86-64 and ARM64, with repository setup, package groups, managed swap and a readiness report Add Cloudmin-Config host preparation for modular or monolithic libvirt, a default storage pool, a persistent NAT network, EFI firmware, nftables and Fail2ban, verified by booting an isolated KVM appliance before reporting success Add host readiness checks with actionable errors on the overview Add an image catalogue of AlmaLinux, Alpine, Arch, CentOS Stream, Debian, Fedora, openSUSE, Rocky Linux and Ubuntu cloud images for the host architecture, verified against the publishers’ checksums Add Image Manager with background imports from HTTPS URLs, browser uploads and host files into directory, filesystem and NFS pools, batch downloads, progress pages, bulk deletion and custom catalogue entries Add virtual machine creation from cloud images or installer ISOs with firmware selection, independent disks and recoverable jobs Add cloud-init account setup with passwords or SSH keys, and DHCP or static IPv4 and IPv6 networking including on-link gateways and /32 addresses Add machine templates and resource plans that fill the creation form, with built-in Default Template, Default Plan and Virtualmin GPL and Pro templates for Apache or Nginx Add guest packages in GPL and custom preparation and final setup scripts in Cloudmin Pro, running inside new guests after cloud-init with or without Virtualmin Add Virtualmin installation inside new guests with progress on the host, per-machine Pro license credentials kept out of templates and seeds, and automatic registration in the host’s Webmin Servers Index Add live CPU and balloon memory adjustment, offline resource maximums, boot settings, disk and network interface changes, disk growth, and live ISO insertion and ejection Add pause, resume, confirmed hard reset, autostart control and virtual machine deletion with explicit disk selection, shared-storage checks and recovery of interrupted operations Add guest password reset through the QEMU Guest Agent with its own permission and no password stored in jobs or logs Add disk snapshots with creation, restore, deletion, per-machine history, a host overview, guest-agent preparation and an optional clean shutdown Add full cloning from stopped or running guests with fresh identities, Virtualmin hostname and management certificate updates, Pro license placeholders, and unchanged copies left stopped Add full backups and restore with hourly to yearly schedules and retention, to local, SSH and S3 destinations, with Google Cloud Storage, Azure Blob Storage, Backblaze B2, Dropbox and Google Drive destinations in Cloudmin Pro Add image capture of an existing Linux guest’s system disk into Image Manager in Cloudmin Pro Add browser SSH terminals with pinned host keys, host-managed per-guest login keys, remembered ports and optional automatic connection Add serial consoles with recorded output replay and graphical VNC consoles that work during boot and without a guest network, with fullscreen, zoom and guest keyboard shortcuts Add embedded guest Webmin through the host’s Servers Index proxy for Virtualmin guests behind NAT, limited to the host’s root login, behind a trust warning and with confirmation of changed guest addresses Add NAT, routed and isolated virtual networks, and guided host bridge creation through NetworkManager, Netplan or ifupdown with connectivity confirmation and automatic rollback Add storage pool and volume inventory with free-space checks before every disk operation Add LVM and LVM-thin storage pools registered from existing volume groups, with raw guest disks, offline growth, native snapshots, clones, backups and restore Add delegation of individual virtual machines to Webmin users with separate grants for power controls, forced power controls, consoles, SSH terminals and password resets, enforced by read-only mode and rechecked on open connections Add live status over authenticated WebSockets for power state, guest agent, SSH reachability, resource usage and guest filesystem usage, without browser polling Add a versioned JSON API shared by the web interface, the api.pl command line and remote clients, with signed requests and audit logging Add durable jobs with resource reservations, progress, cancellation at safe points and recovery after a controller restart for creation, cloning, backups, restores, captures and hardware changes Add isolated systemd workers without root privileges for downloads, host-file reads, checksum checks, disk inspection, SSH key validation, cloud-init seeds, consoles and terminal relays Add Module Configuration options for list columns, initially expanded sections, remembered Remote Access tabs, automatic SSH connection and the Webmin connection warning Add compatibility wrappers so frame-based themes and older Cloudmin function names keep working Change Virtualmin fleet management to move out of Cloudmin; Cloudmin Services is not carried forward and the optional Virtualmin Connect module is planned to replace it Remove Xen, OpenVZ, LXC, VServer, Zones, Docker, Citrix, EC2, GCE and other provider screens; Xen returns through libvirt after the KVM release, and Cloudmin 9 remains maintained for Xen users Remove raw QEMU process management and virsh output parsing Feature status and roadmap","title":"Cloudmin 10.0 released"},{"content":"Sales and purchase support Cloudmin Pro licenses are sold through the Virtualmin shop. If you have a question about an order or need information on reseller discounts, open a new ticket by sending us a private message to discuss.\nRefund and order cancellation A refund is guaranteed within the first 30 days of purchase, and can be performed after order cancellation. A request to staff must be filed to process a refund.\nPress and media contacts Please visit our online press kit for logo imagery in scalable formats. For questions, contact us using the email address in the link.\nQuestions and bug reports Questions and bug reports about Cloudmin GPL, Virtualmin GPL, Webmin, Usermin and the Authentic Theme should generally be brought up in the Cloudmin category of the Virtualmin community forum. Cloudmin Professional and Virtualmin Professional customers may also request support by sending us a private ticket. We try to respond to tickets within 24 hours, seven days a week, including holidays. Private ticket support is for bug reports or queries from customers of our Professional products; for our open-source software we keep the forum response time as low as we can, but that support is provided on an as-available basis with no guarantee about response time.\n","heading":"","pageTitle":"Contact","permalink":"https://cloudmin.com/contact/","section":"","summary":"Sales and purchase support Cloudmin Pro licenses are sold through the Virtualmin shop. If you have a question about an order or need information on reseller discounts, open a new ticket by sending us a private message to discuss.\nRefund and order cancellation A refund is guaranteed within the first 30 days of purchase, and can be performed after order cancellation. A request to staff must be filed to process a refund.\nPress and media contacts Please visit our online press kit for logo imagery in scalable formats. For questions, contact us using the email address in the link.","title":"Contact"},{"content":"Getting started with Cloudmin takes a few steps on a fresh host, using our automated install script. The script sets up your package manager, installs the Cloudmin, Webmin, libvirt and QEMU packages with their dependencies, and runs Cloudmin-Config to prepare the host for virtual machines.\nCloudmin 10 is in development\nThere is no stable Cloudmin 10 repository yet. The installer uses the unstable channel. Use it on test hosts, read the feature status page, and keep Cloudmin 9 for production Xen hosts. Install your operating system Start with a freshly installed supported host OS: Rocky Linux 10, AlmaLinux 10, Debian 13 or Ubuntu 26.04, on x86-64 or ARM64. The host needs CPU virtualization extensions and a working /dev/kvm. Installing inside another hypervisor works when nested virtualization is enabled. A minimal server installation is ideal; Cloudmin installs what it needs.\nDon\u0026rsquo;t pre-install or pre-configure libvirt, QEMU or Webmin. The installer expects a clean supported OS and uses only the distribution\u0026rsquo;s hypervisor packages. Add third-party repositories only after installing Cloudmin, and with caution. Download and run install script Cloudmin GPL is free. Cloudmin Professional licenses are sold through the Virtualmin shop, and the Pro extension installs alongside the shared module.\nTry Cloudmin Professional or Download Cloudmin GPL The quickest way to start the installation is to log in to the host over SSH and run the prepared command:\ncopy sudo sh -c \"$(curl -fsSL https://download.cloudmin.dev/cloudmin-install.sh)\" Managed swap No swap The installer shows its plan, including any swap change, and asks for confirmation unless you pass --yes. Use the toggles under the command to pick the repository channel, choose how swap is handled, or switch to wget.\nInstall script options Run the script with --help for the full list. The most useful options:\n--hostname name sets a fully qualified host name before installation. --swap SIZE, --no-swap and --swap-only control installer-managed swap. Without a size, the installer chooses one from available memory, existing swap and disk space. Unrelated swap is never removed. --no-package-updates skips the initial distribution upgrade. --extra package,... installs additional distribution packages first; --include and --exclude adjust configuration plugins. BIND and Postfix are not installed or configured by Cloudmin. --setup only configures repositories and their prerequisites. What the installer does On Rocky Linux and AlmaLinux the script enables CRB and EPEL, then installs the cloudmincore and cloudmin-kvm package groups. On Debian and Ubuntu it installs cloudmin-core and the native cloudmin-kvm-stack meta package. Dependencies are installed in one transaction, and a failed download, missing package or failed configuration step stops the installer.\nCloudmin-Config sets up Etckeeper for configuration history, then loads KVM, enables the modular libvirt daemons where they are available (or the stock libvirtd otherwise), prepares a default storage pool and a persistent NAT network, verifies the packaged EFI firmware, and configures Webmin, nftables and Fail2ban through Webmin\u0026rsquo;s own APIs. SELinux stays enforcing.\nBefore reporting success, the configuration boots a temporary, isolated KVM inspection appliance on the host. A failed boot stops the installation and shows the end of the configuration log. The readiness report names any missing capability and how to fix it.\nAfter a few minutes, log in to Webmin at https://your-hostname:10000 and open Cloudmin. The overview shows the host checks, and Create Virtual Machine takes you to your first guest. See Your first virtual machine for the next steps.\nCheck the documentation If your host doesn\u0026rsquo;t fit these steps, see the installation documentation and host requirements. Existing Cloudmin 9 KVM hosts are not upgraded by this installer; a separate import tool with a report and rollback is planned.\nSign up for announcements To stay up to date with Cloudmin news, subscribe to the News Forum at Virtualmin.com.\n","heading":"","pageTitle":"Downloading and Installing","permalink":"https://cloudmin.com/download/","section":"","summary":"Getting started with Cloudmin takes a few steps on a fresh host, using our automated install script. The script sets up your package manager, installs the Cloudmin, Webmin, libvirt and QEMU packages with their dependencies, and runs Cloudmin-Config to prepare the host for virtual machines.\nCloudmin 10 is in development\nThere is no stable Cloudmin 10 repository yet. The installer uses the unstable channel. Use it on test hosts, read the feature status page, and keep Cloudmin 9 for production Xen hosts. Install your operating system Start with a freshly installed supported host OS: Rocky Linux 10, AlmaLinux 10, Debian 13 or Ubuntu 26.04, on x86-64 or ARM64. The host needs CPU virtualization extensions and a working /dev/kvm. Installing inside another hypervisor works when nested virtualization is enabled. A minimal server installation is ideal; Cloudmin installs what it needs.","title":"Downloading and Installing"},{"content":"We understand that running virtual machine hosts can be complex, but you\u0026rsquo;re not alone. Our team is dedicated to helping you get the most out of our products. Whether you\u0026rsquo;re troubleshooting, need quick solutions, or require in-depth assistance, the creators of Webmin, Usermin, Virtualmin, Cloudmin, and the Authentic Theme are here at your service.\nQuick Self-Help\nFor quick self-help, begin with the documentation and a search of our forum. Many questions have already been asked and answered, so searching first may give you the answer in a few minutes. Cloudmin 10 is in development, so check the feature status page before reporting something as missing. Premium Support Experience dedicated support as a paid customer. For quick and reliable assistance, contact our team via private message; your tickets are always free. With a Professional subscription you\u0026rsquo;re assured of priority handling for all your support tickets. While we guarantee a response time within 24 hours, we often respond much faster.\nCreate Premium Support Ticket Sign In For Premium Support Community Support For GPL users or those who prefer community-based help, join the Cloudmin category of our forum, where our staff and community members are always eager to help. Post your questions there if you\u0026rsquo;re comfortable with a brief wait. While we prioritize direct support for paid customers, we value each user and contribute to forum discussions as often as we can.\nBefore posting, please read the forum guidelines to ensure a positive and productive experience.\nJoin the Forum Report a Bug Help improve Cloudmin for everyone:\nSpotted a bug? Whether you\u0026rsquo;re a GPL or Pro user, we encourage you to report it. Use the appropriate GitHub issue tracker to report non-security related bugs. Include the host OS, Webmin and Cloudmin versions, and the job or page involved. For sensitive reports, especially security vulnerabilities, please use the designated security@ email address at virtualmin.com to ensure responsible handling of the issue. Our forum is also a place to discuss potential bugs; sometimes what looks like a bug is a host configuration issue that the community or our staff can quickly resolve. Your feedback and reports are invaluable. They help us improve the software and the experience for the entire user base.\n","heading":"","pageTitle":"Getting Support","permalink":"https://cloudmin.com/support/","section":"","summary":"We understand that running virtual machine hosts can be complex, but you’re not alone. Our team is dedicated to helping you get the most out of our products. Whether you’re troubleshooting, need quick solutions, or require in-depth assistance, the creators of Webmin, Usermin, Virtualmin, Cloudmin, and the Authentic Theme are here at your service.\nQuick Self-Help\nFor quick self-help, begin with the documentation and a search of our forum. Many questions have already been asked and answered, so searching first may give you the answer in a few minutes. Cloudmin 10 is in development, so check the feature status page before reporting something as missing. Premium Support Experience dedicated support as a paid customer. For quick and reliable assistance, contact our team via private message; your tickets are always free. With a Professional subscription you’re assured of priority handling for all your support tickets. While we guarantee a response time within 24 hours, we often respond much faster.","title":"Getting Support"},{"content":"Logos Below, you can find our logos available in vector formats. The full logo uses white lettering and is meant for dark backgrounds.\nCloudmin Full Logo\nCloudmin Pinned Tab Icon\nNaming Write the product name as Cloudmin, with Cloudmin GPL for the free edition and Cloudmin Pro or Cloudmin Professional for the paid edition. Cloudmin is a product of Cloudmin LLC, which also sells Virtualmin Pro. Virtualmin and Webmin are separate products.\nPress contacts For press enquiries, contact us using the email address in the link.\n","heading":"","pageTitle":"Press Kit","permalink":"https://cloudmin.com/press-kit/","section":"","summary":"Logos Below, you can find our logos available in vector formats. The full logo uses white lettering and is meant for dark backgrounds.\nCloudmin Full Logo\nCloudmin Pinned Tab Icon\nNaming Write the product name as Cloudmin, with Cloudmin GPL for the free edition and Cloudmin Pro or Cloudmin Professional for the paid edition. Cloudmin is a product of Cloudmin LLC, which also sells Virtualmin Pro. Virtualmin and Webmin are separate products.","title":"Press Kit"},{"content":"Privacy Statement Cloudmin LLC is firmly committed to insuring your privacy. The following discloses our information gathering and dissemination practices for this website and our products.\nIP and Computer Information We may use client IP addresses to diagnose problems with our website. Client access information is stored for the purposes of monitoring site usage and performance.\nLicense Key and Subscription Purchased software requires a license key, and an active software updates subscription on our updates server, in order to function fully. License keys and subscription IDs are used only for the purpose of verifying license compliance, and notifying customers of upcoming license renewals. This data will not be sold or disclosed to third parties.\nSecurity of Personal and Financial Data Purchases are made through the shop at Virtualmin.com. Any personal information gathered for the purposes of commerce will be transmitted via a Transport Layer Security (TLS) connection with encryption. This information will be kept confidential. Financial and payment details, including credit card numbers, will be collected by our payment processing partners, and this information will not be received or stored on our servers. We will retain a payment token, provided by our payment processor, in order to process recurring payments for your subscription orders.\nEmail Address Your email address will be used to email copies of your order information including order number and details. We do not give away or sell your email address to other companies. We only use this information to contact you regarding your order and to provide better customer support. In the Virtualmin community there are many opportunities to subscribe to email notifications and mailing lists, but you will not be subscribed automatically to any email notifications or mailing lists, except those related to your subscriptions. You may unsubscribe at any time, and you may control all of your forum subscriptions and notifications under My Account ⇾ Preferences ⇾ Notifications in the forums.\nName, Address, and Phone Number Your name, address, and phone number may be stored in our system so that we can better serve you, when you return to our site or file a support issue. Only Cloudmin LLC staff members will have access to details beyond your community username (and any information you choose to disclose in the Virtualmin community forums).\nData Collected by Cloudmin Cloudmin runs on your own hosts. It does not send virtual machine, guest or usage data to us. Catalogue image downloads and license checks contact the publishers\u0026rsquo; download servers and our license server only for those purposes.\n","heading":"","pageTitle":"Privacy Policy","permalink":"https://cloudmin.com/privacy/","section":"","summary":"Privacy Statement Cloudmin LLC is firmly committed to insuring your privacy. The following discloses our information gathering and dissemination practices for this website and our products.\nIP and Computer Information We may use client IP addresses to diagnose problems with our website. Client access information is stored for the purposes of monitoring site usage and performance.\nLicense Key and Subscription Purchased software requires a license key, and an active software updates subscription on our updates server, in order to function fully. License keys and subscription IDs are used only for the purpose of verifying license compliance, and notifying customers of upcoming license renewals. This data will not be sold or disclosed to third parties.","title":"Privacy Policy"},{"content":"Downloads and License Information Cloudmin Professional is purchased through the shop at Virtualmin.com, and newly purchased products are available immediately on the My Account ⇾ Dashboard page there. Install scripts for supported platforms are provided, as well as serial number and license keys for upgrading our open source products to Professional versions or downloading individual components from our software repository.\nGeneral Terms and Conditions Cloudmin LLC does not warrant that the contents of our website are error-free. Information on the site may contain inaccuracies or other errors and may be changed at any time without notice. Cloudmin LLC may make changes to the products or services at any time without notice. Cloudmin LLC will make reasonable efforts to maintain accurate and up-to-date information on the site but makes no warranty of its accuracy, completeness or timeliness.\nDisclaimer/Limitation of Liability The materials on the Cloudmin.com website are provided as is and without warranties of any kind either express or implied. To the fullest extent possible under applicable law, Cloudmin LLC disclaims all warranties expressed or implied, including, but not limited to, implied warranties of merchantability, fitness for a particular purpose, or non-infringement or other violation of rights.\nUnder no circumstances, including but not limited to negligence, will Cloudmin LLC be liable to any party for any direct, indirect, special, or other consequential damages for any use of the contents and services on Cloudmin.com, or on any other linked website, including, without limitation, any lost revenue, business interruption, loss of data, even if we are expressly advised of the possibility of such damages.\nDownloadable Software Software that is made available for download from Cloudmin.com is the copyrighted work of Cloudmin LLC and/or its suppliers. Cloudmin GPL is distributed under the terms of the GNU General Public License. Your use of other Software is governed by the terms of the end user license agreement, if any, which accompanies or is included with the Software (License Agreement). You may not install or use any Software that is accompanied by or includes a License Agreement unless you first agree to the License Agreement terms. For any Software not accompanied by a license agreement, Cloudmin LLC hereby grants to you, the user, a personal, nontransferable, nonexclusive license to use the Software for viewing and use in accordance with these Terms, and for no other purpose, provided that you keep intact all copyright and other proprietary notices.\nPurchasing Software Credit card orders will be processed in real-time, and the purchased software will be available immediately after payment approval at the My Account ⇾ Dashboard page. In order to insure you receive the latest version available, purchased software is made available in downloadable form only. No physical media will be delivered to you. If you have trouble downloading or installing your purchased software, please create a customer support issue. Please mark the issue private if you are including any sensitive information, such as license details or install logs, in your ticket.\nRefunds and Cancellation If you are unsatisfied with your Cloudmin LLC product or would like to cancel your order, for any reason, you may request a full refund within 30 days of purchase. Your updates subscription and software license key will be invalidated and the charge(s) to your credit card will be refunded. To request a refund, open a support ticket. Please include the serial number of the license you wish to cancel.\n","heading":"","pageTitle":"Terms and Conditions","permalink":"https://cloudmin.com/terms-and-conditions/","section":"","summary":"Downloads and License Information Cloudmin Professional is purchased through the shop at Virtualmin.com, and newly purchased products are available immediately on the My Account ⇾ Dashboard page there. Install scripts for supported platforms are provided, as well as serial number and license keys for upgrading our open source products to Professional versions or downloading individual components from our software repository.\nGeneral Terms and Conditions Cloudmin LLC does not warrant that the contents of our website are error-free. Information on the site may contain inaccuracies or other errors and may be changed at any time without notice. Cloudmin LLC may make changes to the products or services at any time without notice. Cloudmin LLC will make reasonable efforts to maintain accurate and up-to-date information on the site but makes no warranty of its accuracy, completeness or timeliness.","title":"Terms and Conditions"},{"content":" Fatal Error: --ERROR-TITLE--\n--ERROR-BODY-- ","heading":"","pageTitle":"Fatal Error","permalink":"https://cloudmin.com/error/","section":"","summary":"Fatal Error: --ERROR-TITLE--\n--ERROR-BODY--","title":"Fatal Error"},{"content":" Under Maintenance\nWe're just tidying up a few things for the shop - shouldn't take more than a few minutes. It's all part of the usual upkeep to keep everything running smoothly for you.\nIn the meantime, have you checked out our Forums? It’s a cozy spot to catch up on discussions or share your thoughts. No rush, though, we’ll have the shop up and running for you very soon.\n","heading":"","pageTitle":"Under Maintenance","permalink":"https://cloudmin.com/maintenance/","section":"","summary":"Under Maintenance\nWe're just tidying up a few things for the shop - shouldn't take more than a few minutes. It's all part of the usual upkeep to keep everything running smoothly for you.\nIn the meantime, have you checked out our Forums? It’s a cozy spot to catch up on discussions or share your thoughts. No rush, though, we’ll have the shop up and running for you very soon.","title":"Under Maintenance"},{"content":"","heading":"","pageTitle":"","permalink":"https://cloudmin.com/template-virtualmin.com/","section":"","summary":"","title":""}]