Skip to main content

Python Wrapper for the Proxmox 2.x API (HTTP and SSH)

Project description

master branch: master_build_status master_coverage_status pypi_version pypi_downloads

develop branch: develop_build_status develop_coverage_status

What does it do and what’s different?

Proxmoxer is a wrapper around the Proxmox REST API v2.

It was inspired by slumber, but it dedicated only to Proxmox. It allows to use not only REST API over HTTPS, but the same api over ssh and pvesh utility.

Like Proxmoxia it dynamically creates attributes which responds to the attributes you’ve attempted to reach.

Installation

pip install proxmoxer

For ‘https’ backend install requests

pip install requests

For ‘ssh_paramiko’ backend install paramiko

pip install paramiko

Short usage information

The first thing to do is import the proxmoxer library and create ProxmoxAPI instance.

from proxmoxer import ProxmoxAPI
proxmox = ProxmoxAPI('proxmox_host', user='admin@pam',
                     password='secret_word', verify_ssl=False)

This will connect by default through the ‘https’ backend.

It is possible to use already prepared public/private key authentication. It is possible to use ssh-agent also.

from proxmoxer import ProxmoxAPI
proxmox = ProxmoxAPI('proxmox_host', user='proxmox_admin', backend='ssh_paramiko')

Please note, https-backend needs ‘requests’ library, ssh_paramiko-backend needs ‘paramiko’ library, openssh-backend needs ‘openssh_wrapper’ library installed.

Queries are exposed via the access methods get, post, put and delete. For convenience added two synonyms: create for post, and set for put.

for node in proxmox.nodes.get():
    for vm in proxmox.nodes(node['node']).openvz.get():
        print "{0}. {1} => {2}" .format(vm['vmid'], vm['name'], vm['status'])

>>> 141. puppet-2.london.baseblack.com => running
    101. munki.london.baseblack.com => running
    102. redmine.london.baseblack.com => running
    140. dns-1.london.baseblack.com => running
    126. ns-3.london.baseblack.com => running
    113. rabbitmq.london.baseblack.com => running

same code can be rewritten in the next way:

for node in proxmox.get('nodes'):
    for vm in proxmox.get('nodes/%s/openvz' % node['node']):
        print "%s. %s => %s" %  (vm['vmid'], vm['name'], vm['status'])

for example next lines do the same job:

proxmox.nodes(node['node']).openvz.get()
proxmox.nodes(node['node']).get('openvz')
proxmox.get('nodes/%s/openvz' % node['node'])
proxmox.get('nodes', node['node'], 'openvz')

Some more examples:

for vm in proxmox.cluster.resources.get(type='vm'):
    print("{0}. {1} => {2}" .format(vm['vmid'], vm['name'], vm['status']))
node = proxmox.nodes('proxmox_node')
pprint(node.storage('local').content.get())

or the with same results

node = proxmox.nodes.proxmox_node()
pprint(node.storage.local.content.get())

Example of creation of lxc container:

node = proxmox.nodes('proxmox_node')
node.lxc.create(vmid=202,
    ostemplate='local:vztmpl/debian-9.0-standard_20170530_amd64.tar.gz',
    hostname='debian-stretch',
    storage='local',
    memory=512,
    swap=512,
    cores=1,
    password='secret',
    net0='name=eth0,bridge=vmbr0,ip=192.168.22.1/20,gw=192.168.16.1')

Example of template upload:

local_storage = proxmox.nodes('proxmox_node').storage('local')
local_storage.upload.create(content='vztmpl',
    filename=open(os.path.expanduser('~/templates/debian-6-my-core_1.0-1_i386.tar.gz'))))

Example of rrd download:

response = proxmox.nodes('proxmox').rrd.get(ds='cpu', timeframe='hour')
with open('cpu.png', 'wb') as f:
    f.write(response['image'].encode('raw_unicode_escape'))

Example of usage of logging:

# now logging debug info will be written to stdout
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s:%(name)s: %(message)s')

Roadmap

  • write tests

  • support other actual python versions

  • add optional validation of requests

  • add some shortcuts for convenience

History

1.0.1 (2017-12-02)

  • LICENSE file now included in tarball

  • Added verify_ssl parameter to ProxmoxHTTPAuth (Walter Doekes)

1.0.0 (2017-11-12)

0.2.5 (2017-02-12)

0.2.4 (2016-05-02)

0.2.3 (2016-01-20)

0.2.2 (2016-01-19)

0.2.1 (2015-05-02)

0.2.0 (2015-03-21)

  • Https will now raise AuthenticationError when appropriate. (scap1784)

  • Preliminary python 3 compatibility. (wdoekes)

  • Additional example. (wdoekes)

0.1.7 (2014-11-16)

  • Added ignore of “InsecureRequestWarning: Unverified HTTPS request is being made…” warning while using https (requests) backend.

0.1.4 (2013-06-01)

  • Added logging

  • Added openssh backend

  • Tests are reorganized

0.1.3 (2013-05-30)

  • Added next tests

  • Bugfixes

0.1.2 (2013-05-27)

  • Added first tests

  • Added support for travis and coveralls

  • Bugfixes

0.1.1 (2013-05-13)

  • Initial try.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

proxmoxer-1.0.1.tar.gz (12.5 kB view details)

Uploaded Source

File details

Details for the file proxmoxer-1.0.1.tar.gz.

File metadata

  • Download URL: proxmoxer-1.0.1.tar.gz
  • Upload date:
  • Size: 12.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for proxmoxer-1.0.1.tar.gz
Algorithm Hash digest
SHA256 59e7cee392afdd928ada619a66d2633028f1c07161c62debab616fec378819b7
MD5 b688b603ea286243066eec30e4f2caac
BLAKE2b-256 a952f6759422d3f83ae15f305d6387ad5f8fdac6895b638e611f78199188dd62

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page