def __get_secret_value(self, secret_name): get_secret_request = RpcRequest('Kms', '2016-01-20', 'GetSecretValue', 'kms') get_secret_request._protocol_type = "https" get_secret_request.add_query_param('SecretName', secret_name) get_secret_request.add_query_param('VersionStage', self.stage) get_secret_request.add_query_param('FetchExtendedConfig', True) get_secret_request.set_accept_format("JSON") try: get_secret_resp = self.secret_client.get_secret_value( get_secret_request) resp_json = json.loads(get_secret_resp.decode(encoding="utf-8")) except ClientException as e: get_logger().error("action:get_secret_value", exc_info=True) if judge_need_recovery_exception(e): try: secret_info = self.cache_hook.recovery_get_secret( secret_name) if secret_info is not None: return secret_info else: raise e except ClientException: get_logger().error("action:recovery_get_secret", exc_info=True) raise e else: raise e return convert_json_to_secret_info(resp_json)
def get_secret_value(self, get_secret_value_req): futures = [] finished = [] if self.signer is not None and isinstance(self.signer, ClientKeySigner): get_secret_value_req._signer = sha_hmac256 for i in range(len(self.region_info_list)): if i == 0: try: return self.__get_secret_value( self.region_info_list[i], get_secret_value_req) except ClientException as e: get_logger().error("action:__get_secret_value", exc_info=True) if not judge_need_recovery_exception(e): raise e get_secret_request = RpcRequest( get_secret_value_req._product, get_secret_value_req._version, get_secret_value_req._action_name, get_secret_value_req._location_service_code, signer=get_secret_value_req._signer) get_secret_request._protocol_type = get_secret_value_req._protocol_type get_secret_request.add_query_param( 'SecretName', get_secret_value_req.get_query_params().get('SecretName')) get_secret_request.add_query_param( 'VersionStage', get_secret_value_req.get_query_params().get( 'VersionStage')) get_secret_request.add_query_param( 'FetchExtendedConfig', get_secret_value_req.get_query_params().get( 'FetchExtendedConfig')) future = self.pool.submit(self.__retry_get_secret_value, get_secret_request, self.region_info_list[i], finished) futures.append(future) try: if wait(futures, self.request_waiting_time, return_when=FIRST_COMPLETED): for future in futures: if not future.done(): future.cancel() else: return future.result() except Exception as e: get_logger().error("action:__retry_get_secret_value_task", exc_info=True) raise e finally: finished.append(True) raise ClientException(error_code.SDK_HTTP_ERROR, "refreshSecretTask fail")