Skip to main content

@rjeschmi/vm

v2026.03.13.1

VM provisioning and management for libvirt/QEMU and OpenStack, plus k3s, Helm, Rancher, and cloud-init utilities.

Quality score

How well-documented and verifiable this extension is.

Not yet scored.

A score will be generated the next time this extension is published. The owner can also trigger scoring manually.

Install

$ swamp extension pull @rjeschmi/vm

@rjeschmi/cloud-init-isov2026.02.21.1cloud_init_iso.ts
generateGenerate a cloud-init NoCloud seed ISO from user-data and meta-data
ArgumentTypeDescription
userDatastringcloud-config user-data content
metaDatastringcloud-init meta-data content

Files

iso(application/octet-stream)— cloud-init NoCloud seed ISO (ISO 9660)
@rjeschmi/helm-chartv2026.03.03.1helm_chart.ts

Global Arguments

ArgumentTypeDescription
kubeconfigstringkubeconfig YAML content for the target cluster
installInstall or upgrade a Helm chart (helm upgrade --install)
ArgumentTypeDescription
releaseNamestringHelm release name
chartstringChart name (e.g. ingress-nginx/ingress-nginx) or local path
namespacestringKubernetes namespace to install into
repoName?stringHelm repo name to add (e.g. ingress-nginx)
repoUrl?stringHelm repo URL (required if repoName is set)
version?stringChart version (default: latest)
values?recordValues to set (equivalent to --set key=value)
valuesYaml?stringRaw values YAML string (equivalent to -f values.yaml)
createNamespace?booleanCreate the namespace if it does not exist (default: true)
reuseValues?booleanReuse previously installed values on upgrade, only overriding what is explicitly set (default: false)
waitSeconds?numberSeconds to wait for resources to be ready (default: 300, 0 to skip)
applyManifestApply a Kubernetes manifest using kubectl apply
ArgumentTypeDescription
manifeststringYAML manifest to apply
uninstallUninstall a Helm release
ArgumentTypeDescription
releaseNamestringHelm release name to uninstall
namespacestringKubernetes namespace of the release
statusGet the status of an installed Helm release
ArgumentTypeDescription
releaseNamestringHelm release name
namespacestringKubernetes namespace of the release

Resources

release(infinite)— A Helm release installed in the cluster
@rjeschmi/k3sv2026.03.02.1k3s.ts

Global Arguments

ArgumentTypeDescription
sshHoststringUnraid SSH hostname or IP
sshUserstringSSH username (root on Unraid)
sshPrivateKey?stringSSH private key for Unraid (omit to rely on ssh-agent or ~/.ssh/ defaults)
vmSshUserstringUsername on the VM (created by cloud-init)
vmSshPrivateKey?stringSSH private key for the VM user (omit to rely on ssh-agent or ~/.ssh/ defaults)
installInstall k3s on a provisioned VM via SSH and wait for the node to be ready
ArgumentTypeDescription
vmNamestringVM name, used to discover IP via virsh
vmHost?stringOverride VM host (e.g. Tailscale hostname) — skips virsh IP discovery
timeoutSeconds?numberMax seconds to wait (default: 600)
uninstallUninstall k3s (and therefore Rancher) from the VM
ArgumentTypeDescription
vmNamestringVM name, used to discover IP via virsh

Resources

cluster(infinite)— A provisioned k3s cluster
kubeconfig(infinite)— kubeconfig for the k3s cluster with server address rewritten to the VM IP
@rjeschmi/rancher-kubeconfigv2026.02.23.1rancher_kubeconfig.ts

Global Arguments

ArgumentTypeDescription
sshHoststringUnraid SSH hostname or IP
sshUserstringSSH username (root on Unraid)
sshPrivateKey?stringSSH private key for Unraid (omit to rely on ssh-agent or ~/.ssh/ defaults)
vmSshUserstringUsername on the VM (created by cloud-init)
vmSshPrivateKey?stringSSH private key for the VM user (omit to rely on ssh-agent or ~/.ssh/ defaults)
fetchFetch k3s kubeconfig from /etc/rancher/k3s/k3s.yaml on the Rancher VM, rewriting the server address to the VM's real IP
ArgumentTypeDescription
vmNamestringVM name used to discover its IP via virsh on Unraid
vmHost?stringOverride VM host (e.g. Tailscale hostname) — skips virsh IP discovery

