Completed
Pull Request — master (#460)
by Manas
02:18
created

VMCheckTools.run()   B

Complexity

Conditions 4

Size

Total Lines 23

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 4
dl 0
loc 23
rs 8.7972
1
import eventlet
2
3
from pyVmomi import vim
4
5
from vmwarelib import inventory
6
from vmwarelib.actions import BaseAction
7
8
9
class VMCheckTools(BaseAction):
10
11
    def run(self, vm_id):
12
        # convert ids to stubs
13
        vm = inventory.get_virtualmachine(self.si_content, moid=vm_id)
14
15
        # To correctly understand tools status need to consult 3 properties
16
        # 'powerState' 'ttoolsVersionStatus2' and 'toolsRunningStatus'
17
18
        # If VM isn't powered on tools state is meaningless.
19
        if vm.runtime.powerState != vim.VirtualMachine.PowerState.poweredOn:
20
            return {"status": vm.runtime.powerState}
21
22
        # Tools not installed.
23
        if vm.guest.toolsVersionStatus2 == \
24
           vim.vm.GuestInfo.ToolsVersionStatus.guestToolsNotInstalled:
25
            return {"status": vm.guest.toolsVersionStatus2}
26
27
        # Scripts still running therefore wait.
28
        while vm.guest.toolsRunningStatus != \
29
                vim.vm.GuestInfo.ToolsRunningStatus.guestToolsRunning:
30
            eventlet.sleep(1)
31
32
        # verify status is running.
33
        return {"status": vm.guest.toolsRunningStatus}
34