macromindonline / xenapi
用于管理虚拟机管理程序及其虚拟机的Xen PHP API
Requires
- php: >=5.4.0
- guzzlehttp/guzzle: ~5.0
- respect/validation: 0.8.*
Suggests
- nesbot/carbon: A simple API extension for DateTime.
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。
目录
安装
该软件包可在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);
迁移发送虚拟机
断言虚拟机是否可以迁移到指定的目标。在此方法中,第一个参数dest是Host.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)
注意:此方法仍在测试模式中
断言可以迁移虚拟机
断言虚拟机是否可以迁移到指定的目标。在此方法中,第一个参数dest是Host.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;