aboutsummaryrefslogtreecommitdiff
path: root/automation/common/machine.py
diff options
context:
space:
mode:
Diffstat (limited to 'automation/common/machine.py')
-rw-r--r--automation/common/machine.py79
1 files changed, 79 insertions, 0 deletions
diff --git a/automation/common/machine.py b/automation/common/machine.py
new file mode 100644
index 00000000..aa576c13
--- /dev/null
+++ b/automation/common/machine.py
@@ -0,0 +1,79 @@
+#!/usr/bin/python2.6
+#
+# 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)