@rjeschmi/vm
v2026.03.13.1
VM provisioning and management for libvirt/QEMU and OpenStack, plus k3s, Helm, Rancher, and cloud-init utilities.
Contents
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
| Argument | Type | Description |
|---|---|---|
| userData | string | cloud-config user-data content |
| metaData | string | cloud-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
| Argument | Type | Description |
|---|---|---|
| kubeconfig | string | kubeconfig YAML content for the target cluster |
installInstall or upgrade a Helm chart (helm upgrade --install)
| Argument | Type | Description |
|---|---|---|
| releaseName | string | Helm release name |
| chart | string | Chart name (e.g. ingress-nginx/ingress-nginx) or local path |
| namespace | string | Kubernetes namespace to install into |
| repoName? | string | Helm repo name to add (e.g. ingress-nginx) |
| repoUrl? | string | Helm repo URL (required if repoName is set) |
| version? | string | Chart version (default: latest) |
| values? | record | Values to set (equivalent to --set key=value) |
| valuesYaml? | string | Raw values YAML string (equivalent to -f values.yaml) |
| createNamespace? | boolean | Create the namespace if it does not exist (default: true) |
| reuseValues? | boolean | Reuse previously installed values on upgrade, only overriding what is explicitly set (default: false) |
| waitSeconds? | number | Seconds to wait for resources to be ready (default: 300, 0 to skip) |
applyManifestApply a Kubernetes manifest using kubectl apply
| Argument | Type | Description |
|---|---|---|
| manifest | string | YAML manifest to apply |
uninstallUninstall a Helm release
| Argument | Type | Description |
|---|---|---|
| releaseName | string | Helm release name to uninstall |
| namespace | string | Kubernetes namespace of the release |
statusGet the status of an installed Helm release
| Argument | Type | Description |
|---|---|---|
| releaseName | string | Helm release name |
| namespace | string | Kubernetes namespace of the release |
Resources
release(infinite)— A Helm release installed in the cluster
@rjeschmi/k3sv2026.03.02.1k3s.ts
Global Arguments
| Argument | Type | Description |
|---|---|---|
| sshHost | string | Unraid SSH hostname or IP |
| sshUser | string | SSH username (root on Unraid) |
| sshPrivateKey? | string | SSH private key for Unraid (omit to rely on ssh-agent or ~/.ssh/ defaults) |
| vmSshUser | string | Username on the VM (created by cloud-init) |
| vmSshPrivateKey? | string | SSH 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
| Argument | Type | Description |
|---|---|---|
| vmName | string | VM name, used to discover IP via virsh |
| vmHost? | string | Override VM host (e.g. Tailscale hostname) — skips virsh IP discovery |
| timeoutSeconds? | number | Max seconds to wait (default: 600) |
uninstallUninstall k3s (and therefore Rancher) from the VM
| Argument | Type | Description |
|---|---|---|
| vmName | string | VM 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
| Argument | Type | Description |
|---|---|---|
| sshHost | string | Unraid SSH hostname or IP |
| sshUser | string | SSH username (root on Unraid) |
| sshPrivateKey? | string | SSH private key for Unraid (omit to rely on ssh-agent or ~/.ssh/ defaults) |
| vmSshUser | string | Username on the VM (created by cloud-init) |
| vmSshPrivateKey? | string | SSH 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
| Argument | Type | Description |
|---|---|---|
| vmName | string | VM name used to discover its IP via virsh on Unraid |
| vmHost? | string | Override 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
| Argument | Type | Description |
|---|---|---|
| rancherUrl | string | Rancher server URL (e.g. https://rancher.example.com) |
| rancherToken | string | Rancher API bearer token (e.g. token-xxxxx:yyyyyyyyy) |
| insecure? | boolean | Skip TLS certificate verification (for self-signed certs) |
createCredentialCreate OpenStack cloud credentials in Rancher
| Argument | Type | Description |
|---|---|---|
| name | string | Credential name in Rancher |
| authUrl | string | OpenStack Keystone auth URL |
| username | string | OpenStack username |
| password | string | OpenStack password |
| domainName? | string | OpenStack domain name (default: Default) |
| tenantName | string | OpenStack project/tenant name |
| region? | string | OpenStack region |
createNodeTemplateCreate an OpenStack node template in Rancher
| Argument | Type | Description |
|---|---|---|
| name | string | Node template name |
| credentialId | string | Cloud credential ID (from createCredential output) |
| authUrl | string | OpenStack Keystone auth URL |
| username | string | OpenStack username |
| password | string | OpenStack password |
| tenantName | string | OpenStack project/tenant name |
| domainName? | string | OpenStack domain name (default: Default) |
| region? | string | OpenStack region |
| flavorName | string | OpenStack flavor (e.g. m1.medium) |
| imageName? | string | OpenStack image name (mutually exclusive with imageId) |
| imageId? | string | OpenStack image UUID (mutually exclusive with imageName) |
| networkName | string | OpenStack network name |
| secGroups? | string | Comma-separated security group names (default: default) |
| keypairName? | string | OpenStack keypair name for SSH access |
| sshUser? | string | SSH username on provisioned nodes (default: ubuntu) |
| rootDiskSizeGb? | number | Root disk size in GB (default: 20) |
provisionClusterProvision an RKE cluster on OpenStack via Rancher with control-plane and worker node pools
| Argument | Type | Description |
|---|---|---|
| name | string | Cluster name |
| nodeTemplateId | string | Node template ID (from createNodeTemplate output) |
| kubernetesVersion? | string | Kubernetes version (e.g. v1.28.x-rancher1-1; default: Rancher's default) |
| controlPlaneCount? | number | Number of control plane + etcd nodes (default: 1) |
| workerCount? | number | Number of worker nodes (default: 2) |
| waitSeconds? | number | Max 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
| Argument | Type | Description |
|---|---|---|
| clusterName | string | RKE cluster name |
| authUrl | string | OpenStack Keystone auth URL |
| username | string | OpenStack username |
| password | string | OpenStack password |
| tenantName | string | OpenStack project/tenant name |
| domainName? | string | OpenStack domain name (default: Default) |
| region? | string | OpenStack region |
| flavorName | string | OpenStack flavor (e.g. d2-2, m1.medium) |
| imageName? | string | OpenStack image name (mutually exclusive with imageId) |
| imageId? | string | OpenStack image UUID (mutually exclusive with imageName) |
| networkName | string | OpenStack network name |
| secGroups? | string | Comma-separated security group names (default: default) |
| keypairName? | string | OpenStack keypair name for SSH access |
| sshUser? | string | SSH user on provisioned nodes (default: ubuntu) |
| rootDiskSizeGb? | number | Root disk size in GB (default: 20) |
| controlPlaneCount? | number | Number of control plane + etcd nodes (default: 1) |
| workerCount? | number | Number of worker nodes (default: 2) |
| kubernetesVersion? | string | Kubernetes version (default: Rancher default) |
| waitSeconds? | number | Max seconds to wait for cluster active (default: 900) |
| tailscaleAuthKey? | string | Tailscale auth key — when provided, nodes will auto-join the tailnet via cloud-init |
| tailscaleOperatorClientId? | string | Tailscale OAuth client ID — when provided, tailscale-operator is installed on the cluster |
| tailscaleOperatorClientSecret? | string | Tailscale OAuth client secret — required when tailscaleOperatorClientId is set |
| deleteAfterHours? | number | Schedule cluster auto-deletion after this many hours (default: 12, set to 0 to disable) |
getKubeconfigGenerate and print the kubeconfig for a provisioned cluster
| Argument | Type | Description |
|---|---|---|
| clusterId | string | Management cluster ID (c-m-xxxxx from cluster resource) |
scheduleDeleteDeploy a CronJob in the Rancher local cluster that deletes a provisioned cluster after a TTL
| Argument | Type | Description |
|---|---|---|
| clusterName | string | Cluster name to delete |
| delayHours? | number | Hours before deletion (default: 12) |
deleteClusterDelete an OpenStack cluster from Rancher
| Argument | Type | Description |
|---|---|---|
| clusterName | string | Cluster name to delete |
fetchSshKeysFetch SSH private keys for all machines in a cluster from Rancher's machine-state secrets
| Argument | Type | Description |
|---|---|---|
| clusterName | string | Cluster 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
| Argument | Type | Description |
|---|---|---|
| host | string | Unraid server URL, e.g. https://tower.local |
| apiKey | string | Unraid API key from Settings > API Keys |
listList all virtual machines on the Unraid server
startStart a virtual machine
| Argument | Type | Description |
|---|---|---|
| vmUuid | string | UUID of the VM to control |
stopGracefully stop a VM via ACPI signal
| Argument | Type | Description |
|---|---|---|
| vmUuid | string | UUID of the VM to control |
forceStopForce power off a VM immediately
| Argument | Type | Description |
|---|---|---|
| vmUuid | string | UUID of the VM to control |
pausePause a running VM
| Argument | Type | Description |
|---|---|---|
| vmUuid | string | UUID of the VM to control |
resumeResume a paused VM
| Argument | Type | Description |
|---|---|---|
| vmUuid | string | UUID 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
| Argument | Type | Description |
|---|---|---|
| sshHost | string | Unraid SSH hostname or IP |
| sshUser | string | SSH username (root on Unraid) |
| sshPrivateKey | string | SSH private key in PEM format |
| domainsDir | string | VM storage base directory |
provisionProvision a new Ubuntu cloud-init VM on Unraid via SSH + libvirt
| Argument | Type | Description |
|---|---|---|
| name? | string | VM name / hostname (auto-generated as rancher-<6 chars> if omitted) |
| cpus | number | Number of vCPUs |
| memoryMiB | number | RAM in MiB |
| diskSizeGb | number | Disk size in GB |
| ubuntuVersion | enum | Ubuntu version |
| sshPublicKey? | string | SSH public key to inject (omit when using Tailscale SSH) |
| username | string | Unix username to create |
| mounts? | array | Host paths to expose inside the VM via virtio-9p |
| tailscaleAuthKey? | string | Tailscale auth key — when provided, the VM will auto-join the tailnet via cloud-init |
restartReboot a provisioned VM
| Argument | Type | Description |
|---|---|---|
| name | string | VM name to restart |
dumpXmlDump the libvirt domain XML for an existing VM (for inspection)
| Argument | Type | Description |
|---|---|---|
| name | string | VM name to inspect |
verifyWait for a provisioned VM to boot and verify cloud-init completed successfully
| Argument | Type | Description |
|---|---|---|
| name | string | VM name to verify |
| expectedHostname | string | Expected hostname after cloud-init |
| expectedUsername | string | Expected Unix username created by cloud-init |
| userSshPrivateKey | string | Private SSH key corresponding to the public key injected during provisioning |
| timeoutSeconds? | number | Max seconds to wait for VM to boot (default 300) |
destroyDestroy a provisioned VM and remove its disk files
| Argument | Type | Description |
|---|---|---|
| name | string | VM name to destroy |
| keepVm? | boolean | If 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
| Argument | Type | Description |
|---|---|---|
| username | string | OpenStack username |
| password | string | OpenStack password |
| projectName | string | OpenStack project / tenant name |
| region? | string | OpenStack region (e.g. BHS5) |
provisionProvision a new Ubuntu VM on OpenStack via Nova API with cloud-init
| Argument | Type | Description |
|---|---|---|
| name | string | VM name / hostname |
| imageId | string | OpenStack image UUID |
| flavorId | string | OpenStack flavor UUID or name |
| networkId | string | OpenStack network UUID for the primary NIC |
| sshPublicKey | string | SSH public key to inject via cloud-init |
| username | string | Unix username to create via cloud-init |
verifyVerify that a provisioned VM is reachable via SSH and cloud-init completed
| Argument | Type | Description |
|---|---|---|
| name | string | VM name to verify (used as instance key) |
| expectedHostname | string | Expected hostname after cloud-init |
| expectedUsername | string | Expected Unix username created by cloud-init |
| userSshPrivateKey? | string | Private SSH key for the provisioned user (omit to rely on ssh-agent or ~/.ssh/ defaults) |
destroyDestroy an OpenStack server and release its floating IP
| Argument | Type | Description |
|---|---|---|
| name | string | VM name to destroy |
startStart (unpause/unshelve) an OpenStack server
| Argument | Type | Description |
|---|---|---|
| name | string | VM name to start |
stopStop (pause) an OpenStack server
| Argument | Type | Description |
|---|---|---|
| name | string | VM 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
| Argument | Type | Description |
|---|---|---|
| sshHost | string | Hypervisor SSH hostname or IP |
| sshUser | string | SSH username (e.g. root) |
| sshPrivateKey? | string | SSH private key in PEM format (omit to rely on ssh-agent or ~/.ssh/ defaults) |
| domainsDir | string | VM storage base directory |
provisionProvision a new Ubuntu cloud-init VM via SSH + libvirt. Supports multiple NICs and isolated network creation.
| Argument | Type | Description |
|---|---|---|
| name | string | VM name / hostname |
| cpus | number | Number of vCPUs |
| memoryMiB | number | RAM in MiB |
| diskSizeGb | number | Disk size in GB |
| ubuntuVersion | enum | Ubuntu version |
| sshPublicKey | string | SSH public key to inject |
| username | string | Unix username to create |
| managementBridge? | string | Host bridge for the primary NIC (e.g. br0) — VM gets a real LAN IP. If omitted, managementNetwork is used instead. |
| managementNetwork | string | Libvirt network for the primary NIC when managementBridge is not set |
| extraNics? | array | Additional NICs to attach (e.g. an isolated Neutron external network) |
| isolatedNetworks? | array | Isolated libvirt networks to create if they do not exist (no DHCP, no NAT) |
| mounts? | array | Host paths to expose inside the VM via virtio-9p |
| tailscaleAuthKey? | string | Tailscale auth key — when provided, installs Tailscale and joins the tailnet via cloud-init |
| writeFiles? | array | Extra files to write via cloud-init write_files |
| extraPackages? | array | Additional apt packages to install via cloud-init |
| extraRuncmd? | array | Additional shell commands appended to cloud-init runcmd |
restartReboot a provisioned VM
| Argument | Type | Description |
|---|---|---|
| name | string | VM name to restart |
dumpXmlDump the libvirt domain XML for an existing VM (for inspection)
| Argument | Type | Description |
|---|---|---|
| name | string | VM name to inspect |
verifyWait for a provisioned VM to boot and verify cloud-init completed successfully
| Argument | Type | Description |
|---|---|---|
| name | string | VM name to verify |
| expectedHostname | string | Expected hostname after cloud-init |
| expectedUsername | string | Expected Unix username created by cloud-init |
| userSshPrivateKey? | string | Private SSH key for the provisioned user (omit to rely on ssh-agent or ~/.ssh/ defaults) |
| timeoutSeconds? | number | Max seconds to wait for VM to boot (default 300) |
listList all virtual machines defined in libvirt
startStart a VM via virsh
| Argument | Type | Description |
|---|---|---|
| name | string | VM name to restart |
stopGracefully stop a VM via ACPI signal (virsh shutdown)
| Argument | Type | Description |
|---|---|---|
| name | string | VM name to stop |
forceStopForce power off a VM immediately (virsh destroy)
| Argument | Type | Description |
|---|---|---|
| name | string | VM name to force-stop |
pausePause (suspend) a running VM
| Argument | Type | Description |
|---|---|---|
| name | string | VM name to pause |
resumeResume a paused VM
| Argument | Type | Description |
|---|---|---|
| name | string | VM name to resume |
destroyDestroy a VM, remove its disk files, and optionally remove libvirt networks
| Argument | Type | Description |
|---|---|---|
| name | string | VM name to destroy |
| keepVm? | boolean | If true, skip destruction and leave the VM running |
| removeNetworks? | array | Libvirt 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
2026.03.03.157.8 KBMar 3, 2026
VM provisioning and management for libvirt/QEMU and OpenStack, plus k3s, Helm, Rancher, and cloud-init utilities.
linux-x86_64linux-aarch64darwin-x86_64darwin-aarch64