用于管理虚拟机管理程序及其虚拟机的Xen PHP API

v2.1 2015-08-27 15:08 UTC

This package is not auto-updated.

Last update: 2024-09-18 04:43:49 UTC


README

这是一个用于管理Xen虚拟机管理程序、Citrix服务器及其虚拟机的PHP API,它适用于Laravel 4、Laravel 5、Codeigniter和其他PHP框架。在安装此库之前,请确保已安装xmlrpc php模块。

用于与Xen服务器通信的PHP API。此软件包可在Composer仓库中找到。该软件包允许完全管理Xen。使用此软件包,您可以克隆、启动、停止和重启任何虚拟机。此外,此API还允许您实时查看虚拟机的图表!我创建了获取机器实时XML统计信息的方法,并将其转换为RRD文件,这是FlotJS库绘制图表所需的。此API适用于所有主要的PHP框架,如Laravel、Symfony或Codeigniter。

目录

  1. 安装
  2. 文档

安装

该软件包可在Packagist上找到,您可以使用Composer进行安装。

composer.json文件的require键中添加以下内容

"sircamp/xenapi": "2.1"

或者从您的项目文件夹中输入以下命令

composer require sircamp/xenapi

文档

命名空间导入

Sircamp\Xenapi是命名空间化的,但您可以通过将单个类导入您的上下文来简化操作

use Sircamp\Xenapi\Xen as Xen;

连接到虚拟机管理程序

请确保您有虚拟机管理程序的IP地址、用户名和密码

$ip = "123.123.123.123";
$user = "username";
$password = "password";
$xen = new Xen($ip,$user,$password); //OK now you have an open connection to Hypervisor

获取虚拟机

这有助于在所选虚拟机管理程序上拥有一个虚拟机(通过主机名)

$vm = $xen->getVMByNameLabel("virtual.machine.hostaname");

虚拟机管理

现在您已经有一个映射虚拟机的XenVirtualMachine对象,因此我们可以管理虚拟机

启动虚拟机

此方法启动已停止的虚拟机

$vm->start(); 

您也可以在此方法中传递两个参数

$pause = true; // start VM in pause status , dafault is false
$force = true; // force the boot of VM, default is true
$vm->start($pause, $force); 
启动虚拟机

此方法在特定主机上启动指定的虚拟机。此函数只能在虚拟机处于停止状态时调用。此方法需要一个XenHost对象作为参数,但如果您愿意,也可以传递一个UUID主机字符串

$host // this is a XenHost object istance or a string istance
$hostRef = $host;
$pause = true; // start VM in pause status , dafault is false
$force = true; // force the boot of VM, default is true
$vm->startOn($hostRef,$pause, $force); 
关闭虚拟机

此方法向虚拟机发送关闭命令

$vm->cleanShutdown(); 
强制关闭虚拟机

此方法立即关闭虚拟机

$vm->hardShutdown(); 
重启虚拟机

此方法向虚拟机发送重启命令

$vm->cleanShutdown(); 
强制重启虚拟机

此方法立即重启虚拟机

$vm->hardShutdown(); 
挂起虚拟机

此方法将虚拟机置于挂起模式(请参阅Citrix手册)

$vm->suspend(); 
恢复虚拟机

此方法恢复处于挂起模式的虚拟机(请参阅Citrix手册)

$vm->resume(); 
恢复虚拟机

此方法唤醒指定的虚拟机,并在特定主机上恢复它。只能在指定的虚拟机处于挂起状态时调用。此方法需要一个XenHost对象作为参数,但如果您愿意,也可以传递一个UUID主机字符串

$host // this is a XenHost object istance or a string istance
$hostRef = $host;
$vm->resumeOn($hostRef); 
暂停虚拟机

此方法将虚拟机置于暂停状态

$vm->pause(); 
恢复虚拟机

此方法恢复处于暂停状态的虚拟机

$vm->unpause(); 
克隆虚拟机

此方法将选定的虚拟机克隆到另一个虚拟机中(请检查您的虚拟机管理程序是否支持另一个虚拟机)。

