def gcp_set_account(account): """ Call gcloud to set current account :param account: gcloud account :return: True if successful otherwise False """ _logger.debug('setting authentication login to {0}'.format(account)) if not account: _logger.error('no GCP account given, aborting...') return False prog = which('gcloud') args = shlex.split('{0} auth login {1}'.format(prog, account)) # pylint: disable=W0612 pcode, so, se = run_external_program(args) if pcode != 0: _logger.error( 'failed to set gcp auth login account. ({0}: {1})'.format( pcode, so)) return False _logger.debug('successfully set gcp auth login account') return True
def gcp_gsutil_command(cmd, args, flags=None): """ Run a gsutil command :param cmd: gsutil command name :param args: command arguments :param flags: additional flags to pass to gsutil executable :return: (exit code, stdout, stderr) """ if not cmd or not args or not isinstance(args, str): _logger.error('invalid parameters passed to gcp_gsutil_command.') return False prog = which('gsutil') args = shlex.split('{0} {1} {2} {3}'.format(prog, flags if flags else '', cmd, args)) return run_external_program(args)
def gcp_gcloud_command(group, args, flags=None): """ Run a gcloud command :param group: group name :param args: command arguments :param flags: additional flags to pass to gcloud executable :return: (exit code, stdout, stderr) """ if not group or not args or not isinstance(args, str): _logger.error('invalid parameters passed to gcp_gcloud_command.') return False prog = which('gcloud') args = shlex.split('{0} {1} {2} {3}'.format(prog, group, args, flags if flags else '')) return run_external_program(args)
def gcp_create_iam_service_creds(account, creds_account=None): """ # Note: Untested :param account: :param creds_account: :return: reference key """ # make sure key store directory exists if not os.path.exists(GCP_SERVICE_KEY_STORE): os.makedirs(GCP_SERVICE_KEY_STORE) # make sure we never duplicate an existing key while True: service_key = '{0}.json'.format(''.join( choice('0123456789ABCDEF') for _ in xrange(6))) service_key_file = os.path.join(GCP_SERVICE_KEY_STORE, service_key) if not os.path.exists( os.path.join(GCP_SERVICE_KEY_STORE, service_key_file)): break if creds_account is None: creds_account = account prog = which('gcloud') args = shlex.split( '{0} iam service-accounts keys create "{1}" --iam-account={2} --account={3}' .format(prog, service_key_file, account, creds_account)) # pylint: disable=W0612 pcode, so, se = run_external_program(args) if pcode != 0: _logger.error( 'failed to create iam service account key. ({0}: {1})'.format( pcode, so)) return False _logger.debug('successfully created iam service account key ({0})'.format( service_key)) return service_key
def gcp_delete_iam_service_creds(service_key, account, creds_account=None): """ # Note: Untested :param service_key: :param project: :param account: :param creds_account: :return: """ srv_key_file = os.path.join(GCP_SERVICE_KEY_STORE, service_key) if not os.path.exists(srv_key_file): _logger.error('specified iam service key does not exist ({0})'.format( service_key)) return False if creds_account is None: creds_account = account prog = which('gcloud') args = shlex.split( '{0} iam service-accounts keys delete "{1}" --iam-account={2} --account={3}' .format(prog, srv_key_file, account, creds_account)) # pylint: disable=W0612 pcode, so, se = run_external_program(args) if pcode != 0: _logger.error( 'failed to delete iam service account key. ({0}: {1})'.format( pcode, so)) return False _logger.debug('successfully deleted iam service account key ({0})'.format( service_key)) return service_key
def gcp_bq_command(cmd, args, global_flags=None, command_flags=None, headless=True): """ Run a bq command :param cmd: bq command name :param args: command arguments :param global_flags: global flags to pass to bq executable :param command_flags: command flags to pass to bq executable :param headless: run the 'bq' command in headless mode :return: (exit code, stdout, stderr) """ if not cmd or not args or not isinstance(args, str): _logger.error('invalid parameters passed to gcp_bq_command.') return False p_args = shlex.split('{0} {1} {2} {3} {4} {5}'.format( which('bq'), '--headless' if headless else '', global_flags if global_flags else '', cmd, command_flags if command_flags else '', args)) return run_external_program(p_args)