kcli-vm-operations
Skill658 starsChanged 13 days agoApache-2.0View on GitHub
Guides VM lifecycle operations with kcli. Use when creating, managing, or troubleshooting virtual machines across providers.
- Reads credentials
Files
Important: Before creating a VM, always run
kcli create vm -hto check the latest available flags and examples.
kcli VM Operations
VM Lifecycle Commands
Create VM
# From image
kcli create vm -i fedora40 myvm
# With parameters
kcli create vm -i centos9stream -P memory=4096 -P numcpus=4 -P disks=[20,50] myvm
# From profile
kcli create vm -p myprofile myvm
# Create multiple VMs at once with -c (count)
kcli create vm -c 3 myvm
# Create 3 VMs to emulate baremetal
kcli create vm -P start=false -P memory=20480 -P numcpus=16 -P disks=[200] -P uefi=true -P nets=[default] -c 3 myvm
# Create a VM with a static IP
kcli create vm -i centos9stream -P nets=['{"name":"default","ip":"192.168.122.250","netmask":"24","gateway":"192.168.122.1"}'] myvm
# Create a VM with a DNS reservation
kcli create vm -i centos9stream -P nets=['{"name":"default","reservedns":"true"}'] myvm
# Create a VM with a DHCP reservation
kcli create vm -i centos9stream -P nets=['{"name":"default","ip":"192.168.122.250","reserveip":"true"}'] myvmList VMs
kcli list vm # All VMs
kcli list vm -o yaml # YAML output
kcli list vm -o json # JSON outputVM Info
kcli info vm myvm # Full info
kcli info vm myvm -f ip # Specific field
kcli info vm myvm -o yaml # YAML formatStart/Stop/Restart
kcli start vm myvm
kcli stop vm myvm
kcli restart vm myvmDelete VM
kcli delete vm myvm # With confirmation
kcli delete vm myvm --yes # Skip confirmation
kcli delete vm myvm --snapshots # Delete snapshots tooSSH Access
kcli ssh myvm # SSH as default user
kcli ssh -u root myvm # SSH as specific user
kcli ssh -l myvm # List SSH command onlyConsole Access
kcli console myvm # Graphical console (VNC/SPICE)
kcli console myvm --serial # Serial consoleDisk Operations
# Add disk
kcli create disk -s 20 -p default myvm # 20GB disk
kcli create disk -s 50 --thin myvm # Thin provisioned
# Delete disk
kcli delete disk myvm-disk1 myvm
# List disks
kcli list diskNIC Operations
# Add NIC
kcli create nic -n mynetwork myvm
# Delete NIC
kcli delete nic eth1 myvm
# Update NIC
kcli update nic -n newnetwork myvm --index 0Snapshots
# Create snapshot
kcli create snapshot myvm mysnapshot
# List snapshots
kcli list snapshot myvm
# Revert to snapshot
kcli revert snapshot myvm mysnapshot
# Delete snapshot
kcli delete snapshot myvm mysnapshotVM Configuration
Configuration Hierarchy
Parameters are resolved in order (later overrides earlier):
kvirt/defaults.py- Built-in defaults~/.kcli/config.ymldefault section- Provider-specific section in config.yml
- Profile definition (
~/.kcli/profiles.yml) - Plan file parameters
- Command-line
-Poverrides
Common Parameters
# Compute
numcpus: 2 # CPU count
memory: 512 # Memory in MB
cpumodel: host-model # CPU model
# Storage
pool: default # Storage pool
disks: # Disk configuration
- size: 20 # Size in GB
- size: 50
pool: otherpool
thin: true
# Network
nets: # Network configuration
- default # Simple: network name only
- name: mynet # Advanced: with options
ip: 192.168.1.10
netmask: 255.255.255.0
gateway: 192.168.1.1
mac: aa:bb:cc:dd:ee:ff
# OS Customization
image: fedora40 # Base image
cloudinit: true # Enable cloud-init
keys: # SSH public keys
- ssh-rsa AAAA... user@host
cmds: # Post-boot commands
- dnf -y update
- systemctl enable nginx
files: # Files to inject
- path: /etc/myconfig
content: |
key=valueImages
# List available images
kcli list image
# Download image
kcli download image fedora40
kcli download image centos9stream -p mypool
# Delete image
kcli delete image fedora40
# List all available images (from kcli catalog)
kcli list available-imagesProfiles
Profiles in ~/.kcli/profiles.yml:
small:
numcpus: 1
memory: 1024
disks:
- size: 10
medium:
numcpus: 2
memory: 2048
disks:
- size: 20
webserver:
image: centos9stream
numcpus: 2
memory: 4096
nets:
- default
cmds:
- dnf -y install nginx
- systemctl enable --now nginxUsage:
kcli create vm -p webserver mywebUpdate Operations
# Update memory
kcli update vm myvm -P memory=8192
# Update CPUs
kcli update vm myvm -P numcpus=4
# Update metadata
kcli update vm myvm -P information="Production server"Clone VM
kcli clone vm myvm myclone
kcli clone vm myvm myclone --full # Full clone (not linked)Export VM
kcli export vm myvm # Export to image
kcli export vm myvm --image myimage # Custom image nameTroubleshooting
VM Won't Start
kcli -d start vm myvm # Debug output
sudo virsh list --all # Check libvirt state
sudo virsh start myvm # Try direct startNo IP Address
# Check DHCP is enabled on network
kcli info network default
# Check cloud-init completed
kcli ssh myvm
cat /var/log/cloud-init.logSSH Connection Issues
# Get SSH command details
kcli ssh -l myvm
# Check VM has IP
kcli info vm myvm -f ip
# Try direct SSH
ssh -i ~/.kcli/id_rsa user@<ip>In this repository7 other files it gives its agents.
- kcli-cluster-deploymentSkill
- kcli-configurationSkill
- kcli-ksushySkill
- kcli-plan-authoringSkill
- kcli-provider-developmentSkill
- kcliSkill
- kcli-testingSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

