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; } }