# # Copyright (C) 2018 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import logging import os import re import zipfile from vts.proto import VtsReportMessage_pb2 as ReportMsg from vts.runners.host import keys from vts.utils.python.common import cmd_utils from vts.utils.python.web import feature_utils class GcsUtils(feature_utils.Feature): """GCS (Google Cloud Storage) utility provider. Attributes: _TOGGLE_PARAM: String, the name of the parameter used to toggle the feature _REQUIRED_PARAMS: list, the list of parameter names that are required _OPTIONAL_PARAMS: list, the list of parameter names that are optional """ _TOGGLE_PARAM = None _REQUIRED_PARAMS = [keys.ConfigKeys.IKEY_SERVICE_JSON_PATH] _OPTIONAL_PARAMS = [] def __init__(self, user_params): """Initializes the gcs util provider. Args: user_params: A dictionary from parameter name (String) to parameter value. """ self.ParseParameters( toggle_param_name=self._TOGGLE_PARAM, required_param_names=self._REQUIRED_PARAMS, optional_param_names=self._OPTIONAL_PARAMS, user_params=user_params) def GetGcloudAuth(self): """Connects to a service account with access to the gcloud bucket.""" gcloud_path = GcsUtils.GetGcloudPath() gcloud_key = getattr(self, keys.ConfigKeys.IKEY_SERVICE_JSON_PATH) if gcloud_path is not None: auth_cmd = "%s auth activate-service-account --key-file %s" % ( gcloud_path, gcloud_key) _, stderr, ret_code = cmd_utils.ExecuteOneShellCommand(auth_cmd) if ret_code == 0: logging.info(stderr) else: logging.error(stderr) @staticmethod def GetGcloudPath(): """Returns the gcloud file path if found; None otherwise.""" sh_stdout, _, ret_code = cmd_utils.ExecuteOneShellCommand( "which gcloud") if ret_code == 0: return sh_stdout.strip() else: logging.error("`gcloud` doesn't exist on the host; " "please install Google Cloud SDK before retrying.") return None @staticmethod def GetGsutilPath(): """Returns the gsutil file path if found; None otherwise.""" sh_stdout, sh_stderr, ret_code = cmd_utils.ExecuteOneShellCommand( "which gsutil") if ret_code == 0: return sh_stdout.strip() else: logging.error("`gsutil` doesn't exist on the host; " "please install Google Cloud SDK before retrying.") return None