11import json
2+ import uuid
23import click
34import platform
45import configparser
@@ -50,6 +51,8 @@ def print(self):
5051 self .print_awscredentialprocess ()
5152 if mode_prefix == 'azps' :
5253 self .print_azps ()
54+ if mode_prefix == 'gcloudauth' :
55+ self .print_gcloudauth ()
5356
5457 def print_console (self ):
5558 if self .mode == 'browser' :
@@ -81,6 +84,9 @@ def print_azlogin(self):
8184 def print_azps (self ):
8285 self ._not_implemented ()
8386
87+ def print_gcloudauth (self ):
88+ self ._not_implemented ()
89+
8490 def _not_implemented (self ):
8591 raise click .ClickException (f'Application type { self .app_type } does not support the specified mode.' )
8692
@@ -210,10 +216,11 @@ def print_azps(self):
210216
211217
212218class GcpCloudCredentialPrinter (CloudCredentialPrinter ):
213- def __init__ (self , console , mode , profile , silent , credentials , cli ):
219+ def __init__ (self , console , mode , profile , silent , credentials , cli , gcloud_key_file ):
214220 key = list (credentials .keys ())[0 ]
215221 credentials = json .loads (credentials [key ])
216222 super ().__init__ ('GCP' , console , mode , profile , silent , credentials , cli )
223+ self .gcloud_key_file = gcloud_key_file
217224
218225 def print_json (self ):
219226 self .cli .print (json .dumps (self .credentials , indent = 2 ), ignore_silent = True )
@@ -223,3 +230,18 @@ def print_json(self):
223230 "--key-file <path-where-above-json-is-stored>" , ignore_silent = True
224231 )
225232
233+ def print_gcloudauth (self ):
234+ # get path to gcloud key file
235+ if not self .gcloud_key_file : # if --gcloud-key-file not provided
236+ path = Path (self .cli .config .path ).parent / 'pybritive-gcloud-key-files' / f'{ uuid .uuid4 ().hex } .json'
237+ else : # we need to parse out/sanitize what was provided
238+ path = Path (self .gcloud_key_file ).expanduser ().absolute ()
239+
240+ # key file does not yet exist, create it as an empty file
241+ path .parent .mkdir (exist_ok = True , parents = True )
242+ path .write_text (json .dumps (self .credentials , indent = 2 ))
243+
244+ self .cli .print (
245+ f"gcloud auth activate-service-account { self .credentials ['client_email' ]} --key-file { str (path )} " ,
246+ ignore_silent = True
247+ )
0 commit comments