예제 #1
0
    def open_vm(self, vmx_path, timeout=4):
        assert self.connected, "VixConnection not connected"

        start_time = time.time()
        job_handle = vixlib.VixVM_Open(self._host_handle, vmx_path, None, None)
        vm_handle = vixlib.VixHandle()

        job_completed = ctypes.c_byte(0)
        while not job_completed.value:
            err = vixlib.VixJob_CheckCompletion(job_handle,
                                                ctypes.byref(job_completed))
            _check_job_err_code(err)

            if timeout and timeout < (time.time() - start_time):
                raise VixException(
                    "Timeout (%d seconds) waiting to open VM by VMX '%s'", 0,
                    timeout, vmx_path)

        err = vixlib.Vix_GetProperties(job_handle,
                                       vixlib.VIX_PROPERTY_JOB_RESULT_HANDLE,
                                       ctypes.byref(vm_handle),
                                       vixlib.VIX_PROPERTY_NONE)
        vixlib.Vix_ReleaseHandle(job_handle)
        _check_job_err_code(err)

        return VixVM(vm_handle)
예제 #2
0
 def tools_state(self):
     tools_state = ctypes.c_int()
     err = vixlib.Vix_GetProperties(self._vm_handle,
                                    vixlib.VIX_PROPERTY_VM_TOOLS_STATE,
                                    ctypes.byref(tools_state),
                                    vixlib.VIX_PROPERTY_NONE)
     _check_job_err_code(err)
     return tools_state.value
예제 #3
0
 def power_state(self):
     power_state = ctypes.c_int()
     err = vixlib.Vix_GetProperties(self._vm_handle,
                                    vixlib.VIX_PROPERTY_VM_POWER_STATE,
                                    ctypes.byref(power_state),
                                    vixlib.VIX_PROPERTY_NONE)
     _check_job_err_code(err)
     return power_state.value
예제 #4
0
 def is_running(self):
     is_running = ctypes.c_int()
     err = vixlib.Vix_GetProperties(self._vm_handle,
                                    vixlib.VIX_PROPERTY_VM_IS_RUNNING,
                                    ctypes.byref(is_running),
                                    vixlib.VIX_PROPERTY_NONE)
     _check_job_err_code(err)
     return bool(is_running.value)
예제 #5
0
    def guest_os_str(self):
        if self._guest_os_str is None:
            guest_os = ctypes.c_char_p()
            err = vixlib.Vix_GetProperties(self._vm_handle,
                                           vixlib.VIX_PROPERTY_VM_GUESTOS,
                                           ctypes.byref(guest_os),
                                           vixlib.VIX_PROPERTY_NONE)
            _check_job_err_code(err)
            self._guest_os_str = guest_os.value
            vixlib.Vix_FreeBuffer(guest_os)

        return self._guest_os_str
예제 #6
0
    def get_vmteam_path(self):
        vmx_path = ctypes.c_char_p()

        try:
            err = vixlib.Vix_GetProperties(
                self._vm_handle, vixlib.VIX_PROPERTY_VM_VMTEAM_PATHNAME,
                ctypes.byref(vmx_path), vixlib.VIX_PROPERTY_NONE)
            _check_job_err_code(err)

            return vmx_path.value
        finally:
            vixlib.Vix_FreeBuffer(vmx_path)
예제 #7
0
    def name(self):
        if not self._vm_name:
            vm_name = ctypes.c_char_p()
            err = vixlib.Vix_GetProperties(self._vm_handle,
                                           vixlib.VIX_PROPERTY_VM_NAME,
                                           ctypes.byref(vm_name),
                                           vixlib.VIX_PROPERTY_NONE)
            _check_job_err_code(err)

            self._vm_name = vm_name.value
            vixlib.Vix_FreeBuffer(vm_name)

        return self._vm_name
예제 #8
0
        def callback(jobHandle, eventType, moreEventInfo, clientData):
            if vixlib.VIX_EVENTTYPE_FIND_ITEM != eventType:
                return

            url = ctypes.c_char_p()
            err = vixlib.Vix_GetProperties(
                moreEventInfo, vixlib.VIX_PROPERTY_FOUND_ITEM_LOCATION,
                ctypes.byref(url), vixlib.VIX_PROPERTY_NONE)

            vmx_paths.append(url.value)

            vixlib.Vix_FreeBuffer(url)
            _check_job_err_code(err)
예제 #9
0
    def get_vmx_path(self):
        if not self._vmx_path:
            vmx_path = ctypes.c_char_p()
            err = vixlib.Vix_GetProperties(self._vm_handle,
                                           vixlib.VIX_PROPERTY_VM_VMX_PATHNAME,
                                           ctypes.byref(vmx_path),
                                           vixlib.VIX_PROPERTY_NONE)
            _check_job_err_code(err)

            self._vmx_path = vmx_path.value
            vixlib.Vix_FreeBuffer(vmx_path)

        return self._vmx_path
예제 #10
0
    def get_host_type(self):
        assert self.connected, "VixConnection not connected"

        if not self._host_type:
            host_type = ctypes.c_int()
            err = vixlib.Vix_GetProperties(self._host_handle,
                                           vixlib.VIX_PROPERTY_HOST_HOSTTYPE,
                                           ctypes.byref(host_type),
                                           vixlib.VIX_PROPERTY_NONE)
            _check_job_err_code(err)

            self._host_type = host_type.value

        return self._host_type
예제 #11
0
    def get_software_version(self):
        assert self.connected, "VixConnection not connected"

        if not self._software_version:
            version = ctypes.c_char_p()
            err = vixlib.Vix_GetProperties(
                self._host_handle, vixlib.VIX_PROPERTY_HOST_SOFTWARE_VERSION,
                ctypes.byref(version), vixlib.VIX_PROPERTY_NONE)
            _check_job_err_code(err)

            self._software_version = version.value
            vixlib.Vix_FreeBuffer(version)

        return self._software_version