在此之前,您必须停止要克隆的虚拟机

$name = "new_cloned_vm"; // name of cloned vm
$vm->cleanShudown(); // stop  vm
$vm->clonevm($name); 
虚拟机电源状态

此方法获取所选虚拟机的电源状态

$vm->getPowerState();
虚拟机电源状态重置

仅在数据库中重置虚拟机的电源状态为挂起状态。(用于从池场景中的从机故障中恢复,通过将运行在已死亡从机上的虚拟机的电源状态重置为挂起状态。)这是一个可能很危险的操作;请谨慎使用。

$vm->powerStateReset();
虚拟机UUID

此方法获取所选虚拟机的UUID。

$vm->getUUID();
虚拟机控制台

此方法返回所选虚拟机的所有控制台实例。控制台实例允许您拥有和管理虚拟机的SSH或RDP会话。

$vm->getConsoles()
虚拟机控制台UUID

此方法返回所选虚拟机控制台的UUID。UUID对于控制台实例管理非常有用。

$vm->getConsoleUUID($console)
虚拟机客户机度量

此方法返回所选虚拟机的客户机度量。此度量包含

  • uuid
  • os_version(名称、uname、发行版、发布版本)
  • 内存
  • 磁盘
  • 网络
  • 其他

将来,我会写一个示例

$vm->getGuestMetrics()
虚拟机度量

此方法返回所选虚拟机的度量。此度量包含

  • uuid
  • memory_actual
  • VCPUs_number
  • VCPUs_utilisation

关于客户机度量,将来我会写一个示例

$vm->getMetrics()
虚拟机统计信息

此方法返回运行中虚拟机的当前统计信息。使用此方法,您可以在实时中获取CPU、RAM和DISK I/O的统计信息!

然而,此方法返回一个响应对象,其中包含一个在value属性中的XML字符串。在这个XML字符串中,您可以找到所需的统计信息。

关于最后两个方法,将来我会写一个示例。同时,我将向您展示如何获取实时统计图,敬请期待;)

$vm->getStats()
虚拟机磁盘总空间

此方法返回虚拟机磁盘的总空间量。实际上,此方法返回的总空间是字节的。

$vm->getDiskSpace()

您还可以传递一个参数

$format = "GB";
$vm->getDiskSpace($format);

这允许您以所需的格式获取磁盘空间。注意:此功能尚未实现

虚拟机名称

此方法返回虚拟机的名称

$vm->getName()
获取所有虚拟机

此方法返回系统所知的所有虚拟机的列表。

$vm->getAll()
池迁移虚拟机

将虚拟机迁移到另一个主机。只有在指定的虚拟机处于运行状态时,才能调用此方法。此方法需要一个XenHost对象作为参数,但如果你愿意,你可以传递一个UUID主机字符串 optionsMap参数是一个包含池迁移选项的映射。

$optionsMap = array(
	'option1' => "option first",
	'option2' => "option second"
)
$host // this is a XenHost object istance or a string istance
$hostRef = $host;
$vm->poolMigrate($refHost, $optionsMap);
迁移发送虚拟机

断言虚拟机是否可以迁移到指定的目标。在此方法中,第一个参数destHost.migrate接收调用的结果。参数vdiMap是源VDI到目标SR的映射。参数vifMap是VIF到目标网络的映射。参数optionsMap是额外的配置操作。参数live允许以live模式迁移虚拟机或无,默认情况下,此参数设置为false

$dest // Host.migrate call result
$vdiMap //map of source VDI
$vifMap //map of source VFI
$options = array(
	'option1' => "option first",
	'option2' => "option second"
);
$live = true;
$vm->migrateSend($dest,$vdiMap,$vifMap,$options,$live)

注意:此方法仍在测试模式中

断言可以迁移虚拟机

断言虚拟机是否可以迁移到指定的目标。在此方法中,第一个参数destHost.migrate接收调用的结果。参数vdiMap是源VDI到目标SR的映射。参数vifMap是VIF到目标网络的映射。参数optionsMap是额外的配置操作。参数live允许以live模式迁移虚拟机或无,默认情况下,此参数设置为false

