diff options
Diffstat (limited to 'deprecated/automation/common/machine.py')
-rw-r--r-- | deprecated/automation/common/machine.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/deprecated/automation/common/machine.py b/deprecated/automation/common/machine.py new file mode 100644 index 00000000..4db0db0d --- /dev/null +++ b/deprecated/automation/common/machine.py @@ -0,0 +1,70 @@ +# Copyright 2010 Google Inc. All Rights Reserved. + +__author__ = 'asharif@google.com (Ahmad Sharif)' + +from fnmatch import fnmatch + + +class Machine(object): + """Stores information related to machine and its state.""" + + def __init__(self, hostname, label, cpu, cores, os, username): + self.hostname = hostname + self.label = label + self.cpu = cpu + self.cores = cores + self.os = os + self.username = username + + # MachineManager related attributes. + self.uses = 0 + self.locked = False + + def Acquire(self, exclusively): + assert not self.locked + + if exclusively: + self.locked = True + self.uses += 1 + + def Release(self): + assert self.uses > 0 + + self.uses -= 1 + + if not self.uses: + self.locked = False + + def __repr__(self): + return '{%s: %s@%s}' % (self.__class__.__name__, self.username, + self.hostname) + + def __str__(self): + return '\n'.join( + ['Machine Information:', 'Hostname: %s' % self.hostname, 'Label: %s' % + self.label, 'CPU: %s' % self.cpu, 'Cores: %d' % self.cores, 'OS: %s' % + self.os, 'Uses: %d' % self.uses, 'Locked: %s' % self.locked]) + + +class MachineSpecification(object): + """Helper class used to find a machine matching your requirements.""" + + def __init__(self, hostname='*', label='*', os='*', lock_required=False): + self.hostname = hostname + self.label = label + self.os = os + self.lock_required = lock_required + self.preferred_machines = [] + + def __str__(self): + return '\n'.join(['Machine Specification:', 'Name: %s' % self.name, 'OS: %s' + % self.os, 'Lock required: %s' % self.lock_required]) + + def IsMatch(self, machine): + return all([not machine.locked, fnmatch(machine.hostname, self.hostname), + fnmatch(machine.label, self.label), fnmatch(machine.os, + self.os)]) + + def AddPreferredMachine(self, hostname): + if hostname not in self.preferred_machines: + self.preferred_machines.append(hostname) |