PHP如何使用ovf模板在vsphere平台中自动创建虚拟机

这个文章要讲的是,PHP如何使用 VSphere的web-service-sdk 从内容库中的 ovf 模板创建虚拟机。需要注意的是,内容库是 VSphere 6.0 才有的功能,这篇文章基于 6.5。

这个 sdk api 没什么文档,你得看它提供的示例才能对它有所了解。有意思的是,整个示例就是一个 api,你可以通过传递参数给它来获取简单信息资源等操作,但是对于参数没有任何说明,只有靠猜。在这里向大家推荐一篇使用 vsphere-automation-sdk-python 自动创建虚拟机,里面详细的介绍了创建虚拟机所需的参数说明配置。

说实话,示例写的比较烂,坑很多。有些简单的GET请求需要加上参数、但是它不提供写参数的地方。有感于此,我就将我研究的东西写出来,让大家少走弯路吧。

首先还是要感谢我师父,没有他的帮助,至少要多少花一周时间。在此非常感谢!

话不多说了,进入主题:

首先我们用php的curl去操作web-service-sdk,关于culr的使用方法,请大家自己了解,这里就不多说。

首先拿到从ovf模板中创建vm虚拟机的api:

 /com/vmware/vcenter/ovf/library-item/id:{ovf_library_item_id}?~action=deploy  //api

这是一个post请求,需要传入多个参数:ovf_library_item_id, client_token, target, deployment_spec所有参数说明都在上面提到的那篇博文中有解释,这里就不累赘了。
值得一说的是target里面host_id、folder_id、resource_pool_id的三个是可选的,并不是需要全部填完,如果想要填完,那么三个参数必须正确即参数要在同一环境下,不然的话,就会报对象不支持操作。

直接上代码:

   /*
**@从内容库中创建虚拟机
**$sid:要取的sessionid
**$baseUrl:获取平台信息基本地址
**$libraryItemId:内容库ID
**$hostId:宿主机ID
**$resorcePoolId:资源池ID
**$vmName:需要创建的虚拟机名称
*/
function createVM_ovf($sid,$baseUrl,$libraryItemId,$hostId,$resorcePoolId,$vmName){
	$httpMethod = 'POST';
	$isHead = 1;
	$headInfo = array(
		"Content-Type:application/json",
		"Accept:application/json",
		"vmware-api-session-id:$sid"
	);
	$url = $baseUrl."/com/vmware/vcenter/ovf/library-item/id:".$libraryItemId."?~action=deploy";
	$arr = array(
		"target" => array(
			"host_id" => $hostId,
			"resource_pool_id" => $resorcePoolId
		),
		"deployment_spec" => array(
			"name" => $vmName,
			"accept_all_EULA" => true //这里设置为false的话不知道能不能创建
		)
	);
	$arr = json_encode($arr);
	$this->setOptions($url, $httpMethod, $arr, 0, '', $isHead, $headInfo);

	$res = $this->exCurl();

	return $res;		
}
$baseUrl = "https://vcenter/rest";
$libraryItemId = "331f7bc6-c702-4dcc-bc6b-19b506163e3c";
$hostId = "host-10";
$resorcePoolId = "resgroup-8";
$vmName = "isok";
$res = createVM_ovf($sid,$baseUrl,$libraryItemId,$hostId,$resorcePoolId,$vmName);

ovf_library_item_id的获取

/com/vmware/content/library/item  //api

获取这玩意儿,废了不少时间,也是比较坑。官方说需要传入一个参数,却不给填参数的input,在这里老是报错。结果就是直接在api后面接上相应的参数即 /com/vmware/content/library/item?library_id=库id。也附上相应的代码

**@获取库ItemID列表
**$sid:要去的sessionid
**$libraryId:库id
**$url:获取库的地址
*/	
function getLibraryItemList($sid, $baseUrl, $libraryId){
	$params = array(
		'item?library_id='.$libraryId
	);
	$libItemList = $this->getPlatformInfo($sid, $baseUrl, 'library', $params);
	return $libItemList;		
}
//调用

以上是我封装的类文件,如需要完整代码可以先进入其 码云主页下载。欢迎其他同学指正交流!!!!!!!!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值