quick-provision: Share keyvals from quick provision script to devserver.
BUG=chromium:779870
TEST=curl "http://${ds}/stage?archive_url=gs://chromeos-image-archive/${buil d}&artifacts=quick_provision,stateful"; curl "http://${ds}/cros_au?full_update=False&force_update=True&build_name=${build}&host_name=${dut}&async=False&clobber_stateful=True&quick_provision=True"
Change-Id: Icd41138bc12854d611c7032313332de70021a933
Reviewed-on: https://chromium-review.googlesource.com/804960
Commit-Ready: David Riley <davidriley@chromium.org>
Tested-by: David Riley <davidriley@chromium.org>
Reviewed-by: Xixuan Wu <xixuan@chromium.org>
diff --git a/cros_update.py b/cros_update.py
index 6f91965..90e271b 100644
--- a/cros_update.py
+++ b/cros_update.py
@@ -28,6 +28,7 @@
import cros_update_progress
import logging # pylint: disable=cros-logging-import
import os
+import re
import sys
import time
import traceback
@@ -219,7 +220,12 @@
"""Performs a quick provision of device.
Returns:
- A CommandResult of the invocation.
+ A dictionary of extracted key-value pairs returned from the script
+ execution.
+
+ Raises:
+ cros_build_lib.RunCommandError: error executing command or script
+ remote_access.SSHConnectionError: SSH connection error
"""
pid = os.getpid()
pgid = os.getpgid(pid)
@@ -235,7 +241,12 @@
dut_script, cros_build_lib.ShellQuote(status_url),
self.build_name, self.static_url
)
- return device.RunCommand(cmd, log_output=True)
+ results = device.RunCommand(cmd, log_output=True, capture_output=True)
+ key_re = re.compile(r'^KEYVAL: ([^\d\W]\w*)=(.*)$')
+ matches = [key_re.match(l) for l in results.output.splitlines()]
+ keyvals = {m.group(1): m.group(2) for m in matches if m}
+ logging.debug("DUT returned keyvals: %s" % keyvals)
+ return keyvals
def TriggerAU(self):
"""Execute auto update for cros_host.