钛铱/vmwarephp

VMWare vSphere API 的 PHP 绑定

dev-master 2017-03-02 14:48 UTC

This package is not auto-updated.

Last update: 2024-09-29 01:40:44 UTC


README

Vmwarephp 是一个包含 vSphere API 绑定的库,您可以使用它来管理 ESX 和 vCenter 服务器。它受到了为其他动态类型语言(如 Ruby 的 RbvMomi)构建 vSphere 绑定的其他努力的启发。目前,该库支持从 4.1 版本到 5.1.1 版本的 vSphere API。

先决条件

Vmwarephp 需要 PHP 版本 5.3.2 或更高版本,并启用了 soap 和 ssl。有关如何从源代码编译 PHP 以及如何启用扩展的更多信息,请参阅: https://php.ac.cn/manual/en/install.php

安装

Vmwarephp 可以使用 Composer 安装,或者从其 GitHub 仓库克隆。

使用 Composer

您可以在 https://packagist.org.cn 上了解更多关于 Composer 和其主要仓库的信息。要使用 Composer 安装 Vmwarephp,首先按照 Packagist 主页上的说明安装 Composer。之后,您可以通过在 composer.json 中添加以下行来定义 Vmwarephp 依赖关系

{
    "require": {
        "titanium-iridium/vmwarephp": "dev-master"
    }
}

使用 Git / GitHub

您可以从其 GitHub 仓库克隆最新的开发分支

git clone git://github.com/titanium-iridium/vmwarephp.git

用法

Vmwarephp 的目标是为处理 vSphere 对象提供尽可能少的样板代码。执行操作的 ESX/vCenter 由一个 \Vmwarephp\Vhost 对象表示。Vhost 对象提供了两种查找方法来获取服务器端的 ManagedObjects。以下示例描述了从 ESX/vCenter 收集所有虚拟机及其预取配置状态的方法

$vhost = new \Vmwarephp\Vhost(['host' => 'vcenter:443', 'username' => 'root', 'password' => 'the_secret']);
$virtualMachines = $vhost->findAllManagedObjects('VirtualMachine', array('configStatus'));

对于收集所有虚拟机及其所有预取属性,这通常是一个非常昂贵的操作,因为需要遍历许多对象,您可以通过以下方式完成它

$virtualMachines = $vhost->findAllManagedObjects('VirtualMachine', 'all');

您可以使用其服务器端 ID 来查找给定的对象。例如,查找具有 id datastore-182 的数据存储,不预取其任何属性

$vhost = new \Vmwarephp\Vhost(['host' => 'vcenter:443', 'username' => 'root', 'password' => 'the_secret']);
$datastore = $vhost->findOneManagedObject('Datastore', 'datastore-182', array());

可以通过名称找到管理对象

$vhost = new \Vmwarephp\Vhost(['host' => 'vcenter:443', 'username' => 'root', 'password' => 'the_secret']);
$datastore = $vhost->findManagedObjectByName('VirtualMachine', 'myvmname', array('configStatus'));

管理对象可以是表示 \Vmwarephp\ManagedObject 的通用管理对象,也可以是位于 Extensions 目录中定义的管理对象的用户定义扩展。每个管理对象根据其管理对象引用类型('VirtualMachine'、'Datastore' 等)可以执行由 vSphere api 在该引用类型上定义的任何方法。例如,创建虚拟机快照可能非常简单

$vhost = new \Vmwarephp\Vhost(['host' => 'vcenter:443', 'username' => 'root', 'password' => 'the_secret']);
$virtualMachine = $vhost->findOneManagedObject('VirtualMachine', 'vm-192', array());
$snapshotTask = $virtualMachine->CreateSnapshot_Task(array('name' => 'snapshot_name', 'memory' => false, 'quiesce' => false));

或者考虑到 VirtualMachine 管理对象类型已经内置了扩展

$snapshotTask = $virtualMachine->takeSnapshot(array('name' => 'snapshot_name', 'memory' => false, 'quiesce' => false));

所有管理对象属性都定义为对象访问器。您可以在查找对象时预取所有访问器,也可以在运行时查询对象属性(请注意,我们没有预取 configStatus 属性)

$virtualMachine = $vhost->findOneManagedObject('VirtualMachine', 'vm-192', array());
$configStatus = $virtualMachine->configStatus;

或者预取 configStatus

$virtualMachine = $vhost->findOneManagedObject('VirtualMachine', 'vm-192', array('configStatus'));

正如您所看到的,与托管对象一起工作非常简单。服务器端支持的管理对象上的每个方法都映射到 \Vmwarephp\ManagedObject 或其扩展上的一个方法。属性作为简单的访问器方法公开。所有数据对象属性也映射到它们各自的数据类型。可以在 TypeDefinitions.inc 文件中找到定义的类型完整列表。

您可以通过扩展 \Vmwarephp\ManagedObject 并将其添加到 Extensions 目录来编写自己的扩展。如果您认为扩展非常有用,我们很容易将其集成到主分支中。祝您享受!