度娘,谷歌都搜了一圈没有找到通过PVE API创建虚拟机的方式,

于是查官网自己试了试,部分代码抄的Sam Liu大佬的作业,感谢大佬。

python代码如下:

import requests
# self-sign CA warning
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) class Pve_api(object): def __init__(self, ip, username = None, password = None, port = '8006'):
self.ip = ip
self.username = username
self.password = password
self.port = port
self.ticket = None '''
####### ticket data structure
{
"data":{
"ticket": "PVE:root@pam:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"cap":{"vms":{"VM.Clone": 1, "VM.Backup": 1, "VM.Config.Options": 1, "VM.Snapshot": 1,…},
"CSRFPreventionToken": "6xxxxxx:/xxxxxxxxxxxxxxxx",
"username": "root@pam"
}
} ''' #获取ticket
def get_ticket(self):
path = '/api2/json/access/ticket'
url = 'https://' + self.ip + ':' + self.port + path
r = requests.post(url=url, json={"username": self.username, "password": self.password}, verify=False)
self.ticket = r.json() # dict rather than string
return r.json()
#查询节点列表
def ticket_node_list(self):
path = '/api2/json/nodes'
url = 'https://' + self.ip + ':' + self.port + path
headers = {'CSRFPreventionToken': self.ticket['data']['CSRFPreventionToken'], 'Cookie': 'PVEAuthCookie=' + self.ticket['data']['ticket']}
r = requests.get(url=url, headers=headers, verify=False)
return r.json() #查询虚拟机列表
def ticket_vm_list(self, node):
path = f'/api2/json/nodes/{node}/qemu'
url = 'https://' + self.ip + ':' + self.port + path
headers = {'CSRFPreventionToken': self.ticket['data']['CSRFPreventionToken'], 'Cookie': 'PVEAuthCookie=' + self.ticket['data']['ticket']}
r = requests.get(url=url, headers=headers, verify=False)
return r.json()
#获取虚拟机信息
def ticket_vm_current(self, node, vmid):
path = f'/api2/json/nodes/{node}/qemu/{vmid}/status/current'
url = 'https://' + self.ip + ':' + self.port + path
headers = {'CSRFPreventionToken': self.ticket['data']['CSRFPreventionToken'], 'Cookie': 'PVEAuthCookie=' + self.ticket['data']['ticket']}
r = requests.get(url=url, headers=headers, verify=False)
return r.json()
#启动虚拟机
def ticket_vm_start(self, node, vmid):
path = f'/api2/json/nodes/{node}/qemu/{vmid}/status/start'
url = 'https://' + self.ip + ':' + self.port + path
headers = {'CSRFPreventionToken': self.ticket['data']['CSRFPreventionToken'], 'Cookie': 'PVEAuthCookie=' + self.ticket['data']['ticket']}
r = requests.post(url=url, headers=headers, verify=False)
return r.json()
#关闭虚拟机
def ticket_vm_stop(self, node, vmid):
path = f'/api2/json/nodes/{node}/qemu/{vmid}/status/stop'
url = 'https://' + self.ip + ':' + self.port + path
headers = {'CSRFPreventionToken': self.ticket['data']['CSRFPreventionToken'], 'Cookie': 'PVEAuthCookie=' + self.ticket['data']['ticket']}
r = requests.post(url=url, headers=headers, verify=False)
return r.json()
#创建虚拟机
def ticket_vm_create(self, node,data):
path = f'/api2/json/nodes/{node}/qemu/'
url = 'https://' + self.ip + ':' + self.port + path
headers = {'CSRFPreventionToken': self.ticket['data']['CSRFPreventionToken'], 'Cookie': 'PVEAuthCookie=' + self.ticket['data']['ticket']}
r = requests.post(url=url, data=data,headers=headers, verify=False)
return r.json() if __name__ == '__main__':
op = Pve_api(ip='192.168.1.1', username='root@pam', password='xxxxxxxxx')
op.get_ticket()
data = {
'vmid': '102',
'sata0': 'local:100',
'cores': '2',
'memory': '1024',
'name': 'test',
'cdrom': 'local:iso/debian-11.3.0-amd64-netinst.iso'
}#创建虚拟机的参数,其它参数官网有
r=op.ticket_vm_create(node='node1',data=data)
print(r)
'''
{'data': 'UPID:node1:xxxxxxxxxxxxxxxxx:qmcreate:102:root@pam:'}返回创建成功
'''

