corsinvest/cv4pve-api-php

Corsinvest Proxmox VE 客户端 API PHP

8.2.3 2024-07-29 06:10 UTC

README

License Packagist Version Packagist Downloads (custom server)

Proxmox VE 客户端 API PHP

Proxmox VE Api

   ______                _                      __
  / ____/___  __________(_)___ _   _____  _____/ /_
 / /   / __ \/ ___/ ___/ / __ \ | / / _ \/ ___/ __/
/ /___/ /_/ / /  (__  ) / / / / |/ /  __(__  ) /_
\____/\____/_/  /____/_/_/ /_/|___/\___/____/\__/

Corsinvest for Proxmox VE Api Client  (Made in Italy)

版权和许可

版权:Corsinvest Srl。有关许可详情,请访问 LICENSE

商业支持

该软件是cv4pve-tools工具套件的一部分。如果您需要商业支持,请访问 网站

一般

客户端是从Proxmox VE上的JSON Api生成的。

此PHP 5.4+库允许您通过API与您的Proxmox服务器交互。客户端是从Proxmox VE上的JSON Api生成的。

结果

结果是类 Result,包含以下方法

  • getResponse() 返回Proxmox VE(数据、错误等)对象/数组
  • responseInError (bool):包含来自Proxmox VE的错误。
  • getStatusCode() (int):HTTP响应的状态码。
  • getReasonPhrase() (string):通常与状态码一起由服务器发送的原因短语。
  • isSuccessStatusCode() (bool):获取一个值,指示HTTP响应是否成功。
  • getError() (string):获取错误。
  • getResponseHeaders() (string):获取与此响应相关的原始HTTP标头。

主要功能

  • 易于学习
  • 无外部库依赖,仅原生curl
  • 实现遵循 Proxmox VE API 结构
  • 命名方法
  • 设置响应类型json, png
  • 完全从文档生成的方法
  • 注释任何方法和参数
  • 参数索引,例如[n]在数组中按索引和值结构化
  • 树结构
    • $client->getNodes()->get("pve1")->getQemu()->get(100)->getSnapshot()->snapshotList()->getResponse()->data
  • 返回proxmox数据
  • 返回结果
    • 请求
    • 响应
    • 状态
  • 等待任务完成
    • waitForTaskToFinish
    • taskIsRunning
    • getExitStatusTask
  • 直接访问方法
    • get
    • set
    • create
    • delete
  • 登录返回bool值,如果访问
  • 返回Result类更多信息
  • 返回对象/数组数据
    • 默认对象禁用,从客户端.setResultIsObject(false)禁用
  • ClientBase 精简功能
  • 从Proxmox VE 6.2开始支持用户Api Token
  • 使用一次性密码进行双因素认证。
  • 设置连接超时。

Api token

从Proxmox VE 6.2版本开始,可以使用 Api token。此功能允许在不使用用户名和密码的情况下执行API。如果创建API令牌时使用 权限分离,请记住在权限中指定。格式 USER@REALM!TOKENID=TOKEN(以下为使用示例)

安装

建议使用 [Composer] 进行安装,如果您还没有 [Composer],您在等什么?

在您项目的根目录中执行以下操作

composer require Corsinvest/cv4pve-api-php

或者将此添加到您的 composer.json

用法

<?php

// Require the autoloader
require_once 'vendor/autoload.php';

//if you want use lite version only get/set/create/delete use PveClientBase

$client = new Corsinvest\ProxmoxVE\Api\PveClient("192.168.0.24");

//login check bool
if($client->login('root','password','pam')){
  //get version from get method
  var_dump($client->get('/version')->getResponse());

  // $client->put
  // $client->post
  // $client->delete

  $retPippo=$client->get("/pippo");
  echo "\n" . $retPippo->getStatusCode();
  echo "\n" . $retPippo->getReasonPhrase();

  //loop nodes
  foreach ($client->getNodes()->Index()->getResponse()->data as $node) {
    echo "\n" . $node->id;
  }

  //loop vm
  foreach ($client->getNodes()->get("pve1")->getQemu()->Vmlist()->getResponse()->data as $vm) {
      echo "\n" . $vm->vmid ." - " .$vm->name;
  }

  //loop snapshots
  foreach ($client->getNodes()->get("pve1")->getQemu()->get(100)->getSnapshot()->snapshotList()->getResponse()->data as $snap) {
    echo "\n" . $snap->name;
  }

  //return object
  var_dump($client->getVersion()->version()->getResponse());

  //disable return object
  $client->setResultIsObject(false);
  //return array
  $retArr = $client->getVersion()->version()->getResponse();
  var_dump($retArr);
  echo "\n" . $retArr['data']['release'];

  //enable return objet
  $client->setResultIsObject(true);

  //image rrd
  $client->setResponseType('png');
  echo "<img src='{$client->getNodes()->get("pve1")->getRrd()->rrd('cpu','day')->getResponse()}' \>";

  //result json result
  $client->setResponseType('json');
  var_dump($client->get('/version')->getResponse());

  //set connection timeout (by default no timeout)
  $client->setTimeout(2)->get('/version')->getResponse();
}

版本请求示例输出

//object result
var_dump($client->getVersion()->Version()->getResponse());

object(stdClass)#9 (1) {
  ["data"]=>
  object(stdClass)#32 (4) {
    ["version"]=>
    string(3) "5.0"
    ["release"]=>
    string(2) "31"
    ["keyboard"]=>
    string(2) "it"
    ["repoid"]=>
    string(8) "27769b1f"
  }
}

//disable return object
$client->setResultIsObject(false);

//array result
var_dump($client->getVersion()->Version());

array(1) {
  ["data"]=>
  array(4) {
    ["repoid"]=>
    string(8) "2560e073"
    ["release"]=>
    string(2) "32"
    ["version"]=>
    string(3) "5.0"
    ["keyboard"]=>
    string(2) "it"
  }
}

在文档中,参数索引以'[n]'结束(Qemu中的方法createVM的ide参数)需要带有键和值的数组

[
  1 => "....",
  3 => "....",
]

使用API令牌而不是用户名/密码的用法

<?php

// Require the autoloader
require_once 'vendor/autoload.php';

//if you want use lite version only get/set/create/delete use PveClientBase

$client = new Corsinvest\ProxmoxVE\Api\PveClient("hostname", "8006");
$client->setApiToken("root@pam!mytokenname=<TOKEN COMES HERE>");
echo $client->getVersion();