wirehive / vmwarephp
PHP的vSphere绑定
Requires
- php: >=5.3.2
Requires (Dev)
- mockery/mockery: dev-master
This package is not auto-updated.
Last update: 2020-01-24 16:16:31 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。
安装
可以使用Composer安装vmwarephp,或从其GitHub仓库克隆它。
使用Composer
您可以在https://packagist.org.cn上了解更多关于Composer及其主要仓库的信息。要使用Composer安装Vmwarephp,首先按照Packagist主页上的说明安装Composer。之后,您可以通过将以下行添加到您的composer.json中来定义对Vmwarephp的依赖关系
{
"require": {
"wirehive/vmwarephp": "dev-master"
}
}
使用Git / GitHub
您可以从其GitHub仓库克隆最新的开发分支
git clone git://github.com/Wirehive/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 目录中来编写自己的扩展。如果您认为这些扩展非常有用,我们可以轻松地将它们集成到主分支中。祝您享受编程乐趣!