| # Copyright 2021 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Module to use remoteexec from builders.""" |
| |
| import getpass |
| import os |
| |
| from chromite.lib import constants |
| |
| |
| class Remoteexec(object): |
| """Interface to use remoteexec on bots.""" |
| |
| def __init__(self, reclient_dir, reproxy_cfg_file): |
| """Initializes a Remoteexec instance. |
| |
| Args: |
| reclient_dir: Path to the re-client directory that contains |
| the reproxy, bootstrap, rewrapper binaries. |
| reproxy_cfg_file: Path to the config file for starting reproxy. |
| """ |
| |
| if not os.path.isdir(reclient_dir): |
| raise ValueError( |
| f'reclient_dir does not point to a directory: {reclient_dir}') |
| |
| self.reclient_dir = reclient_dir |
| |
| # TODO(crbug.com/1256966): `reproxy_cfg_file` is either the full path |
| # of a config generated by recipes or the name of a committed file |
| # in `chromite/sdk/reclient_cfgs. When other builders, other than the |
| # initial informational builder, are added, they should all be generated |
| # by recipes rather than committed. |
| if not os.path.exists(reproxy_cfg_file): |
| reproxy_cfg_file = os.path.join( |
| constants.CHROMITE_DIR, 'sdk', 'reclient_cfgs', reproxy_cfg_file) |
| if not os.path.exists(reproxy_cfg_file): |
| raise ValueError( |
| f'reproxy_cfg_file does not exist: {reproxy_cfg_file}') |
| self.reproxy_cfg_file = reproxy_cfg_file |
| |
| def __eq__(self, other): |
| if self.__class__ is other.__class__: |
| return (self.reclient_dir == other.reclient_dir |
| and self.reproxy_cfg_file == other.reproxy_cfg_file) |
| return NotImplemented |
| |
| def GetChrootExtraEnv(self): |
| """Extra env vars set to do remoteexec inside chroot.""" |
| # These paths should match the paths in chroot that the |
| # reclient directory and reproxy config file get mapped to |
| # in sdk_lib/enter_chroot.sh |
| reclient_dir = os.path.join('/home', getpass.getuser(), 'reclient') |
| reproxy_cfg_file = os.path.join('/home', getpass.getuser(), |
| 'reclient_cfgs', 'reproxy_chroot.cfg') |
| result = {'RECLIENT_DIR': reclient_dir, |
| 'REPROXY_CFG': reproxy_cfg_file} |
| |
| return result |