kcli-vm-operations
π―Skillfrom karmab/kcli
Manages virtual machine lifecycle operations across providers using kcli, enabling creation, configuration, and management of VMs with flexible commands.
Installation
npx skills add https://github.com/karmab/kcli --skill kcli-vm-operationsSkill Details
Guides VM lifecycle operations with kcli. Use when creating, managing, or troubleshooting virtual machines across providers.
Overview
# 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@
```
More from this repository6
Manages and interacts with virtual machines across multiple cloud and virtualization providers using a unified command-line interface for deployment, configuration, and lifecycle management.
Deploys and manages Kubernetes clusters across multiple distributions using kcli, supporting OpenShift, k3s, kubeadm, and cloud provider platforms.
Validates kcli code quality by running linting checks, spelling verification, and comprehensive test suites for the project.
Guides developers in implementing custom virtualization providers for kcli by defining a standardized interface and core method requirements.
Configures and manages cloud provider settings for kcli, supporting multiple providers like KVM, AWS, GCP, and Azure through a unified ~/.kcli/config.yml file.
Guides developers in creating kcli plan files with Jinja2 templating for deploying VMs, networks, and infrastructure resources efficiently.