参考文档:[https://zhuanlan.zhihu.com/p/550851406](感谢Sam Liu大佬的代码)

[https://pve.proxmox.com/pve-docs/api-viewer/index.html] (PVE官网API说明文档)

PVE API创建虚拟机的更多相关文章

  1. 使用Azure REST API创建虚拟机

    Hollis Yao, Shihao Rong  使用REST API创建虚拟机之前,首先要确保Azure订阅中已经建好了"云服务"和"存储账号".如果没有的话 ...

  2. Openstack python api 学习文档 api创建虚拟机

    Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...

  3. nova创建虚拟机源码分析系列之六 api入口create方法

    openstack 版本:Newton 注:博文图片采用了很多大牛博客图片,仅作为总结学习,非商用.该图全面的说明了nova创建虚机的过程,从逻辑的角度清晰的描述了前端请求创建虚拟机之后发生的一系列反 ...

  4. nova创建虚拟机源码分析系列之一 restful api

    开始学习openstack源码,源码文件多,分支不少.按照学习的方法走通一条线是最好的,而网上推荐的最多的就是nova创建虚机的过程.从这一条线入手,能够贯穿openstack核心服务.写博文仅做学习 ...

  5. Openstack创建虚拟机 Restful api和RPC调用

    Horizon前台界面用于接受用户的输入或动作(action),然后将这些参数构造成RESTful API(https://developer.openstack.org/api-ref/comput ...

  6. openstack创建虚拟机的步骤

    图片来自互联网. 虚拟机启动过程如下: 1.界面或命令行通过RESTful API向keystone获取认证信息.2.keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请 ...

  7. nova创建虚拟机源码分析系列之八 compute创建虚机

    /conductor/api.py _build_instance()  /conductor/rpcapi.py  _build_instance() 1 构造一些数据类型2 修改一些api版本信息 ...

  8. nova创建虚拟机源码分析系列之五 nova源码分发实现

    前面讲了很多nova restful的功能,无非是为本篇博文分析做铺垫.本节说明nova创建虚拟机的请求发送到openstack之后,nova是如何处理该条URL的请求,分析到处理的类. nova对于 ...

  9. nova创建虚拟机源码系列分析之二 wsgi模型

    openstack nova启动时首先通过命令行或者dashborad填写创建信息,然后通过restful api的方式调用openstack服务去创建虚拟机.数据信息从客户端到达openstack服 ...

  10. 创建虚拟机流程nova

    这篇博文借鉴于http://www.cnblogs.com/yjbjingcha/p/6977741.html,感谢博友提供. 本文试图具体地描写叙述openstack创建虚拟机的完整过程.从用户发起 ...

随机推荐

  1. 用友U8和旺店通·企业奇门单据接口对接

    用友U8和旺店通·企业奇门单据接口对接 对接系统旺店通·企业奇门 旺店通是北京掌上先机网络科技有限公司旗下品牌,国内的零售云服务提供商,基于云计算SaaS服务模式,以体系化解决方案,助力零售企业数字化 ...

  2. [AGC034D] Manhattan Max Matching

    Problem Statement Snuke is playing with red and blue balls, placing them on a two-dimensional plane. ...

  3. C++ Qt开发:Slider滑块条组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍Slider滑 ...

  4. 自上而下的LL(1)语法分析法

    LL(1)文法:从文法的开始符,向下推导,推出句子. 对文法G的句子进行确定的自顶向下语法分析的充分必要条件是,G的任意两个具有相同左部的 产生式A->α|β 满足下列条件: (1)如果α.β均 ...

  5. MySQL 8.0.32 InnoDB ReplicaSet 配置和手动切换

    1.环境准备 主库:192.168.137.4 mytest3 从库:192.168.137.5 mytest4 MySQL: 8.0.32 2.配置 ReplicaSet 实例 启动 mysql s ...

  6. Ascii字符画 在线生成工具

    英文 http://patorjk.com/software/taag/ 点击 Test All 一键测试所有样式 目前有317种可选 个人常用格式 3D-ASCII ANSI Shadow Bulb ...

  7. 牛客刷Java记录第四天

    第一题,单选题 class Car extends Vehicle { public static void main (String[] args) { new Car(). run(); } pr ...

  8. 让 sdk 包静默升级的 SAO 操作,你见过几种?

    拓展阅读 让 sdk 包静默升级的 SAO 操作,你见过几种? 业务背景 有时候为业务方提供了基础的 sdk 包,为了保证稳定性,一般都是 release 包. 但是每一次升级都非常痛苦,也不可能写一 ...

  9. DVWA SQL Injection(SQL注入)全等级

    SQL Injection(SQL回显注入) 目录: SQL Injection(SQL回显注入) 1. Low 2.Medium 3. High 4.Impossible 5.运用sqlmap自动化 ...

  10. .net Core实战简单文件服务器

    首先新建一个ASP.NET Core 项目,选中空的模板,如下图所示 在NuGet包中添加Microsoft.AspNetCore.StaticFiles 添加好以后我们在Startup.cs中添加对 ...