$dest // Host.migrate call result
$vdiMap //map of source VDI
$vifMap //map of source VFI
$options = array(
	'option1' => "option first",
	'option2' => "option second"
);
$live = true;
$vm->assertCanMigrate($dest,$vdiMap,$vifMap,$options,$live)

注意:此方法仍在测试模式中

虚拟机快照

对指定的虚拟机进行快照,创建一个新的虚拟机。快照自动利用存储库的功能,该存储库存储虚拟机的磁盘镜像

$name = "name of snapshot";
$vm->snapshot($name)
虚拟机快照

对指定的虚拟机进行静默快照,创建一个新的虚拟机。快照自动利用存储库的功能,该存储库存储虚拟机的磁盘镜像

$name = "name of snapshot";
$vm->snapshotWithQuiesce($name)
获取虚拟机快照

获取给定虚拟机的快照信息字段。

$vm->getSnapshotInfo()
还原虚拟机

将指定的虚拟机还原到先前状态

$snapshotID // the snaoshot id
$vm->revert($snapshotID)
复制虚拟机

复制指定的虚拟机,创建新的虚拟机。与克隆不同,复制不会利用存储仓库的能力,该仓库存储了虚拟机的磁盘镜像。相反,复制保证新创建的虚拟机的磁盘镜像将是“完整磁盘”——即不是CoW链的一部分。此功能只能在虚拟机处于停止状态时调用

$name = "nameOfCopy";
$vm->copy($name);
销毁虚拟机

销毁指定的虚拟机。虚拟机将从系统中完全移除。此功能只能在虚拟机处于停止状态时调用。

$vm->destroy();
虚拟机的检查点

检查点指定的虚拟机,创建新的虚拟机。检查点自动利用存储仓库的能力(例如,写时复制)并将内存镜像保存

$name = "nameOfVM";
$vm->checkpoint($name);
设置虚拟机的启动延迟

设置此虚拟机的启动延迟(秒)。

$seconds = 5;
$vm->setStartDelay($seconds);
设置虚拟机的关机延迟

设置此虚拟机的启动延迟(秒)。

$seconds = 5;
$vm->setShutdownDelay($seconds);
获取虚拟机的启动延迟

获取此虚拟机的启动延迟(秒)。

$vm->getStartDelay();
获取虚拟机的关机延迟

获取此虚拟机的启动延迟(秒)。

$vm->getShutdownDelay();
获取虚拟机的当前操作

获取给定虚拟机的当前操作字段。

$vm->getCurrentOperations();
获取虚拟机的允许操作

获取给定虚拟机的允许操作字段。

$vm->getAllowedOperations();
获取虚拟机的名称/描述

获取给定虚拟机的名称/描述字段。

$vm->getNameDescription();
设置虚拟机的名称/描述

设置给定虚拟机的名称/描述字段。

$description = "description";
$vm->setNameDescription($description);
获取虚拟机的模板状态

获取给定虚拟机的模板字段。

$vm->getIsATemplate();
设置虚拟机的模板状态

设置给定虚拟机的模板字段。

$template = false;
$vm->setIsATemplate($template);
获取虚拟机的驻留位置

获取给定虚拟机的驻留字段。在此方法的响应中,您将找到可以使用的XenHost对象。

$vm->getResidentOn();
获取虚拟机的平台

获取给定虚拟机的平台字段。

$vm->getPlatform();
设置虚拟机的平台

设置给定虚拟机的平台字段。

$array = array(
	'data'=>'value',
	'data2'=>'value'
);
$vm->setPlatform($array);
获取虚拟机的其他配置

获取给定虚拟机的其他配置字段。

$vm->getOtherConfig();
设置虚拟机的其他配置

设置给定虚拟机的其他配置字段。

$array = array(
	'config'=>'value',
	'config2'=>'value'
);
$vm->setOtherConfig($array);
添加到虚拟机的其他配置

将虚拟机给定的键值对设置到其他配置字段中。

