neuralys/vmwarephp

VMWare vSphere 客户端 for PHP

v1.0.0 2016-09-19 13:30 UTC

This package is not auto-updated.

Last update: 2024-09-18 18:58:58 UTC


README

Vmwarephp 是一个包含使用 PHP 绑定 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

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

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

使用 Git / GitHub

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

git clone git://github.com/vadimcomanescu/vmwarephp.git

使用方法

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

$vhost = new \Vmwarephp\Vhost('vcenter:443', 'Admin', 'password');
$virtualMachines = $vhost->findAllManagedObjects('VirtualMachine', array('configStatus'));

对于收集所有虚拟机及其所有属性(这通常是一个非常昂贵的操作,因为需要遍历许多对象)的方法,您可以这样做:

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

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

$vhost = new \Vmwarephp\Vhost('vcenter:443', 'Admin', 'password');
$datastore = $vhost->findOneManagedObject('Datastore', 'datastore-182', array());

也可以通过名称查找管理对象

$vhost = new \Vmwarephp\Vhost('vcenter:443', 'Admin', 'password');
$datastore = $vhost->findManagedObjectByName('VirtualMachine', 'myvmname', array('configStatus'));

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

$vhost = new \Vmwarephp\Vhost('vcenter:443', 'Admin', 'password');
$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 目录来编写自己的扩展。如果认为扩展非常有用,我们可以轻松将其集成到主分支中。祝您享受!