بنقرة واحدة
kcli-vm-operations
// Guides VM lifecycle operations with kcli. Use when creating, managing, or troubleshooting virtual machines across providers.
// Guides VM lifecycle operations with kcli. Use when creating, managing, or troubleshooting virtual machines across providers.
Guides deployment and management of Kubernetes clusters with kcli. Use when deploying OpenShift, k3s, kubeadm, or other Kubernetes distributions.
Guides kcli configuration and provider setup. Use when setting up ~/.kcli/config.yml, configuring providers (KVM, AWS, GCP, Azure, etc.), or managing profiles.
Guides creation of kcli plan files for deploying VMs, networks, and infrastructure. Use when writing YAML plans with Jinja2 templating or debugging plan execution issues.
Guides implementation of new virtualization providers for kcli. Use when adding support for a new cloud platform, hypervisor, or infrastructure provider.
Comprehensive guide for kcli usage. Use when creating VMs, deploying plans, managing clusters, or performing any kcli operations. Covers all common user workflows.
Guides testing and code quality for kcli. Use when writing tests, running linting, or validating changes before committing.
| name | kcli-vm-operations |
| description | Guides VM lifecycle operations with kcli. Use when creating, managing, or troubleshooting virtual machines across providers. |
# 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
kcli list vm # All VMs
kcli list vm -o yaml # YAML output
kcli list vm -o json # JSON output
kcli info vm myvm # Full info
kcli info vm myvm -f ip # Specific field
kcli info vm myvm -o yaml # YAML format
kcli start vm myvm
kcli stop vm myvm
kcli restart vm myvm
kcli delete vm myvm # With confirmation
kcli delete vm myvm --yes # Skip confirmation
kcli delete vm myvm --snapshots # Delete snapshots too
kcli ssh myvm # SSH as default user
kcli ssh -u root myvm # SSH as specific user
kcli ssh -l myvm # List SSH command only
kcli console myvm # Graphical console (VNC/SPICE)
kcli console myvm --serial # Serial console
# 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
# 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
# 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
Parameters are resolved in order (later overrides earlier):
kvirt/defaults.py - Built-in defaults~/.kcli/config.yml default section~/.kcli/profiles.yml)-P overrides# 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
# 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 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 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"
kcli clone vm myvm myclone
kcli clone vm myvm myclone --full # Full clone (not linked)
kcli export vm myvm # Export to image
kcli export vm myvm --image myimage # Custom image name
kcli -d start vm myvm # Debug output
sudo virsh list --all # Check libvirt state
sudo virsh start myvm # Try direct start
# Check DHCP is enabled on network
kcli info network default
# Check cloud-init completed
kcli ssh myvm
cat /var/log/cloud-init.log
# 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>