[autotest] Add firmware repair to CrOSHost repair logic.

This is to help to revoery duts failed in FAFT.

DUT to be repaired by firmware_repair will need to be in pool:faft-test.
The board will also need to have an entry in stable_version table, e.g.
daisy_spring/firmware: daisy_spring-firmware/R41-6588.127.0

BUG=chromium:279410,chromium:535456
TEST=unititest, local run

Change-Id: I85edee5cef2093fefecfd5e9db89848d16fc839e
Reviewed-on: https://chromium-review.googlesource.com/305290
Commit-Ready: Dan Shi <dshi@chromium.org>
Tested-by: Dan Shi <dshi@chromium.org>
Reviewed-by: Richard Barnette <jrbarnette@chromium.org>
Reviewed-by: Wai-Hong Tam <waihong@chromium.org>
diff --git a/server/site_utils.py b/server/site_utils.py
index a4ca13c..5880c67 100644
--- a/server/site_utils.py
+++ b/server/site_utils.py
@@ -84,6 +84,26 @@
     raise ParseBuildNameException('%s is a malformed build name.' % name)
 
 
+def get_labels_from_afe(hostname, label_prefix, afe):
+    """Retrieve a host's specific labels from the AFE.
+
+    Looks for the host labels that have the form <label_prefix>:<value>
+    and returns the "<value>" part of the label. None is returned
+    if there is not a label matching the pattern
+
+    @param hostname: hostname of given DUT.
+    @param label_prefix: prefix of label to be matched, e.g., |board:|
+    @param afe: afe instance.
+
+    @returns A list of labels that match the prefix or 'None'
+
+    """
+    labels = afe.get_labels(name__startswith=label_prefix,
+                            host__hostname__in=[hostname])
+    if labels:
+        return [l.name.split(label_prefix, 1)[1] for l in labels]
+
+
 def get_label_from_afe(hostname, label_prefix, afe):
     """Retrieve a host's specific label from the AFE.
 
@@ -97,10 +117,9 @@
     @returns the label that matches the prefix or 'None'
 
     """
-    labels = afe.get_labels(name__startswith=label_prefix,
-                            host__hostname__in=[hostname])
+    labels = get_labels_from_afe(hostname, label_prefix, afe)
     if labels and len(labels) == 1:
-        return labels[0].name.split(label_prefix, 1)[1]
+        return labels[0]
 
 
 def get_board_from_afe(hostname, afe):