GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - fmenabe/python-kvm: Module for managing KVM hosts.

BranchesTags
Open more actions menu

Latest commit

 

History

207 Commits
207 Commits

Folders and files

NameName
Last commit message
Last commit date
doc
doc
 
 
kvm
kvm
 
 
.gitignore
.gitignore
 
 
LICENCE.txt
LICENCE.txt
 
 
MANIFEST.in
MANIFEST.in
 
 
README.rst
README.rst
 
 
setup.py
setup.py
 
 

Repository files navigation

python-kvm

This module aims to manage KVM hypervisors. For this it use the unix module which allow to manage Unix-like systems, both locally and remotely, in the same by overloading class instances. This module is just a wrapper to the virsh command. It parse outputs of the virsh command (both XML and text). Commands are grouped in childs objects accessible via properties.

Installation

This module is compatible with python2.7 and python 3.*. The module is on PyPi so you can use the pip command for installing it.

For example, to use kvm in a virtualenv:

$ virtualenv env/ --prompt "(myprog)"
$ . ./env/bin/activate
(myprog) $ pip install kvm

Otherwise sources are on github: https://github.com/fmenabe/python-kvm

Usage

You need to import the necessary classes from unix module. An hypervisor is represented by the Hypervisor object and must wrap an object of type unix.Local or unix.Remote. It theorically support any Unix system, but disks manipulations need nbd module to be loaded so it is better to use an unix.linux.Linux host.

>>> from unix import Local, Remote, UnixError
>>> from unix.linux import Linux
>>> import kvm
>>> import json
>>> localhost = kvm.Hypervisor(Linux(Local()))
>>> localhost.hypervisor.nodeinfo()
{'nb_cpu': 1,
 'nb_threads_per_core': 2,
 'memory': 16331936,
 'numa_cells': 1,
 'cpu_model': 'x86_64',
 'nb_cores_per_cpu': 4,
 'nb_cores': 8,
 'cpu_freq': 1340}
>>> localhost.list_domains(all=True)
{'guest1': {'id': -1, 'state': 'shut off'}}
{'guest2': {'id': 1, 'state': 'running'}}
>>> localhost.domain.start('guest1')
# Wait a few seconds for the domain to start.
>>> localhost.domain.state('guest1')
'running'
>>> localhost.domain.id('guest1')
2
>>> print(json.dumps(localhost.domain.conf('guest1'), indent=2))
# json is use for pretty printing the dictionnary containing the
# configuration.
{
  "@type": "kvm",
  "name": "guest1",
  "uuid": "ed68d942-5d4b-7bba-4d74-7d44d73779d3",
  "memory": {
    "@unit": "KiB",
    "#text": "2097152"
  },
  ...
}
>>> localhost.list_networks()
{'default': {'autostart': True, 'persistent': True, 'state': 'active'}}

>>> host = Remote()
>>> host.connect('hypervisor1')
>>> host = kvm.Hypervisor(Linux(host))
>>> host.hypervisor.nodeinfo()
{'cores_per_socket': 12,
 'cpu_frequency': '2200 MHz',
 'cpu_model': 'x86_64',
 'cpu_sockets': 2,
 'cpus': 24,
 'memory_size': '98974432 kB',
 'numa_cells': 1,
 'threads_per_core': 1}
>>> host.list_domains(all=True)
{'guest1': {'id': 1, 'state': 'running'}}
{'guest2': {'id': 2, 'state': 'running'}}
>>> host.domain.shutdown('guest2')
# Wait for the domain to stop.
>>> host.domain.state('guest1')
'shut off'

# Using the context manager for the connecion.
>>> from unix.linux as linux, kvm
>>> with linux.connect('hypervisor1') as host:
...   host = kvm.Hypervisor(host)
...   host.hypervisor.node_info()

About

Module for managing KVM hosts.

Topics

kvmpythonvirsh

Resources

Readme
License
Activity

Stars

50 stars

Watchers

4 watching

Forks

17 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.