$key = "key";
$value = "value"

$vm->addToOtherConfig($key, value);
从虚拟机的其他配置中删除

从给定虚拟机的其他配置字段中删除指定的键及其对应值。如果键不在该Map中,则不执行任何操作。

$key = "key";
$value = "value"

$vm->removeFromOtherConfig($key);
获取虚拟机的名称标签

获取虚拟机的名称标签。

$vm->getNameLabel();

获取主机

用于获取目标主机(通过主机名)

$host = $xen->getHOSTByNameLabel("host.machine.hostaname");

主机管理

现在您有一个映射了您的虚拟机管理程序的XenHost对象,因此我们准备管理主机

禁用主机

将主机置于一个状态,在此状态下不能启动新的虚拟机。当前在主机上运行的活动虚拟机将继续执行。

$host->disable()
启用主机

将主机置于一个状态,可以启动新的虚拟机。

$host->enable()
关闭主机

关闭主机。如果主机上没有正在运行的虚拟机并且已禁用,则可以调用此功能。

$host->shutdown()
重启主机

重启主机。如果主机上没有正在运行的虚拟机并且已禁用,则可以调用此功能。

$host->reboot()
主机的dmesg

获取主机的xen dmesg。

$host->dmesg()
主机dmesgClear

获取主机xen dmesg,并清除缓冲区

$host->dmesgClear()
主机日志

获取主机的日志文件。

$host->getLog()
主机列表方法

列出所有支持的方法。

$host->listMethods()
主机许可应用

将新许可证应用到主机。默认值$license为空字符串

$file = file_get_contents("/path/license/file");
$license = base64_encode($file);
$host->licenseApply($license)

注意:$license必须是对称加密的文件

断言主机可疏散

检查此主机是否可以疏散。

$host->assertCanEvacuate()
疏散主机

尽可能地将所有虚拟机从该主机迁移出去。

$host->evacuate()
获取主机服务器时间

此调用查询主机时钟以获取当前时间。

$host->getServertime()
获取主机服务器本地时间

此调用查询主机时钟以获取主机本地时区的时间。

$host->getServerLocaltime()
获取主机服务器证书

获取已安装的服务器SSL证书。

$host->getServerCertificate()

注意:此方法以.pem格式返回SSL证书。

应用HOST的ApplyEdition

更改到另一个版本,或在使用许可证过期后重新激活当前版本。这可能取决于适当许可证的成功签发。默认$force参数为false,这意味着您想强制更新版本。

$edition = "newedition";
$force = true;
$host->getServerCertificate()
刷新HOST的RefreshPackInfo

刷新已安装的补充包列表。

$host->refreshPackInfo()
启用HOST的EnableLocalStorageCaching

启用使用本地SR进行缓存。

$srRef = "srReferID";
$host->enableLocalStorageCaching($srRef);
禁用HOST的EnableLocalStorageCaching

禁用使用本地SR进行缓存。

$host->disableLocalStorageCaching();
迁移HOST的MigrateReceive

准备接收VM,返回一个可以被传递给VM->migrate().的令牌。$features是一个关联数组,包含运行迁移机器所需的配置值,默认值为一个数组。

$networkRef = "networkRef" // shorty you can pass the obeject that map network
$features = array(
	'options1'=>"youroption",
	'options2'=>"youroption",
);
$host->migrateReceive($networkRef, $features);
HOST的GETUUID

获取指定主机的uuid字段。

$host->getUUID()
HOST的GetNameLabel

获取指定主机的名称/标签字段。

$host->getNameLabel()
HOST的SetNameLabel

设置指定主机的名称/标签字段。

$name = "server.yourname.com";
$host->setNameLabel($name);
HOST的GetNameDescription

获取指定HOST的名称/描述字段。

$host->getNameDescription()
HOST的SetNameDescription

设置指定HOST的名称/描述字段。

$description = "long long text";
$host->setNameDescription($description)
HOST的SetNameDescription

设置指定HOST的名称/描述字段。

$description = "long long text";
$host->setNameDescription($description)
HOST的GetAllowedOperations

