kcli-provider-development

kcli Provider Development

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "kcli-provider-development" with this command: npx skills add karmab/kcli/karmab-kcli-kcli-provider-development

kcli Provider Development

Provider Architecture

Providers are located in kvirt/providers/ as subdirectories. Each provider implements the interface defined in kvirt/providers/sampleprovider.py (class Kbase ).

Required Implementation Steps

  1. Create Provider Directory

kvirt/providers/yourprovider/ ├── init.py # Contains your Kyourprovider class └── (optional helpers)

  1. Implement the Provider Class

Your class must:

  • Set self.conn attribute in init (set to None if backend unreachable)

  • Set self.debug from the debug parameter

  • Return standardized response dicts from methods

Return Value Pattern:

Success

return {'result': 'success'}

Failure

return {'result': 'failure', 'reason': "VM %s not found" % name}

  1. Core Methods to Implement

VM Lifecycle (required):

  • create()

  • Create VM with all parameters (cpus, memory, disks, nets, etc.)

  • start(name)

  • Start VM

  • stop(name, soft=False)

  • Stop VM

  • restart(name)

  • Restart VM (default calls start)

  • delete(name, snapshots=False, keep_disks=False)

  • Delete VM

  • list()

  • Return list of [name, state, ip, source, plan, profile]

  • info(name, output, fields, values, vm, debug)

  • Return VM details dict

  • exists(name)

  • Check if VM exists

  • status(name)

  • Return VM status

  • ip(name)

  • Return IP string

  • clone(old, new, full=False, start=False)

  • Clone VM

  • export(name, image=None)

  • Export VM as image

  • console(name, tunnel, tunnelhost, tunnelport, tunneluser, web)

  • Graphical console

  • serialconsole(name, web)

  • Serial console

Storage:

  • create_pool(name, poolpath, pooltype, user, thinpool)

  • delete_pool(name, full)

  • list_pools()

  • Return list of pool names

  • get_pool_path(pool)

  • Get pool path

  • add_disk(name, size, pool, thin, image, shareable, existing, interface, novm, overrides)

  • delete_disk(name, diskname, pool, novm)

  • create_disk(name, size, pool, thin, image)

  • Create standalone disk

  • list_disks()

  • Return dict {'diskname': {'pool': poolname, 'path': name}}

  • disk_exists(pool, name)

  • Check if disk exists

  • detach_disks(name)

  • Detach all disks from VM

Networking:

  • create_network(name, cidr, dhcp, nat, domain, plan, overrides)

  • delete_network(name, cidr, force)

  • update_network(name, dhcp, nat, domain, plan, overrides)

  • list_networks()

  • Return dict of networks

  • info_network(name)

  • Get network info

  • net_exists(name)

  • Check if network exists

  • network_ports(name)

  • List ports on network

  • add_nic(name, network, model)

  • delete_nic(name, interface)

  • update_nic(name, index, network)

  • Update NIC

Subnets (cloud providers):

  • create_subnet(name, cidr, dhcp, nat, domain, plan, overrides)

  • delete_subnet(name, force)

  • update_subnet(name, overrides)

  • list_subnets()

  • Return subnet dict

  • info_subnet(name)

  • Get subnet info

Images:

  • volumes(iso=False, extended=False)

  • List available images

  • add_image(url, pool, short, cmds, name, size, convert)

  • delete_image(image, pool)

Snapshots:

  • create_snapshot(name, base)

  • Create snapshot

  • delete_snapshot(name, base)

  • Delete snapshot

  • list_snapshots(base)

  • List snapshots (returns list)

  • revert_snapshot(name, base)

  • Revert to snapshot

Update Operations:

  • update_metadata(name, metatype, metavalue, append)

  • update_memory(name, memory)

  • update_cpus(name, numcpus)

  • update_start(name, start)

  • Set autostart

  • update_information(name, information)

  • Update info metadata

  • update_iso(name, iso)

  • Change attached ISO

  • update_flavor(name, flavor)

  • Change VM flavor

