proxmox 2.x api(http和ssh)的python包装器

proxmoxer的Python项目详细描述


主分支:master_build_statusmaster_coverage_statuspypi_versionpypi_downloads

开发分支:develop_build_statusdevelop_coverage_status

它有什么作用,有什么不同?

proxmoxer是Proxmox REST API v2的包装器。

它的灵感来自睡眠,但它只致力于proxmox。它不仅允许在https上使用rest api,而且还允许 ssh和pvesh工具上的相同api。

Proxmoxia一样,它动态创建响应 你试图达到的属性。

安装

pip install proxmoxer

对于“https”后端安装请求

pip install requests

对于“ssh_paramiko”后端安装paramiko

pip install paramiko

简短使用信息

首先要做的是导入proxmoxer库并创建proxmoxapi实例。

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

默认情况下,这将通过“https”后端进行连接。

可以使用已准备好的公钥/私钥身份验证。也可以使用ssh代理。

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

请注意,https后端需要'requests'库,ssh_paramiko-backend需要'paramiko'库, openssh后端需要安装“openssh_wrapper”库。

查询通过访问方法getpostputdelete公开。为方便起见,加了两个 同义词:create用于post,以及set用于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

同样的代码可以用下一种方式重写:

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'])

例如,下一行执行相同的操作:

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')

更多示例:

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())

或具有相同结果的

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

lxc容器的创建示例:

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')

创建同一个lxc容器的示例,该容器的参数位于dictorary中。 这种方法允许添加ssh-public-keys,而不会出现语法错误。

newcontainer = { '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' }
node = proxmox.nodes('proxmox_node')
node.lxc.create(**newcontainer)

模板上传示例:

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'))))

RRD下载示例:

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'))

日志记录用法示例:

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

路线图

  • 编写测试
  • 支持其他实际的python版本
  • 添加请求的可选验证
  • 为方便起见,添加一些快捷方式

历史记录

1.0.3(1018-09-10)

1.0.2(2017-12-02)

  • 用测试重新包装的tarball

1.0.1(2017-12-02)

  • 许可证文件现在包含在tarball中
  • 向proxmoxhttpauth(Walter Doekes)添加了verify_ssl参数

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)

0.1.7(2014-11-16)

  • 在使用https(请求)后端时添加了忽略“不安全请求警告:正在发出未验证的https请求…”警告。

0.1.4(2013-06-01)

  • 添加了日志记录
  • 添加了openssh后端
  • 重新组织测试

0.1.3(2013-05-30)

  • 添加了下一个测试
  • 错误修复

0.1.2(2013-05-27)

  • 添加了第一个测试
  • 增加了对Travis和工作服的支持
  • 错误修复

0.1.1(2013-05-13)

  • 初次尝试。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Gson类中的java验证错误   If和elseif之间的java差异?   字典Java8地图。输入比较器   java连接到远程计算机以获得WMI支持   java如何使用改型处理JSON对象中的空值   在Java中使用Comparator时不可编译的源代码   java将Jar添加到JSP的运行时路径   带有随机对象的while循环的java大O时间复杂性   java可以在不考虑参数的情况下模拟方法吗?   java我有一个简单的代码,它不工作。无法修复错误“println”   向eclipse添加Xively java库   java是否可以启用本机代码的缓存?   全局变量如何在Java中的所有类之间共享要使用的语言环境?   Java内存游戏如何翻转单个卡?