获取指定HOST的允许操作字段。

$host->getAllowedOperations()
HOST的GetSoftwareVersion

获取指定主机的软件版本字段。

$host->getSoftwareVersion()
HOST的GetOtherConfig

获取指定HOST的其他配置字段。

$host->getOtherConfig()
HOST的SetOtherConfig

设置指定HOST的其他配置字段。

$config = array(
	'config1' => "first config",
	'config2' => "second config"
);
$host->setOtherConfig($config)
HOST的AddOtherConfig

将指定的键值对添加到指定主机的其他配置字段。

$key = "config1";
$value = "first config";
$host->addOtherConfig($key,$value)
HOST的RemoveOtherConfig

从指定主机的其他配置字段中移除指定的键及其对应的值。如果该键不在该Map中,则不执行任何操作。

$key = "config1";
$host->removeOtherConfig($key)
HOST的GetSupportedBootloaders

获取指定主机的支持引导加载程序字段。

$host->getSupportedBootloaders()
HOST的GetResidentVMs

获取指定主机的驻留VM字段。在方法的响应中,您将找到一个数组,其中包含您可以使用的主机内至少一个VM的对象。

$host->getResidentVMs()
HOST的GetPatches

获取指定主机的补丁字段。

$host->getPatches()
HOST的GetHostCPUs

获取指定主机的CPU字段。

$host->getHostCPUs()
HOST的GetCPUInfo

获取指定主机的CPU信息字段。

$host->getCPUInfo()
HOST的GetHostname

获取指定主机的名称。

$host->getHostname()
HOST的SetHostname

设置指定主机的名称。

$name = "new.hostname.com"
$host->setHostname($name);
HOST的GetAddress

获取指定主机的地址字段。

$host->getAddress()
HOST的SetAddress

设置指定主机的地址字段。

$address = "123.123.123.123"
$host->setAddress($address);
HOST的GetMetrics

获取指定主机的度量字段。

$host->getMetrics()
HOST的GetLicenseParam

获取指定主机的许可证参数字段。

$host->getLicenseParam()
HOST的GetEdition

获取指定主机的版本字段。

$host->getEdition()
HOST的GetLicenseServer

获取指定主机的许可证服务器字段。

$host->getLicenseServer()
HOST的SetLicenseServer

设置指定主机的许可证服务器字段。

$license = "newlicense"
$host->setLicenseServer($license);
HOST的AddToLicenseServer

将指定的键值对添加到指定主机的许可证服务器字段。

$key = "licenseName";
$value = "licenseValue";
$host->addToLicenseServer($key,$value);
HOST的RemoveFromLicenseServer

从指定主机的许可证服务器字段中移除指定的键及其对应的值。如果该键不在该Map中,则不执行任何操作。

$key = "licenseName";
$host->removeFromLicenseServer($key);
HOST的GetChipsetInfo

获取指定主机的芯片组信息字段。

$host->getChipsetInfo()

响应管理

每个方法都返回XenResponse类的实例。此对象包含三个属性

  • Value
  • Status
  • ErrorDescription
Value属性

此属性包含响应的值,例如消息、XML字符串或其他内容。

使用此方法获取它

$response = $vm->hardReboot();
$response->getValue();
状态属性

此属性包含响应的状态。如果状态是成功,则请求正常。否则,请求失败,使用此属性检查操作结果。

使用此方法获取它

$response = $vm->hardReboot();
$response->getStatus();
错误描述属性

此属性包含失败响应的消息。只需取出此属性的值并检查为什么响应不正常。

例如,如果您的连接凭据错误

$console = "wrong_console";
$response = $vm->getConsolesUUID($console);
$response->getStatus(); //return Failure
$response->getErrorDescription(); // return an array with some error message

异常

这是对自定义异常的解释

XenConnectionException

当您尝试使用错误的凭据连接到虚拟机管理程序时,将触发此异常。

要捕获此异常,请记住使用此类的命名空间

use Sircamp\Xenapi\Exception\XenConnectionException as XenConnectionException;