vCenter REST API - 使用网络参数部署模板
vCenter REST API - Deploy a template with network parameters
我正在使用 php 工具通过 CURL 和 JSON 从 vCenter (vmWare) 部署 ovf 模板。该工具已在运行并成功部署了 ovf 模板。我的问题是网络参数被完全忽略了。
vmWare 纪录片中的海量信息并没有帮助我。我认为解决方案是找到正确的 "key"-integer.
这是我用过的一些 Dokus:
https://vcenter.iseage.org/apiexplorer/ -> ovfLibraryItem->部署
我的 google-searche 也没什么帮助。
我目前的 json-代码:
{
"deployment_spec": {
"accept_all_EULA": true,
"default_datastore_id": "datastore-30598",
"network_mappings": [
{
"key": "4000",
"value": "network-154"
}
],
"name": "AATest08"
},
"target": {
"folder_id": "group-v5920",
"host_id": "host-1934",
"resource_pool_id": "resgroup-43"
}}
我希望有人能帮助我。
我没有找到针对此案例的任何解决方案。我现在使用的解决方法是在部署 VM 后更改网络。如果有人对使用 REST API 更改 vCenter 中现有 VM 网络的代码感兴趣,我 post 下面的代码。
function updateNetwork($IdFromTheVM, $NewNetworkID)
{
$requestUrl = 'https://' . $yourVCenterHost . '/rest/vcenter/vm/' . $IdFromTheVM . '/hardware/ethernet/4000';
$data = array(
'spec' => array(
'backing' => array(
'type' => 'STANDARD_PORTGROUP',
'network' => $NewNetworkID,
)
));
$dataJson = json_encode($data);
$ch = curl_init();
$header = array(
'vmware-api-session-id: ' . $yourVCenterSessionID,
'content-Type: application/json',
'Accept: application/json'
);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_POSTFIELDS, $dataJson);
curl_setopt($ch, CURLOPT_URL, $requestUrl);
curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpcode != 200){
return false;
}
return true;
}
我正在使用 php 工具通过 CURL 和 JSON 从 vCenter (vmWare) 部署 ovf 模板。该工具已在运行并成功部署了 ovf 模板。我的问题是网络参数被完全忽略了。
vmWare 纪录片中的海量信息并没有帮助我。我认为解决方案是找到正确的 "key"-integer.
这是我用过的一些 Dokus:
https://vcenter.iseage.org/apiexplorer/ -> ovfLibraryItem->部署
我的 google-searche 也没什么帮助。
我目前的 json-代码:
{
"deployment_spec": {
"accept_all_EULA": true,
"default_datastore_id": "datastore-30598",
"network_mappings": [
{
"key": "4000",
"value": "network-154"
}
],
"name": "AATest08"
},
"target": {
"folder_id": "group-v5920",
"host_id": "host-1934",
"resource_pool_id": "resgroup-43"
}}
我希望有人能帮助我。
我没有找到针对此案例的任何解决方案。我现在使用的解决方法是在部署 VM 后更改网络。如果有人对使用 REST API 更改 vCenter 中现有 VM 网络的代码感兴趣,我 post 下面的代码。
function updateNetwork($IdFromTheVM, $NewNetworkID)
{
$requestUrl = 'https://' . $yourVCenterHost . '/rest/vcenter/vm/' . $IdFromTheVM . '/hardware/ethernet/4000';
$data = array(
'spec' => array(
'backing' => array(
'type' => 'STANDARD_PORTGROUP',
'network' => $NewNetworkID,
)
));
$dataJson = json_encode($data);
$ch = curl_init();
$header = array(
'vmware-api-session-id: ' . $yourVCenterSessionID,
'content-Type: application/json',
'Accept: application/json'
);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_POSTFIELDS, $dataJson);
curl_setopt($ch, CURLOPT_URL, $requestUrl);
curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpcode != 200){
return false;
}
return true;
}