kcli VM Operations
VM Lifecycle Commands
Create VM
bash
# 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
List VMs
bash
kcli list vm # All VMs kcli list vm -o yaml # YAML output kcli list vm -o json # JSON output
VM Info
bash
kcli info vm myvm # Full info kcli info vm myvm -f ip # Specific field kcli info vm myvm -o yaml # YAML format
Start/Stop/Restart
bash
kcli start vm myvm kcli stop vm myvm kcli restart vm myvm
Delete VM
bash
kcli delete vm myvm # With confirmation kcli delete vm myvm --yes # Skip confirmation kcli delete vm myvm --snapshots # Delete snapshots too
SSH Access
bash
kcli ssh myvm # SSH as default user kcli ssh -u root myvm # SSH as specific user kcli ssh -l myvm # List SSH command only
Console Access
bash
kcli console myvm # Graphical console (VNC/SPICE) kcli console myvm --serial # Serial console
Disk Operations
bash
# 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 disk
NIC Operations
bash
# Add NIC kcli create nic -n mynetwork myvm # Delete NIC kcli delete nic eth1 myvm # Update NIC kcli update nic -n newnetwork myvm --index 0
Snapshots
bash
# 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 mysnapshot
VM 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
yaml
# 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=value
Images
bash
# 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-images
Profiles
Profiles in ~/.kcli/profiles.yml:
yaml
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 nginx
Usage:
bash
kcli create vm -p webserver myweb
Update Operations
bash
# 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
bash
kcli clone vm myvm myclone kcli clone vm myvm myclone --full # Full clone (not linked)
Export VM
bash
kcli export vm myvm # Export to image kcli export vm myvm --image myimage # Custom image name
Troubleshooting
VM Won't Start
bash
kcli -d start vm myvm # Debug output sudo virsh list --all # Check libvirt state sudo virsh start myvm # Try direct start
No IP Address
bash
# Check DHCP is enabled on network kcli info network default # Check cloud-init completed kcli ssh myvm cat /var/log/cloud-init.log
SSH Connection Issues
bash
# 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>