1 # Copyright 2015 The Chromium Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 # This module provides helper method to parse /etc/lsb-release file to extract 6 # various information. 7 8 import logging 9 import os 10 import re 11 12 import common 13 from autotest_lib.client.cros import constants 14 15 16 def _lsbrelease_search(regex, group_id=0, lsb_release_content=None): 17 """Searches /etc/lsb-release for a regex match. 18 19 @param regex: Regex to match. 20 @param group_id: The group in the regex we are searching for. 21 Default is group 0. 22 @param lsb_release_content: A string represents the content of lsb-release. 23 If the caller is from drone, it can pass in the file content here. 24 25 @returns the string in the specified group if there is a match or None if 26 not found. 27 28 @raises IOError if /etc/lsb-release can not be accessed. 29 """ 30 if not lsb_release_content: 31 with open(constants.LSB_RELEASE) as lsb_release_file: 32 lsb_release_content = lsb_release_file.read() 33 for line in lsb_release_content.split('\n'): 34 m = re.match(regex, line) 35 if m: 36 return m.group(group_id) 37 return None 38 39 40 def get_current_board(lsb_release_content=None): 41 """Return the current board name. 42 43 @param lsb_release_content: A string represents the content of lsb-release. 44 If the caller is from drone, it can pass in the file content here. 45 46 @return current board name, e.g "lumpy", None on fail. 47 """ 48 return _lsbrelease_search(r'^CHROMEOS_RELEASE_BOARD=(.+)$', group_id=1, 49 lsb_release_content=lsb_release_content) 50 51 52 def get_chromeos_release_version(lsb_release_content=None): 53 """Get chromeos version in device under test as string. None on fail. 54 55 @param lsb_release_content: A string represents the content of lsb-release. 56 If the caller is from drone, it can pass in the file content here. 57 58 @return chromeos version in device under test as string. None on fail. 59 """ 60 return _lsbrelease_search(r'^CHROMEOS_RELEASE_VERSION=(.+)$', group_id=1, 61 lsb_release_content=lsb_release_content) 62 63 64 def is_moblab(lsb_release_content=None): 65 """Return if we are running on a Moblab system or not. 66 67 @param lsb_release_content: A string represents the content of lsb-release. 68 If the caller is from drone, it can pass in the file content here. 69 70 @return the board string if this is a Moblab device or None if it is not. 71 """ 72 if os.path.exists(constants.LSB_RELEASE): 73 return _lsbrelease_search( 74 r'.*moblab', lsb_release_content=lsb_release_content) 75 try: 76 from chromite.lib import cros_build_lib 77 if cros_build_lib.IsInsideChroot(): 78 return None 79 except ImportError as e: 80 logging.error('Unable to determine if this is a moblab system: %s', e) 81 82 83 def get_chrome_milestone(lsb_release_content=None): 84 """Get the value for the Chrome milestone. 85 86 @param lsb_release_content: A string represents the content of lsb-release. 87 If the caller is from drone, it can pass in the file content here. 88 89 @return the value for the Chrome milestone 90 """ 91 return _lsbrelease_search(r'^CHROMEOS_RELEASE_CHROME_MILESTONE=(.+)$', 92 group_id=1, 93 lsb_release_content=lsb_release_content) 94 95 96 def get_device_type(lsb_release_content=None): 97 """Get the device type string, e.g. "CHROMEBOOK" or "CHROMEBOX". 98 99 @param lsb_release_content: A string represents the content of lsb-release. 100 If the caller is from drone, it can pass in the file content here. 101 102 @return the DEVICETYPE value for this machine. 103 """ 104 return _lsbrelease_search(r'^DEVICETYPE=(.+)$', group_id=1, 105 lsb_release_content=lsb_release_content) 106 107 108 def is_arc_available(lsb_release_content=None): 109 """Returns True if the device has ARC installed. 110 111 @param lsb_release_content: A string represents the content of lsb-release. 112 If the caller is from drone, it can pass in the file content here. 113 114 @return True if the device has ARC installed. 115 """ 116 return (_lsbrelease_search(r'^CHROMEOS_ARC_VERSION', 117 lsb_release_content=lsb_release_content) 118 is not None) 119