client = new soapclient("https://{$vc_ip}/sdk");
$this->login($username, $password);
}
public function getSOAPClient()
{
return $this->client;
}
public function login($username, $password)
{
$params = array(
"_this" => new soapval('_this', false, "SessionManager", false, false, array("type" => "SessionManager")),
"userName" => $username,
"password" => $password
);
return $this->getSOAPClient()->call("Login", $params, VIM25_NAMESPACE);
}
public function retrieveServiceContent()
{
$params = array(
"data" => new soapval("_this", "ServiceInstance", "ServiceInstance")
);
return $this->getSOAPClient()->call("RetrieveServiceContent", $params, VIM25_NAMESPACE);
}
public function getAllVMInfo($root_folder, $sub_info)
{
$xml = '';
$xml .= '';
$xml .= '<_this type="PropertyCollector">propertyCollector';
$xml .= '';
$xml .= ' ';
$xml .= ' VirtualMachine';
$xml .= ($sub_info == VIM25_SUB_INFO_ALL) ? ' true' : " $sub_info";
$xml .= ' ';
$xml .= ' ';
$xml .= ' ' . $root_folder . '';
$xml .= ' ';
$xml .= ' traverseChild';
$xml .= ' Folder';
$xml .= ' childEntity';
$xml .= ' traverseChild';
$xml .= ' ';
$xml .= ' Datacenter';
$xml .= ' vmFolder';
$xml .= ' traverseChild';
$xml .= ' ';
$xml .= ' ';
$xml .= ' ';
$xml .= '';
$xml .= '';
$xml .= '';
return $this->getSOAPClient()->send($xml);
}
public function getVMInfo($vm_id, $sub_info)
{
$xml = '';
$xml .= '';
$xml .= '<_this type="PropertyCollector">propertyCollector';
$xml .= '';
$xml .= ' ';
$xml .= ' VirtualMachine';
$xml .= ($sub_info == VIM25_SUB_INFO_ALL) ? ' true' : " $sub_info";
$xml .= ' ';
$xml .= ' ';
$xml .= ' ' . $vm_id . '';
$xml .= ' ';
$xml .= ' traverseChild';
$xml .= ' Folder';
$xml .= ' childEntity';
$xml .= ' traverseChild';
$xml .= ' ';
$xml .= ' Datacenter';
$xml .= ' vmFolder';
$xml .= ' traverseChild';
$xml .= ' ';
$xml .= ' ';
$xml .= ' ';
$xml .= '';
$xml .= '';
$xml .= '';
return $this->getSOAPClient()->send($xml);
}
public function createVM($name, $folder, $guest_id, $resource_pool, $host, $num_cpu, $memory_mb, $disk_capacity_kb)
{
$xml = '';
$xml .= '';
$xml .= '<_this type="Folder">' . $folder . '';
$xml .= '';
$xml .= ' ' . $name . '';
$xml .= ' ' . $guest_id . '';
$xml .= ' ';
$xml .= ' [esx-host-32:storage1]';
$xml .= ' ';
$xml .= ' ' . $num_cpu . '';
$xml .= ' ' . $memory_mb . '';
$xml .= ' ';
$xml .= ' add';
$xml .= ' ';
$xml .= ' 0';
$xml .= ' 0';
$xml .= ' 0';
$xml .= ' noSharing';
$xml .= ' ';
$xml .= ' ';
$xml .= ' ';
$xml .= ' add';
$xml .= ' create';
$xml .= ' ';
$xml .= ' 0';
$xml .= ' ';
$xml .= ' [esx-host-32:storage1]';
$xml .= ' persistent';
$xml .= ' ';
$xml .= ' 0';
$xml .= ' 0';
$xml .= ' ' . $disk_capacity_kb . '';
$xml .= ' ';
$xml .= ' ';
$xml .= '';
$xml .= '' . $resource_pool . '';
$xml .= '' . $host . '';
$xml .= '';
$xml .= '';
$return = $this->getSOAPClient()->send($xml);
if (isset($return["returnval"])) {
$task_id = $return["returnval"];
$return = $this->waitForTask($task_id);
}
return $return;
}
public function waitForTask($id)
{
$xml = '';
$xml .= '';
$xml .= '<_this type="PropertyCollector">propertyCollector';
$xml .= '';
$xml .= ' ';
$xml .= ' Task';
$xml .= ' 1';
$xml .= ' ';
$xml .= ' ';
$xml .= ' ' . $id . '';
$xml .= ' ';
$xml .= '';
$xml .= '';
$xml .= '';
do {
sleep(1);
$return = $this->getSOAPClient()->send($xml);
$return = $return["returnval"]["propSet"][1]["val"];
} while ($return["state"] == "running");
return $return;
}
}