Proxmox VE api python调用测试

官方api文档:
https://pve.proxmox.com/pve-docs/api-viewer

# -*- coding:utf-8 -*-
'''
@Author: XGL
@File: pvehttp.py
@CreateTime: 2022/1/20 9:43
https://192.168.16.36:8006/api2/extjs/nodes/pve/lxc/103/status/stop
'''

import requests
from requests.cookies import cookiejar_from_dict
from time import sleep
import urllib3

urllib3.disable_warnings()


class Pvehttp():
    def __init__(self, host, username, password):
        self.host = host
        self.username = username
        self.password = password
        self.base_url = 'https://' + host + ':8006/'
        self.header = {'content-type': 'application/json'}
        self.request_data = {
            'username': self.username,
            'password': self.password,
            'realm': 'pam'
        }
        self.csrftoken = self.baseauth().get('data').get('CSRFPreventionToken')
        self.ticket = self.baseauth().get('data').get('ticket')
        self.cookies = cookiejar_from_dict({"PVEAuthCookie": self.ticket})
        self.post_header = {
            'Cookie': 'PVEAuthCookie={}'.format(self.ticket),
            'CSRFPreventionToken': self.csrftoken,
        }

    def baseauth(self):
        url = self.base_url + 'api2/json/access/ticket'
        response = requests.post(url, headers=self.header, json=self.request_data, verify=False).json()
        return response

    def req(self, method, apiurl, **kwargs):
        url = self.base_url + apiurl
        try:
            if method == 'get':
                response = requests.get(url, **kwargs)
                return response.json()
            elif method == 'post':
                response = requests.post(url, **kwargs)
                return response.json()
        except Exception as f:
            return f

    # 状态
    def getstatus(self, apiurl):
        # url = self.base_url + apiurl
        # response = requests.get(url, cookies=self.cookies, verify=False)
        return self.req('get', apiurl, cookies=self.cookies, verify=False)

    # 开关机等
    def poststatus(self, apiurl):
        # url = self.base_url + apiurl
        return self.req('post', apiurl, headers=self.post_header, verify=False)

    # 克隆,增加磁盘,密码等参数
    def config(self, apiurl, **data):
        return self.req('post', apiurl, headers=self.post_header, json=data, verify=False)


if __name__ == '__main__':
    data = {
        'username': 'root',
        'password': 'password',
        'host': '192.168.16.36'
    }
    pve = Pvehttp(**data)
    # print(pve.getstatus('api2/json/cluster/tasks'))
    # print(pve.poststatus('api2/extjs/nodes/pve/qemu/101/status/stop'))
    # sleep(5)
    # print(pve.getstatus('api2/json/nodes/pve/qemu/101/status/current'))
    '''
    clone
    https://192.168.16.36:8006/api2/extjs/nodes/pve/qemu/100/clone#模板id
    fullclone
    newid: 101
    name: test
    target: pve
    full: 1#完整克隆
    分离磁盘delete: scsi1    #https://192.168.16.36:8006/api2/extjs/nodes/pve/qemu/100/config
    删除磁盘delete: unused0   #https://192.168.16.36:8006/api2/extjs/nodes/pve/qemu/100/config
    
    对克隆后的机器加硬盘操作,改密码,配置ip等操作 
    //local-lvm:2 --> 存储:大小
    data={
    'scsi3': 'local-lvm:2',
    'background_delay': 5,
    'cipassword': '123456'
    }
    print(pve.config('api2/extjs/nodes/pve/qemu/102/config', **data))
    克隆操作
    data={
    'newid': 102,
    'name': 'test',
    'target': 'pve',
    'full': 1,
    }
    print(pve.config('api2/extjs/nodes/pve/qemu/100/clone', **data))
    '''
    data = {
        'scsi1': 'local-lvm:2',
        'background_delay': 5,
        'cipassword': 'root',
        'ipconfig0': 'ip=192.168.16.51/24,gw=192.168.16.1'
    }
    'https://192.168.16.36:8006/api2/extjs/nodes/pve/qemu/102/config'
    print(pve.config('api2/extjs/nodes/pve/qemu/102/config', **data))

虚拟机开机测试

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值