Buckets (object storage):

  • create_bucket(bucket, public)

  • Create storage bucket

  • delete_bucket(bucket)

  • Delete bucket

  • list_buckets()

  • List all buckets

  • list_bucketfiles(bucket)

  • List files in bucket

  • upload_to_bucket(bucket, path, overrides, temp_url, public)

  • download_from_bucket(bucket, path)

  • delete_from_bucket(bucket, path)

Security Groups (cloud providers):

  • create_security_group(name, overrides)

  • delete_security_group(name)

  • update_security_group(name, overrides)

  • list_security_groups(network)

  • List security groups

DNS:

  • reserve_dns(name, nets, domain, ip, alias, force, primary, instanceid)

  • list_dns_zones()

  • List DNS zones

  • dnsinfo(name)

  • Return (dnsclient, domain) for VM

Other:

  • close()

  • Clean up connection

  • info_host()

  • Return host info dict

  • vm_ports(name)

  • List ports on VM

  • list_flavors()

  • Return [[name, numcpus, memory], ...] if platform supports flavors

  1. Register Provider in config.py

Add import and instantiation in kvirt/config.py (around lines 102-220):

elif self.type == 'yourprovider': # Get provider-specific options option1 = options.get('option1') if option1 is None: error("Missing option1 in configuration. Leaving") sys.exit(1) try: from kvirt.providers.yourprovider import Kyourprovider except Exception as e: exception = e if debug else None dependency_error('yourprovider', exception) k = Kyourprovider(option1=option1, debug=debug)

  1. Add Dependencies to setup.py

YOURPROVIDER = ['required-package1', 'required-package2']

Add to extras_require dict:

extras_require={ 'yourprovider': YOURPROVIDER, # ... }

Add to ALL list if needed:

ALL = EXTRAS + AWS + ... + YOURPROVIDER

Info Method Structure

The info() method should build a dict with these keys:

  • name , autostart , plan , profile , image , ip , memory , numcpus , creationdate

  • nets : list of {'device': device, 'mac': mac, 'net': network, 'type': network_type}

  • disks : list of {'device': device, 'size': disksize, 'format': diskformat, 'type': drivertype, 'path': path}

  • snapshots : list of {'snapshot': snapshot, 'current': current}

Then call: common.print_info(yamlinfo, output=output, fields=fields, values=values)

Reference Implementations

Study these existing providers:

  • kvirt/providers/kvm/

  • Libvirt (most complete reference, ~4300 lines)

  • kvirt/providers/aws/

  • AWS cloud (~2200 lines)

  • kvirt/providers/gcp/

  • Google Cloud Platform (~2100 lines)

  • kvirt/providers/kubevirt/

  • KubeVirt on Kubernetes (~1900 lines)

  • kvirt/providers/vsphere/

  • VMware vSphere (~1900 lines)

  • kvirt/providers/azure/

  • Microsoft Azure (~1500 lines)

  • kvirt/providers/ibm/

  • IBM Cloud (~1500 lines)

  • kvirt/providers/ovirt/

  • oVirt/RHV (~1400 lines)

  • kvirt/providers/openstack/

  • OpenStack (~1350 lines)

  • kvirt/providers/proxmox/

  • Proxmox VE (~1200 lines)

  • kvirt/providers/hcloud/

  • Hetzner Cloud (~550 lines)

  • kvirt/providers/web/

  • Web-based provider (~530 lines)

  • kvirt/providers/fake/

  • Minimal stub for testing (~20 lines)

Provider Complexity Guide

Not all providers need to implement every method. Focus on:

  • Minimum viable: create , delete , list , info , start , stop , exists , status , ip

  • Storage: add_disk , delete_disk , list_disks , create_pool , delete_pool , list_pools

  • Networking: create_network , delete_network , list_networks , net_exists

  • Images: volumes , add_image , delete_image

  • Advanced: Snapshots, cloning, export, buckets, security groups (as needed)

Methods can return {'result': 'success'} with a print("not implemented") for optional features.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

kcli-vm-operations

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

kcli

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

kcli-testing

No summary provided by upstream source.

Repository SourceNeeds Review