首页 > 其他分享 >PVE API创建虚拟机

PVE API创建虚拟机

时间:2023-01-30 17:37:06浏览次数:62  
标签:url 虚拟机 headers json API PVE ticket data self

度娘,谷歌都搜了一圈没有找到通过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)

参考文档:[https://zhuanlan.zhihu.com/p/550851406](感谢Sam Liu大佬的代码)
[https://pve.proxmox.com/pve-docs/api-viewer/index.html] (PVE官网API说明文档)

标签:url,虚拟机,headers,json,API,PVE,ticket,data,self
From: https://www.cnblogs.com/yun-xx/p/17076746.html

相关文章

  • 1 web 应用模式 、2 API接口 、3 接口测试工具postman
    目录1web应用模式2API接口3接口测试工具postman1web应用模式#djangoweb框架,专门用来写web项目#之前学的,写的bbs项目,图书管理系统,用的是前后端混合开发 -后端......
  • drf:web应用模式、API接口、接口测试工具postman
    目录1web应用模式web应用的开发主要有两种模式:2API接口3接口测试工具postman1web应用模式web应用的开发主要有两种模式:前后端不分离#djangoweb框架,专门用来......
  • wdb应用模式、API接口、接口测试工具postman
    wdb应用模式、API接口、接口测试工具postman一、wdb应用模式#djangoweb框架,专门用来写web项目#前后端混合开发 后端人员,写后端,也要写【模板语法】---》xx.html的py......
  • web应用模式与API接口
    1web应用模式#djangoweb框架,专门用来写web项目#之前学的,写的bbs项目,图书管理系统,用的是前后端混合开发 -后端人员,写后端,也要写【模板语法】---》xx.html的python代......
  • vue3基础API
    创建项目vitecreatevite项目名--template模板名模板可参考https://github.com/vitejs/vite/tree/main/packages/create-vite以下内容皆使用setup语法糖ref......
  • C++调用Python的API总结
    最近在做C++调Python的work,简单总结下(一) 初始化和关闭Python解释器#include<Python.h>Py_Initialize();…Py_Finalize();所有的Python程序都要在这之间执行(二)......
  • Swagger测试Restful API
    swagger出现背景我们构建RestfulAPI的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端,不同端由......
  • 集合框架体系Collection和Map常用API【汇总】
    集合框架体系Collection和Map常用API【汇总】Collection公共的方法Collection是单列结合的顶层接口,它的方法是所有单列集合都可以继承使用的。//把给定元素添加到集......
  • dremio api 简单说明
    以前在简单介绍dremiowebserver的时候提过dremio的api,实际上包含了两大部分,一个是为了bff的(方便前端使用的),一个是独立的restapi方便业务调用的(实际上就是官方文档中看......
  • 都 2203 年了,你还在使用 word 调试 API?
    随着信息技术的发展,API变得无处不在,无处不用。但令人费解的是,都2203年了,竟然还有很多人使用word调试API?一、Word管理APIvs工具管理API不做开发的小伙伴可......