agazzi / vmwarephp
VMWare vSphere 客户端用于 PHP
Requires
- php: >=5.3.2
Requires (Dev)
- mockery/mockery: dev-master
This package is not auto-updated.
Last update: 2024-09-20 18:33:53 UTC
README
Vmwarephp 是一个包含 vSphere API 绑定的库,使用 PHP。您可以用来管理 ESX 和 vCenter 服务器。它受到了为其他动态类型语言构建 vSphere 绑定的其他努力的启发,例如为 Ruby 构建的 RbvMomi。当前库支持从 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 数据存储-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 目录中定义的托管对象的用户定义扩展。每个托管对象根据其托管对象引用类型(“虚拟机”、“数据存储”等)可以执行 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 目录中来编写自己的扩展。如果认为扩展非常有用,我们很容易将其集成到主分支中。享受吧!