Resources

kubeconfig(infinite)— k3s kubeconfig fetched from /etc/rancher/k3s/k3s.yaml on the Rancher VM
@rjeschmi/rancher-openstackv2026.02.23.1rancher_openstack.ts

Global Arguments

ArgumentTypeDescription
rancherUrlstringRancher server URL (e.g. https://rancher.example.com)
rancherTokenstringRancher API bearer token (e.g. token-xxxxx:yyyyyyyyy)
insecure?booleanSkip TLS certificate verification (for self-signed certs)
createCredentialCreate OpenStack cloud credentials in Rancher
ArgumentTypeDescription
namestringCredential name in Rancher
authUrlstringOpenStack Keystone auth URL
usernamestringOpenStack username
passwordstringOpenStack password
domainName?stringOpenStack domain name (default: Default)
tenantNamestringOpenStack project/tenant name
region?stringOpenStack region
createNodeTemplateCreate an OpenStack node template in Rancher
ArgumentTypeDescription
namestringNode template name
credentialIdstringCloud credential ID (from createCredential output)
authUrlstringOpenStack Keystone auth URL
usernamestringOpenStack username
passwordstringOpenStack password
tenantNamestringOpenStack project/tenant name
domainName?stringOpenStack domain name (default: Default)
region?stringOpenStack region
flavorNamestringOpenStack flavor (e.g. m1.medium)
imageName?stringOpenStack image name (mutually exclusive with imageId)
imageId?stringOpenStack image UUID (mutually exclusive with imageName)
networkNamestringOpenStack network name
secGroups?stringComma-separated security group names (default: default)
keypairName?stringOpenStack keypair name for SSH access
sshUser?stringSSH username on provisioned nodes (default: ubuntu)
rootDiskSizeGb?numberRoot disk size in GB (default: 20)
provisionClusterProvision an RKE cluster on OpenStack via Rancher with control-plane and worker node pools
ArgumentTypeDescription
namestringCluster name
nodeTemplateIdstringNode template ID (from createNodeTemplate output)
kubernetesVersion?stringKubernetes version (e.g. v1.28.x-rancher1-1; default: Rancher's default)
controlPlaneCount?numberNumber of control plane + etcd nodes (default: 1)
workerCount?numberNumber of worker nodes (default: 2)
waitSeconds?numberMax seconds to wait for cluster to become active (default: 900; 0 = don't wait)
provisionAllEnd-to-end: create OpenStack credential + node template in Rancher, then provision an RKE cluster
ArgumentTypeDescription
clusterNamestringRKE cluster name
authUrlstringOpenStack Keystone auth URL
usernamestringOpenStack username
passwordstringOpenStack password
tenantNamestringOpenStack project/tenant name
domainName?stringOpenStack domain name (default: Default)
region?stringOpenStack region
flavorNamestringOpenStack flavor (e.g. d2-2, m1.medium)
imageName?stringOpenStack image name (mutually exclusive with imageId)
imageId?stringOpenStack image UUID (mutually exclusive with imageName)
networkNamestringOpenStack network name
secGroups?stringComma-separated security group names (default: default)
keypairName?stringOpenStack keypair name for SSH access
sshUser?stringSSH user on provisioned nodes (default: ubuntu)
rootDiskSizeGb?numberRoot disk size in GB (default: 20)
controlPlaneCount?numberNumber of control plane + etcd nodes (default: 1)
workerCount?numberNumber of worker nodes (default: 2)
kubernetesVersion?stringKubernetes version (default: Rancher default)
waitSeconds?numberMax seconds to wait for cluster active (default: 900)
tailscaleAuthKey?stringTailscale auth key — when provided, nodes will auto-join the tailnet via cloud-init
tailscaleOperatorClientId?stringTailscale OAuth client ID — when provided, tailscale-operator is installed on the cluster
tailscaleOperatorClientSecret?stringTailscale OAuth client secret — required when tailscaleOperatorClientId is set
deleteAfterHours?numberSchedule cluster auto-deletion after this many hours (default: 12, set to 0 to disable)
getKubeconfigGenerate and print the kubeconfig for a provisioned cluster
ArgumentTypeDescription
clusterIdstringManagement cluster ID (c-m-xxxxx from cluster resource)
scheduleDeleteDeploy a CronJob in the Rancher local cluster that deletes a provisioned cluster after a TTL
ArgumentTypeDescription
clusterNamestringCluster name to delete
delayHours?numberHours before deletion (default: 12)
deleteClusterDelete an OpenStack cluster from Rancher
ArgumentTypeDescription
clusterNamestringCluster name to delete
fetchSshKeysFetch SSH private keys for all machines in a cluster from Rancher's machine-state secrets
ArgumentTypeDescription
clusterNamestringCluster name to fetch SSH keys for

Resources

credential(infinite)— OpenStack cloud credentials stored in Rancher
nodeTemplate(infinite)— OpenStack node template in Rancher
cluster(infinite)— RKE cluster provisioned on OpenStack via Rancher
@rjeschmi/unraid-vmv2026.02.21.1unraid_vm.ts

Global Arguments

ArgumentTypeDescription
hoststringUnraid server URL, e.g. https://tower.local
apiKeystringUnraid API key from Settings > API Keys
listList all virtual machines on the Unraid server
startStart a virtual machine
ArgumentTypeDescription
vmUuidstringUUID of the VM to control
stopGracefully stop a VM via ACPI signal
ArgumentTypeDescription
vmUuidstringUUID of the VM to control
forceStopForce power off a VM immediately
ArgumentTypeDescription
vmUuidstringUUID of the VM to control
pausePause a running VM
ArgumentTypeDescription
vmUuidstringUUID of the VM to control
resumeResume a paused VM
ArgumentTypeDescription
vmUuidstringUUID of the VM to control

Resources

vm(infinite)— An Unraid virtual machine (factory — one per VM)
result(infinite)— Result of the most recent VM control operation
@rjeschmi/unraid-vm-provisionv2026.03.02.1unraid_vm_provision.ts

Global Arguments

ArgumentTypeDescription
sshHoststringUnraid SSH hostname or IP
sshUserstringSSH username (root on Unraid)
sshPrivateKeystringSSH private key in PEM format
domainsDirstringVM storage base directory
provisionProvision a new Ubuntu cloud-init VM on Unraid via SSH + libvirt
ArgumentTypeDescription
name?stringVM name / hostname (auto-generated as rancher-<6 chars> if omitted)
cpusnumberNumber of vCPUs
memoryMiBnumberRAM in MiB
diskSizeGbnumberDisk size in GB
ubuntuVersionenumUbuntu version
sshPublicKey?stringSSH public key to inject (omit when using Tailscale SSH)
usernamestringUnix username to create
mounts?arrayHost paths to expose inside the VM via virtio-9p
tailscaleAuthKey?stringTailscale auth key — when provided, the VM will auto-join the tailnet via cloud-init
restartReboot a provisioned VM
ArgumentTypeDescription
namestringVM name to restart
dumpXmlDump the libvirt domain XML for an existing VM (for inspection)
ArgumentTypeDescription
namestringVM name to inspect
verifyWait for a provisioned VM to boot and verify cloud-init completed successfully
ArgumentTypeDescription
namestringVM name to verify
expectedHostnamestringExpected hostname after cloud-init
expectedUsernamestringExpected Unix username created by cloud-init
userSshPrivateKeystringPrivate SSH key corresponding to the public key injected during provisioning
timeoutSeconds?numberMax seconds to wait for VM to boot (default 300)
destroyDestroy a provisioned VM and remove its disk files
ArgumentTypeDescription
namestringVM name to destroy
keepVm?booleanIf true, skip destruction and leave the VM running

Resources

vm(infinite)— A provisioned cloud-init Ubuntu VM
verifyResult(7d)— Result of a cloud-init verification run
@rjeschmi/vm-provider-openstackv2026.03.03.1vm_provider_openstack.ts

Global Arguments

ArgumentTypeDescription
usernamestringOpenStack username
passwordstringOpenStack password
projectNamestringOpenStack project / tenant name
region?stringOpenStack region (e.g. BHS5)
provisionProvision a new Ubuntu VM on OpenStack via Nova API with cloud-init
ArgumentTypeDescription
namestringVM name / hostname
imageIdstringOpenStack image UUID
flavorIdstringOpenStack flavor UUID or name
networkIdstringOpenStack network UUID for the primary NIC
sshPublicKeystringSSH public key to inject via cloud-init
usernamestringUnix username to create via cloud-init
verifyVerify that a provisioned VM is reachable via SSH and cloud-init completed
ArgumentTypeDescription
namestringVM name to verify (used as instance key)
expectedHostnamestringExpected hostname after cloud-init
expectedUsernamestringExpected Unix username created by cloud-init
userSshPrivateKey?stringPrivate SSH key for the provisioned user (omit to rely on ssh-agent or ~/.ssh/ defaults)
destroyDestroy an OpenStack server and release its floating IP
ArgumentTypeDescription
namestringVM name to destroy
startStart (unpause/unshelve) an OpenStack server
ArgumentTypeDescription
namestringVM name to start
stopStop (pause) an OpenStack server
ArgumentTypeDescription
namestringVM name to stop

Resources

vm(infinite)— A provisioned Ubuntu VM on OpenStack
verifyResult(7d)— Result of a cloud-init verification run
result(infinite)— Result of the most recent VM control operation
@rjeschmi/vm-provider-ssh-virshv2026.03.13.1vm_provider_ssh_virsh.ts

Global Arguments

ArgumentTypeDescription
sshHoststringHypervisor SSH hostname or IP
sshUserstringSSH username (e.g. root)
sshPrivateKey?stringSSH private key in PEM format (omit to rely on ssh-agent or ~/.ssh/ defaults)
domainsDirstringVM storage base directory
provisionProvision a new Ubuntu cloud-init VM via SSH + libvirt. Supports multiple NICs and isolated network creation.
ArgumentTypeDescription
namestringVM name / hostname
cpusnumberNumber of vCPUs
memoryMiBnumberRAM in MiB
diskSizeGbnumberDisk size in GB
ubuntuVersionenumUbuntu version
sshPublicKeystringSSH public key to inject
usernamestringUnix username to create
managementBridge?stringHost bridge for the primary NIC (e.g. br0) — VM gets a real LAN IP. If omitted, managementNetwork is used instead.
managementNetworkstringLibvirt network for the primary NIC when managementBridge is not set
extraNics?arrayAdditional NICs to attach (e.g. an isolated Neutron external network)
isolatedNetworks?arrayIsolated libvirt networks to create if they do not exist (no DHCP, no NAT)
mounts?arrayHost paths to expose inside the VM via virtio-9p
tailscaleAuthKey?stringTailscale auth key — when provided, installs Tailscale and joins the tailnet via cloud-init
writeFiles?arrayExtra files to write via cloud-init write_files
extraPackages?arrayAdditional apt packages to install via cloud-init
extraRuncmd?arrayAdditional shell commands appended to cloud-init runcmd
restartReboot a provisioned VM
ArgumentTypeDescription
namestringVM name to restart
dumpXmlDump the libvirt domain XML for an existing VM (for inspection)
ArgumentTypeDescription
namestringVM name to inspect
verifyWait for a provisioned VM to boot and verify cloud-init completed successfully
ArgumentTypeDescription
namestringVM name to verify
expectedHostnamestringExpected hostname after cloud-init
expectedUsernamestringExpected Unix username created by cloud-init
userSshPrivateKey?stringPrivate SSH key for the provisioned user (omit to rely on ssh-agent or ~/.ssh/ defaults)
timeoutSeconds?numberMax seconds to wait for VM to boot (default 300)
listList all virtual machines defined in libvirt
startStart a VM via virsh
ArgumentTypeDescription
namestringVM name to restart
stopGracefully stop a VM via ACPI signal (virsh shutdown)
ArgumentTypeDescription
namestringVM name to stop
forceStopForce power off a VM immediately (virsh destroy)
ArgumentTypeDescription
namestringVM name to force-stop
pausePause (suspend) a running VM
ArgumentTypeDescription
namestringVM name to pause
resumeResume a paused VM
ArgumentTypeDescription
namestringVM name to resume
destroyDestroy a VM, remove its disk files, and optionally remove libvirt networks
ArgumentTypeDescription
namestringVM name to destroy
keepVm?booleanIf true, skip destruction and leave the VM running
removeNetworks?arrayLibvirt network names to remove after destroying the VM

Resources

vm(infinite)— A provisioned cloud-init Ubuntu VM
verifyResult(7d)— Result of a cloud-init verification run
result(infinite)— Result of the most recent VM control operation