{"id":28208218,"url":"https://github.com/kebairia/kvmcli","last_synced_at":"2025-06-12T08:31:49.217Z","repository":{"id":153894458,"uuid":"631016717","full_name":"kebairia/kvmcli","owner":"kebairia","description":"A CLI for managing virtual machines in a KVM-based cluster.","archived":false,"fork":false,"pushed_at":"2025-06-03T18:56:28.000Z","size":391,"stargazers_count":9,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-04T04:06:49.226Z","etag":null,"topics":["console","go-libvirt","golang","kvm","toml","virtualization","yaml"],"latest_commit_sha":null,"homepage":"https://zakariakebairia.com/kvmcli","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kebairia.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-04-21T17:52:10.000Z","updated_at":"2025-06-03T18:56:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"8abfefb7-f152-438f-963a-f1a0cf02a9ac","html_url":"https://github.com/kebairia/kvmcli","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/kebairia/kvmcli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kebairia%2Fkvmcli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kebairia%2Fkvmcli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kebairia%2Fkvmcli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kebairia%2Fkvmcli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kebairia","download_url":"https://codeload.github.com/kebairia/kvmcli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kebairia%2Fkvmcli/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259429874,"owners_count":22856136,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["console","go-libvirt","golang","kvm","toml","virtualization","yaml"],"created_at":"2025-05-17T14:11:56.345Z","updated_at":"2025-06-12T08:31:49.210Z","avatar_url":"https://github.com/kebairia.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kvmcli\n\n**kvmcli** is a command-line interface (CLI) tool for managing KVM (Kernel-based Virtual Machine) virtual machines. Inspired by Kubernetes’ kubectl, kvmcli provides a declarative way to create, delete, and manage VMs using YAML configuration files.\n\n## Features\n\n- **Declarative VM Management:** Define virtual machines using a YAML manifest.\n- **Create and Delete VMs:** Easily provision new VMs or remove existing ones.\n- **List VM Information:** Retrieve details such as CPU, memory, disk, network status, and more.\n- **Overlay Disk Creation:** Automatically create overlay disk images for VMs.\n- **Modular Commands:** Built using Cobra for a structured and extendable CLI.\n\n## Prerequisites\n\n- [Go](https://golang.org) 1.16 or later.\n- [libvirt](https://libvirt.org/) installed and properly configured.\n- [qemu-img](https://www.qemu.org/docs/master/tools/qemu-img.html) for handling disk image overlays.\n- A valid YAML configuration file to define your VM(s).\n\n## Installation\n\nClone the repository and build the binary:\n\n```bash\ngit clone https://github.com/kebairia/kvmcli.git\ncd kvmcli\ngo build -o kvmcli .\n```\n\nAlternatively, install using:\n\n```bash\ngo install github.com/kebairia/kvmcli@latest\n```\n\n## Usage\n\nkvmcli uses a command structure similar to kubectl. Below are some example commands:\n\n### Create VM(s)\n\nProvision VM(s) defined in your YAML configuration file:\n\n```bash\nkvmcli create -f /path/to/vm-config.yaml\n```\n\n### Delete VM(s)\n\nDelete VM(s) as defined in your configuration file. Use the --all flag to delete all VMs:\n\n```bash\n\nkvmcli delete -f /path/to/vm-config.yaml\n# Or, to delete all VMs:\nkvmcli delete --all\n```\n\n### List VM Information\n\nDisplay information about your VMs:\n\n```bash\nkvmcli get vm -f /path/to/vm-config.yaml\n```\n\nAdditional subcommands include:\n\n- Snapshots: kvmcli get snapshot\n\n- Networks: kvmcli get network\n\n### Initialize a YAML Template\n\nGenerate a template file with a sample VM definition:\n\n```bash\nkvmcli init\n```\n\nThis command creates a starting YAML file to help you define your VM(s).\n\n## Configuration File Format\n\nThe YAML configuration file defines the virtual machine properties. An example configuration:\n\n```yaml\napiVersion: kvmcli/v1\nkind: VirtualMachine\nmetadata:\n  name: myvm01\n  namespace: homelab\n  labels:\n    role: role01\n    environment: production\nspec:\n  cpu: 2\n  memory: 4096\n  image: \"rocky95\"\n  disk:\n    size: \"20G\"\n  network:\n    name: homelab\n    macAddress: \"02:A3:10:00:01:01\"\n  autostart: true\n```\n\nThis example is parsed by the configuration loader defined in `load_manifest.go`.\n\n## Project Structure\n\n```graphql\n\nkvmcli/\n├── cmd/                        # Cobra command definitions\n│   ├── root.go                 # Root command and subcommand registration.\n│   ├── create_cmd.go           # VM creation command.\n│   ├── delete_cmd.go           # VM deletion command.\n│   └── list_cmd.go             # VM info retrieval command.\n├── internal/\n│   ├── config/                 # YAML configuration parsing.\n│   ├── logger/                 # Logging utility\n│   ├── operations/             # libvirt connection and initialization.\n│   │   └── init_cmd.go         # Command for initializing a YAML template.\n│   └── operations/vms/         # VM operations\n│       ├── create.go           # Creating VMs and overlay disk images.\n│       ├── delete.go           # Deleting VMs and cleaning up disk images.\n│       ├── list.go             # Listing and retrieving VM information.\n│       └── prepare_vm.go       # Preparing VMs by creating overlay images.\n└── README.md\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkebairia%2Fkvmcli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkebairia%2Fkvmcli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkebairia%2Fkvmcli/lists"}