| name | kcli-vm-operations |
| description | Guides VM lifecycle operations with kcli. Use when creating, managing, or troubleshooting virtual machines across providers. |
Important: Before creating a VM, always run kcli create vm -h to check the latest available flags and examples.
kcli VM Operations
VM Lifecycle Commands
Create VM
kcli create vm -i fedora40 myvm
kcli create vm -i centos9stream -P memory=4096 -P numcpus=4 -P disks=[20,50] myvm
kcli create vm -p myprofile myvm
kcli create vm -c 3 myvm
kcli create vm -P start=false -P memory=20480 -P numcpus=16 -P disks=[200] -P uefi=true -P nets=[default] -c 3 myvm
kcli create vm -i centos9stream -P nets=['{"name":"default","ip":"192.168.122.250","netmask":"24","gateway":"192.168.122.1"}'] myvm
kcli create vm -i centos9stream -P nets=['{"name":"default","reservedns":"true"}'] myvm
kcli create vm -i centos9stream -P nets=['{"name":"default","ip":"192.168.122.250","reserveip":"true"}'] myvm
List VMs
kcli list vm
kcli list vm -o yaml
kcli list vm -o json
VM Info
kcli info vm myvm
kcli info vm myvm -f ip
kcli info vm myvm -o yaml
Start/Stop/Restart
kcli start vm myvm
kcli stop vm myvm
kcli restart vm myvm
Delete VM
kcli delete vm myvm
kcli delete vm myvm --yes
kcli delete vm myvm --snapshots
SSH Access
kcli ssh myvm
kcli ssh -u root myvm
kcli ssh -l myvm
Console Access
kcli console myvm
kcli console myvm --serial
Disk Operations
kcli create disk -s 20 -p default myvm
kcli create disk -s 50 --thin myvm
kcli delete disk myvm-disk1 myvm
kcli list disk
NIC Operations
kcli create nic -n mynetwork myvm
kcli delete nic eth1 myvm
kcli update nic -n newnetwork myvm --index 0
Snapshots
kcli create snapshot myvm mysnapshot
kcli list snapshot myvm
kcli revert snapshot myvm mysnapshot
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.yml default section
- Provider-specific section in config.yml
- Profile definition (
~/.kcli/profiles.yml)
- Plan file parameters
- Command-line
-P overrides
Common Parameters
numcpus: 2
memory: 512
cpumodel: host-model
pool: default
disks:
- size: 20
- size: 50
pool: otherpool
thin: true
nets:
- default
- name: mynet
ip: 192.168.1.10
netmask: 255.255.255.0
gateway: 192.168.1.1
mac: aa:bb:cc:dd:ee:ff
image: fedora40
cloudinit: true
keys:
- ssh-rsa AAAA... user@host
cmds:
- dnf -y update
- systemctl enable nginx
files:
- path: /etc/myconfig
content: |
key=value
Images
kcli list image
kcli download image fedora40
kcli download image centos9stream -p mypool
kcli delete image fedora40
kcli list available-images
Profiles
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 nginx
Usage:
kcli create vm -p webserver myweb
Update Operations
kcli update vm myvm -P memory=8192
kcli update vm myvm -P numcpus=4
kcli update vm myvm -P information="Production server"
Clone VM
kcli clone vm myvm myclone
kcli clone vm myvm myclone --full
Export VM
kcli export vm myvm
kcli export vm myvm --image myimage
Troubleshooting
VM Won't Start
kcli -d start vm myvm
sudo virsh list --all
sudo virsh start myvm
No IP Address
kcli info network default
kcli ssh myvm
cat /var/log/cloud-init.log
SSH Connection Issues
kcli ssh -l myvm
kcli info vm myvm -f ip
ssh -i ~/.kcli/id_rsa user@<ip>